@samitouri / QOSamiQemu / commits / dde8fbba19

hw/riscv: k230: add gsdma in K230 board

This commit replaces the unimplemented part of GSDMA in K230. And connect the interrupt to plic. Update K230.rst. Signed-off-by: Tao Ding <dingtao0430@163.com> Reviewed-by: Junze Cao <caojunze424@gmail.com> Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com> Message-ID: <20260808062227.66961-3-dingtao0430@163.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Tao Ding committed Aug 8, 2026 at 14:22 UTC dde8fbba19c19d536d323705e9700b552cf29272
4 files changed +14 -3
docs/system/riscv/k230.rst
+1
@@ -21,6 +21,7 @@ The ``k230`` machine supports the following devices:
21 * 2 K230 Watchdog Timer
22 * 5 UART
23 * K230 DDRC CFG and DDR PHY
24 +* System Direct Memory Access (SDMA)
25
26 Boot options
27 ------------
hw/riscv/Kconfig
+1
@@ -162,3 +162,4 @@ config K230
162 select SERIAL_MM
163 select UNIMP
164 select K230_WDT
165 + select K230_GSDMA
hw/riscv/k230.c
+9 -3
@@ -116,6 +116,7 @@ static void k230_soc_init(Object *obj)
116 s->ddr_cfg.phy = &s->ddr_phy;
117 object_initialize_child(obj, "k230-wdt0", &s->wdt[0], TYPE_K230_WDT);
118 object_initialize_child(obj, "k230-wdt1", &s->wdt[1], TYPE_K230_WDT);
119 + object_initialize_child(obj, "k230-gsdma", &s->gsdma, TYPE_K230_GSDMA);
120
121 qdev_prop_set_uint32(DEVICE(cpu0), "hartid-base", 0);
122 qdev_prop_set_string(DEVICE(cpu0), "cpu-type", TYPE_RISCV_CPU_THEAD_C908);
@@ -222,6 +223,14 @@ static void k230_soc_realize(DeviceState *dev, Error **errp)
223 sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt[1]), 0,
224 qdev_get_gpio_in(DEVICE(s->c908_plic), K230_WDT1_IRQ));
225
226 + /* Gsdma */
227 + if (!sysbus_realize(SYS_BUS_DEVICE(&s->gsdma), errp)) {
228 + return;
229 + }
230 + sysbus_mmio_map(SYS_BUS_DEVICE(&s->gsdma), 0, memmap[K230_DEV_GSDMA].base);
231 + sysbus_connect_irq(SYS_BUS_DEVICE(&s->gsdma), 0,
232 + qdev_get_gpio_in(DEVICE(s->c908_plic), K230_GSDMA_IRQ));
233 +
234 /* unimplemented devices */
235 create_unimplemented_device("kpu.l2-cache",
236 memmap[K230_DEV_KPU_L2_CACHE].base,
@@ -237,9 +246,6 @@ static void k230_soc_realize(DeviceState *dev, Error **errp)
246 memmap[K230_DEV_AI_2D_ENGINE].base,
247 memmap[K230_DEV_AI_2D_ENGINE].size);
248
240 - create_unimplemented_device("gsdma", memmap[K230_DEV_GSDMA].base,
241 - memmap[K230_DEV_GSDMA].size);
242 -
249 create_unimplemented_device("dma", memmap[K230_DEV_DMA].base,
250 memmap[K230_DEV_DMA].size);
251
include/hw/riscv/k230.h
+3
@@ -19,6 +19,7 @@
19 #include "hw/misc/k230_ddr.h"
20 #include "hw/riscv/riscv_hart.h"
21 #include "hw/watchdog/k230_wdt.h"
22 +#include "hw/dma/k230_gsdma.h"
23
24 #define C908_CPU_HARTID (0)
25
@@ -36,6 +37,7 @@ typedef struct K230SoCState {
37 K230DDRCfgState ddr_cfg;
38 K230DDRPhyState ddr_phy;
39 K230WdtState wdt[2];
40 + K230GSDMAState gsdma;
41 MemoryRegion sram;
42 MemoryRegion bootrom;
43
@@ -133,6 +135,7 @@ enum {
135 K230_UART4_IRQ = 20,
136 K230_WDT0_IRQ = 107,
137 K230_WDT1_IRQ = 108,
138 + K230_GSDMA_IRQ = 140,
139 };
140
141 #define K230_UART_COUNT 5