[PATCH] mmc: sdhci-brcmstb: don't log an error for missing BOOT registers
Karl Mehltretter
kmehltretter at gmail.com
Thu Oct 8 17:32:01 PDT 2026
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 at gmail.com>
---
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
More information about the linux-arm-kernel
mailing list