Be ready to have SDHC implementations to cover a wider I/O address range. Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> --- include/hw/sd/sdhci.h | 1 + hw/sd/sdhci.c | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/include/hw/sd/sdhci.h b/include/hw/sd/sdhci.h index 0616ce3aa59..2709a7a69d5 100644 --- a/include/hw/sd/sdhci.h +++ b/include/hw/sd/sdhci.h @@ -113,6 +113,7 @@ typedef struct SDHCIClass { }; uint32_t quirks; + uint64_t iomem_size; } SDHCIClass; /* diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index 2b7eb11a14a..59d506cafa3 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -1443,6 +1443,7 @@ void sdhci_uninitfn(SDHCIState *s) void sdhci_common_realize(SDHCIState *s, Error **errp) { ERRP_GUARD(); + SDHCIClass *sc = SYSBUS_SDHCI_GET_CLASS(s); switch (s->endianness) { case DEVICE_LITTLE_ENDIAN: @@ -1468,8 +1469,9 @@ void sdhci_common_realize(SDHCIState *s, Error **errp) s->buf_maxsz = sdhci_get_fifolen(s); s->fifo_buffer = g_malloc0(s->buf_maxsz); - memory_region_init_io(&s->iomem, OBJECT(s), s->io_ops, s, "sdhci", - SDHC_REGISTERS_MAP_SIZE); + assert(sc->iomem_size >= SDHC_REGISTERS_MAP_SIZE); + memory_region_init_io(&s->iomem, OBJECT(s), s->io_ops, s, + object_get_typename(OBJECT(s)), sc->iomem_size); } void sdhci_common_unrealize(SDHCIState *s) @@ -1621,11 +1623,14 @@ static void sdhci_sysbus_unrealize(DeviceState *dev) static void sdhci_sysbus_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); + SDHCIClass *sc = SYSBUS_SDHCI_CLASS(klass); device_class_set_props(dc, sdhci_sysbus_properties); dc->realize = sdhci_sysbus_realize; dc->unrealize = sdhci_sysbus_unrealize; + sc->iomem_size = SDHC_REGISTERS_MAP_SIZE; + sdhci_common_class_init(klass, data); } -- 2.47.1