All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bernhard Beschow <shentey@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"Hanna Reitz" <hreitz@redhat.com>,
	qemu-block@nongnu.org, "Bin Meng" <bin.meng@windriver.com>,
	qemu-ppc@nongnu.org, "Bernhard Beschow" <shentey@gmail.com>
Subject: [PATCH 11/11] hw/ppc/e500: Add Freescale eSDHC to e500 boards
Date: Thu, 15 Sep 2022 17:25:20 +0200	[thread overview]
Message-ID: <20220915152520.21948-12-shentey@gmail.com> (raw)
In-Reply-To: <20220915152520.21948-1-shentey@gmail.com>

Adds missing functionality to emulated e500 SOCs which increases the
chance of given "real" firmware images to access SD cards.

Signed-off-by: Bernhard Beschow <shentey@gmail.com>
---
 docs/system/ppc/ppce500.rst | 13 +++++++++++++
 hw/ppc/Kconfig              |  1 +
 hw/ppc/e500.c               | 32 ++++++++++++++++++++++++++++++++
 3 files changed, 46 insertions(+)

diff --git a/docs/system/ppc/ppce500.rst b/docs/system/ppc/ppce500.rst
index c3f55c6f3d..50b199c8f3 100644
--- a/docs/system/ppc/ppce500.rst
+++ b/docs/system/ppc/ppce500.rst
@@ -19,6 +19,7 @@ The ``ppce500`` machine supports the following devices:
 * Power-off functionality via one GPIO pin
 * 1 Freescale MPC8xxx PCI host controller
 * VirtIO devices via PCI bus
+* 1 Freescale Enhanced Secure Digital Host controller (eSDHC)
 * 1 Freescale Enhanced Triple Speed Ethernet controller (eTSEC)
 
 Hardware configuration information
@@ -131,6 +132,18 @@ be used as follows:
       -drive if=pflash,file=/path/to/rootfs.ext2,format=raw \
       -append "rootwait root=/dev/mtdblock0"
 
+Alternatively, the root file system can also reside on an emulated SD card
+whose size must again be a power of two:
+
+.. code-block:: bash
+
+  $ qemu-system-ppc64 -M ppce500 -cpu e500mc -smp 4 -m 2G \
+      -display none -serial stdio \
+      -kernel vmlinux \
+      -device sd-card,drive=mydrive \
+      -drive id=mydrive,if=none,file=/path/to/rootfs.ext2,format=raw \
+      -append "rootwait root=/dev/mmcblk0"
+
 Running U-Boot
 --------------
 
diff --git a/hw/ppc/Kconfig b/hw/ppc/Kconfig
index 769a1ead1c..6e31f568ba 100644
--- a/hw/ppc/Kconfig
+++ b/hw/ppc/Kconfig
@@ -129,6 +129,7 @@ config E500
     select PFLASH_CFI01
     select PLATFORM_BUS
     select PPCE500_PCI
+    select SDHCI
     select SERIAL
     select MPC_I2C
     select FDT_PPC
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index 7843a4e04b..87a03fd4a9 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -48,6 +48,7 @@
 #include "hw/net/fsl_etsec/etsec.h"
 #include "hw/i2c/i2c.h"
 #include "hw/irq.h"
+#include "hw/sd/sdhci.h"
 
 #define EPAPR_MAGIC                (0x45504150)
 #define DTC_LOAD_PAD               0x1800000
@@ -66,11 +67,14 @@
 #define MPC8544_SERIAL1_REGS_OFFSET 0x4600ULL
 #define MPC8544_PCI_REGS_OFFSET    0x8000ULL
 #define MPC8544_PCI_REGS_SIZE      0x1000ULL
+#define MPC85XX_ESDHC_REGS_OFFSET  0x2e000ULL
+#define MPC85XX_ESDHC_REGS_SIZE    0x1000ULL
 #define MPC8544_UTIL_OFFSET        0xe0000ULL
 #define MPC8XXX_GPIO_OFFSET        0x000FF000ULL
 #define MPC8544_I2C_REGS_OFFSET    0x3000ULL
 #define MPC8XXX_GPIO_IRQ           47
 #define MPC8544_I2C_IRQ            43
+#define MPC85XX_ESDHC_IRQ          72
 #define RTC_REGS_OFFSET            0x68
 
 #define PLATFORM_CLK_FREQ_HZ       (400 * 1000 * 1000)
@@ -203,6 +207,25 @@ static void dt_i2c_create(void *fdt, const char *soc, const char *mpic,
     g_free(i2c);
 }
 
