diff mbox

[v6,2/2] mmc: dw_mmc: force setup bus if active slots exist

Message ID 1484616176-1005-2-git-send-email-shawn.lin@rock-chips.com (mailing list archive)
State New, archived
Headers show

Commit Message

Shawn Lin Jan. 17, 2017, 1:22 a.m. UTC
From: Ziyuan Xu <xzy.xu@rock-chips.com>

It's necessary to setup bus if any slots are present.
- update clock after ctrl reset
- if the host has genpd node, we can guarantee the clock is
  available before starting request. Otherwies, the clock register
  is reset once power off the pd, and host can't output the active
  clock during communication.

Fixes: e9ed8835e990 ("mmc: dw_mmc: add runtime PM callback")
Fixes: df9bcc2bc0a1 ("mmc: dw_mmc: add missing codes for runtime resume")
cc: <stable@vger.kernel.org>
Reported-by: Randy Li <randy.li@rock-chips.com>
Reported-by: S. Gilles <sgilles@math.umd.edu>
Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>

---

Changes in v6:
- reuse force_clkinit

Changes in v5:
- rebase in order to skip spamming log

Changes in v4:
- update commit message
- fix SD host rpm resume can't work

Changes in v3:
- only reset host with active slot.

Changes in v2:
- update the commit message
- use dw_mci_reset instead of dw_mci_ctrl_reset

 drivers/mmc/host/dw_mmc.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

Comments

Jaehoon Chung Jan. 20, 2017, 8:19 a.m. UTC | #1
Hi Shawn,

On 01/17/2017 10:22 AM, Shawn Lin wrote:
> From: Ziyuan Xu <xzy.xu@rock-chips.com>
> 
> It's necessary to setup bus if any slots are present.
> - update clock after ctrl reset
> - if the host has genpd node, we can guarantee the clock is
>   available before starting request. Otherwies, the clock register
>   is reset once power off the pd, and host can't output the active
>   clock during communication.
> 
> Fixes: e9ed8835e990 ("mmc: dw_mmc: add runtime PM callback")
> Fixes: df9bcc2bc0a1 ("mmc: dw_mmc: add missing codes for runtime resume")
> cc: <stable@vger.kernel.org>
> Reported-by: Randy Li <randy.li@rock-chips.com>
> Reported-by: S. Gilles <sgilles@math.umd.edu>
> Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>

Applied on my fixes branch. Thanks!

Best Regards,
Jaehoon Chung

> 
> ---
> 
> Changes in v6:
> - reuse force_clkinit
> 
> Changes in v5:
> - rebase in order to skip spamming log
> 
> Changes in v4:
> - update commit message
> - fix SD host rpm resume can't work
> 
> Changes in v3:
> - only reset host with active slot.
> 
> Changes in v2:
> - update the commit message
> - use dw_mci_reset instead of dw_mci_ctrl_reset
> 
>  drivers/mmc/host/dw_mmc.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index 972c779..a9ac0b4 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -3366,10 +3366,11 @@ int dw_mci_runtime_resume(struct device *dev)
>  
>  		if (!slot)
>  			continue;
> -		if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) {
> +		if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER)
>  			dw_mci_set_ios(slot->mmc, &slot->mmc->ios);
> -			dw_mci_setup_bus(slot, true);
> -		}
> +
> +		/* Force setup bus to guarantee available clock output */
> +		dw_mci_setup_bus(slot, true);
>  	}
>  
>  	/* Now that slots are all setup, we can enable card detect */
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 972c779..a9ac0b4 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -3366,10 +3366,11 @@  int dw_mci_runtime_resume(struct device *dev)
 
 		if (!slot)
 			continue;
-		if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) {
+		if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER)
 			dw_mci_set_ios(slot->mmc, &slot->mmc->ios);
-			dw_mci_setup_bus(slot, true);
-		}
+
+		/* Force setup bus to guarantee available clock output */
+		dw_mci_setup_bus(slot, true);
 	}
 
 	/* Now that slots are all setup, we can enable card detect */