diff mbox

mmc: tegra: Disable UHS-I modes for tegra30

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

Commit Message

Jon Hunter May 9, 2016, 3:15 p.m. UTC
Support for SD cards is not working on the Tegra30 Beaver board and on
boot the following error message is seen if an SD card is present:

 mmc0: error -110 whilst initialising SD card

In addition to this, Tegra30 is also randomly hanging during system
suspend when entering and is caused by the Tegra SDHCI driver. Similar
issues have been seen on the Tegra124 Jetson TK1 and are linked to the
UHS-I tuning sequence. Disabling the UHS-I modes for Tegra30 fixes SD
card support and prevents any hangs from occurring when entering system
suspend. Therefore, disable the UHS-I modes for Tegra30 for now until
we can correct the tuning sequence for Tegra.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
---
 drivers/mmc/host/sdhci-tegra.c | 4 ----
 1 file changed, 4 deletions(-)

Comments

Ulf Hansson May 10, 2016, 6:25 a.m. UTC | #1
On 9 May 2016 at 17:15, Jon Hunter <jonathanh@nvidia.com> wrote:
> Support for SD cards is not working on the Tegra30 Beaver board and on
> boot the following error message is seen if an SD card is present:
>
>  mmc0: error -110 whilst initialising SD card
>
> In addition to this, Tegra30 is also randomly hanging during system
> suspend when entering and is caused by the Tegra SDHCI driver. Similar
> issues have been seen on the Tegra124 Jetson TK1 and are linked to the
> UHS-I tuning sequence. Disabling the UHS-I modes for Tegra30 fixes SD
> card support and prevents any hangs from occurring when entering system
> suspend. Therefore, disable the UHS-I modes for Tegra30 for now until
> we can correct the tuning sequence for Tegra.
>
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>

Perhaps we should add a fixes/stable tag as well?

Kind regards
Uffe

