qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v5 6/6] hw/ppc/e500: Add Freescale eSDHC to e500plat


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v5 6/6] hw/ppc/e500: Add Freescale eSDHC to e500plat
Date: Mon, 31 Oct 2022 16:12:26 +0100
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.4.0

On 31/10/22 12:54, Philippe Mathieu-Daudé wrote:
From: Bernhard Beschow <shentey@gmail.com>

Adds missing functionality to e500plat machine which increases the
chance of given "real" firmware images to access SD cards.

Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Message-Id: <20221018210146.193159-8-shentey@gmail.com>
[PMD: Simplify using create_unimplemented_device("esdhc")]
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
  docs/system/ppc/ppce500.rst | 12 ++++++++++
  hw/ppc/Kconfig              |  2 ++
  hw/ppc/e500.c               | 48 ++++++++++++++++++++++++++++++++++++-
  hw/ppc/e500.h               |  1 +
  hw/ppc/e500plat.c           |  1 +
  5 files changed, 63 insertions(+), 1 deletion(-)

@@ -992,6 +1018,26 @@ void ppce500_init(MachineState *machine)
      i2c = (I2CBus *)qdev_get_child_bus(dev, "i2c");
      i2c_slave_create_simple(i2c, "ds1338", RTC_REGS_OFFSET);
+ /* eSDHC */
+    if (pmc->has_esdhc) {
+        uint64_t sdhci_regsize;
+
+        dev = qdev_new(TYPE_SYSBUS_SDHCI);
+        /*
+         * Compatible with:
+         * - SD Host Controller Specification Version 2.0 Part A2
+         */
+        qdev_prop_set_uint8(dev, "sd-spec-version", 2);
+        s = SYS_BUS_DEVICE(dev);
+        sysbus_realize_and_unref(s, &error_fatal);
+        sysbus_mmio_map(s, 0, pmc->ccsrbar_base + MPC85XX_ESDHC_REGS_OFFSET);
+        sysbus_connect_irq(s, 0, qdev_get_gpio_in(mpicdev, MPC85XX_ESDHC_IRQ));
+        sdhci_regsize = memory_region_size(sysbus_mmio_get_region(s, 0));
+        create_unimplemented_device("esdhc",
+                                    pmc->ccsrbar_base
+                                    + MPC85XX_ESDHC_REGS_OFFSET + 
sdhci_regsize,
+                                    MPC85XX_ESDHC_REGS_SIZE - sdhci_regsize);
+    }

Since the UNIMP device has lower priority, we can simplify as:

if (pmc->has_esdhc) {
    create_unimplemented_device("esdhc",
                                pmc->ccsrbar_base
                                + MPC85XX_ESDHC_REGS_OFFSET,
                                MPC85XX_ESDHC_REGS_SIZE);

    dev = qdev_new(TYPE_SYSBUS_SDHCI);
    /*
     * Compatible with:
     * - SD Host Controller Specification Version 2.0 Part A2
     */
    qdev_prop_set_uint8(dev, "sd-spec-version", 2);
    s = SYS_BUS_DEVICE(dev);
    sysbus_realize_and_unref(s, &error_fatal);
    sysbus_mmio_map(s, 0, pmc->ccsrbar_base + MPC85XX_ESDHC_REGS_OFFSET);
    sysbus_connect_irq(s, 0, qdev_get_gpio_in(mpicdev, MPC85XX_ESDHC_IRQ));
}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]