IMX8MP SDIO DDR50 clock issue

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

IMX8MP SDIO DDR50 clock issue

74件の閲覧回数
vishal088
Contributor I

Hello

We recently applied the following NXP fix from kernel v7.2-rc4.

58c08eea91572df62d71731f1d1180a0dc8e3a6f
mmc: sdhci-esdhc-imx: fix esdhc_change_pinstate() to allow default state restore

Before this fix, esdhc_change_pinstate() required all pin control state named default, state_100mhz and state_200mhz to be present in device tree before applying any timing-specific pin control state. Therefore, if any pin control was not defined in the USDHC device-tree node, the driver did not apply state_100mhz, even when the SDIO device switched to DDR50 timing.
With the fix, the driver validates and applies only the pin control state required for the selected timing mode. Therefore, state_100mhz is now correctly applied for SDR50 and DDR50 modes.

After applying this fix, we observed an issue with the SD2 clock-pad configuration in state_100mhz.

SDIO device (in DDR50 mode) does not work with:

MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x194

However, SDIO device (in DDR50 mode) works with:

MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x184
MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x192
MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x196

The 0x184 setting differs from 0x194 only in slew rate. The other working settings use different drive-strength values.

We understand this behavior may be related to signal integrity. However, the result is not straightforward: DDR50 fails with 0x194, but works both with a slower slew rate (0x184) and with a stronger drive setting (0x196).

In addition, SDR50 works correctly with 0x194. The issue is observed only in DDR50 mode.

Could you please advise whether there are other i.MX8MP USDHC/SDIO configuration requirements or known limitations that we should consider? We would also appreciate any recommended debugging steps.

Regards
Vishal

ラベル(2)
0 件の賞賛
返信
4 返答(返信)

40件の閲覧回数
vishal088
Contributor I

Hi @Zhiming_Liu 

for state_100mhz SD2_DATA<X> is 0x194.

Regards
Vishal 


 

0 件の賞賛
返信

20件の閲覧回数
Zhiming_Liu
NXP TechSupport
NXP TechSupport

Hi @vishal088 

 

If you configure DATA and CMD to 0x1D4, then use set CLK to 0x194. Will the DDR50 fail again?

Can you please share the full usdhc dts node you are using? In addition, the SW team would like to know how you fixed usdhc to DDR50 mode.

 



Best Regards,
Zhiming

0 件の賞賛
返信

3件の閲覧回数
vishal088
Contributor I
Hi @Zhiming_Liu 

Sry i typed wrong earlier. SD2_DATAx and SD2_CMD is 0x1d4 not 0x194 in my device tree for state_100mhz.
 
&usdhc2 {
           pinctrl-names = "default", "state_100mhz";
           pinctrl-0 = <&pinctrl_usdhc2>;
           pinctrl-1 = <&pinctrl_usdhc2_100mhz>;
           bus-width = <4>;
           non-removable;
           cap-power-off-card;
           vmmc-supply = <&reg_wifi_ena>;
           status = "okay";
};
 
pinctrl_usdhc2: usdhc2_grp {
           fsl,pins = <
                        MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK                 0x190
                        MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD             0x1D0
                        MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0       0x1D0
                        MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1         0x1D0
                        MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2       0x1D0
                        MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3       0x1D0
           >;
};
 
pinctrl_usdhc2_100mhz: usdhc2_100mhz-grp {
           fsl,pins = <
                        MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK                0x194
                        MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD            0x1d4
                        MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0      0x1d4
                        MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1        0x1d4
                        MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2      0x1d4
                        MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3      0x1d4
          >;
};

As we are not defining the state_200mhz pinctrl, in this function 
esdhc_readl_le, driver(sdhci-esdhc-imx.c) remove the support for SDR104 and HS400 for host and keep the support for DDR50 and SDR50. 

---- code
if (IS_ERR_OR_NULL(imx_data->pins_100mhz))
val &= ~(SDHCI_SUPPORT_SDR50 | SDHCI_SUPPORT_DDR50);
if (IS_ERR_OR_NULL(imx_data->pins_200mhz))
val &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_HS400);

and during the sdio attach phase it set the timing to DDR50 after negotiation with card about its capabilities. 

