[PATCH 0/2] Add K230 SoC GPIO controller support

[email protected] Mon, 3 Aug 2026 23:28:30 +0800
Newsgroups org.nongnu.qemu-devel,org.nongnu.qemu-riscv
Message-ID <[email protected]>
From: guochun wang <[email protected]>

The Kendryte K230 SoC contains two APB GPIO controllers derived from
the Synopsys DesignWare APB GPIO (the Linux gpio-k230 driver is itself
based on gpio-dwapb.c, and shares the same register layout), with a
Canaan-specific compatible ("canaan,k230-apb-gpio") and hardlock
integration. This series implements the device model, wires it into
the K230 SoC, and adds qtest coverage.

Patch 1 implements the controller model following the K230 Technical
Reference Manual v0.3.1: software control mode (DR/DDR/CTL), external
port multiplexing, per-pin IRQ output, edge and level interrupt
detection, EOI/mask/gating logic, DDR/CTL mode switching with pending
interrupt preservation, and three-phase Resettable API support with
VMState migration. It also instantiates the two controllers (gpio0 at
0x9140B000, gpio1 at 0x9140C000) in the K230 SoC, replacing the
previous unimplemented-device placeholders, and wires each controller's
32 per-pin IRQ lines to the PLIC (sources 32..63 and 64..95).

Patch 2 adds 16 qtest cases covering reset values, edge and level
interrupts (rising/falling/both-edge, active-high/active-low), EOI
clearing, INTEN gating and INTMASK masking, mode-switching behaviour,
PLIC claim/complete flow, and the second controller instance.

Hardware control mode, debounce logic, the combined interrupt output,
and clock-domain synchronization are intentionally not modelled; they
have no observable effect under QEMU and are documented in the patch 1
commit message.

The series has been tested against the Linux gpio-k230 driver and the
existing K230 qtest suite.

Cc: Chao Liu <[email protected]>
Cc: Alistair Francis <[email protected]>
Cc: [email protected]

guochun wang (2):
  hw/gpio: add K230 GPIO controller model
  tests/qtest: add K230 GPIO controller test

 MAINTAINERS                  |   3 +
 hw/gpio/Kconfig              |   3 +
 hw/gpio/k230_gpio.c          | 362 ++++++++++++++++++++++++++++++
 hw/gpio/meson.build          |   1 +
 hw/riscv/Kconfig             |   1 +
 hw/riscv/k230.c              |  27 ++-
 include/hw/gpio/k230_gpio.h  |  73 +++++
 include/hw/riscv/k230.h      |   5 +
 tests/qtest/k230-gpio-test.c | 521 +++++++++++++++++++++++++++++++++++
 tests/qtest/meson.build      |   2 +-
 10 files changed, 991 insertions(+), 7 deletions(-)
 create mode 100644 hw/gpio/k230_gpio.c
 create mode 100644 include/hw/gpio/k230_gpio.h
 create mode 100644 tests/qtest/k230-gpio-test.c

-- 
2.43.0