drivers/mmc/host/dw_mmc.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)
some vendor not enable biu_clk , disable it will panic
Signed-off-by: ping.gao <ping.gao@samsung.com>
---
drivers/mmc/host/dw_mmc.c | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index c5db92bbb094..e737333a0727 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -3633,9 +3633,15 @@ int dw_mci_runtime_resume(struct device *dev)
if (host->slot &&
(mmc_host_can_gpio_cd(host->slot->mmc) ||
!mmc_card_is_removable(host->slot->mmc))) {
- ret = clk_prepare_enable(host->biu_clk);
- if (ret)
- return ret;
+ if (IS_ERR(host->biu_clk)) {
+ dev_dbg(host->dev, "biu clock not available\n");
+ } else {
+ ret = clk_prepare_enable(host->biu_clk);
+ if (ret) {
+ dev_err(host->dev, "failed to enable biu clock\n");
+ goto err;
+ }
+ }
}
ret = clk_prepare_enable(host->ciu_clk);
@@ -3686,9 +3692,12 @@ int dw_mci_runtime_resume(struct device *dev)
err:
if (host->slot &&
(mmc_host_can_gpio_cd(host->slot->mmc) ||
- !mmc_card_is_removable(host->slot->mmc)))
- clk_disable_unprepare(host->biu_clk);
-
+ !mmc_card_is_removable(host->slot->mmc))) {
+ if (IS_ERR(host->biu_clk))
+ dev_dbg(host->dev, "biu clock not available\n");
+ else
+ clk_disable_unprepare(host->biu_clk);
+ }
return ret;
}
EXPORT_SYMBOL(dw_mci_runtime_resume);
--
2.50.1
在 2025/12/18 星期四 14:50, ping.gao 写道:
> some vendor not enable biu_clk , disable it will panic
>
Sorry, I can't follow the below changes.
Isn't we disable biu_clk in dw_mci_runtime_suspend(()?
How could that work because biu_clk is used for register
access, FIFO access, etc.
> Signed-off-by: ping.gao <ping.gao@samsung.com>
> ---
> drivers/mmc/host/dw_mmc.c | 21 +++++++++++++++------
> 1 file changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index c5db92bbb094..e737333a0727 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -3633,9 +3633,15 @@ int dw_mci_runtime_resume(struct device *dev)
> if (host->slot &&
> (mmc_host_can_gpio_cd(host->slot->mmc) ||
> !mmc_card_is_removable(host->slot->mmc))) {
> - ret = clk_prepare_enable(host->biu_clk);
> - if (ret)
> - return ret;
> + if (IS_ERR(host->biu_clk)) {
> + dev_dbg(host->dev, "biu clock not available\n");
> + } else {
> + ret = clk_prepare_enable(host->biu_clk);
> + if (ret) {
> + dev_err(host->dev, "failed to enable biu clock\n");
> + goto err;
> + }
> + }
> }
>
> ret = clk_prepare_enable(host->ciu_clk);
> @@ -3686,9 +3692,12 @@ int dw_mci_runtime_resume(struct device *dev)
> err:
> if (host->slot &&
> (mmc_host_can_gpio_cd(host->slot->mmc) ||
> - !mmc_card_is_removable(host->slot->mmc)))
> - clk_disable_unprepare(host->biu_clk);
> -
> + !mmc_card_is_removable(host->slot->mmc))) {
> + if (IS_ERR(host->biu_clk))
> + dev_dbg(host->dev, "biu clock not available\n");
> + else
> + clk_disable_unprepare(host->biu_clk);
> + }
> return ret;
> }
> EXPORT_SYMBOL(dw_mci_runtime_resume);
© 2016 - 2026 Red Hat, Inc.