diff mbox

mmc: tegra: Disable UHS-I modes for tegra124

Message ID 1460558156-10407-1-git-send-email-jonathanh@nvidia.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jon Hunter April 13, 2016, 2:35 p.m. UTC
Tegra124 has been randomly hanging during system suspend when entering
the Tegra LP1 low power state. The hang is caused by the tegra SDHCI
driver and linked to the UHS-I tuning sequence. Disabling the UHS-I
modes for Tegra124 prevents any hangs from occurring when entering
system suspend.

Unfortunately, the tuning sequence described in the public Tegra
documentation is incomplete and on inspection of the current tuning
sequence that has been implemented is also incomplete and may cause
problems. In the short-term it is safer to disable UHS-I modes for now
and fix later because it would be too large of a change to simply patch
now. Therefore, disable UHS-I modes for Tegra124.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
---

I previously brought up this issue in this thread [0], but there has
been no resolution and so I think that for v4.6 we need to disable this
for now. I also pointered out that there is a complete implementation
available in the v3.18 kernel used by chromeos products [1]. We do plan
to get better support for UHS-I modes for Tegra it is just a matter of
bandwidth at the moment :-(

[0] http://marc.info/?l=linux-tegra&m=145926947408663&w=2
[1] https://chromium.googlesource.com/chromiumos/third_party/kernel/+/chromeos-3.10/drivers/mmc/host/sdhci-tegra.c

 drivers/mmc/host/sdhci-tegra.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

Comments

Thierry Reding April 13, 2016, 3:24 p.m. UTC | #1
On Wed, Apr 13, 2016 at 03:35:56PM +0100, Jon Hunter wrote:
> Tegra124 has been randomly hanging during system suspend when entering
> the Tegra LP1 low power state. The hang is caused by the tegra SDHCI
> driver and linked to the UHS-I tuning sequence. Disabling the UHS-I
> modes for Tegra124 prevents any hangs from occurring when entering
> system suspend.
> 
> Unfortunately, the tuning sequence described in the public Tegra
> documentation is incomplete and on inspection of the current tuning
> sequence that has been implemented is also incomplete and may cause
> problems. In the short-term it is safer to disable UHS-I modes for now
> and fix later because it would be too large of a change to simply patch
> now. Therefore, disable UHS-I modes for Tegra124.
> 
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---
> 
> I previously brought up this issue in this thread [0], but there has
> been no resolution and so I think that for v4.6 we need to disable this
> for now. I also pointered out that there is a complete implementation
> available in the v3.18 kernel used by chromeos products [1]. We do plan
> to get better support for UHS-I modes for Tegra it is just a matter of
> bandwidth at the moment :-(
> 
> [0] http://marc.info/?l=linux-tegra&m=145926947408663&w=2
> [1] https://chromium.googlesource.com/chromiumos/third_party/kernel/+/chromeos-3.10/drivers/mmc/host/sdhci-tegra.c
> 
>  drivers/mmc/host/sdhci-tegra.c | 10 +---------
>  1 file changed, 1 insertion(+), 9 deletions(-)

Other than a couple of cases of inconsistent capitalization (tegra vs.
Tegra, the latter being correct, of course), this looks fine to me:

Acked-by: Thierry Reding <treding@nvidia.com>
Ulf Hansson April 14, 2016, 9:48 a.m. UTC | #2
On 13 April 2016 at 16:35, Jon Hunter <jonathanh@nvidia.com> wrote:
> Tegra124 has been randomly hanging during system suspend when entering
> the Tegra LP1 low power state. The hang is caused by the tegra SDHCI
> driver and linked to the UHS-I tuning sequence. Disabling the UHS-I
> modes for Tegra124 prevents any hangs from occurring when entering
> system suspend.
>
> Unfortunately, the tuning sequence described in the public Tegra
> documentation is incomplete and on inspection of the current tuning
> sequence that has been implemented is also incomplete and may cause
> problems. In the short-term it is safer to disable UHS-I modes for now
> and fix later because it would be too large of a change to simply patch
> now. Therefore, disable UHS-I modes for Tegra124.
>
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>

Thanks, applied for fixes (with minor updates to the change log
according to suggestions from Stephen)!

Kind regards
Uffe

> ---
>
> I previously brought up this issue in this thread [0], but there has
> been no resolution and so I think that for v4.6 we need to disable this
> for now. I also pointered out that there is a complete implementation
> available in the v3.18 kernel used by chromeos products [1]. We do plan
> to get better support for UHS-I modes for Tegra it is just a matter of
> bandwidth at the moment :-(
>
> [0] http://marc.info/?l=linux-tegra&m=145926947408663&w=2
> [1] https://chromium.googlesource.com/chromiumos/third_party/kernel/+/chromeos-3.10/drivers/mmc/host/sdhci-tegra.c
>
>  drivers/mmc/host/sdhci-tegra.c | 10 +---------
>  1 file changed, 1 insertion(+), 9 deletions(-)
>
> diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
> index f8c4762bb48d..bcc0de47fe7e 100644
> --- a/drivers/mmc/host/sdhci-tegra.c
> +++ b/drivers/mmc/host/sdhci-tegra.c
> @@ -382,14 +382,6 @@ static const struct sdhci_tegra_soc_data soc_data_tegra114 = {
>         .pdata = &sdhci_tegra114_pdata,
>  };
>
> -static const struct sdhci_tegra_soc_data soc_data_tegra124 = {
> -       .pdata = &sdhci_tegra114_pdata,
> -       .nvquirks = NVQUIRK_ENABLE_SDR50 |
> -                   NVQUIRK_ENABLE_DDR50 |
> -                   NVQUIRK_ENABLE_SDR104 |
> -                   NVQUIRK_HAS_PADCALIB,
> -};
> -
>  static const struct sdhci_pltfm_data sdhci_tegra210_pdata = {
>         .quirks = SDHCI_QUIRK_BROKEN_TIMEOUT_VAL |
>                   SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
> @@ -407,7 +399,7 @@ static const struct sdhci_tegra_soc_data soc_data_tegra210 = {
>
>  static const struct of_device_id sdhci_tegra_dt_match[] = {
>         { .compatible = "nvidia,tegra210-sdhci", .data = &soc_data_tegra210 },
> -       { .compatible = "nvidia,tegra124-sdhci", .data = &soc_data_tegra124 },
> +       { .compatible = "nvidia,tegra124-sdhci", .data = &soc_data_tegra114 },
>         { .compatible = "nvidia,tegra114-sdhci", .data = &soc_data_tegra114 },
>         { .compatible = "nvidia,tegra30-sdhci", .data = &soc_data_tegra30 },
>         { .compatible = "nvidia,tegra20-sdhci", .data = &soc_data_tegra20 },
> --
> 2.1.4
>
--
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/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index f8c4762bb48d..bcc0de47fe7e 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -382,14 +382,6 @@  static const struct sdhci_tegra_soc_data soc_data_tegra114 = {
 	.pdata = &sdhci_tegra114_pdata,
 };
 
-static const struct sdhci_tegra_soc_data soc_data_tegra124 = {
-	.pdata = &sdhci_tegra114_pdata,
-	.nvquirks = NVQUIRK_ENABLE_SDR50 |
-		    NVQUIRK_ENABLE_DDR50 |
-		    NVQUIRK_ENABLE_SDR104 |
-		    NVQUIRK_HAS_PADCALIB,
-};
-
 static const struct sdhci_pltfm_data sdhci_tegra210_pdata = {
 	.quirks = SDHCI_QUIRK_BROKEN_TIMEOUT_VAL |
 		  SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
@@ -407,7 +399,7 @@  static const struct sdhci_tegra_soc_data soc_data_tegra210 = {
 
 static const struct of_device_id sdhci_tegra_dt_match[] = {
 	{ .compatible = "nvidia,tegra210-sdhci", .data = &soc_data_tegra210 },
-	{ .compatible = "nvidia,tegra124-sdhci", .data = &soc_data_tegra124 },
+	{ .compatible = "nvidia,tegra124-sdhci", .data = &soc_data_tegra114 },
 	{ .compatible = "nvidia,tegra114-sdhci", .data = &soc_data_tegra114 },
 	{ .compatible = "nvidia,tegra30-sdhci", .data = &soc_data_tegra30 },
 	{ .compatible = "nvidia,tegra20-sdhci", .data = &soc_data_tegra20 },