same is verfied with "cat /sys/kernel/debug/mmc1/ios"
clock: 50000000 Hz
actual clock: 50000000 Hz
vdd: 21 (3.3 ~ 3.4 V)
bus mode: 2 (push-pull)
chip select: 0 (don't care)
power mode: 2 (on)
bus width: 2 (4 bits)
timing spec: 7 (sd uhs DDR50)
signal voltage: 1 (1.80 V)
driver type: 0 (driver type B)

Note: we are using kernel 6.12.49 and we noticed the issue in 
"esdhc_change_pinstate" and after checking we found a fix from nxp on kernel 7.2-rc4. And after applying, it start using state_100mhz pinctrl state correctly but it break sdio device communication completely. 
Later after playing with clock config as mentioned in earlier msg we narrowed that clk as 0x194 is the breaking config. 

Regards
Vishal


0 件の賞賛
返信

47件の閲覧回数
Zhiming_Liu
NXP TechSupport
NXP TechSupport

Hi @vishal088 

Can you also share the SD2_DATA<X> setting? 

Best Regards,
Zhiming

0 件の賞賛
返信
%3CLINGO-SUB%20id%3D%22lingo-sub-2409773%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EIMX8MP%20SDIO%20DDR50%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AE%E5%95%8F%E9%A1%8C%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2409773%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%3C%2FP%3E%3CP%3E%E5%85%88%E6%97%A5%E3%80%81%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%ABv7.2-rc4%E3%81%8B%E3%82%89%E4%BB%A5%E4%B8%8B%E3%81%AENXP%E4%BF%AE%E6%AD%A3%E3%82%92%E9%81%A9%E7%94%A8%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%3CP%3E58c08eea91572df62d71731f1d1180a0dc8e3a6f%3CBR%20%2F%3E%20mmc%3A%20sdhci-esdhc-imx%3A%20esdhc_change_pinstate()%20%E3%82%92%E4%BF%AE%E6%AD%A3%E3%81%97%E3%80%81%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E7%8A%B6%E6%85%8B%E3%81%B8%E3%81%AE%E5%BE%A9%E5%85%83%E3%82%92%E5%8F%AF%E8%83%BD%E3%81%AB%E3%81%99%E3%82%8B%3C%2FP%3E%3CP%3E%E3%81%93%E3%81%AE%E4%BF%AE%E6%AD%A3%E5%89%8D%E3%81%AF%E3%80%81esdhc_change_pinstate()%20%E3%81%AF%E3%80%81%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E5%9B%BA%E6%9C%89%E3%81%AE%E3%83%94%E3%83%B3%E5%88%B6%E5%BE%A1%E7%8A%B6%E6%85%8B%E3%82%92%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B%E5%89%8D%E3%81%AB%E3%80%81default%E3%80%81state_100mhz%E3%80%81state_200mhz%20%E3%81%A8%E3%81%84%E3%81%86%E5%90%8D%E5%89%8D%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%94%E3%83%B3%E5%88%B6%E5%BE%A1%E7%8A%B6%E6%85%8B%E3%81%8C%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%83%84%E3%83%AA%E3%83%BC%E3%81%AB%E5%AD%98%E5%9C%A8%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E8%A6%81%E6%B1%82%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%81%97%E3%81%9F%E3%81%8C%E3%81%A3%E3%81%A6%E3%80%81USDHC%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%83%84%E3%83%AA%E3%83%BC%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AB%E3%83%94%E3%83%B3%E5%88%B6%E5%BE%A1%E3%81%8C%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E3%80%81SDIO%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%8CDDR50%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AB%E5%88%87%E3%82%8A%E6%9B%BF%E3%82%8F%E3%81%A3%E3%81%A6%E3%82%82%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%81%AFstate_100mhz%E9%81%A9%E7%94%A8%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%3CBR%20%2F%3E%E4%BF%AE%E6%AD%A3%E3%81%AB%E3%82%88%E3%82%8A%E3%80%81%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%81%AF%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%94%E3%83%B3%E5%88%B6%E5%BE%A1%E7%8A%B6%E6%85%8B%E3%81%AE%E3%81%BF%E3%82%92%E6%A4%9C%E8%A8%BC%E3%81%97%E9%81%A9%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%97%E3%81%9F%E3%81%8C%E3%81%A3%E3%81%A6%E3%80%81state_100mhz%E3%81%AFSDR50%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A8DDR50%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AB%E6%AD%A3%E3%81%97%E3%81%8F%E9%81%A9%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%3CP%3E%E3%81%93%E3%81%AE%E4%BF%AE%E6%AD%A3%E3%82%92%E9%81%A9%E7%94%A8%E3%81%97%E3%81%9F%E5%BE%8C%E3%80%81state_100mhz%20%E3%81%AE%20SD2%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%83%91%E3%83%83%E3%83%89%E6%A7%8B%E6%88%90%E3%81%AB%E5%95%8F%E9%A1%8C%E3%81%8C%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E7%A2%BA%E8%AA%8D%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%3CP%3ESDIO%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%EF%BC%88DDR50%E3%83%A2%E3%83%BC%E3%83%89%EF%BC%89%E3%81%AF%E3%80%81%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%A7%E3%81%AF%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3C%2FP%3E%3CP%3EMX8MP_IOMUXC_SD2_CLK__USDHC2_CLK%200x194%3C%2FP%3E%3CP%3E%E3%81%9F%E3%81%A0%E3%81%97%E3%80%81SDIO%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%EF%BC%88DDR50%E3%83%A2%E3%83%BC%E3%83%89%EF%BC%89%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%A8%E4%BA%92%E6%8F%9B%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3EMX8MP_IOMUXC_SD2_CLK__USDHC2_CLK%200x184%3CBR%20%2F%3E%20MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK%200x192%3CBR%20%2F%3E%20MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK%200x196%3C%2FP%3E%3CP%3E0x184%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AF%E3%80%810x194%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%A8%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E3%81%BF%E3%81%8C%E7%95%B0%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E5%8B%95%E4%BD%9C%E8%A8%AD%E5%AE%9A%E3%81%A7%E3%81%AF%E3%80%81%E7%95%B0%E3%81%AA%E3%82%8B%E9%A7%86%E5%8B%95%E5%BC%B7%E5%BA%A6%E5%80%A4%E3%81%8C%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E3%81%93%E3%81%AE%E6%8C%99%E5%8B%95%E3%81%AF%E4%BF%A1%E5%8F%B7%E3%81%AE%E5%AE%8C%E5%85%A8%E6%80%A7%E3%81%AB%E9%96%A2%E9%80%A3%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8B%E3%81%A8%E8%80%83%E3%81%88%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%81%97%E3%81%8B%E3%81%97%E3%80%81%E7%B5%90%E6%9E%9C%E3%81%AF%E5%8D%98%E7%B4%94%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82DDR50%E3%81%AF0x194%E3%81%A7%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E3%82%88%E3%82%8A%E9%81%85%E3%81%84%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%AC%E3%83%BC%E3%83%88%EF%BC%880x184%EF%BC%89%E3%81%A8%E3%82%88%E3%82%8A%E5%BC%B7%E5%8A%9B%E3%81%AA%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E8%A8%AD%E5%AE%9A%EF%BC%880x196%EF%BC%89%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E3%81%95%E3%82%89%E3%81%AB%E3%80%81SDR50%E3%81%AF0x194%E3%81%A7%E3%82%82%E6%AD%A3%E3%81%97%E3%81%8F%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E5%95%8F%E9%A1%8C%E3%81%AFDDR50%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E3%81%AE%E3%81%BF%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E4%BB%96%E3%81%ABi.MX8MP%20usDHC%2FSDIO%E3%81%AE%E8%A8%AD%E5%AE%9A%E8%A6%81%E4%BB%B6%E3%82%84%E6%97%A2%E7%9F%A5%E3%81%AE%E5%88%B6%E9%99%90%E3%81%8C%E3%81%82%E3%82%8C%E3%81%B0%E3%80%81%E8%80%83%E6%85%AE%E3%81%99%E3%81%B9%E3%81%8D%E3%81%8B%E6%95%99%E3%81%88%E3%81%A6%E3%81%84%E3%81%9F%E3%81%A0%E3%81%91%E3%81%BE%E3%81%99%E3%81%8B%3F%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%89%8B%E9%A0%86%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E6%8E%A8%E5%A5%A8%E4%BA%8B%E9%A0%85%E3%81%8C%E3%81%82%E3%82%8C%E3%81%B0%E3%80%81%E3%81%9C%E3%81%B2%E6%95%99%E3%81%88%E3%81%A6%E3%81%84%E3%81%9F%E3%81%A0%E3%81%8D%E3%81%9F%E3%81%84%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E3%82%88%E3%82%8D%E3%81%97%E3%81%8F%E3%81%8A%E9%A1%98%E3%81%84%E3%81%84%E3%81%9F%E3%81%97%E3%81%BE%E3%81%99%3CBR%20%2F%3E%E3%83%B4%E3%82%A3%E3%82%B7%E3%83%A3%E3%83%AB%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2409773%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3Ei.MX%208%E3%83%95%E3%82%A1%E3%83%9F%E3%83%AA%20%7C%20i.MX%208QuadMax%E2%80%AF(8QM)%20%7C%208QuadPlus%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3ELinux%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2409949%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20IMX8MP%20SDIO%20DDR50%20clock%20issue%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2409949%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%3CSPAN%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F151788%22%20target%3D%22_blank%22%3E%40Zhiming_Liu%3C%2FA%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%20state_100mhz%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81SD2_DATA%3CX%3E%20%E3%81%AF%200x194%20%E3%81%A7%E3%81%99%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E3%82%88%E3%82%8D%E3%81%97%E3%81%8F%E3%81%8A%E9%A1%98%E3%81%84%E3%81%84%E3%81%9F%E3%81%97%E3%81%BE%E3%81%99%3CBR%20%2F%3E%E3%83%B4%E3%82%A3%E3%82%B7%E3%83%A3%E3%83%AB%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FX%3E%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2409824%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20IMX8MP%20SDIO%20DDR50%20clock%20issue%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2409824%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F266080%22%20target%3D%22_blank%22%3E%40vishal088%3C%2FA%3E%26nbsp%3B%3CBR%20%2F%3E%3CBR%20%2F%3ESD2_DATA%3CX%3E%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%82%E6%95%99%E3%81%88%E3%81%A6%E3%82%82%E3%82%89%E3%81%88%E3%81%BE%E3%81%99%E3%81%8B%3F%3CBR%20%2F%3E%3CBR%20%2F%3E%E3%82%88%E3%82%8D%E3%81%97%E3%81%8F%E3%81%8A%E9%A1%98%E3%81%84%E3%81%97%E3%81%BE%E3%81%99%E3%80%81%3CBR%20%2F%3E%E5%BF%97%E6%98%8E%3C%2FX%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E