Linux kernel eMMC configuration on iMX8mp custom board

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Linux kernel eMMC configuration on iMX8mp custom board

2,682 次查看
Alex2022
Contributor II

Hi there,

I am trying to create a Linux image using Yocto for a custom board based on NXP i.MX8MPlus LPDDR4 EVK board. The main difference is that on usdhc1 I have another eMMC (as far as I know, on the EVK board there is an SD on usdhc2 and an eMMC on usdhc3). 

On .dtsi I changed from

&usdhc1 {
u-boot,dm-spl;
};

To a modified file with:

&usdhc1 {
u-boot,dm-spl;
mmc-hs400-1_8v;
mmc-hs400-enhanced-strobe;
};

And on .dts file added

&usdhc1 {
assigned-clocks = <&clk IMX8MP_CLK_USDHC1>;
assigned-clock-rates = <400000000>;
pinctrl-names = "default", "state_100mhz", "state_200mhz";
pinctrl-0 = <&pinctrl_usdhc1>;
pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
bus-width = <8>;
non-removable;
status = "okay";
};

And also:

pinctrl_usdhc1: usdhc1grp {
fsl,pins = <
MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x190
MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d0
MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d0
MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d0
MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d0
MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d0
MX8MP_IOMUXC_SD1_DATA4__USDHC1_DATA4 0x1d0
MX8MP_IOMUXC_SD1_DATA5__USDHC1_DATA5 0x1d0
MX8MP_IOMUXC_SD1_DATA6__USDHC1_DATA6 0x1d0
MX8MP_IOMUXC_SD1_DATA7__USDHC1_DATA7 0x1d0
MX8MP_IOMUXC_SD1_RESET_B__USDHC1_RESET_B 0x41
MX8MP_IOMUXC_SD1_STROBE__USDHC1_STROBE 0x190
>;
};

pinctrl_usdhc1_100mhz: usdhc1grp-100mhz {
fsl,pins = <
MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x194
MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d4
MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d4
MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d4
MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d4
MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d4
MX8MP_IOMUXC_SD1_DATA4__USDHC1_DATA4 0x1d4
MX8MP_IOMUXC_SD1_DATA5__USDHC1_DATA5 0x1d4
MX8MP_IOMUXC_SD1_DATA6__USDHC1_DATA6 0x1d4
MX8MP_IOMUXC_SD1_DATA7__USDHC1_DATA7 0x1d4
MX8MP_IOMUXC_SD1_RESET_B__USDHC1_RESET_B 0x41
MX8MP_IOMUXC_SD1_STROBE__USDHC1_STROBE 0x194
>;
};

pinctrl_usdhc1_200mhz: usdhc1grp-200mhz {
fsl,pins = <
MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x196
MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d6
MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d6
MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d6
MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d6
MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d6
MX8MP_IOMUXC_SD1_DATA4__USDHC1_DATA4 0x1d6
MX8MP_IOMUXC_SD1_DATA5__USDHC1_DATA5 0x1d6
MX8MP_IOMUXC_SD1_DATA6__USDHC1_DATA6 0x1d6
MX8MP_IOMUXC_SD1_DATA7__USDHC1_DATA7 0x1d6
MX8MP_IOMUXC_SD1_RESET_B__USDHC1_RESET_B 0x41
MX8MP_IOMUXC_SD1_STROBE__USDHC1_STROBE 0x196
>;
};

Aftar that modification I was able to launch uboot, but it does not recognize eMMC devices on the uboot enviroment. 

u-boot=> mmc dev 2
unable to select a mode

u-boot=> mmc dev 0
Card did not respond to voltage select!

It does recognize the SD card, where the Linux image is. It starts launching but when it tries to access mmc it fails.

[ 1.081912] ALSA device list:
[ 1.089234] No soundcards found.
[ 1.090464] mmc2: new HS400 MMC card at address 0001
[ 1.098030] mmcblk2: mmc2:0001 S0J35A 7.28 GiB
[ 1.102725] mmcblk2boot0: mmc2:0001 S0J35A partition 1 31.5 MiB
[ 1.108811] mmcblk2boot1: mmc2:0001 S0J35A partition 2 31.5 MiB
[ 1.114846] mmcblk2rpmb: mmc2:0001 S0J35A partition 3 4.00 MiB, chardev (234:0)
[ 1.117885] mmc1: SDHCI controller on 30b50000.mmc [30b50000.mmc] using ADMA
[ 17.301529] blk_update_request: I/O error, dev mmcblk2, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 22.680500] blk_update_request: I/O error, dev mmcblk2, sector 1 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 28.059466] blk_update_request: I/O error, dev mmcblk2, sector 2 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 31.794261] VSD_3V3: disabling
[ 33.438425] blk_update_request: I/O error, dev mmcblk2, sector 3 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 38.817380] blk_update_request: I/O error, dev mmcblk2, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 44.196336] blk_update_request: I/O error, dev mmcblk2, sector 5 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 49.575299] blk_update_request: I/O error, dev mmcblk2, sector 6 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 54.954277] blk_update_request: I/O error, dev mmcblk2, sector 7 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 54.964463] Buffer I/O error on dev mmcblk2, logical block 0, async page read
[ 62.514327] imx-sdma 30bd0000.dma-controller: external firmware not found, using ROM firmware
[ 71.078020] blk_update_request: I/O error, dev mmcblk2, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 76.456978] blk_update_request: I/O error, dev mmcblk2, sector 1 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 81.835938] blk_update_request: I/O error, dev mmcblk2, sector 2 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 87.214900] blk_update_request: I/O error, dev mmcblk2, sector 3 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 92.593851] blk_update_request: I/O error, dev mmcblk2, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 97.972807] blk_update_request: I/O error, dev mmcblk2, sector 5 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 103.351766] blk_update_request: I/O error, dev mmcblk2, sector 6 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 108.730727] blk_update_request: I/O error, dev mmcblk2, sector 7 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 108.740921] Buffer I/O error on dev mmcblk2, logical block 0, async page read
[ 108.748077] mmcblk2: unable to read partition table
[ 108.755114] Waiting for root device /dev/mmcblk1p2...

 

I attach kernel launching traces, for the EVK board (whick works) and for my custom board, if it can help.

Is there anything else I have to modify on Yocto files so I can access eMMC on my board?

Thanks in advance,

-----

Alex

标记 (5)
0 项奖励
回复
0 回复数