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
Solved! Go to Solution.
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:
So I think maybe customer's eMMC doesn't support HS400 mode, supports HS200 mode.
======================
Best regards,
Jimmy
Which version of BSP are you using?
We use 5.10.52_2.1.0.
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:
So I think maybe customer's eMMC doesn't support HS400 mode, supports HS200 mode.
======================
Best regards,
Jimmy
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
There is also another issue with emmc version >= 5.0 which is already mentoined here:
https://community.nxp.com/t5/i-MX-Processors/Imx8mp-CQE-cannot-be-used/m-p/1379345#M183794
and here: