Hi Cédric, Thanks for the information. I'll try integrating this PWM model.
Best Regards, Kane > -----Original Message----- > From: Cédric Le Goater <[email protected]> > Sent: Tuesday, November 11, 2025 12:17 AM > To: Kane Chen <[email protected]>; Peter Maydell > <[email protected]>; Steven Lee <[email protected]>; Troy > Lee <[email protected]>; Jamin Lin <[email protected]>; Andrew > Jeffery <[email protected]>; Joel Stanley <[email protected]>; > open list:ASPEED BMCs <[email protected]>; open list:All patches CC > here <[email protected]> > Cc: Troy Lee <[email protected]> > Subject: Re: [PATCH v2 17/17] hw/arm/aspeed: Model AST1700 PWM block as > unimplemented device > > On 11/5/25 04:58, Kane Chen wrote: > > From: Kane-Chen-AS <[email protected]> > > > > AST1700 includes an PWM block, but QEMU has no functional model for > > aspeed product yet. > > We could start with a dummy PWM model : > > > https://github.com/legoater/qemu/commit/9d77c84b04c2d9ae5685b3ccb5c4 > 34873666ca78 > > Feel free to add to your series. > > Thanks, > > C. > > > > Expose it as an unimplemented device so the > > address space is reserved and the missing functionality is explicit to > > users/guests. > > > > Signed-off-by: Kane-Chen-AS <[email protected]> > > --- > > include/hw/misc/aspeed_ast1700.h | 1 + > > hw/misc/aspeed_ast1700.c | 16 ++++++++++++++++ > > 2 files changed, 17 insertions(+) > > > > diff --git a/include/hw/misc/aspeed_ast1700.h > > b/include/hw/misc/aspeed_ast1700.h > > index 8ada3a7775..9d432a7db0 100644 > > --- a/include/hw/misc/aspeed_ast1700.h > > +++ b/include/hw/misc/aspeed_ast1700.h > > @@ -45,6 +45,7 @@ struct AspeedAST1700SoCState { > > > > UnimplementedDeviceState i3c; > > UnimplementedDeviceState sgpiom; > > + UnimplementedDeviceState pwm; > > }; > > > > #endif /* ASPEED_AST1700_H */ > > diff --git a/hw/misc/aspeed_ast1700.c b/hw/misc/aspeed_ast1700.c index > > 66a5f21d27..3d9a920a7a 100644 > > --- a/hw/misc/aspeed_ast1700.c > > +++ b/hw/misc/aspeed_ast1700.c > > @@ -20,9 +20,11 @@ > > #define AST1700_SOC_SRAM_SIZE 0x00040000 > > #define AST1700_SOC_I3C_SIZE 0x00010000 > > #define AST1700_SOC_SGPIOM_SIZE 0x00002000 > > +#define AST1700_SOC_PWM_SIZE 0x00000200 > > > > enum { > > ASPEED_AST1700_DEV_SPI0, > > + ASPEED_AST1700_DEV_PWM, > > ASPEED_AST1700_DEV_SRAM, > > ASPEED_AST1700_DEV_ADC, > > ASPEED_AST1700_DEV_SCU, > > @@ -38,6 +40,7 @@ enum { > > > > static const hwaddr aspeed_ast1700_io_memmap[] = { > > [ASPEED_AST1700_DEV_SPI0] = 0x00030000, > > + [ASPEED_AST1700_DEV_PWM] = 0x000C0000, > > [ASPEED_AST1700_DEV_SRAM] = 0x00BC0000, > > [ASPEED_AST1700_DEV_ADC] = 0x00C00000, > > [ASPEED_AST1700_DEV_SCU] = 0x00C02000, > > @@ -174,6 +177,15 @@ static void aspeed_ast1700_realize(DeviceState > *dev, Error **errp) > > > sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->sgpiom), 0), > > -1000); > > > > + /* PWM */ > > + qdev_prop_set_string(DEVICE(&s->pwm), "name", "ioexp-pwm"); > > + qdev_prop_set_uint64(DEVICE(&s->pwm), "size", > AST1700_SOC_PWM_SIZE); > > + sysbus_realize(SYS_BUS_DEVICE(&s->pwm), errp); > > + memory_region_add_subregion_overlap(&s->iomem, > > + > aspeed_ast1700_io_memmap[ASPEED_AST1700_DEV_PWM], > > + > sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->pwm), 0), > > + -1000); > > + > > /* WDT */ > > for (i = 0; i < AST1700_WDT_NUM; i++) { > > AspeedWDTClass *awc = > ASPEED_WDT_GET_CLASS(&s->wdt[i]); @@ > > -241,6 +253,10 @@ static void aspeed_ast1700_instance_init(Object *obj) > > object_initialize_child(obj, "ioexp-sgpiom[*]", &s->sgpiom, > > TYPE_UNIMPLEMENTED_DEVICE); > > > > + /* PWM */ > > + object_initialize_child(obj, "ioexp-pwm", &s->pwm, > > + TYPE_UNIMPLEMENTED_DEVICE); > > + > > /* WDT */ > > for (i = 0; i < AST1700_WDT_NUM; i++) { > > snprintf(typename, sizeof(typename), "aspeed.wdt-%s", > > socname);
