new file mode 100644
@@ -0,0 +1,69 @@
+From 8de24e226d745c59972b1898df5cceacf0a7ad47 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= <sairon@sairon.cz>
+Date: Tue, 12 May 2026 14:24:35 +0200
+Subject: [PATCH] mmc: bcmstb: Fix non-removable check in bcm2712 init
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+sdhci_brcmstb_init_2712() reads host->mmc->host_caps to decide whether
+to force card-detect for a non-removable eMMC, or to route the CD signal
+for a removable SD card. At the time this function runs from
+sdhci_bcmstb_probe(), however, host->mmc->host_caps is still zero, that
+field is only populated later by the MMC uclass, after the driver's
+probe returns. mmc_of_parse() has already filled plat->cfg.host_caps
+from the device tree by this point, so check that field instead.
+
+Without the fix, every BCM2712 SDHCI instance takes the else branch and
+writes SDIO_CFG_SD_PIN_SEL = SDIO_CFG_SD_PIN_SEL_CARD (0x02), including
+the non-removable eMMC on boards such as CM5 on Home Assistant Yellow.
+The SDIO_CFG block lies outside the SDHCI core's reset scope, so this
+value persists across SDHCI_RESET_ALL into the next stage. On the
+BCM2712, having SD_PIN_SEL set to "SD" when the Linux kernel performs
+its first set_power(MMC_POWER_UP) write racily prevents the SDHCI
+POWER_ON bit from latching (see [1] for the whole backstory) - the
+voltage bits stick but POWER_ON drops - which wedges the first CMD0 the
+full 10 s software timeout. On Home Assistant Yellow this manifested as
+a ~20 s eMMC probe delay on roughly one in two Linux boots when U-Boot
+was the previous stage. Booting directly from the Pi firmware (no U-Boot
+in between) left SD_PIN_SEL at its default and did not exhibit the race.
+
+Reading plat->cfg.host_caps lets init_2712 see the "non-removable"
+property and take the correct branch, leaving SD_PIN_SEL untouched for
+the eMMC.
+
+[1] https://github.com/home-assistant/operating-system/pull/3700#issuecomment-4430229511
+
+Fixes: 10127cdbab64 ("mmc: bcmstb: Add support for bcm2712 SD controller")
+Signed-off-by: Jan Čermák <sairon@sairon.cz>
+Reviewed-by: Ivan T. Ivanov <iivanov@suse.de>
+Upstream-Status: Backport [https://source.denx.de/u-boot/u-boot/-/commit/8de24e226d745c59972b1898df5cceacf0a7ad47]
+Signed-off-by: Patrick Oetken <patrick.oetken@gmail.com>
+---
+ drivers/mmc/bcmstb_sdhci.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/mmc/bcmstb_sdhci.c b/drivers/mmc/bcmstb_sdhci.c
+index 7bddbebb1622..f27b84a6ee43 100644
+--- a/drivers/mmc/bcmstb_sdhci.c
++++ b/drivers/mmc/bcmstb_sdhci.c
+@@ -56,7 +56,7 @@ struct sdhci_brcmstb_dev_priv {
+
+ static int sdhci_brcmstb_init_2712(struct udevice *dev)
+ {
+- struct sdhci_host *host = dev_get_priv(dev);
++ struct sdhci_bcmstb_plat *plat = dev_get_plat(dev);
+ void *cfg_regs;
+ u32 reg;
+
+@@ -65,8 +65,8 @@ static int sdhci_brcmstb_init_2712(struct udevice *dev)
+ if (!cfg_regs)
+ return -ENOENT;
+
+- if ((host->mmc->host_caps & MMC_CAP_NONREMOVABLE) ||
+- (host->mmc->host_caps & MMC_CAP_NEEDS_POLL)) {
++ if ((plat->cfg.host_caps & MMC_CAP_NONREMOVABLE) ||
++ (plat->cfg.host_caps & MMC_CAP_NEEDS_POLL)) {
+ /* Force presence */
+ reg = readl(cfg_regs + SDIO_CFG_CTRL);
+ reg &= ~SDIO_CFG_CTRL_SDCD_N_TEST_LEV;
@@ -15,6 +15,7 @@ PE = "1"
SRCREV = "34820924edbc4ec7803eb89d9852f4b870fa760a"
SRC_URI = "git://source.denx.de/u-boot/u-boot.git;protocol=https;branch=master"
+SRC_URI += "file://0001-mmc-bcmstb-Fix-non-removable-check-in-bcm2712-init.patch"
S = "${WORKDIR}/git"
B = "${WORKDIR}/build"
sdhci_brcmstb_init_2712() tests host->mmc->host_caps, which is still zero when sdhci_bcmstb_probe() calls it; mmc_of_parse() has put the device-tree capabilities into plat->cfg.host_caps instead. Every BCM2712 SDHCI instance therefore takes the removable-card branch and programs SDIO_CFG_SD_PIN_SEL to SD mode, including the soldered eMMC on a Compute Module 5. That register survives into Linux and makes the first MMC_POWER_UP fail to latch POWER_ON. On a CM5 booting from eMMC through U-Boot 2025.04 this cost a fixed ~134 s inside "Waiting for root device /dev/mmcblk0pN..." on 6 of 9 boots; with this backport applied, 0 of 19 boots stalled and boot time went from 2 min 23 s to ~13 s. The bug is present from v2024.04 up to v2026.04 and is fixed upstream in v2026.07 by 8de24e226d74 ("mmc: bcmstb: Fix non-removable check in bcm2712 init"), so oe-core master (2026.10) already has it. The patch applies to 2025.04 without fuzz. Only the bcm2712 init hook changes. Signed-off-by: Patrick Oetken <patrick.oetken@gmail.com> --- ...-non-removable-check-in-bcm2712-init.patch | 69 +++++++++++++++++++ recipes-bsp/u-boot/u-boot-common.inc | 1 + 2 files changed, 70 insertions(+) create mode 100644 recipes-bsp/u-boot/files/0001-mmc-bcmstb-Fix-non-removable-check-in-bcm2712-init.patch