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