From 812aca5791404ad5df469fe3240638573e39e063 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Tue, 21 Apr 2026 09:51:59 +0100 Subject: [PATCH 1/4] video: arm: rpi: Add brcm,bcm2712-hdmi0 compatible The 'brcm,bcm2712-hdmi0' compatible string is used on RPi5. There appears to be no change that impacts early boot output on the display controller so add the RPi5 compatible string. Signed-off-by: Peter Robinson Reviewed-by: Matthias Brugger --- drivers/video/bcm2835.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/video/bcm2835.c b/drivers/video/bcm2835.c index 0c81e606622..0e0cc1979eb 100644 --- a/drivers/video/bcm2835.c +++ b/drivers/video/bcm2835.c @@ -66,6 +66,7 @@ static int bcm2835_video_probe(struct udevice *dev) static const struct udevice_id bcm2835_video_ids[] = { { .compatible = "brcm,bcm2835-hdmi" }, { .compatible = "brcm,bcm2711-hdmi0" }, + { .compatible = "brcm,bcm2712-hdmi0" }, { .compatible = "brcm,bcm2708-fb" }, #if !IS_ENABLED(CONFIG_VIDEO_DT_SIMPLEFB) { .compatible = "simple-framebuffer" }, From 17ceb774a1854dd9632ee724266d29b907e51678 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Tue, 21 Apr 2026 15:11:38 +0100 Subject: [PATCH 2/4] rpi_arm64: Enable MBEDTLS/LWIP/WGET and WGET_HTTPS Enable LWIP and HTTPS on the Raspberry Pi arm64 platform to be able to use it in the boot process. Signed-off-by: Peter Robinson Reviewed-by: Matthias Brugger --- configs/rpi_arm64_defconfig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/configs/rpi_arm64_defconfig b/configs/rpi_arm64_defconfig index 69e8e72c5d7..90048a418f6 100644 --- a/configs/rpi_arm64_defconfig +++ b/configs/rpi_arm64_defconfig @@ -11,6 +11,7 @@ CONFIG_SYS_LOAD_ADDR=0x1000000 CONFIG_PCI=y CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y +CONFIG_EFI_HTTP_BOOT=y CONFIG_BOOTSTD_DEFAULTS=y CONFIG_OF_BOARD_SETUP=y CONFIG_FDT_SIMPLEFB=y @@ -26,11 +27,13 @@ CONFIG_CMD_GPIO=y CONFIG_CMD_MMC=y CONFIG_CMD_PCI=y CONFIG_CMD_USB=y +CONFIG_CMD_SNTP=y +CONFIG_WGET_HTTPS=y CONFIG_CMD_EFIDEBUG=y CONFIG_CMD_FS_UUID=y CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -CONFIG_TFTP_TSIZE=y +CONFIG_NET_LWIP=y CONFIG_DM_DMA=y CONFIG_DFU_MMC=y CONFIG_SYS_DFU_DATA_BUF_SIZE=0x100000 @@ -64,4 +67,5 @@ CONFIG_SYS_WHITE_ON_BLACK=y CONFIG_VIDEO_BCM2835=y CONFIG_CONSOLE_SCROLL_LINES=10 CONFIG_PHYS_TO_BUS=y +CONFIG_MBEDTLS_LIB=y # CONFIG_HEXDUMP is not set From 29c7796a718977ac78da7d381daec9828ec8c995 Mon Sep 17 00:00:00 2001 From: Liel Harel Date: Sun, 10 May 2026 00:06:07 +0300 Subject: [PATCH 3/4] mmc: bcm2835_sdhci: Parse generic MMC device tree properties The bcm2835 SDHCI driver sets up the MMC host configuration via sdhci_setup_cfg(), but does not parse generic MMC device tree properties. As a result, properties such as bus-width are ignored. On Raspberry Pi Compute Module 4, the eMMC node describes an 8-bit bus, but U-Boot initialized the device as 4-bit. Call mmc_of_parse() before sdhci_setup_cfg() so that generic MMC properties are folded into the host configuration before the MMC core selects the bus width. Before this change, mmc info reported: Bus Speed: 52000000 Bus Width: 4-bit After this change, mmc info reports: Bus Speed: 52000000 Bus Width: 8-bit Tested on Raspberry Pi Compute Module 4 with onboard eMMC. Signed-off-by: Liel Harel Reviewed-by: Peter Robinson Tested-by: Peter Robinson # on the CM4 as well --- drivers/mmc/bcm2835_sdhci.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/mmc/bcm2835_sdhci.c b/drivers/mmc/bcm2835_sdhci.c index 655d9902dfa..efa4d14f5da 100644 --- a/drivers/mmc/bcm2835_sdhci.c +++ b/drivers/mmc/bcm2835_sdhci.c @@ -219,6 +219,10 @@ static int bcm2835_sdhci_probe(struct udevice *dev) host->mmc = &plat->mmc; host->mmc->dev = dev; + ret = mmc_of_parse(dev, &plat->cfg); + if (ret) + return ret; + ret = sdhci_setup_cfg(&plat->cfg, host, emmc_freq, MIN_FREQ); if (ret) { debug("%s: Failed to setup SDHCI (err=%d)\n", __func__, ret); From 8de24e226d745c59972b1898df5cceacf0a7ad47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= Date: Tue, 12 May 2026 14:24:35 +0200 Subject: [PATCH 4/4] 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 Reviewed-by: Ivan T. Ivanov --- 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 7bddbebb162..f27b84a6ee4 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;