Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1534618 > unrolled thread

[PATCH v3 1/2] mmc: sdhci: continue normal tuning if unsupported by platform tuning

Started byMasahiro Yamada <yamada.masahiro@socionext.com>
First post2016-12-02 03:30 +0100
Last post2016-12-02 15:30 +0100
Articles 2 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH v3 1/2] mmc: sdhci: continue normal tuning if unsupported by platform tuning Masahiro Yamada <yamada.masahiro@socionext.com> - 2016-12-02 03:30 +0100
    Re: [PATCH v3 1/2] mmc: sdhci: continue normal tuning if unsupported  by platform tuning Adrian Hunter <adrian.hunter@intel.com> - 2016-12-02 15:30 +0100

#1534618 — [PATCH v3 1/2] mmc: sdhci: continue normal tuning if unsupported by platform tuning

FromMasahiro Yamada <yamada.masahiro@socionext.com>
Date2016-12-02 03:30 +0100
Subject[PATCH v3 1/2] mmc: sdhci: continue normal tuning if unsupported by platform tuning
Message-ID<sJLLP-5MM-7@gated-at.bofh.it>
Some SDHCI-compat controllers support not only SD, but also eMMC,
but they use different commands for tuning: CMD19 for SD, CMD21 for
eMMC.

Due to the difference of the underlying mechanism, some controllers
(at least, the Cadence IP is the case) provide their own registers
for the eMMC tuning.

This commit will be useful when we want to use platform-specific
tuning (to support eMMC HS200), but still let it reuse the code
provided by sdhci_execute_tuning() for SD timing.

If sdhci_ops::platform_execute_tuning receives a timing it does not
take care of, it can return -ENOTSUPP.  Then, it will fall back to
the SDHCI standard tuning.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---

I want to use this in the next commit.

The Cadence IP supports eMMC as well as SD.

The tuning for SD is pretty simple; just set the "Execute Tuning" bit
of the HOST_CONTROL2 register.  So, I can re-use the
sdhci_execute_tuning().

On the other hand, Cadence provides its own way for eMMC HS200 tuning;
I need to touch some registers that are specific to Cadence's design.


Changes in v3: None
Changes in v2: None

 drivers/mmc/host/sdhci.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 42ef3eb..cdce489 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2004,7 +2004,9 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
 	if (host->ops->platform_execute_tuning) {
 		spin_unlock_irqrestore(&host->lock, flags);
 		err = host->ops->platform_execute_tuning(host, opcode);
-		return err;
+		if (err != -ENOTSUPP)
+			return err;
+		spin_lock_irqsave(&host->lock, flags);
 	}
 
 	ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
-- 
2.7.4

[toc] | [next] | [standalone]


#1534980 — Re: [PATCH v3 1/2] mmc: sdhci: continue normal tuning if unsupported by platform tuning

FromAdrian Hunter <adrian.hunter@intel.com>
Date2016-12-02 15:30 +0100
SubjectRe: [PATCH v3 1/2] mmc: sdhci: continue normal tuning if unsupported by platform tuning
Message-ID<sJX0C-4ZC-21@gated-at.bofh.it>
In reply to#1534618
On 02/12/16 04:21, Masahiro Yamada wrote:
> Some SDHCI-compat controllers support not only SD, but also eMMC,
> but they use different commands for tuning: CMD19 for SD, CMD21 for
> eMMC.
> 
> Due to the difference of the underlying mechanism, some controllers
> (at least, the Cadence IP is the case) provide their own registers
> for the eMMC tuning.
> 
> This commit will be useful when we want to use platform-specific
> tuning (to support eMMC HS200), but still let it reuse the code
> provided by sdhci_execute_tuning() for SD timing.
> 
> If sdhci_ops::platform_execute_tuning receives a timing it does not
> take care of, it can return -ENOTSUPP.  Then, it will fall back to
> the SDHCI standard tuning.
> 
> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> ---
> 
> I want to use this in the next commit.
> 
> The Cadence IP supports eMMC as well as SD.
> 
> The tuning for SD is pretty simple; just set the "Execute Tuning" bit
> of the HOST_CONTROL2 register.  So, I can re-use the
> sdhci_execute_tuning().
> 
> On the other hand, Cadence provides its own way for eMMC HS200 tuning;
> I need to touch some registers that are specific to Cadence's design.
> 
> 
> Changes in v3: None
> Changes in v2: None
> 
>  drivers/mmc/host/sdhci.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index 42ef3eb..cdce489 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -2004,7 +2004,9 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
>  	if (host->ops->platform_execute_tuning) {
>  		spin_unlock_irqrestore(&host->lock, flags);
>  		err = host->ops->platform_execute_tuning(host, opcode);
> -		return err;
> +		if (err != -ENOTSUPP)
> +			return err;
> +		spin_lock_irqsave(&host->lock, flags);

platform_execute_tuning() should not exist.  You could export
sdhci_execute_tuning() and then provide your ->execute_tuning() (e.g.
host->mmc_host_ops.execute_tuning = sdhci_cdns_execute_tuning) which can
call sdhci_execute_tuning() if it needs to.


>  	}
>  
>  	ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
> 

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web