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>
This commit is contained in:
Tao Ding 2026-08-08 14:22:22 +08:00 committed by Alistair Francis
parent 54bc6c4f15
commit dde8fbba19
4 changed files with 14 additions and 3 deletions

View file

@ -21,6 +21,7 @@ The ``k230`` machine supports the following devices:
* 2 K230 Watchdog Timer
* 5 UART
* K230 DDRC CFG and DDR PHY
* System Direct Memory Access (SDMA)
Boot options
------------

View file

@ -162,3 +162,4 @@ config K230
select SERIAL_MM
select UNIMP
select K230_WDT
select K230_GSDMA

View file

@ -116,6 +116,7 @@ static void k230_soc_init(Object *obj)
s->ddr_cfg.phy = &s->ddr_phy;
object_initialize_child(obj, "k230-wdt0", &s->wdt[0], TYPE_K230_WDT);
object_initialize_child(obj, "k230-wdt1", &s->wdt[1], TYPE_K230_WDT);
object_initialize_child(obj, "k230-gsdma", &s->gsdma, TYPE_K230_GSDMA);
qdev_prop_set_uint32(DEVICE(cpu0), "hartid-base", 0);
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)
sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt[1]), 0,
qdev_get_gpio_in(DEVICE(s->c908_plic), K230_WDT1_IRQ));
/* Gsdma */
if (!sysbus_realize(SYS_BUS_DEVICE(&s->gsdma), errp)) {
return;
}
sysbus_mmio_map(SYS_BUS_DEVICE(&s->gsdma), 0, memmap[K230_DEV_GSDMA].base);
sysbus_connect_irq(SYS_BUS_DEVICE(&s->gsdma), 0,
qdev_get_gpio_in(DEVICE(s->c908_plic), K230_GSDMA_IRQ));
/* unimplemented devices */
create_unimplemented_device("kpu.l2-cache",
memmap[K230_DEV_KPU_L2_CACHE].base,
@ -237,9 +246,6 @@ static void k230_soc_realize(DeviceState *dev, Error **errp)
memmap[K230_DEV_AI_2D_ENGINE].base,
memmap[K230_DEV_AI_2D_ENGINE].size);
create_unimplemented_device("gsdma", memmap[K230_DEV_GSDMA].base,
memmap[K230_DEV_GSDMA].size);
create_unimplemented_device("dma", memmap[K230_DEV_DMA].base,
memmap[K230_DEV_DMA].size);

View file

@ -19,6 +19,7 @@
#include "hw/misc/k230_ddr.h"
#include "hw/riscv/riscv_hart.h"
#include "hw/watchdog/k230_wdt.h"
#include "hw/dma/k230_gsdma.h"
#define C908_CPU_HARTID (0)
@ -36,6 +37,7 @@ typedef struct K230SoCState {
K230DDRCfgState ddr_cfg;
K230DDRPhyState ddr_phy;
K230WdtState wdt[2];
K230GSDMAState gsdma;
MemoryRegion sram;
MemoryRegion bootrom;
@ -133,6 +135,7 @@ enum {
K230_UART4_IRQ = 20,
K230_WDT0_IRQ = 107,
K230_WDT1_IRQ = 108,
K230_GSDMA_IRQ = 140,
};
#define K230_UART_COUNT 5