On 16.09.25 09:10, Cédric Le Goater wrote: > On 9/16/25 08:02, Jan Kiszka wrote: >> On 15.09.25 19:37, Cédric Le Goater wrote: >>> On 9/14/25 14:46, Jan Kiszka wrote: >>>> From: Jan Kiszka <jan.kis...@siemens.com> >>>> >>>> Signed-off-by: Jan Kiszka <jan.kis...@siemens.com> >>>> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> >>>> --- >>>> docs/system/device-emulation.rst | 1 + >>>> docs/system/devices/emmc.rst | 52 +++++++++++++++++++++++++++ >>>> +++++ >>>> 2 files changed, 53 insertions(+) >>>> create mode 100644 docs/system/devices/emmc.rst >>>> >>>> diff --git a/docs/system/device-emulation.rst b/docs/system/device- >>>> emulation.rst >>>> index 911381643f..36429b1d17 100644 >>>> --- a/docs/system/device-emulation.rst >>>> +++ b/docs/system/device-emulation.rst >>>> @@ -101,3 +101,4 @@ Emulated Devices >>>> devices/canokey.rst >>>> devices/usb-u2f.rst >>>> devices/igb.rst >>>> + devices/emmc.rst >>>> diff --git a/docs/system/devices/emmc.rst b/docs/system/devices/ >>>> emmc.rst >>>> new file mode 100644 >>>> index 0000000000..dbea6d6c7e >>>> --- /dev/null >>>> +++ b/docs/system/devices/emmc.rst >>>> @@ -0,0 +1,52 @@ >>>> +============== >>>> +eMMC Emulation >>>> +============== >>>> + >>>> +Besides SD card emulation, QEMU also offers an eMMC model as found on >>>> many >>>> +embedded boards. An eMMC, just like an SD card, is connected to the >>>> machine >>>> +via an SDHCI controller. >>>> + >>>> +Create eMMC Images >>>> +================== >>>> + >>>> +A recent eMMC consists of 4 partitions: 2 boot partitions, 1 Replay >>>> protected >>>> +Memory Block (RPMB), and the user data area. QEMU expects backing >>>> images for >>>> +the eMMC to contain those partitions concatenated in exactly that >>>> order. >>>> +However, the boot partitions as well as the RPMB might be absent if >>>> their sizes >>>> +are configured to zero. >>>> + >>>> +The eMMC specification defines alignment constraints for the >>>> partitions. The >>>> +two boot partitions must be of the same size. Furthermore, boot and >>>> RPMB >>>> +partitions must be multiples of 128 KB with a maximum of 32640 KB for >>>> each >>>> +boot partition and 16384K for the RPMB partition. >>>> + >>>> +The alignment constrain of the user data area depends on its size. Up >>>> to 2 >>>> +GByte, the size must be a power of 2. From 2 GByte onward, the size >>>> has to be >>>> +multiples of 512 byte. >>>> + >>>> +QEMU is enforcing those alignment rules before instantiating the >>>> device. >>>> +Therefore, the provided image has to strictly follow them as well. >>>> The helper >>>> +script `scripts/mkemmc.sh` can be used to create compliant images, >>>> with or >>> >>> the single backquote would interpret scripts/mkemmc.sh as a ref. I think >>> you want ``scripts/mkemmc.sh`` >>> >>>> +without pre-filled partitions. E.g., to create an eMMC image from a >>>> firmware >>>> +image and an OS image with an empty 2 MByte RPMB, use the following >>>> command: >>>> + >>>> +.. code-block:: console >>>> + >>>> + scripts/mkemmc.sh -b firmware.img -r /dev/zero:2MB os.img emmc.img >>>> + >>>> +This will take care of rounding up the partition sizes to the next >>>> valid value >>>> +and will leave the RPMB and the second boot partition empty (zeroed). >>>> + >>>> +Adding eMMC Devices >>>> +=================== >>>> + >>>> +An eMMC is either automatically created by a machine model (e.g. >>>> Aspeed boards) >>>> +or can be user-created when using a PCI-attached SDHCI controller. To >>>> +instantiate the eMMC image from the example above while assuming that >>>> the >>>> +firmware needs a boot partitions of 1 MB, use the following options: >>>> + >>>> +.. code-block:: console >>>> + >>>> + -drive file=emmc.img,if=none,format=raw,id=emmc-img >>>> + -device sdhci-pci >>>> + -device emmc,drive=emmc-img,boot-partition-size=1048576,rpmb- >>>> partition-size=2097152 >>> >>> I will see if I can adjust the existing aspeed test with your proposal. >>> >> >> Thanks in advance! Yeah, the existing alignment rules were incorrect >> once you turned on boot partitions. So there is unfortunately no way >> around fixing images that followed them. > > Ideally we should generate the rainier emmc image with your script > from the OpenBMC artifacts [1]. The current image is not broken by > this series, so, we have time. > > > However, regarding this command line : > > -drive file=emmc.img,if=none,format=raw,id=emmc-img > -device sdhci-pci > -device emmc,drive=emmc-img,boot-partition-size=1048576,rpmb- > size=2097152 > > a few assumptions are made. > > Machines can have multiple sdhci controllers with several slots. In > the, case above, the emmc device is "blindly" attached to slot 0 on > a bus named "sd-bus".
If the machine has an sdhci controller already, the sdhci-pci device is not needed. I can try to make the description clearer, and maybe you can tell me what would be needed for the rainier boards, then we can have both examples there. > > Removing all QEMU internal references to "sd-bus" will require some work. > Sure, this should rather document the current situation. Jan > > Philippe, > > Should we allow automatic bus numbering : > > - qbus_init(&s->sdbus, sizeof(s->sdbus), TYPE_SDHCI_BUS, DEVICE(s), > "sd-bus"); > + qbus_init(&s->sdbus, sizeof(s->sdbus), TYPE_SDHCI_BUS, DEVICE(s), > NULL); > > and replace all : > > - BusState *bus = qdev_get_child_bus(DEVICE(sdhci), "sd-bus"); > + BusState *bus = BUS(&sdhci->sdbus); > > > Thanks, > > C. > > > [1] https://jenkins.openbmc.org/job/ci-openbmc/ > distro=ubuntu,label=docker-builder,target=p10bmc/32112/artifact/openbmc/ > build/tmp/deploy/images/p10bmc/ > -- Siemens AG, Foundational Technologies Linux Expert Center