Message ID | 20250213033531.3367697-7-jamin_lin@aspeedtech.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Support AST2700 A1 | expand |
On 2/13/25 04:35, Jamin Lin wrote: > The previous implementation set the "aspeed_intc_ops" struct, containing read > and write callbacks, to be used when I/O is performed on the INTC region. > Both "aspeed_intc_read" and "aspeed_intc_write" callback functions were used > for INTC (CPU Die). > > To support the INTCIO (IO Die) model, introduces a new "reg_ops" class > attribute. This allows setting different memory region operations to support > different INTC models. > > Will introduce "aspeed_intcio_read" and "aspeed_intcio_write" callback > functions are used for INTCIO. > > Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Thanks, C. > --- > hw/intc/aspeed_intc.c | 5 ++++- > include/hw/intc/aspeed_intc.h | 1 + > 2 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/hw/intc/aspeed_intc.c b/hw/intc/aspeed_intc.c > index 91d8edb261..cc2426fbac 100644 > --- a/hw/intc/aspeed_intc.c > +++ b/hw/intc/aspeed_intc.c > @@ -340,7 +340,7 @@ static void aspeed_intc_realize(DeviceState *dev, Error **errp) > > sysbus_init_mmio(sbd, &s->iomem_container); > > - memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_intc_ops, s, > + memory_region_init_io(&s->iomem, OBJECT(s), aic->reg_ops, s, > TYPE_ASPEED_INTC ".regs", aic->reg_size); > > memory_region_add_subregion(&s->iomem_container, 0x0, &s->iomem); > @@ -358,11 +358,14 @@ static void aspeed_intc_realize(DeviceState *dev, Error **errp) > static void aspeed_intc_class_init(ObjectClass *klass, void *data) > { > DeviceClass *dc = DEVICE_CLASS(klass); > + AspeedINTCClass *aic = ASPEED_INTC_CLASS(klass); > > dc->desc = "ASPEED INTC Controller"; > dc->realize = aspeed_intc_realize; > device_class_set_legacy_reset(dc, aspeed_intc_reset); > dc->vmsd = NULL; > + > + aic->reg_ops = &aspeed_intc_ops; > } > > static const TypeInfo aspeed_intc_info = { > diff --git a/include/hw/intc/aspeed_intc.h b/include/hw/intc/aspeed_intc.h > index ecaeb15aea..749d7c55be 100644 > --- a/include/hw/intc/aspeed_intc.h > +++ b/include/hw/intc/aspeed_intc.h > @@ -43,6 +43,7 @@ struct AspeedINTCClass { > uint32_t num_ints; > uint64_t mem_size; > uint64_t reg_size; > + const MemoryRegionOps *reg_ops; > }; > > #endif /* ASPEED_INTC_H */
diff --git a/hw/intc/aspeed_intc.c b/hw/intc/aspeed_intc.c index 91d8edb261..cc2426fbac 100644 --- a/hw/intc/aspeed_intc.c +++ b/hw/intc/aspeed_intc.c @@ -340,7 +340,7 @@ static void aspeed_intc_realize(DeviceState *dev, Error **errp) sysbus_init_mmio(sbd, &s->iomem_container); - memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_intc_ops, s, + memory_region_init_io(&s->iomem, OBJECT(s), aic->reg_ops, s, TYPE_ASPEED_INTC ".regs", aic->reg_size); memory_region_add_subregion(&s->iomem_container, 0x0, &s->iomem); @@ -358,11 +358,14 @@ static void aspeed_intc_realize(DeviceState *dev, Error **errp) static void aspeed_intc_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); + AspeedINTCClass *aic = ASPEED_INTC_CLASS(klass); dc->desc = "ASPEED INTC Controller"; dc->realize = aspeed_intc_realize; device_class_set_legacy_reset(dc, aspeed_intc_reset); dc->vmsd = NULL; + + aic->reg_ops = &aspeed_intc_ops; } static const TypeInfo aspeed_intc_info = { diff --git a/include/hw/intc/aspeed_intc.h b/include/hw/intc/aspeed_intc.h index ecaeb15aea..749d7c55be 100644 --- a/include/hw/intc/aspeed_intc.h +++ b/include/hw/intc/aspeed_intc.h @@ -43,6 +43,7 @@ struct AspeedINTCClass { uint32_t num_ints; uint64_t mem_size; uint64_t reg_size; + const MemoryRegionOps *reg_ops; }; #endif /* ASPEED_INTC_H */
The previous implementation set the "aspeed_intc_ops" struct, containing read and write callbacks, to be used when I/O is performed on the INTC region. Both "aspeed_intc_read" and "aspeed_intc_write" callback functions were used for INTC (CPU Die). To support the INTCIO (IO Die) model, introduces a new "reg_ops" class attribute. This allows setting different memory region operations to support different INTC models. Will introduce "aspeed_intcio_read" and "aspeed_intcio_write" callback functions are used for INTCIO. Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com> --- hw/intc/aspeed_intc.c | 5 ++++- include/hw/intc/aspeed_intc.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-)