Add base_address field to platform_bus structure and initialize it. As the platform devices addresses are relative to the platform bus, we need it to get the absolute address of a device.
Signed-off-by: Baptiste Reynal <b.rey...@virtualopensystems.com> --- hw/arm/virt.c | 4 ++++ include/hw/platform-bus.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 1b1cc71..33361c5 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -740,6 +740,7 @@ static void create_platform_bus(VirtBoardInfo *vbi, qemu_irq *pic) { DeviceState *dev; SysBusDevice *s; + PlatformBusDevice *pbus; int i; ARMPlatformBusFDTParams *fdt_params = g_new(ARMPlatformBusFDTParams, 1); MemoryRegion *sysmem = get_system_memory(); @@ -766,6 +767,9 @@ static void create_platform_bus(VirtBoardInfo *vbi, qemu_irq *pic) platform_bus_params.platform_bus_size); qdev_init_nofail(dev); s = SYS_BUS_DEVICE(dev); + pbus = PLATFORM_BUS_DEVICE(dev); + + pbus->base_address = vbi->memmap[VIRT_PLATFORM_BUS].base; for (i = 0; i < platform_bus_params.platform_bus_num_irqs; i++) { int irqn = platform_bus_params.platform_bus_first_irq + i; diff --git a/include/hw/platform-bus.h b/include/hw/platform-bus.h index 3c3f96b..13efc82 100644 --- a/include/hw/platform-bus.h +++ b/include/hw/platform-bus.h @@ -41,6 +41,8 @@ struct PlatformBusDevice { bool done_gathering; /*< public >*/ + hwaddr base_address; + uint32_t mmio_size; MemoryRegion mmio; -- 2.4.3