Hello
先日、カーネルv7.2-rc4から以下のNXP修正を適用しました。
58c08eea91572df62d71731f1d1180a0dc8e3a6f
mmc: sdhci-esdhc-imx: esdhc_change_pinstate() を修正し、デフォルト状態への復元を可能にする
この修正前は、esdhc_change_pinstate() は、タイミング固有のピン制御状態を適用する前に、default、state_100mhz、state_200mhz という名前のすべてのピン制御状態がデバイスツリーに存在することを要求していました。したがって、USDHCデバイスツリーノードにピン制御が定義されていなければ、SDIOデバイスがDDR50タイミングに切り替わってもドライバはstate_100mhz適用しませんでした。
修正により、ドライバーは選択したタイミングモードに必要なピン制御状態のみを検証し適用します。したがって、state_100mhzはSDR50モードとDDR50モードに正しく適用されるようになりました。
この修正を適用した後、state_100mhz の SD2 クロックパッド構成に問題があることが確認されました。
SDIOデバイス(DDR50モード)は、以下のデバイスでは動作しません。
MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x194
ただし、SDIOデバイス(DDR50モード)は以下と互換性があります。
MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x184
MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x192
MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x196
0x184の設定は、0x194の設定とスルーレートのみが異なります。その他の動作設定では、異なる駆動強度値が使用されます。
この挙動は信号の完全性に関連している可能性があると考えています。しかし、結果は単純ではありません。DDR50は0x194で失敗しますが、より遅いスルーレート(0x184)とより強力なドライブ設定(0x196)の両方で動作します。
さらに、SDR50は0x194でも正しく動作します。この問題はDDR50モードでのみ発生します。
他にi.MX8MP usDHC/SDIOの設定要件や既知の制限があれば、考慮すべきか教えていただけますか?デバッグ手順に関する推奨事項があれば、ぜひ教えていただきたいです。
よろしくお願いいたします
ヴィシャル
こんにちは@Zhiming_Liu
state_100mhz の場合、SD2_DATA
よろしくお願いいたします
ヴィシャル
こんにちは@vishal088
SD2_DATA
よろしくお願いします、
志明
こんにちは、 @vishal088さん
DATAとCMDを0x1D4に設定し、次にSET CLKを0x194に設定した場合、DDR50は再び故障しますか?
使っているusdhc DTSノードの全てを教えてもらえますか?さらに、ソフトウェアチームは、usdhcをDDR50モードに修正した方法を知りたいと考えています。
よろしくお願いします、
志明
こんにちは、 @vishal088さん
同じdtsとカーネル設定で、i.MX8MP EVKボード上でテストを実施しました。今のところ、テストを迅速に進めるためにL6.18.20カーネルを使用していますが、この問題はカーネルのバージョンとはあまり関係がないと考えています。
パッチを適用する前に。
imx8mpevk login: root
root@imx8mpevk:~# cat /sys/kernel/debug/mmc1/ios
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)
root@imx8mpevk:~# dmesg | grep -i sd
[ 2.445460] sdhci: Secure Digital Host Controller Interface driver
[ 2.451674] sdhci: Copyright(c) Pierre Ossman
[ 2.463953] sdhci-pltfm: SDHCI platform and OF driver helper
[ 2.507075] mmc2: SDHCI controller on 30b60000.mmc [30b60000.mmc] using ADMA
[ 3.635632] sdhci-esdhc-imx 30b40000.mmc: allocated mmc-pwrseq
[ 3.636284] sdhci-esdhc-imx 30b50000.mmc: Got CD GPIO
[ 3.669847] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA
[ 3.682520] mmc1: SDHCI controller on 30b50000.mmc [30b50000.mmc] using ADMA
[ 3.818728] mmc1: new UHS-I speed DDR50 SDHC card at address 59b4
[ 9.902634] imx-sdma 30e00000.dma-controller: firmware found.
[ 9.902634] imx-sdma 30e10000.dma-controller: firmware found.
[ 9.920146] imx-sdma 30bd0000.dma-controller: firmware found.
[ 9.928124] imx-sdma 30bd0000.dma-controller: loaded firmware 4.6
root@imx8mpevk:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mtdblock0 31:0 0 32M 0 disk
mmcblk2 179:0 0 29.2G 0 disk
|-mmcblk2p1 179:1 0 256M 0 part /run/media/boot-mmcblk2p1
`-mmcblk2p2 179:2 0 10.5G 0 part /
mmcblk2boot0 179:32 0 4M 1 disk
mmcblk2boot1 179:64 0 4M 1 disk
mmcblk1 179:96 0 29.8G 0 disk
|-mmcblk1p1 179:97 0 256M 0 part /run/media/boot-mmcblk1p1
`-mmcblk1p2 179:98 0 12G 0 part /run/media/root-mmcblk1p2
root@imx8mpevk:~# cp /run/media/boot-mmcblk1p1/Image ./
root@imx8mpevk:~# ls -la Image
-rwxr-x--- 1 root root 35678720 Mar 13 15:48 Image
パッチ適用後、SDカードの読み書きテストを実施してください。
root@imx8mpevk:~# cp /run/media/boot-mmcblk1p1/tee.bin ./
root@imx8mpevk:~# cp tee.bin tee_test.bin
root@imx8mpevk:~# cp tee_test.bin /run/media/boot-mmcblk1p1/
root@imx8mpevk:~# ls /run/media/boot-mmcblk1p1/
Image imx95-19x19-evk-dsi-serdes-jdi-wuxga-panel.dtb imx95-19x19-evk-os08a20-dual.dtb imx95-19x19-evk-ti-serdes-combo.dtb
'System Volume Information' imx95-19x19-evk-dsi-serdes-jdi-wuxga-panel.dtbo imx95-19x19-evk-os08a20-isp-it6263-lvds0.dtb imx95-19x19-evk-ti-serdes-combo.dtbo
imx95-15x15-ab2.dtb imx95-19x19-evk-dsi-serdes.dtb imx95-19x19-evk-os08a20-isp-lvds-two-disp.dtb imx95-19x19-evk-ti-serdes.dtb
imx95-15x15-evk-adv7535-ap1302.dtb imx95-19x19-evk-dsi-serdes.dtbo imx95-19x19-evk-os08a20.dtb imx95-19x19-evk-ti-serdes.dtbo
imx95-15x15-evk.dtb imx95-19x19-evk-dual-os08a20-isp-it6263-lvds0.dtb imx95-19x19-evk-os08a20.dtbo imx95-19x19-evk-tja1104-rgmii.dtb
imx95-15x15-frdm-8mic-reve.dtb imx95-19x19-evk-it6263-lvds-dual.dtb imx95-19x19-evk-ox03c10-all.dtb imx95-19x19-evk-tja1104-rmii.dtb
imx95-15x15-frdm-ap1302.dtb imx95-19x19-evk-it6263-lvds-dual.dtbo imx95-19x19-evk-ox03c10-combo.dtb imx95-19x19-evk.dtb
imx95-15x15-frdm-aud-hat.dtb imx95-19x19-evk-it6263-lvds-two-disp.dtb imx95-19x19-evk-ox03c10-combo.dtbo imx95-19x19-frdm-pro-aqr113c.dtb
imx95-15x15-frdm-boe-wxga-lvds-panel.dtb imx95-19x19-evk-it6263-lvds0.dtb imx95-19x19-evk-ox03c10-isp-it6263-lvds0.dtb imx95-19x19-frdm-pro-aud-hat.dtb
imx95-15x15-frdm-dual-os08a20-isp.dtb imx95-19x19-evk-it6263-lvds0.dtbo imx95-19x19-evk-ox03c10.dtb imx95-19x19-frdm-pro-dual-os08a20-isp.dtb
imx95-15x15-frdm-neutron.dtb imx95-19x19-evk-it6263-lvds1.dtb imx95-19x19-evk-ox03c10.dtbo imx95-19x19-frdm-pro-inmate.dtb
imx95-15x15-frdm-os08a20-combo-isp.dtb imx95-19x19-evk-it6263-lvds1.dtbo imx95-19x19-evk-ox05b1s-combo.dtb imx95-19x19-frdm-pro-neutron.dtb
imx95-15x15-frdm-os08a20-isp.dtb imx95-19x19-evk-jdi-wuxga-lvds-panel.dtb imx95-19x19-evk-ox05b1s-combo.dtbo imx95-19x19-frdm-pro-os08a20-combo-isp.dtb
imx95-15x15-frdm-root.dtb imx95-19x19-evk-jdi-wuxga-lvds-panel.dtbo imx95-19x19-evk-ox05b1s-isp-it6263-lvds0.dtb imx95-19x19-frdm-pro-os08a20-isp.dtb
imx95-15x15-frdm-rpmsg.dtb imx95-19x19-evk-jtag.dtb imx95-19x19-evk-ox05b1s-isp-lvds-two-disp.dtb imx95-19x19-frdm-pro-root.dtb
imx95-15x15-frdm-waveshare-7inch-c-panel.dtb imx95-19x19-evk-jtag.dtbo imx95-19x19-evk-ox05b1s.dtb imx95-19x19-frdm-pro-waveshare-7inch-c-panel.dtb
imx95-15x15-frdm.dtb imx95-19x19-evk-lpspi-slave.dtb imx95-19x19-evk-ox05b1s.dtbo imx95-19x19-frdm-pro.dtb
imx95-19x19-evk-adv7535-ap1302.dtb imx95-19x19-evk-lt9611uxc-ap1302.dtb imx95-19x19-evk-pcie1-ep.dtb imx95-jailhouse-inmate.dtb
imx95-19x19-evk-adv7535.dtb imx95-19x19-evk-lt9611uxc.dtb imx95-19x19-evk-pcie1-ep.dtbo mcore-demos
imx95-19x19-evk-adv7535.dtbo imx95-19x19-evk-lt9611uxc.dtbo imx95-19x19-evk-rm692c9.dtb tee.bin
imx95-19x19-evk-ap1302.dtb imx95-19x19-evk-netc-rpmsg.dtb imx95-19x19-evk-rm692c9.dtbo tee_test.bin
imx95-19x19-evk-ap1302.dtbo imx95-19x19-evk-neutron.dtb imx95-19x19-evk-root.dtb xen
imx95-19x19-evk-cs42888.dtb imx95-19x19-evk-os08a20-combo.dtb imx95-19x19-evk-rpmsg.dtb
imx95-19x19-evk-cs42888.dtbo imx95-19x19-evk-os08a20-combo.dtbo imx95-19x19-evk-sof.dtb
DTS改造、pinctrl_usdhc2_100mhz linux-imxのデフォルト値です。テストから、これらの改造はDDR50下でのSDカードの読み書きには影響しなかったことがわかります。
&usdhc2 {
assigned-clocks = <&clk IMX8MP_CLK_USDHC2>;
assigned-clock-rates = <400000000>;
pinctrl-names = "default", "state_100mhz";
pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
// pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
vmmc-supply = <®_usdhc2_vmmc>;
bus-width = <4>;
status = "okay";
};
pinctrl_usdhc2_100mhz: usdhc2-100mhzgrp {
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
MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT 0xc0
>;
};
なので、今あなたが経験している問題はカスタムボードに関係しているのかもしれません。実は0x194信号品質の問題を引き起こします。
よろしくお願いいたします。
志明