* [PATCH] mmc: sdhci-brcmstb: don't log an error for missing BOOT registers
@ 2026-10-09 0:32 Karl Mehltretter
2026-10-09 7:11 ` Gregor Herburger
2026-10-09 9:40 ` Markus Elfring
0 siblings, 2 replies; 3+ messages in thread
From: Karl Mehltretter @ 2026-10-09 0:32 UTC (permalink / raw)
To: Kamal Dasu, Al Cooper, Adrian Hunter, Ulf Hansson
Cc: Karl Mehltretter, Florian Fainelli,
Broadcom internal kernel review list, linux-mmc, linux-arm-kernel,
linux-kernel
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@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
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] mmc: sdhci-brcmstb: don't log an error for missing BOOT registers
2026-10-09 0:32 [PATCH] mmc: sdhci-brcmstb: don't log an error for missing BOOT registers Karl Mehltretter
@ 2026-10-09 7:11 ` Gregor Herburger
2026-10-09 9:40 ` Markus Elfring
1 sibling, 0 replies; 3+ messages in thread
From: Gregor Herburger @ 2026-10-09 7:11 UTC (permalink / raw)
To: Karl Mehltretter
Cc: Kamal Dasu, Al Cooper, Adrian Hunter, Ulf Hansson,
Florian Fainelli, Broadcom internal kernel review list, linux-mmc,
linux-arm-kernel, linux-kernel
Hi,
On Fri, Oct 09, 2026 at 02:32:01AM +0200, Karl Mehltretter wrote:
> 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@gmail.com>
Reviewed-by: Gregor Herburger <gregor.herburger@linutronix.de>
> ---
> 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.
I have seen this error a few times but newer looked into it. Thanks for the fix.
>
> 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
--
Gregor Herburger
Linutronix GmbH | Bahnhofstrasse 3 | D-88690 Uhldingen-Mühlhofen
Phone: +49 7556 25 999 35; Fax.: +49 7556 25 999 99
Hinweise zum Datenschutz finden Sie hier (Informations on data privacy
can be found here): https://linutronix.de/legal/data-protection.php
Linutronix GmbH | Firmensitz (Registered Office): Uhldingen-Mühlhofen |
Registergericht (Registration Court): Amtsgericht Freiburg i.Br., HRB700
806 | Geschäftsführer (Managing Directors): Dr. Wilfried Wessner,
Katharina Kopp, Alexander Gieringer
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] mmc: sdhci-brcmstb: don't log an error for missing BOOT registers
2026-10-09 0:32 [PATCH] mmc: sdhci-brcmstb: don't log an error for missing BOOT registers Karl Mehltretter
2026-10-09 7:11 ` Gregor Herburger
@ 2026-10-09 9:40 ` Markus Elfring
1 sibling, 0 replies; 3+ messages in thread
From: Markus Elfring @ 2026-10-09 9:40 UTC (permalink / raw)
To: Karl Mehltretter, linux-mmc, linux-arm-kernel,
bcm-kernel-feedback-list, Adrian Hunter, Al Cooper, Kamal Dasu,
Ulf Hansson
Cc: LKML, Florian Fainelli, Gregor Herburger
…
> +++ 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;
…
I suggest to reduce the scope for this local variable because you would like to use it only
within a selected if branch.
https://elixir.bootlin.com/linux/v7.3-rc6/source/drivers/mmc/host/sdhci-brcmstb.c#L535-L540
Regards,
Markus
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-09 9:41 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-09 0:32 [PATCH] mmc: sdhci-brcmstb: don't log an error for missing BOOT registers Karl Mehltretter
2026-10-09 7:11 ` Gregor Herburger
2026-10-09 9:40 ` Markus Elfring
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox