Be ready to have SDHC implementations to cover a wider I/O address range. Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> Reviewed-by: BALATON Zoltan <bala...@eik.bme.hu> --- include/hw/sd/sdhci.h | 1 + hw/sd/sdhci.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/include/hw/sd/sdhci.h b/include/hw/sd/sdhci.h index ee1e7ef4b10..dfa0c214036 100644 --- a/include/hw/sd/sdhci.h +++ b/include/hw/sd/sdhci.h @@ -118,6 +118,7 @@ struct SDHCIClass { }; uint32_t quirks; + uint64_t iomem_size; }; /* diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index 570d825d130..3467385490d 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -1444,6 +1444,8 @@ void sdhci_uninitfn(SDHCIState *s) void sdhci_common_realize(SDHCIState *s, Error **errp) { ERRP_GUARD(); + SDHCIClass *sc = s->sc; + const char *class_name = object_get_typename(OBJECT(s)); switch (s->endianness) { case DEVICE_LITTLE_ENDIAN: @@ -1469,8 +1471,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, class_name, + sc->iomem_size); } void sdhci_common_unrealize(SDHCIState *s) @@ -1548,10 +1551,13 @@ const VMStateDescription sdhci_vmstate = { void sdhci_common_class_init(ObjectClass *klass, const void *data) { DeviceClass *dc = DEVICE_CLASS(klass); + SDHCIClass *sc = (SDHCIClass *)klass; /* No QOM cast check due to union */ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); dc->vmsd = &sdhci_vmstate; device_class_set_legacy_reset(dc, sdhci_poweron_reset); + + sc->iomem_size = SDHC_REGISTERS_MAP_SIZE; } /* --- qdev SysBus --- */ -- 2.47.1