sdhci-esdhc-imx: SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

sdhci-esdhc-imx: SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400

Jump to solution
1,552 Views
mb1
Contributor III

Hey everyone.

We have a eMMC on a SoM with i.MX8M Mini processor.

Flashing the emmc via uuu and reading/writing data from u-boot works fine. Data is available.

Linux does not come up since it's unable to read the partition table, which results in being unable to mount the rootfs.

We figured out that adding 'sdhci.debug_quirks2=0x00000008' to bootargs makes Linux boot and emmc work fine. The driver's original quirks2 are '0x00000808', so the one bit that makes the difference is named (driver source):

SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400

What does this bit say? Any ideas on this? 

 

Regards,

Markus

Labels (1)
0 Kudos
1 Solution
1,503 Views
jimmychan
NXP TechSupport
NXP TechSupport

Hello,

 

I got the reply from the expert:

======================

Checking the code, if customer changes sdhci.debug_quirks2 from 0x00000808 to 0x00000008, it will not select SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 as they said. About this bit details, one can see this commit "e9fb05d5bca:  mmc: sdhci: Add HS400 support to SDHCI driver".

I add some print infos, in drivers/mmc/core/mmc.c mmc_select_card_type() function, avail_type variable changed from 0b001101000011 (343) to 0b00100011(23). Also in mmc_select_timing() function, it will call mmc_select_hs200 instead of mmc_select_hs400es. HS400 and HS200 means different bus speed modes for eMMC, which could be found in eMMC spec:

jimmychan_0-1640853479711.png

So I think maybe customer's eMMC doesn't support HS400 mode, supports HS200 mode.

 

======================

 

Best regards,

Jimmy

View solution in original post

0 Kudos
5 Replies
1,531 Views
jimmychan
NXP TechSupport
NXP TechSupport

Which version of BSP are you using?

0 Kudos
1,526 Views
mb1
Contributor III

We use 5.10.52_2.1.0.

0 Kudos
1,504 Views
jimmychan
NXP TechSupport
NXP TechSupport

Hello,

 

I got the reply from the expert:

======================

Checking the code, if customer changes sdhci.debug_quirks2 from 0x00000808 to 0x00000008, it will not select SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 as they said. About this bit details, one can see this commit "e9fb05d5bca:  mmc: sdhci: Add HS400 support to SDHCI driver".

I add some print infos, in drivers/mmc/core/mmc.c mmc_select_card_type() function, avail_type variable changed from 0b001101000011 (343) to 0b00100011(23). Also in mmc_select_timing() function, it will call mmc_select_hs200 instead of mmc_select_hs400es. HS400 and HS200 means different bus speed modes for eMMC, which could be found in eMMC spec:

jimmychan_0-1640853479711.png

So I think maybe customer's eMMC doesn't support HS400 mode, supports HS200 mode.

 

======================

 

Best regards,

Jimmy

0 Kudos
1,485 Views
mb1
Contributor III

Hi.

Thanks for your reply!

The eMMC does support HS400. The problem in our case was, that the 100 and 200 mhz pinctrl in devicetree were missing the strobe pin...

 

Regards

0 Kudos
1,548 Views
mb1
Contributor III
0 Kudos