Note, sdhci_mmio_le_ops[] was missing .impl.access_size = 4. Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> --- hw/sd/sdhci.c | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-)
diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index d115e88c4b9..15e6976220f 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -1372,30 +1372,22 @@ sdhci_write(void *opaque, hwaddr offset, uint64_t val, unsigned size) value >> shift, value >> shift); } -static const MemoryRegionOps sdhci_mmio_le_ops = { - .read = sdhci_read, - .write = sdhci_write, - .valid = { - .min_access_size = 1, - .max_access_size = 4, - .unaligned = false +static const MemoryRegionOps sdhci_mmio_ops[2] = { + [0 ... 1] = { + .read = sdhci_read, + .write = sdhci_write, + .impl = { + .min_access_size = 4, + .max_access_size = 4, + }, + .valid = { + .min_access_size = 1, + .max_access_size = 4, + .unaligned = false + }, }, - .endianness = DEVICE_LITTLE_ENDIAN, -}; - -static const MemoryRegionOps sdhci_mmio_be_ops = { - .read = sdhci_read, - .write = sdhci_write, - .impl = { - .min_access_size = 4, - .max_access_size = 4, - }, - .valid = { - .min_access_size = 1, - .max_access_size = 4, - .unaligned = false - }, - .endianness = DEVICE_BIG_ENDIAN, + [0].endianness = DEVICE_LITTLE_ENDIAN, + [1].endianness = DEVICE_BIG_ENDIAN, }; static void sdhci_init_readonly_registers(SDHCIState *s, Error **errp) @@ -1443,8 +1435,7 @@ void sdhci_common_realize(SDHCIState *s, Error **errp) ERRP_GUARD(); SDHCIClass *sc = SYSBUS_SDHCI_GET_CLASS(s); - s->io_ops = sc->io_ops ?: (s->endianness == DEVICE_BIG_ENDIAN ? - &sdhci_mmio_be_ops : &sdhci_mmio_le_ops); + s->io_ops = sc->io_ops ?: &sdhci_mmio_ops[s->endianness == DEVICE_BIG_ENDIAN]; if (s->io_ops->endianness != s->endianness) { error_setg(errp, "Invalid endianness for SD controller"); return; -- 2.47.1