> ---
>  drivers/mmc/host/sdhci-tegra.c | 4 ----
>  1 file changed, 4 deletions(-)
>
> diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
> index bcc0de47fe7e..24c33aee8e7c 100644
> --- a/drivers/mmc/host/sdhci-tegra.c
> +++ b/drivers/mmc/host/sdhci-tegra.c
> @@ -347,10 +347,6 @@ static const struct sdhci_pltfm_data sdhci_tegra30_pdata = {
>
>  static const struct sdhci_tegra_soc_data soc_data_tegra30 = {
>         .pdata = &sdhci_tegra30_pdata,
> -       .nvquirks = NVQUIRK_ENABLE_SDHCI_SPEC_300 |
> -                   NVQUIRK_ENABLE_SDR50 |
> -                   NVQUIRK_ENABLE_SDR104 |
> -                   NVQUIRK_HAS_PADCALIB,
>  };
>
>  static const struct sdhci_ops tegra114_sdhci_ops = {
> --
> 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
Lucas Stach May 10, 2016, 7:09 a.m. UTC | #2
Hi Jon,

Am Montag, den 09.05.2016, 16:15 +0100 schrieb Jon Hunter:
> Support for SD cards is not working on the Tegra30 Beaver board and
> on
> boot the following error message is seen if an SD card is present:
> 
>  mmc0: error -110 whilst initialising SD card
> 
Can you please tell me what kind of SD card you used and at which point
in the initialization it is hanging? I've tested this change on Beaver
and haven't seen any failures after I implemented the memcomppad
calibration.

> In addition to this, Tegra30 is also randomly hanging during system
> suspend when entering and is caused by the Tegra SDHCI driver. 

I'll have a look at this soonish.

> Similar
> issues have been seen on the Tegra124 Jetson TK1 and are linked to
> the
> UHS-I tuning sequence. Disabling the UHS-I modes for Tegra30 fixes SD
> card support and prevents any hangs from occurring when entering
> system
> suspend. Therefore, disable the UHS-I modes for Tegra30 for now until
> we can correct the tuning sequence for Tegra.
> 
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---
>  drivers/mmc/host/sdhci-tegra.c | 4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-
> tegra.c
> index bcc0de47fe7e..24c33aee8e7c 100644
> --- a/drivers/mmc/host/sdhci-tegra.c
> +++ b/drivers/mmc/host/sdhci-tegra.c
> @@ -347,10 +347,6 @@ static const struct sdhci_pltfm_data
> sdhci_tegra30_pdata = {
>  
>  static const struct sdhci_tegra_soc_data soc_data_tegra30 = {
>  	.pdata = &sdhci_tegra30_pdata,
> -	.nvquirks = NVQUIRK_ENABLE_SDHCI_SPEC_300 |
> -		    NVQUIRK_ENABLE_SDR50 |
> -		    NVQUIRK_ENABLE_SDR104 |
> -		    NVQUIRK_HAS_PADCALIB,
>  };
>  
>  static const struct sdhci_ops tegra114_sdhci_ops = {
--
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
Jon Hunter May 10, 2016, 11:15 a.m. UTC | #3
On 10/05/16 08:09, Lucas Stach wrote:
> Hi Jon,
> 
> Am Montag, den 09.05.2016, 16:15 +0100 schrieb Jon Hunter:
>> Support for SD cards is not working on the Tegra30 Beaver board and
>> on
>> boot the following error message is seen if an SD card is present:
>>
>>  mmc0: error -110 whilst initialising SD card
>>
> Can you please tell me what kind of SD card you used and at which point
> in the initialization it is hanging? I've tested this change on Beaver
> and haven't seen any failures after I implemented the memcomppad
> calibration.

Yes it is an SDHC 4GB I believe. The board is remote and so I have not
seen the exact card. However, here are some more details from sysfs:

root@(none):/# cat /sys/class/mmc_host/mmc0/mmc0\:aaaa/name
SS04G
root@(none):/# cat /sys/class/mmc_host/mmc0/mmc0\:aaaa/csd
400e00325b5900001d8a7f800a404000
root@(none):/# cat /sys/class/mmc_host/mmc0/mmc0\:aaaa/cid
03534453533034478029b1301800f900
root@(none):/# cat /sys/class/mmc_host/mmc0/mmc0\:aaaa/oemid
0x5344
root@(none):/# cat /sys/class/mmc_host/mmc0/mmc0\:aaaa/manfid
0x000003
 
>> In addition to this, Tegra30 is also randomly hanging during system
>> suspend when entering and is caused by the Tegra SDHCI driver. 
> 
> I'll have a look at this soonish.

Thanks. I think I have mentioned this before, but I run a loop test
for example ...

count=0; while [ $count -lt 100 ]; do rtcwake -d rtc0 -m mem -s 3; echo
Suspend iteration $count; count=`expr $count + 1`; done

Cheers
Jon
--
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
Jon Hunter May 10, 2016, 4:13 p.m. UTC | #4
On 09/05/16 16:15, Jon Hunter wrote:
> Support for SD cards is not working on the Tegra30 Beaver board and on
> boot the following error message is seen if an SD card is present:
> 
>  mmc0: error -110 whilst initialising SD card
> 
> In addition to this, Tegra30 is also randomly hanging during system
> suspend when entering and is caused by the Tegra SDHCI driver. Similar
> issues have been seen on the Tegra124 Jetson TK1 and are linked to the
> UHS-I tuning sequence. Disabling the UHS-I modes for Tegra30 fixes SD
> card support and prevents any hangs from occurring when entering system
> suspend. Therefore, disable the UHS-I modes for Tegra30 for now until
> we can correct the tuning sequence for Tegra.
> 
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---
>  drivers/mmc/host/sdhci-tegra.c | 4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
> index bcc0de47fe7e..24c33aee8e7c 100644
> --- a/drivers/mmc/host/sdhci-tegra.c
> +++ b/drivers/mmc/host/sdhci-tegra.c
> @@ -347,10 +347,6 @@ static const struct sdhci_pltfm_data sdhci_tegra30_pdata = {
>  
>  static const struct sdhci_tegra_soc_data soc_data_tegra30 = {
>  	.pdata = &sdhci_tegra30_pdata,
> -	.nvquirks = NVQUIRK_ENABLE_SDHCI_SPEC_300 |

Ugh ... looks like I may have been a bit trigger happy with sending this
patch. I should not have removed the above line. However, it seems that
if I don't then the problem with the SD not initialising persists. So
this implies that something else is going on here with this particular
SD card. Furthermore, I have seen that another tegra30-beaver is
initialising the SD card fine on kernelci.org and it seems this is
working for Lucas too.

Plus in suspend I have not seen the mmc timeout warning that I was
seeing on tegra114/124 when they were failing. That also implies a
different problem.

Stephen, for your u-boot testing, do you are set the bit in the vendor
misc register to enable version 3.0 support for sdhci on tegra30? This
is what the above quirk is doing (and has done so for a very long time).

Sorry I am usually more thorough ...

Jon



--
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
Stephen Warren May 10, 2016, 4:34 p.m. UTC | #5
On 05/10/2016 10:13 AM, Jon Hunter wrote:
>
> On 09/05/16 16:15, Jon Hunter wrote:
>> Support for SD cards is not working on the Tegra30 Beaver board and on
>> boot the following error message is seen if an SD card is present:
>>
>>   mmc0: error -110 whilst initialising SD card
>>
>> In addition to this, Tegra30 is also randomly hanging during system
>> suspend when entering and is caused by the Tegra SDHCI driver. Similar
>> issues have been seen on the Tegra124 Jetson TK1 and are linked to the
>> UHS-I tuning sequence. Disabling the UHS-I modes for Tegra30 fixes SD
>> card support and prevents any hangs from occurring when entering system
>> suspend. Therefore, disable the UHS-I modes for Tegra30 for now until
>> we can correct the tuning sequence for Tegra.
>>
>> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
>> ---
>>   drivers/mmc/host/sdhci-tegra.c | 4 ----
>>   1 file changed, 4 deletions(-)
>>
>> diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
>> index bcc0de47fe7e..24c33aee8e7c 100644
>> --- a/drivers/mmc/host/sdhci-tegra.c
>> +++ b/drivers/mmc/host/sdhci-tegra.c
>> @@ -347,10 +347,6 @@ static const struct sdhci_pltfm_data sdhci_tegra30_pdata = {
>>
>>   static const struct sdhci_tegra_soc_data soc_data_tegra30 = {
>>   	.pdata = &sdhci_tegra30_pdata,
>> -	.nvquirks = NVQUIRK_ENABLE_SDHCI_SPEC_300 |
>
> Ugh ... looks like I may have been a bit trigger happy with sending this
> patch. I should not have removed the above line. However, it seems that
> if I don't then the problem with the SD not initialising persists. So
> this implies that something else is going on here with this particular
> SD card. Furthermore, I have seen that another tegra30-beaver is
> initialising the SD card fine on kernelci.org and it seems this is
> working for Lucas too.
>
> Plus in suspend I have not seen the mmc timeout warning that I was
> seeing on tegra114/124 when they were failing. That also implies a
> different problem.
>
> Stephen, for your u-boot testing, do you are set the bit in the vendor
> misc register to enable version 3.0 support for sdhci on tegra30? This
> is what the above quirk is doing (and has done so for a very long time).

I don't see anything in the U-Boot driver that is equivalent to the 
kernel's NVQUIRK_ENABLE_SDHCI_SPEC_300. I assume that means the 
controller advertises an early spec version when in U-Boot, which simply 
means U-Boot doesn't know to take advantage of any faster transfer modes 
enabled by later specification versions, but I'm not entirely sure what 
effect the following kernel code has on the HW:

> 	/* Erratum: Enable SDHCI spec v3.00 support */
> 	if (soc_data->nvquirks & NVQUIRK_ENABLE_SDHCI_SPEC_300)
> 		misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_SDHCI_SPEC_300;

Perhaps the kernel driver should pulse the controller's CAR reset signal 
in probe() to ensure that the HW is in a known state?
--
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
Jon Hunter May 10, 2016, 5:16 p.m. UTC | #6
On 10/05/16 17:34, Stephen Warren wrote:
> On 05/10/2016 10:13 AM, Jon Hunter wrote:

[snip]

>> Stephen, for your u-boot testing, do you are set the bit in the vendor
>> misc register to enable version 3.0 support for sdhci on tegra30? This
>> is what the above quirk is doing (and has done so for a very long time).
> 
> I don't see anything in the U-Boot driver that is equivalent to the
> kernel's NVQUIRK_ENABLE_SDHCI_SPEC_300. I assume that means the
> controller advertises an early spec version when in U-Boot, which simply
> means U-Boot doesn't know to take advantage of any faster transfer modes
> enabled by later specification versions, but I'm not entirely sure what
> effect the following kernel code has on the HW:
> 
>>     /* Erratum: Enable SDHCI spec v3.00 support */
>>     if (soc_data->nvquirks & NVQUIRK_ENABLE_SDHCI_SPEC_300)
>>         misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_SDHCI_SPEC_300;

Do you see it touch the SDHCI_TEGRA_VENDOR_MISC_CTRL register?

The TRM states ...

"SDMMC_SPARE0[4] : When set, SD3.0 support is advertised in
SDMMC_SLOT_INTERRUPT_STATUS_0_SPECIFICATION_VERSION_NUMBER Otherwise,
only SD2.0 support is advertised"

So I *believe* this means that the sdhci version will now appear as 3.0
and so the host->version == SDHCI_SPEC_300. There are many places in the
sdhci driver where it is checking ...

 if (host->version >= SDHCI_SPEC_300)
	 ...

> Perhaps the kernel driver should pulse the controller's CAR reset signal
> in probe() to ensure that the HW is in a known state?

I will take a look.

Jon
--
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
Stephen Warren May 10, 2016, 5:49 p.m. UTC | #7
On 05/10/2016 11:16 AM, Jon Hunter wrote:
>
> On 10/05/16 17:34, Stephen Warren wrote:
>> On 05/10/2016 10:13 AM, Jon Hunter wrote:
>
> [snip]
>
>>> Stephen, for your u-boot testing, do you are set the bit in the vendor
>>> misc register to enable version 3.0 support for sdhci on tegra30? This
>>> is what the above quirk is doing (and has done so for a very long time).
>>
>> I don't see anything in the U-Boot driver that is equivalent to the
>> kernel's NVQUIRK_ENABLE_SDHCI_SPEC_300. I assume that means the
>> controller advertises an early spec version when in U-Boot, which simply
>> means U-Boot doesn't know to take advantage of any faster transfer modes
>> enabled by later specification versions, but I'm not entirely sure what
>> effect the following kernel code has on the HW:
>>
>>>      /* Erratum: Enable SDHCI spec v3.00 support */
>>>      if (soc_data->nvquirks & NVQUIRK_ENABLE_SDHCI_SPEC_300)
>>>          misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_SDHCI_SPEC_300;
>
> Do you see it touch the SDHCI_TEGRA_VENDOR_MISC_CTRL register?

Not at all. For reference, the register is defined in 
arch/arm/include/asm/arch-tegra/tegra_mmc.h as venmiscctl, and that 
symbol isn't referenced anywhere.
--
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 bcc0de47fe7e..24c33aee8e7c 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -347,10 +347,6 @@  static const struct sdhci_pltfm_data sdhci_tegra30_pdata = {
 
 static const struct sdhci_tegra_soc_data soc_data_tegra30 = {
 	.pdata = &sdhci_tegra30_pdata,
-	.nvquirks = NVQUIRK_ENABLE_SDHCI_SPEC_300 |
-		    NVQUIRK_ENABLE_SDR50 |
-		    NVQUIRK_ENABLE_SDR104 |
-		    NVQUIRK_HAS_PADCALIB,
 };
 
 static const struct sdhci_ops tegra114_sdhci_ops = {