Message ID | 20221230113504.37032-7-philmd@linaro.org |
---|---|
State | Accepted |
Commit | 72006c619f6ae62cd1e954f8ff8436447525e202 |
Headers | show |
Series | hw/arm/aspeed_ast10x0: Map more peripherals & few more fixes | expand |
On 12/30/22 12:34, Philippe Mathieu-Daudé wrote: > Based on booting Zephyr demo from [1] running QEMU with > '-d unimp' and checking missing devices in [2]. > > [1] https://github.com/AspeedTech-BMC/zephyr/releases/tag/v00.01.07 > [2] https://github.com/AspeedTech-BMC/zephyr/blob/v00.01.08/dts/arm/aspeed/ast10x0.dtsi > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > Reviewed-by: Peter Delevoryas <peter@pjd.dev> Reviewed-by: Cédric Le Goater <clg@kaod.org> Thanks, C. > --- > hw/arm/aspeed_ast10x0.c | 35 +++++++++++++++++++++++++++++++++++ > include/hw/arm/aspeed_soc.h | 11 +++++++++++ > 2 files changed, 46 insertions(+) > > diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c > index 3500294df7..d7dbc1a801 100644 > --- a/hw/arm/aspeed_ast10x0.c > +++ b/hw/arm/aspeed_ast10x0.c > @@ -28,10 +28,15 @@ static const hwaddr aspeed_soc_ast1030_memmap[] = { > [ASPEED_DEV_FMC] = 0x7E620000, > [ASPEED_DEV_SPI1] = 0x7E630000, > [ASPEED_DEV_SPI2] = 0x7E640000, > + [ASPEED_DEV_UDC] = 0x7E6A2000, > [ASPEED_DEV_SCU] = 0x7E6E2000, > + [ASPEED_DEV_JTAG0] = 0x7E6E4000, > + [ASPEED_DEV_JTAG1] = 0x7E6E4100, > [ASPEED_DEV_ADC] = 0x7E6E9000, > + [ASPEED_DEV_ESPI] = 0x7E6EE000, > [ASPEED_DEV_SBC] = 0x7E6F2000, > [ASPEED_DEV_GPIO] = 0x7E780000, > + [ASPEED_DEV_SGPIOM] = 0x7E780500, > [ASPEED_DEV_TIMER1] = 0x7E782000, > [ASPEED_DEV_UART1] = 0x7E783000, > [ASPEED_DEV_UART2] = 0x7E78D000, > @@ -79,12 +84,17 @@ static const int aspeed_soc_ast1030_irqmap[] = { > [ASPEED_DEV_LPC] = 35, > [ASPEED_DEV_PECI] = 38, > [ASPEED_DEV_FMC] = 39, > + [ASPEED_DEV_ESPI] = 42, > [ASPEED_DEV_PWM] = 44, > [ASPEED_DEV_ADC] = 46, > [ASPEED_DEV_SPI1] = 65, > [ASPEED_DEV_SPI2] = 66, > [ASPEED_DEV_I2C] = 110, /* 110 ~ 123 */ > [ASPEED_DEV_KCS] = 138, /* 138 -> 142 */ > + [ASPEED_DEV_UDC] = 9, > + [ASPEED_DEV_SGPIOM] = 51, > + [ASPEED_DEV_JTAG0] = 27, > + [ASPEED_DEV_JTAG1] = 53, > }; > > static qemu_irq aspeed_soc_ast1030_get_irq(AspeedSoCState *s, int dev) > @@ -155,6 +165,15 @@ static void aspeed_soc_ast1030_init(Object *obj) > object_initialize_child(obj, "iomem", &s->iomem, TYPE_UNIMPLEMENTED_DEVICE); > object_initialize_child(obj, "sbc-unimplemented", &s->sbc_unimplemented, > TYPE_UNIMPLEMENTED_DEVICE); > + object_initialize_child(obj, "pwm", &s->pwm, TYPE_UNIMPLEMENTED_DEVICE); > + object_initialize_child(obj, "espi", &s->espi, TYPE_UNIMPLEMENTED_DEVICE); > + object_initialize_child(obj, "udc", &s->udc, TYPE_UNIMPLEMENTED_DEVICE); > + object_initialize_child(obj, "sgpiom", &s->sgpiom, > + TYPE_UNIMPLEMENTED_DEVICE); > + object_initialize_child(obj, "jtag[0]", &s->jtag[0], > + TYPE_UNIMPLEMENTED_DEVICE); > + object_initialize_child(obj, "jtag[1]", &s->jtag[1], > + TYPE_UNIMPLEMENTED_DEVICE); > } > > static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp) > @@ -337,6 +356,22 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp) > sc->memmap[ASPEED_DEV_GPIO]); > sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio), 0, > aspeed_soc_get_irq(s, ASPEED_DEV_GPIO)); > + > + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->pwm), "aspeed.pwm", > + sc->memmap[ASPEED_DEV_PWM], 0x100); > + > + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->espi), "aspeed.espi", > + sc->memmap[ASPEED_DEV_ESPI], 0x800); > + > + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->udc), "aspeed.udc", > + sc->memmap[ASPEED_DEV_UDC], 0x1000); > + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->sgpiom), "aspeed.sgpiom", > + sc->memmap[ASPEED_DEV_SGPIOM], 0x100); > + > + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->jtag[0]), "aspeed.jtag", > + sc->memmap[ASPEED_DEV_JTAG0], 0x20); > + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->jtag[1]), "aspeed.jtag", > + sc->memmap[ASPEED_DEV_JTAG1], 0x20); > } > > static void aspeed_soc_ast1030_class_init(ObjectClass *klass, void *data) > diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h > index 8389200b2d..9a5e3c0bac 100644 > --- a/include/hw/arm/aspeed_soc.h > +++ b/include/hw/arm/aspeed_soc.h > @@ -44,6 +44,7 @@ > #define ASPEED_CPUS_NUM 2 > #define ASPEED_MACS_NUM 4 > #define ASPEED_UARTS_NUM 13 > +#define ASPEED_JTAG_NUM 2 > > struct AspeedSoCState { > /*< private >*/ > @@ -87,6 +88,11 @@ struct AspeedSoCState { > UnimplementedDeviceState video; > UnimplementedDeviceState emmc_boot_controller; > UnimplementedDeviceState dpmcu; > + UnimplementedDeviceState pwm; > + UnimplementedDeviceState espi; > + UnimplementedDeviceState udc; > + UnimplementedDeviceState sgpiom; > + UnimplementedDeviceState jtag[ASPEED_JTAG_NUM]; > }; > > #define TYPE_ASPEED_SOC "aspeed-soc" > @@ -174,6 +180,11 @@ enum { > ASPEED_DEV_DPMCU, > ASPEED_DEV_DP, > ASPEED_DEV_I3C, > + ASPEED_DEV_ESPI, > + ASPEED_DEV_UDC, > + ASPEED_DEV_SGPIOM, > + ASPEED_DEV_JTAG0, > + ASPEED_DEV_JTAG1, > }; > > qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev);
diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c index 3500294df7..d7dbc1a801 100644 --- a/hw/arm/aspeed_ast10x0.c +++ b/hw/arm/aspeed_ast10x0.c @@ -28,10 +28,15 @@ static const hwaddr aspeed_soc_ast1030_memmap[] = { [ASPEED_DEV_FMC] = 0x7E620000, [ASPEED_DEV_SPI1] = 0x7E630000, [ASPEED_DEV_SPI2] = 0x7E640000, + [ASPEED_DEV_UDC] = 0x7E6A2000, [ASPEED_DEV_SCU] = 0x7E6E2000, + [ASPEED_DEV_JTAG0] = 0x7E6E4000, + [ASPEED_DEV_JTAG1] = 0x7E6E4100, [ASPEED_DEV_ADC] = 0x7E6E9000, + [ASPEED_DEV_ESPI] = 0x7E6EE000, [ASPEED_DEV_SBC] = 0x7E6F2000, [ASPEED_DEV_GPIO] = 0x7E780000, + [ASPEED_DEV_SGPIOM] = 0x7E780500, [ASPEED_DEV_TIMER1] = 0x7E782000, [ASPEED_DEV_UART1] = 0x7E783000, [ASPEED_DEV_UART2] = 0x7E78D000, @@ -79,12 +84,17 @@ static const int aspeed_soc_ast1030_irqmap[] = { [ASPEED_DEV_LPC] = 35, [ASPEED_DEV_PECI] = 38, [ASPEED_DEV_FMC] = 39, + [ASPEED_DEV_ESPI] = 42, [ASPEED_DEV_PWM] = 44, [ASPEED_DEV_ADC] = 46, [ASPEED_DEV_SPI1] = 65, [ASPEED_DEV_SPI2] = 66, [ASPEED_DEV_I2C] = 110, /* 110 ~ 123 */ [ASPEED_DEV_KCS] = 138, /* 138 -> 142 */ + [ASPEED_DEV_UDC] = 9, + [ASPEED_DEV_SGPIOM] = 51, + [ASPEED_DEV_JTAG0] = 27, + [ASPEED_DEV_JTAG1] = 53, }; static qemu_irq aspeed_soc_ast1030_get_irq(AspeedSoCState *s, int dev) @@ -155,6 +165,15 @@ static void aspeed_soc_ast1030_init(Object *obj) object_initialize_child(obj, "iomem", &s->iomem, TYPE_UNIMPLEMENTED_DEVICE); object_initialize_child(obj, "sbc-unimplemented", &s->sbc_unimplemented, TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "pwm", &s->pwm, TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "espi", &s->espi, TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "udc", &s->udc, TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "sgpiom", &s->sgpiom, + TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "jtag[0]", &s->jtag[0], + TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "jtag[1]", &s->jtag[1], + TYPE_UNIMPLEMENTED_DEVICE); } static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp) @@ -337,6 +356,22 @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp) sc->memmap[ASPEED_DEV_GPIO]); sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio), 0, aspeed_soc_get_irq(s, ASPEED_DEV_GPIO)); + + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->pwm), "aspeed.pwm", + sc->memmap[ASPEED_DEV_PWM], 0x100); + + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->espi), "aspeed.espi", + sc->memmap[ASPEED_DEV_ESPI], 0x800); + + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->udc), "aspeed.udc", + sc->memmap[ASPEED_DEV_UDC], 0x1000); + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->sgpiom), "aspeed.sgpiom", + sc->memmap[ASPEED_DEV_SGPIOM], 0x100); + + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->jtag[0]), "aspeed.jtag", + sc->memmap[ASPEED_DEV_JTAG0], 0x20); + aspeed_mmio_map_unimplemented(s, SYS_BUS_DEVICE(&s->jtag[1]), "aspeed.jtag", + sc->memmap[ASPEED_DEV_JTAG1], 0x20); } static void aspeed_soc_ast1030_class_init(ObjectClass *klass, void *data) diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h index 8389200b2d..9a5e3c0bac 100644 --- a/include/hw/arm/aspeed_soc.h +++ b/include/hw/arm/aspeed_soc.h @@ -44,6 +44,7 @@ #define ASPEED_CPUS_NUM 2 #define ASPEED_MACS_NUM 4 #define ASPEED_UARTS_NUM 13 +#define ASPEED_JTAG_NUM 2 struct AspeedSoCState { /*< private >*/ @@ -87,6 +88,11 @@ struct AspeedSoCState { UnimplementedDeviceState video; UnimplementedDeviceState emmc_boot_controller; UnimplementedDeviceState dpmcu; + UnimplementedDeviceState pwm; + UnimplementedDeviceState espi; + UnimplementedDeviceState udc; + UnimplementedDeviceState sgpiom; + UnimplementedDeviceState jtag[ASPEED_JTAG_NUM]; }; #define TYPE_ASPEED_SOC "aspeed-soc" @@ -174,6 +180,11 @@ enum { ASPEED_DEV_DPMCU, ASPEED_DEV_DP, ASPEED_DEV_I3C, + ASPEED_DEV_ESPI, + ASPEED_DEV_UDC, + ASPEED_DEV_SGPIOM, + ASPEED_DEV_JTAG0, + ASPEED_DEV_JTAG1, }; qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev);