[PATCH] mmc: sdhci-brcmstb: don't log an error for missing BOOT registers
From: Karl Mehltretter
Date: Thu Oct 08 2026 - 20:32:25 EST
The BOOT register range is optional: the probe function ignores a
failure to map it and the suspend/resume code checks for NULL. It is
mapped with devm_platform_get_and_ioremap_resource(), though, which
calls dev_err_probe() when the resource does not exist. Every
non-removable host without a third reg entry therefore logs an error
at probe time and then works normally.
The binding only describes the "host" and "cfg" ranges, so this is the
case for the in-tree users. On the Raspberry Pi 5 family (BCM2712),
where the SDIO host of the Wi-Fi module is non-removable, each boot
prints:
sdhci-brcmstb 1001100000.mmc: error -EINVAL: invalid resource (null)
Look the resource up with platform_get_resource() first and map it only
when it is present. Hosts that do have the range are mapped by the same
two calls as before.
Fixes: b7e614802e3f ("mmc: sdhci-brcmstb: save and restore registers during PM")
Assisted-by: LLM
Signed-off-by: Karl Mehltretter <kmehltretter@xxxxxxxxx>
---
Tested on a Raspberry Pi 500+ with v7.3-rc4: the message is gone, the
SDIO card is detected as before and Wi-Fi works. Suspend/resume, the
only user of these registers, was not tested.
drivers/mmc/host/sdhci-brcmstb.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/mmc/host/sdhci-brcmstb.c b/drivers/mmc/host/sdhci-brcmstb.c
index 1de2f05..7c17a3c 100644
--- a/drivers/mmc/host/sdhci-brcmstb.c
+++ b/drivers/mmc/host/sdhci-brcmstb.c
@@ -491,6 +491,7 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev)
struct sdhci_brcmstb_priv *priv;
u32 actual_clock_mhz;
struct sdhci_host *host;
+ struct resource *boot_res;
struct clk *clk;
struct clk *base_clk = NULL;
int res;
@@ -534,9 +535,13 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev)
/* map non-standard BOOT registers if present */
if (host->mmc->caps & MMC_CAP_NONREMOVABLE) {
- priv->boot_regs = devm_platform_get_and_ioremap_resource(pdev, 2, NULL);
- if (IS_ERR(priv->boot_regs))
- priv->boot_regs = NULL;
+ boot_res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
+ if (boot_res) {
+ priv->boot_regs = devm_ioremap_resource(&pdev->dev,
+ boot_res);
+ if (IS_ERR(priv->boot_regs))
+ priv->boot_regs = NULL;
+ }
}
/*
base-commit: 6c377d19d4a5116d9bec5203aa3c6c11523e7898