Hello.
In our products, we are using for a couple of years iMX7Solo device with Micron MTFC8GAMALBH-IT eMMC. We are using it in HS400 mode. We didn't have any problems with this memory - also validating our design with environmental testings etc.
Unfortunately, Micron's eMMC is EOL and we trying to replace it with pin-compatible Western Digital SDINBDG4-8G-XI2. We faced a problem with this device in HS400 mode in a read operation.
(Linux kernel 5.4.24 for i.mx 7 NXP)
Here are some tests that we performed and results received:
//Information
root@VoqX:~# cat /sys/kernel/debug/mmc2/ios
clock: 200000000 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: 3 (8 bits)
timing spec: 10 (mmc HS400)
signal voltage: 1 (1.80 V)
driver type: 0 (driver type B)
//Succesufful write test:
root@VoqX:/media/sdx2# dd if=/dev/urandom of=test oflag=direct bs=1MiB count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 7.32034 s, 14.3 MB/s
//Unsuccesfull read test:
root@VoqX:/media/sdx2# echo 3 > /proc/sys/vm/drop_caches
[ 823.103248] sh (579): drop_caches: 3
dd if=test of=dev/null bs=1MiB count=100
[ 885.607643] mmc2: Timeout waiting for hardware interrupt.
[ 885.613061] mmc2: sdhci: ============ SDHCI REGISTER DUMP ===========
[ 885.619507] mmc2: sdhci: Sys addr: 0x83659c00 | Version: 0x00000002
[ 885.625951] mmc2: sdhci: Blk size: 0x00000200 | Blk cnt: 0x0000032a
[ 885.632394] mmc2: sdhci: Argument: 0x0013c834 | Trn mode: 0x0000003b
[ 885.638839] mmc2: sdhci: Present: 0x01f8820e | Host ctl: 0x00000031
[ 885.645282] mmc2: sdhci: Power: 0x00000002 | Blk gap: 0x00000080
[ 885.651725] mmc2: sdhci: Wake-up: 0x00000008 | Clock: 0x0000000f
[ 885.658169] mmc2: sdhci: Timeout: 0x0000008f | Int stat: 0x00000000
[ 885.664612] mmc2: sdhci: Int enab: 0x117f100b | Sig enab: 0x117f100b
[ 885.671056] mmc2: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000302
[ 885.677500] mmc2: sdhci: Caps: 0x07eb0000 | Caps_1: 0x8000b407
[ 885.683944] mmc2: sdhci: Cmd: 0x0000123a | Max curr: 0x00ffffff
[ 885.690387] mmc2: sdhci: Resp[0]: 0x00000900 | Resp[1]: 0x303801c9
[ 885.696831] mmc2: sdhci: Resp[2]: 0x44473430 | Resp[3]: 0x00000900
[ 885.703273] mmc2: sdhci: Host ctl2: 0x00000088
[ 885.707721] mmc2: sdhci: ADMA Err: 0x00000003 | ADMA Ptr: 0x8e0422d4
[ 885.714162] mmc2: sdhci: ============================================
[ 885.728200] sdhci-esdhc-imx 30b60000.usdhc: error -110 requesting status
[ 885.735059] mmc2: cache flush error -110
[ 895.847653] mmc2: Timeout waiting for hardware interrupt.
[ 895.853069] mmc2: sdhci: ============ SDHCI REGISTER DUMP ===========
[ 895.859514] mmc2: sdhci: Sys addr: 0x8175da00 | Version: 0x00000002
[ 895.865958] mmc2: sdhci: Blk size: 0x00000200 | Blk cnt: 0x0000036b
[ 895.872402] mmc2: sdhci: Argument: 0x0013c834 | Trn mode: 0x0000003b
[ 895.878847] mmc2: sdhci: Present: 0x01f8820e | Host ctl: 0x00000031
[ 895.885291] mmc2: sdhci: Power: 0x00000002 | Blk gap: 0x00000080
[ 895.891734] mmc2: sdhci: Wake-up: 0x00000008 | Clock: 0x0000000f
[ 895.898177] mmc2: sdhci: Timeout: 0x0000008f | Int stat: 0x00000000
[ 895.904621] mmc2: sdhci: Int enab: 0x117f100b | Sig enab: 0x117f100b
[ 895.911064] mmc2: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000302
[ 895.917508] mmc2: sdhci: Caps: 0x07eb0000 | Caps_1: 0x8000b407
[ 895.923952] mmc2: sdhci: Cmd: 0x0000123a | Max curr: 0x00ffffff
[ 895.930396] mmc2: sdhci: Resp[0]: 0x00000900 | Resp[1]: 0x303801c9
[ 895.936840] mmc2: sdhci: Resp[2]: 0x44473430 | Resp[3]: 0x00000900
[ 895.943282] mmc2: sdhci: Host ctl2: 0x00000088
[ 895.947729] mmc2: sdhci: ADMA Err: 0x00000003 | ADMA Ptr: 0x8e042294
[ 895.954171] mmc2: sdhci: ============================================
[ 895.961893] sdhci-esdhc-imx 30b60000.usdhc: error -110 requesting status
[ 895.968634] mmcblk2: recovery failed!
[ 895.972497] blk_update_request: I/O error, dev mmcblk2, sector 1296436 op 0x0:(READ) flags 0x80700 phys_seg 127 prio class 0
[ 895.984129] mmc2: cache flush error -110
[ 895.988097] blk_update_request: I/O error, dev mmcblk2, sector 4563300 op 0x1:(WRITE) flags 0x20800 phys_seg 1 prio class 0
[ 895.999268] Aborting journal on device mmcblk2p2-8.
[ 896.004540] mmc2: mmc_hs400_to_hs200 failed, error -110
[ 896.010229] sdhci-esdhc-imx 30b60000.usdhc: error -110 requesting status
[ 896.016935] mmcblk2: recovery failed!
[ 896.020920] mmc2: mmc_hs400_to_hs200 failed, error -110
[ 896.026588] sdhci-esdhc-imx 30b60000.usdhc: error -110 requesting status
[ 896.033476] mmc2: cache flush error -110
[ 896.053545] blk_update_request: I/O error, dev mmcblk2, sector 1296436 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
dd: error reading 'test': Input/output error
0+0 records in
0+0 records out
0 bytes copied, 20.6048 s, 0.0 kB/s
What can the issue?
I will appreciate any help with this issue.
Thanks.
Best regards,
Igor Kagan