Message ID | 20220516055620.2380197-1-clg@kaod.org |
---|---|
State | New |
Headers | show |
Series | [v2] aspeed: Introduce a get_irq AspeedSoCClass method | expand |
> On May 15, 2022, at 10:56 PM, Cédric Le Goater <clg@kaod.org> wrote: > > and make routine aspeed_soc_get_irq() common to all SoCs. This will be > useful to share code. Looks good, I just tested that I could rebase my changes on it and recompile/etc. Reviewed-by: Peter Delevoryas <pdel@fb.com> > > Cc: Jamin Lin <jamin_lin@aspeedtech.com> > Cc: Peter Delevoryas <pdel@fb.com> > Signed-off-by: Cédric Le Goater <clg@kaod.org> > --- > include/hw/arm/aspeed_soc.h | 3 +++ > hw/arm/aspeed_ast10x0.c | 5 +++-- > hw/arm/aspeed_ast2600.c | 5 +++-- > hw/arm/aspeed_soc.c | 13 ++++++++++--- > 4 files changed, 19 insertions(+), 7 deletions(-) > > diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h > index e13af374b923..3789f38603e5 100644 > --- a/include/hw/arm/aspeed_soc.h > +++ b/include/hw/arm/aspeed_soc.h > @@ -94,6 +94,7 @@ struct AspeedSoCClass { > const int *irqmap; > const hwaddr *memmap; > uint32_t num_cpus; > + qemu_irq (*get_irq)(AspeedSoCState *s, int dev); > }; > > > @@ -153,4 +154,6 @@ enum { > ASPEED_DEV_I3C, > }; > > +qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev); > + > #endif /* ASPEED_SOC_H */ > diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c > index 427154928254..9ae9efaac144 100644 > --- a/hw/arm/aspeed_ast10x0.c > +++ b/hw/arm/aspeed_ast10x0.c > @@ -61,11 +61,11 @@ static const int aspeed_soc_ast1030_irqmap[] = { > [ASPEED_DEV_KCS] = 138, /* 138 -> 142 */ > }; > > -static qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int ctrl) > +static qemu_irq aspeed_soc_ast1030_get_irq(AspeedSoCState *s, int dev) > { > AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s); > > - return qdev_get_gpio_in(DEVICE(&s->armv7m), sc->irqmap[ctrl]); > + return qdev_get_gpio_in(DEVICE(&s->armv7m), sc->irqmap[dev]); > } > > static void aspeed_soc_ast1030_init(Object *obj) > @@ -280,6 +280,7 @@ static void aspeed_soc_ast1030_class_init(ObjectClass *klass, void *data) > sc->irqmap = aspeed_soc_ast1030_irqmap; > sc->memmap = aspeed_soc_ast1030_memmap; > sc->num_cpus = 1; > + sc->get_irq = aspeed_soc_ast1030_get_irq; > } > > static const TypeInfo aspeed_soc_ast1030_type_info = { > diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c > index eedda7badc37..4161a0cc4bbe 100644 > --- a/hw/arm/aspeed_ast2600.c > +++ b/hw/arm/aspeed_ast2600.c > @@ -114,11 +114,11 @@ static const int aspeed_soc_ast2600_irqmap[] = { > [ASPEED_DEV_I3C] = 102, /* 102 -> 107 */ > }; > > -static qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int ctrl) > +static qemu_irq aspeed_soc_ast2600_get_irq(AspeedSoCState *s, int dev) > { > AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s); > > - return qdev_get_gpio_in(DEVICE(&s->a7mpcore), sc->irqmap[ctrl]); > + return qdev_get_gpio_in(DEVICE(&s->a7mpcore), sc->irqmap[dev]); > } > > static void aspeed_soc_ast2600_init(Object *obj) > @@ -572,6 +572,7 @@ static void aspeed_soc_ast2600_class_init(ObjectClass *oc, void *data) > sc->irqmap = aspeed_soc_ast2600_irqmap; > sc->memmap = aspeed_soc_ast2600_memmap; > sc->num_cpus = 2; > + sc->get_irq = aspeed_soc_ast2600_get_irq; > } > > static const TypeInfo aspeed_soc_ast2600_type_info = { > diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c > index 58714cb2a01d..c339b5c74de5 100644 > --- a/hw/arm/aspeed_soc.c > +++ b/hw/arm/aspeed_soc.c > @@ -121,11 +121,11 @@ static const int aspeed_soc_ast2400_irqmap[] = { > > #define aspeed_soc_ast2500_irqmap aspeed_soc_ast2400_irqmap > > -static qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int ctrl) > +static qemu_irq aspeed_soc_ast2400_get_irq(AspeedSoCState *s, int dev) > { > AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s); > > - return qdev_get_gpio_in(DEVICE(&s->vic), sc->irqmap[ctrl]); > + return qdev_get_gpio_in(DEVICE(&s->vic), sc->irqmap[dev]); > } > > static void aspeed_soc_init(Object *obj) > @@ -487,6 +487,7 @@ static void aspeed_soc_ast2400_class_init(ObjectClass *oc, void *data) > sc->irqmap = aspeed_soc_ast2400_irqmap; > sc->memmap = aspeed_soc_ast2400_memmap; > sc->num_cpus = 1; > + sc->get_irq = aspeed_soc_ast2400_get_irq; > } > > static const TypeInfo aspeed_soc_ast2400_type_info = { > @@ -512,6 +513,7 @@ static void aspeed_soc_ast2500_class_init(ObjectClass *oc, void *data) > sc->irqmap = aspeed_soc_ast2500_irqmap; > sc->memmap = aspeed_soc_ast2500_memmap; > sc->num_cpus = 1; > + sc->get_irq = aspeed_soc_ast2400_get_irq; > } > > static const TypeInfo aspeed_soc_ast2500_type_info = { > @@ -528,4 +530,9 @@ static void aspeed_soc_register_types(void) > type_register_static(&aspeed_soc_ast2500_type_info); > }; > > -type_init(aspeed_soc_register_types) > +type_init(aspeed_soc_register_types); > + > +qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev) > +{ > + return ASPEED_SOC_GET_CLASS(s)->get_irq(s, dev); > +} > -- > 2.35.1 >
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h index e13af374b923..3789f38603e5 100644 --- a/include/hw/arm/aspeed_soc.h +++ b/include/hw/arm/aspeed_soc.h @@ -94,6 +94,7 @@ struct AspeedSoCClass { const int *irqmap; const hwaddr *memmap; uint32_t num_cpus; + qemu_irq (*get_irq)(AspeedSoCState *s, int dev); }; @@ -153,4 +154,6 @@ enum { ASPEED_DEV_I3C, }; +qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev); + #endif /* ASPEED_SOC_H */ diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c index 427154928254..9ae9efaac144 100644 --- a/hw/arm/aspeed_ast10x0.c +++ b/hw/arm/aspeed_ast10x0.c @@ -61,11 +61,11 @@ static const int aspeed_soc_ast1030_irqmap[] = { [ASPEED_DEV_KCS] = 138, /* 138 -> 142 */ }; -static qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int ctrl) +static qemu_irq aspeed_soc_ast1030_get_irq(AspeedSoCState *s, int dev) { AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s); - return qdev_get_gpio_in(DEVICE(&s->armv7m), sc->irqmap[ctrl]); + return qdev_get_gpio_in(DEVICE(&s->armv7m), sc->irqmap[dev]); } static void aspeed_soc_ast1030_init(Object *obj) @@ -280,6 +280,7 @@ static void aspeed_soc_ast1030_class_init(ObjectClass *klass, void *data) sc->irqmap = aspeed_soc_ast1030_irqmap; sc->memmap = aspeed_soc_ast1030_memmap; sc->num_cpus = 1; + sc->get_irq = aspeed_soc_ast1030_get_irq; } static const TypeInfo aspeed_soc_ast1030_type_info = { diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c index eedda7badc37..4161a0cc4bbe 100644 --- a/hw/arm/aspeed_ast2600.c +++ b/hw/arm/aspeed_ast2600.c @@ -114,11 +114,11 @@ static const int aspeed_soc_ast2600_irqmap[] = { [ASPEED_DEV_I3C] = 102, /* 102 -> 107 */ }; -static qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int ctrl) +static qemu_irq aspeed_soc_ast2600_get_irq(AspeedSoCState *s, int dev) { AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s); - return qdev_get_gpio_in(DEVICE(&s->a7mpcore), sc->irqmap[ctrl]); + return qdev_get_gpio_in(DEVICE(&s->a7mpcore), sc->irqmap[dev]); } static void aspeed_soc_ast2600_init(Object *obj) @@ -572,6 +572,7 @@ static void aspeed_soc_ast2600_class_init(ObjectClass *oc, void *data) sc->irqmap = aspeed_soc_ast2600_irqmap; sc->memmap = aspeed_soc_ast2600_memmap; sc->num_cpus = 2; + sc->get_irq = aspeed_soc_ast2600_get_irq; } static const TypeInfo aspeed_soc_ast2600_type_info = { diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c index 58714cb2a01d..c339b5c74de5 100644 --- a/hw/arm/aspeed_soc.c +++ b/hw/arm/aspeed_soc.c @@ -121,11 +121,11 @@ static const int aspeed_soc_ast2400_irqmap[] = { #define aspeed_soc_ast2500_irqmap aspeed_soc_ast2400_irqmap -static qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int ctrl) +static qemu_irq aspeed_soc_ast2400_get_irq(AspeedSoCState *s, int dev) { AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s); - return qdev_get_gpio_in(DEVICE(&s->vic), sc->irqmap[ctrl]); + return qdev_get_gpio_in(DEVICE(&s->vic), sc->irqmap[dev]); } static void aspeed_soc_init(Object *obj) @@ -487,6 +487,7 @@ static void aspeed_soc_ast2400_class_init(ObjectClass *oc, void *data) sc->irqmap = aspeed_soc_ast2400_irqmap; sc->memmap = aspeed_soc_ast2400_memmap; sc->num_cpus = 1; + sc->get_irq = aspeed_soc_ast2400_get_irq; } static const TypeInfo aspeed_soc_ast2400_type_info = { @@ -512,6 +513,7 @@ static void aspeed_soc_ast2500_class_init(ObjectClass *oc, void *data) sc->irqmap = aspeed_soc_ast2500_irqmap; sc->memmap = aspeed_soc_ast2500_memmap; sc->num_cpus = 1; + sc->get_irq = aspeed_soc_ast2400_get_irq; } static const TypeInfo aspeed_soc_ast2500_type_info = { @@ -528,4 +530,9 @@ static void aspeed_soc_register_types(void) type_register_static(&aspeed_soc_ast2500_type_info); }; -type_init(aspeed_soc_register_types) +type_init(aspeed_soc_register_types); + +qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev) +{ + return ASPEED_SOC_GET_CLASS(s)->get_irq(s, dev); +}
and make routine aspeed_soc_get_irq() common to all SoCs. This will be useful to share code. Cc: Jamin Lin <jamin_lin@aspeedtech.com> Cc: Peter Delevoryas <pdel@fb.com> Signed-off-by: Cédric Le Goater <clg@kaod.org> --- include/hw/arm/aspeed_soc.h | 3 +++ hw/arm/aspeed_ast10x0.c | 5 +++-- hw/arm/aspeed_ast2600.c | 5 +++-- hw/arm/aspeed_soc.c | 13 ++++++++++--- 4 files changed, 19 insertions(+), 7 deletions(-)