Hi Cedric,

> Subject: Re: [PATCH v5 04/29] hw/intc/aspeed: Support setting different
> register size
> 
> On 3/6/25 11:38, Jamin Lin wrote:
> > Currently, the size of the regs array is 0x2000, which is too large.
> > So far, it only use GICINT128 - GICINT134, and the offsets from 0 to 0x1000
> are unused.
> > To save code size, introduce a new class attribute "reg_size" to set
> > the different register sizes for the INTC models in AST2700 and add a
> > regs sub-region in the memory container.
> >
> > Signed-off-by: Jamin Lin <jamin_...@aspeedtech.com>
> > ---
> >   include/hw/intc/aspeed_intc.h |  2 +-
> >   hw/intc/aspeed_intc.c         | 22 +++++-----------------
> >   2 files changed, 6 insertions(+), 18 deletions(-)
> >
> > diff --git a/include/hw/intc/aspeed_intc.h
> > b/include/hw/intc/aspeed_intc.h index 47ea0520b5..17cd889e0d 100644
> > --- a/include/hw/intc/aspeed_intc.h
> > +++ b/include/hw/intc/aspeed_intc.h
> > @@ -16,7 +16,6 @@
> >   #define TYPE_ASPEED_2700_INTC TYPE_ASPEED_INTC "-ast2700"
> >   OBJECT_DECLARE_TYPE(AspeedINTCState, AspeedINTCClass,
> ASPEED_INTC)
> >
> > -#define ASPEED_INTC_NR_REGS (0x2000 >> 2)
> >   #define ASPEED_INTC_NR_INTS 9
> >
> >   struct AspeedINTCState {
> > @@ -42,6 +41,7 @@ struct AspeedINTCClass {
> >       uint32_t num_lines;
> >       uint32_t num_ints;
> >       uint64_t mem_size;
> > +    uint64_t reg_size;
> 
> The '_size' prefix describing a number of registers is confusing.
> 'nr_regs' would be better.
> 
Will do

Thanks for your suggestion and review.
Jamin
> 
> Thanks,
> 
> C.
> 
> 
> 
> >   };
> >
> >   #endif /* ASPEED_INTC_H */
> > diff --git a/hw/intc/aspeed_intc.c b/hw/intc/aspeed_intc.c index
> > feb2c52441..1c3dc3fce0 100644
> > --- a/hw/intc/aspeed_intc.c
> > +++ b/hw/intc/aspeed_intc.c
> > @@ -120,13 +120,6 @@ static uint64_t aspeed_intc_read(void *opaque,
> hwaddr offset, unsigned int size)
> >       uint32_t reg = offset >> 2;
> >       uint32_t value = 0;
> >
> > -    if (reg >= ASPEED_INTC_NR_REGS) {
> > -        qemu_log_mask(LOG_GUEST_ERROR,
> > -                      "%s: Out-of-bounds read at offset 0x%"
> HWADDR_PRIx "\n",
> > -                      __func__, offset);
> > -        return 0;
> > -    }
> > -
> >       value = s->regs[reg];
> >       trace_aspeed_intc_read(offset, size, value);
> >
> > @@ -143,13 +136,6 @@ static void aspeed_intc_write(void *opaque,
> hwaddr offset, uint64_t data,
> >       uint32_t change;
> >       uint32_t irq;
> >
> > -    if (reg >= ASPEED_INTC_NR_REGS) {
> > -        qemu_log_mask(LOG_GUEST_ERROR,
> > -                      "%s: Out-of-bounds write at offset 0x%"
> HWADDR_PRIx "\n",
> > -                      __func__, offset);
> > -        return;
> > -    }
> > -
> >       trace_aspeed_intc_write(offset, size, data);
> >
> >       switch (reg) {
> > @@ -288,8 +274,9 @@ static void aspeed_intc_instance_init(Object *obj)
> >   static void aspeed_intc_reset(DeviceState *dev)
> >   {
> >       AspeedINTCState *s = ASPEED_INTC(dev);
> > +    AspeedINTCClass *aic = ASPEED_INTC_GET_CLASS(s);
> >
> > -    memset(s->regs, 0, ASPEED_INTC_NR_REGS);
> > +    memset(s->regs, 0, aic->reg_size);
> >       memset(s->enable, 0, sizeof(s->enable));
> >       memset(s->mask, 0, sizeof(s->mask));
> >       memset(s->pending, 0, sizeof(s->pending)); @@ -307,9 +294,9 @@
> > static void aspeed_intc_realize(DeviceState *dev, Error **errp)
> >
> >       sysbus_init_mmio(sbd, &s->iomem_container);
> >
> > -    s->regs = g_malloc0(ASPEED_INTC_NR_REGS);
> > +    s->regs = g_malloc0(aic->reg_size);
> >       memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_intc_ops,
> s,
> > -                          TYPE_ASPEED_INTC ".regs",
> ASPEED_INTC_NR_REGS << 2);
> > +                          TYPE_ASPEED_INTC ".regs", aic->reg_size
> <<
> > + 2);
> >
> >       memory_region_add_subregion(&s->iomem_container, 0x0,
> > &s->iomem);
> >
> > @@ -361,6 +348,7 @@ static void aspeed_2700_intc_class_init(ObjectClass
> *klass, void *data)
> >       aic->num_lines = 32;
> >       aic->num_ints = 9;
> >       aic->mem_size = 0x4000;
> > +    aic->reg_size = 0x2000 >> 2;
> >   }
> >
> >   static const TypeInfo aspeed_2700_intc_info = {

Reply via email to