Jump to content

Recommended Posts

Posted

Bug Description

eMMC is not detected on Radxa Zero 3W when booting Armbian Trixie from SD card. The eMMC controller initializes but fails to find power supply regulators, resulting in no block device being created.

 

Hardware

Board: Radxa Zero 3W (4GB RAM / 8GB eMMC)

Boot media: SD card

 

Image

Armbian Trixie (current kernel) for Radxa Zero 3

DTB: rk3566-radxa-zero3.dtb

 

Symptoms

WiFi and SD card work fine

eMMC does not appear in lsblk

dmesg shows the SDHCI controller at fe310000.mmc loading but failing regulator lookups:
 

sdhci-dwcmshc fe310000.mmc: Looking up vmmc-supply property in node /mmc@fe310000 failed
sdhci-dwcmshc fe310000.mmc: Looking up vqmmc-supply property in node /mmc@fe310000 failed
mmc0: SDHCI controller on fe310000.mmc [fe310000.mmc] using ADMA


No mmcblk0 device is created. Only the SD card (mmcblk1) appears.
 

Expected Behavior

eMMC should appear as /dev/mmcblk0 in lsblk.

Notes

The DTB (rk3566-radxa-zero3.dtb) appears to be missing vmmc-supply and vqmmc-supply regulator definitions for the eMMC node (/mmc@fe310000)

A rk3566-radxa-zero-3w.dtb (with proper 3W-specific regulators) does not exist in the image — only rk3566-radxa-zero3.dtb and rk3566-radxa-zero3-ap6212.dtb are present

Related: #8776 (wrong DTB filename for Zero 3W)

This causes me to not be able to install to EMMC using armbian-install

Posted

Update eMMC now detected (workaround found)

 

After significant debugging, I have identified and worked around the issue. Here's what I found:

 

What the shipped DTB is missing for the eMMC controller (/mmc@fe310000):

vmmc-supply / vqmmc-supply — voltage regulator references
pinctrl-0 / pinctrl-names — pin muxing for the 8-bit eMMC data bus, clock, command, and data strobe lines
cap-mmc-highspeed, mmc-hs200-1_8v, no-sd, no-sdio — eMMC capability flags
Interestingly, the PMU IO domains (syscon@fdc20000/io-domains) are already correctly configured with vccio2 = 1.8V, and the pinctrl groups (emmc-bus8, emmc-clk, emmc-cmd, emmc-datastrobe) exist under /pinctrl/emmc/. The board-level wiring is all there in the DTB — it's just not connected to the eMMC controller node.

 

Root cause: The Armbian Trixie vendor kernel (6.1.115) ships only rk3566-radxa-zero3.dtb (generic Zero 3), not the 3W-specific rk3566-radxa-zero-3w.dtb that the upstream Linux kernel has. The upstream DTS includes all of the above for the 3W model.

Additional finding — deferred probe timing issue: Even after patching all missing properties via a device tree overlay, the eMMC still doesn't appear on first boot. The SDHCI driver (sdhci-dwcmshc) probes before the overlay's regulators are registered, receives dummy regulators instead of deferring, and initializes the controller without real power. A manual unbind/rebind of the driver after boot causes immediate detection:

 

mmc0: new HS200 MMC card at address 0001
mmcblk0: mmc0:0001 8GTF4R 7.28 GiB


I have a working fix (overlay + early-boot driver rebind) that I testing before publishing.

The proper long-term solution would be for Armbian to ship the rk3566-radxa-zero-3w.dtb from the upstream kernel, or merge its board-level eMMC configuration into the existing rk3566-radxa-zero3.dtb.

Posted

Update — Working fix available

I've got eMMC detection working on my Radxa Zero 3W with Armbian Trixie (vendor kernel 6.1.115, SD card boot). The fix uses a device tree overlay to inject the missing voltage regulators, pinctrl references, and eMMC capabilities into the base DTB, combined with a small systemd service that rebinds the SDHCI driver to work around a deferred probe timing issue.

After applying, the eMMC is detected as expected:

mmc0: new HS200 MMC card at address 0001

mmcblk0: mmc0:0001 8GTF4R 7.28 GiB

armbian-install works normally after that to migrate to eMMC boot. The rebind service is conditionally skipped when booting from eMMC so it doesn't interfere.

 

I've attached a zip with all the files.

The README.md inside has the full details — root cause analysis, what was tried and failed (including full DTB recompile), how the fix works, installation/verification/revert steps, and known limitations (the pinctrl phandle values are specific to this kernel build).

I still working on a version that does not need the rebind service for sd cards. but for now you need the rebind on the sd card to get it to find the EMMC so you can install.

emmc-fix.zip

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines