Browse Source

hw/arm/fsl-imx25: Extract TYPE_FSL_ESDHC_LE

Extract an eSDHC (little endian) device model since the uSDHC device model
will get an uSDHC-specific MMIO quirk.

Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <20260112145418.220506-11-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
pull/316/head
Bernhard Beschow 1 year ago
committed by Philippe Mathieu-Daudé
parent
commit
ca35f8cc4d
  1. 7
      hw/arm/fsl-imx25.c
  2. 31
      hw/sd/sdhci.c
  3. 1
      include/hw/sd/sdhci.h

7
hw/arm/fsl-imx25.c

@ -68,7 +68,8 @@ static void fsl_imx25_init(Object *obj)
}
for (i = 0; i < FSL_IMX25_NUM_ESDHCS; i++) {
object_initialize_child(obj, "sdhc[*]", &s->esdhc[i], TYPE_IMX_USDHC);
object_initialize_child(obj, "sdhc[*]", &s->esdhc[i],
TYPE_FSL_ESDHC_LE);
}
for (i = 0; i < FSL_IMX25_NUM_USBS; i++) {
@ -239,12 +240,8 @@ static void fsl_imx25_realize(DeviceState *dev, Error **errp)
{ FSL_IMX25_ESDHC2_ADDR, FSL_IMX25_ESDHC2_IRQ },
};
object_property_set_uint(OBJECT(&s->esdhc[i]), "sd-spec-version", 2,
&error_abort);
object_property_set_uint(OBJECT(&s->esdhc[i]), "capareg",
IMX25_ESDHC_CAPABILITIES, &error_abort);
object_property_set_uint(OBJECT(&s->esdhc[i]), "vendor",
SDHCI_VENDOR_FSL, &error_abort);
if (!sysbus_realize(SYS_BUS_DEVICE(&s->esdhc[i]), errp)) {
return;
}

31
hw/sd/sdhci.c

@ -1897,6 +1897,32 @@ static void fsl_esdhc_be_init(Object *obj)
qdev_prop_set_uint8(dev, "vendor", SDHCI_VENDOR_FSL);
}
static const MemoryRegionOps esdhc_mmio_le_ops = {
.read = esdhc_read,
.write = esdhc_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 void fsl_esdhc_le_init(Object *obj)
{
SDHCIState *s = SYSBUS_SDHCI(obj);
DeviceState *dev = DEVICE(obj);
s->io_ops = &esdhc_mmio_le_ops;
s->quirks = SDHCI_QUIRK_NO_BUSY_IRQ;
qdev_prop_set_uint8(dev, "sd-spec-version", 2);
qdev_prop_set_uint8(dev, "vendor", SDHCI_VENDOR_FSL);
}
static const MemoryRegionOps usdhc_mmio_ops = {
.read = esdhc_read,
.write = esdhc_write,
@ -1996,6 +2022,11 @@ static const TypeInfo sdhci_types[] = {
.parent = TYPE_SYSBUS_SDHCI,
.instance_init = fsl_esdhc_be_init,
},
{
.name = TYPE_FSL_ESDHC_LE,
.parent = TYPE_SYSBUS_SDHCI,
.instance_init = fsl_esdhc_le_init,
},
{
.name = TYPE_IMX_USDHC,
.parent = TYPE_SYSBUS_SDHCI,

1
include/hw/sd/sdhci.h

@ -129,6 +129,7 @@ DECLARE_INSTANCE_CHECKER(SDHCIState, SYSBUS_SDHCI,
TYPE_SYSBUS_SDHCI)
#define TYPE_FSL_ESDHC_BE "fsl-esdhc-be"
#define TYPE_FSL_ESDHC_LE "fsl-esdhc-le"
#define TYPE_IMX_USDHC "imx-usdhc"

Loading…
Cancel
Save