Message ID | 20250306103846.429221-2-jamin_lin@aspeedtech.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Support AST2700 A1 | expand |
On 3/6/25 11:38, Jamin Lin wrote: > According to the AST2700 datasheet, the INTC(CPU DIE) controller has 16KB > (0x4000) of register space, and the INTCIO (I/O DIE) controller has 1KB (0x400) > of register space. > > Introduced a new class attribute "mem_size" to set different memory sizes for > the INTC models in AST2700. > > Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Thanks, C. > --- > include/hw/intc/aspeed_intc.h | 3 +++ > hw/intc/aspeed_intc.c | 9 ++++++++- > 2 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/include/hw/intc/aspeed_intc.h b/include/hw/intc/aspeed_intc.h > index 18cb43476c..03324f05ab 100644 > --- a/include/hw/intc/aspeed_intc.h > +++ b/include/hw/intc/aspeed_intc.h > @@ -25,6 +25,8 @@ struct AspeedINTCState { > > /*< public >*/ > MemoryRegion iomem; > + MemoryRegion iomem_container; > + > uint32_t regs[ASPEED_INTC_NR_REGS]; > OrIRQState orgates[ASPEED_INTC_NR_INTS]; > qemu_irq output_pins[ASPEED_INTC_NR_INTS]; > @@ -39,6 +41,7 @@ struct AspeedINTCClass { > > uint32_t num_lines; > uint32_t num_ints; > + uint64_t mem_size; > }; > > #endif /* ASPEED_INTC_H */ > diff --git a/hw/intc/aspeed_intc.c b/hw/intc/aspeed_intc.c > index 126b711b94..033b574c1e 100644 > --- a/hw/intc/aspeed_intc.c > +++ b/hw/intc/aspeed_intc.c > @@ -302,10 +302,16 @@ static void aspeed_intc_realize(DeviceState *dev, Error **errp) > AspeedINTCClass *aic = ASPEED_INTC_GET_CLASS(s); > int i; > > + memory_region_init(&s->iomem_container, OBJECT(s), > + TYPE_ASPEED_INTC ".container", aic->mem_size); > + > + sysbus_init_mmio(sbd, &s->iomem_container); > + > memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_intc_ops, s, > TYPE_ASPEED_INTC ".regs", ASPEED_INTC_NR_REGS << 2); > > - sysbus_init_mmio(sbd, &s->iomem); > + memory_region_add_subregion(&s->iomem_container, 0x0, &s->iomem); > + > qdev_init_gpio_in(dev, aspeed_intc_set_irq, aic->num_ints); > > for (i = 0; i < aic->num_ints; i++) { > @@ -344,6 +350,7 @@ static void aspeed_2700_intc_class_init(ObjectClass *klass, void *data) > dc->desc = "ASPEED 2700 INTC Controller"; > aic->num_lines = 32; > aic->num_ints = 9; > + aic->mem_size = 0x4000; > } > > static const TypeInfo aspeed_2700_intc_info = {
diff --git a/include/hw/intc/aspeed_intc.h b/include/hw/intc/aspeed_intc.h index 18cb43476c..03324f05ab 100644 --- a/include/hw/intc/aspeed_intc.h +++ b/include/hw/intc/aspeed_intc.h @@ -25,6 +25,8 @@ struct AspeedINTCState { /*< public >*/ MemoryRegion iomem; + MemoryRegion iomem_container; + uint32_t regs[ASPEED_INTC_NR_REGS]; OrIRQState orgates[ASPEED_INTC_NR_INTS]; qemu_irq output_pins[ASPEED_INTC_NR_INTS]; @@ -39,6 +41,7 @@ struct AspeedINTCClass { uint32_t num_lines; uint32_t num_ints; + uint64_t mem_size; }; #endif /* ASPEED_INTC_H */ diff --git a/hw/intc/aspeed_intc.c b/hw/intc/aspeed_intc.c index 126b711b94..033b574c1e 100644 --- a/hw/intc/aspeed_intc.c +++ b/hw/intc/aspeed_intc.c @@ -302,10 +302,16 @@ static void aspeed_intc_realize(DeviceState *dev, Error **errp) AspeedINTCClass *aic = ASPEED_INTC_GET_CLASS(s); int i; + memory_region_init(&s->iomem_container, OBJECT(s), + TYPE_ASPEED_INTC ".container", aic->mem_size); + + sysbus_init_mmio(sbd, &s->iomem_container); + memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_intc_ops, s, TYPE_ASPEED_INTC ".regs", ASPEED_INTC_NR_REGS << 2); - sysbus_init_mmio(sbd, &s->iomem); + memory_region_add_subregion(&s->iomem_container, 0x0, &s->iomem); + qdev_init_gpio_in(dev, aspeed_intc_set_irq, aic->num_ints); for (i = 0; i < aic->num_ints; i++) { @@ -344,6 +350,7 @@ static void aspeed_2700_intc_class_init(ObjectClass *klass, void *data) dc->desc = "ASPEED 2700 INTC Controller"; aic->num_lines = 32; aic->num_ints = 9; + aic->mem_size = 0x4000; } static const TypeInfo aspeed_2700_intc_info = {
According to the AST2700 datasheet, the INTC(CPU DIE) controller has 16KB (0x4000) of register space, and the INTCIO (I/O DIE) controller has 1KB (0x400) of register space. Introduced a new class attribute "mem_size" to set different memory sizes for the INTC models in AST2700. Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com> --- include/hw/intc/aspeed_intc.h | 3 +++ hw/intc/aspeed_intc.c | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-)