On Mon, 16 Jun 2025 11:46:52 +0200 Eric Auger <eric.au...@redhat.com> wrote:
> Some sysbus devices have conditionnal mmio regions. This Spell check. conditional > happens for instance with the hw/acpi/ged device. In that case > it becomes difficult to predict which index a specific MMIO > region corresponds to when one needs to mmio map the region. > Introduce a new helper that takes the name of the region instead > of its index. If the region is not found this returns -1. > Otherwise it maps the corresponding index and returns this latter. > > Signed-off-by: Eric Auger <eric.au...@redhat.com> Nice helper. Reviewed-by: Jonathan Cameron <jonathan.came...@huawei.com> > --- > include/hw/sysbus.h | 1 + > hw/core/sysbus.c | 11 +++++++++++ > 2 files changed, 12 insertions(+) > > diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h > index 7dc88aaa27..18fde8a7b4 100644 > --- a/include/hw/sysbus.h > +++ b/include/hw/sysbus.h > @@ -82,6 +82,7 @@ void sysbus_connect_irq(SysBusDevice *dev, int n, qemu_irq > irq); > bool sysbus_is_irq_connected(SysBusDevice *dev, int n); > qemu_irq sysbus_get_connected_irq(SysBusDevice *dev, int n); > void sysbus_mmio_map(SysBusDevice *dev, int n, hwaddr addr); > +int sysbus_mmio_map_name(SysBusDevice *dev, const char*name, hwaddr addr); > void sysbus_mmio_map_overlap(SysBusDevice *dev, int n, hwaddr addr, > int priority); > > diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c > index e71367adfb..ec69e877a2 100644 > --- a/hw/core/sysbus.c > +++ b/hw/core/sysbus.c > @@ -151,6 +151,17 @@ void sysbus_mmio_map(SysBusDevice *dev, int n, hwaddr > addr) > sysbus_mmio_map_common(dev, n, addr, false, 0); > } > > +int sysbus_mmio_map_name(SysBusDevice *dev, const char *name, hwaddr addr) > +{ > + for (int i = 0; i < dev->num_mmio; i++) { > + if (!strcmp(dev->mmio[i].memory->name, name)) { > + sysbus_mmio_map(dev, i, addr); > + return i; > + } > + } > + return -1; > +} > + > void sysbus_mmio_map_overlap(SysBusDevice *dev, int n, hwaddr addr, > int priority) > {