+static void dt_sdhc_create(void *fdt, const char *parent, const char *mpic)
+{
+    hwaddr mmio = MPC85XX_ESDHC_REGS_OFFSET;
+    hwaddr size = MPC85XX_ESDHC_REGS_SIZE;
+    int irq = MPC85XX_ESDHC_IRQ;
+    char *name;
+
+    name = g_strdup_printf("%s/sdhc@%" PRIx64, parent, mmio);
+    qemu_fdt_add_subnode(fdt, name);
+    /* qemu_fdt_setprop_cells(fdt, name, "voltage-ranges", 3300, 3300); */
+    qemu_fdt_setprop_cells(fdt, name, "clock-frequency", 167000000);
+    qemu_fdt_setprop(fdt, name, "sdhci,auto-cmd12", NULL, 0);
+    qemu_fdt_setprop_phandle(fdt, name, "interrupt-parent", mpic);
+    qemu_fdt_setprop_cells(fdt, name, "bus-width", 4);
+    qemu_fdt_setprop_cells(fdt, name, "interrupts", irq, 0x2);
+    qemu_fdt_setprop_cells(fdt, name, "reg", mmio, size);
+    qemu_fdt_setprop_string(fdt, name, "compatible", "fsl,esdhc");
+    g_free(name);
+}
 
 typedef struct PlatformDevtreeData {
     void *fdt;
@@ -556,6 +579,8 @@ static int ppce500_load_device_tree(PPCE500MachineState *pms,
 
     dt_rtc_create(fdt, "i2c", "rtc");
 
+    /* sdhc */
+    dt_sdhc_create(fdt, soc, mpic);
 
     gutil = g_strdup_printf("%s/global-utilities@%llx", soc,
                             MPC8544_UTIL_OFFSET);
@@ -996,6 +1021,13 @@ void ppce500_init(MachineState *machine)
     i2c_slave_create_simple(i2c, "ds1338", RTC_REGS_OFFSET);
 
 
+    /* eSDHC */
+    dev = qdev_new(TYPE_FSL_ESDHC);
+    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));
+
     /* General Utility device */
     dev = qdev_new("mpc8544-guts");
     s = SYS_BUS_DEVICE(dev);
-- 
2.37.3



  parent reply	other threads:[~2022-09-15 15:34 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-15 15:25 [PATCH 00/11] ppc/e500: Add support for two types of flash, cleanup Bernhard Beschow
2022-09-15 15:25 ` [PATCH 01/11] hw/ppc/meson: Allow e500 boards to be enabled separately Bernhard Beschow
2022-09-16  2:37   ` Bin Meng
2022-09-18 12:15   ` Philippe Mathieu-Daudé via
2022-09-15 15:25 ` [PATCH 02/11] hw/gpio/meson: Introduce dedicated config switch for hw/gpio/mpc8xxx Bernhard Beschow
2022-09-16  2:40   ` Bin Meng
2022-09-18 12:15   ` Philippe Mathieu-Daudé via
2022-09-15 15:25 ` [PATCH 03/11] docs/system/ppc/ppce500: Add heading for networking chapter Bernhard Beschow
2022-09-16  2:43   ` Bin Meng
2022-09-18 12:16   ` Philippe Mathieu-Daudé via
2022-09-15 15:25 ` [PATCH 04/11] hw/ppc/mpc8544ds: Add platform bus Bernhard Beschow
2022-09-16  6:15   ` Bin Meng
2022-09-16 17:19     ` Bernhard Beschow
2022-10-09  2:31       ` Bin Meng
2022-09-15 15:25 ` [PATCH 05/11] hw/ppc/e500: Remove if statement which is now always true Bernhard Beschow
2022-09-16  6:17   ` Bin Meng
2022-09-18 12:17   ` Philippe Mathieu-Daudé via
2022-09-15 15:25 ` [PATCH 06/11] hw/block/pflash_cfi01: Error out if device length isn't a power of two Bernhard Beschow
2022-09-16  6:24   ` Bin Meng
2022-09-15 15:25 ` [PATCH 07/11] hw/ppc/e500: Implement pflash handling Bernhard Beschow
2022-09-16 15:00   ` Bin Meng
2022-09-16 17:05     ` Bernhard Beschow
2022-10-03 19:45       ` B
2022-09-15 15:25 ` [PATCH 08/11] hw/sd/sdhci-internal: Unexport ESDHC defines Bernhard Beschow
2022-09-16 10:04   ` Bin Meng
2022-09-18 12:19   ` Philippe Mathieu-Daudé via
2022-09-15 15:25 ` [PATCH 09/11] hw/sd/sdhci: Rename ESDHC_* defines to USDHC_* Bernhard Beschow
2022-09-16 10:07   ` Bin Meng
2022-09-16 17:11     ` Bernhard Beschow
2022-09-15 15:25 ` [PATCH 10/11] hw/sd/sdhci: Implement Freescale eSDHC device model Bernhard Beschow
2022-09-16 15:15   ` Bin Meng
2022-09-16 17:27     ` Bernhard Beschow
2022-09-15 15:25 ` Bernhard Beschow [this message]
2022-09-16 15:26   ` [PATCH 11/11] hw/ppc/e500: Add Freescale eSDHC to e500 boards Bin Meng
2022-09-16 16:15     ` Bernhard Beschow
2022-09-16 15:27 ` [PATCH 00/11] ppc/e500: Add support for two types of flash, cleanup Bin Meng
2022-09-16 16:08   ` Bernhard Beschow
2022-09-18 14:37 ` Philippe Mathieu-Daudé via

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220915152520.21948-12-shentey@gmail.com \
    --to=shentey@gmail.com \
    --cc=bin.meng@windriver.com \
    --cc=f4bug@amsat.org \
    --cc=hreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.