Designware mmc driver errors in kernel 4.9.78


#1

I am running on the Cyclone V, upgrading the kernel from 4.1.22-ltsi to 4.9.78-ltsi. I didn’t upgrade u-boot or the preloader. The kernel boots, but the mmc driver is having trouble. I am seeing errors that appear to cause the driver to slow down transfers, such as:

[ 1.713109] mmc_host mmc0: Bus speed (slot 0) = 200000000Hz (slot req 25000000Hz, actual 25000000HZ div = 4)
[ 1.722921] mmc0: new SDHC card at address aaaa
[ 1.727922] mmcblk0: mmc0:aaaa SL08G 7.40 GiB
[ 1.772558] mmcblk0: p1 p2 p3 p4 < p5 p6 p7 p8 p9 >
[ 1.848032] EXT4-fs (mmcblk0p2): couldn’t mount as ext3 due to feature incompatibilities
[ 1.976155] mmcblk0: error -110 sending status command, retrying
[ 1.982204] mmcblk0: error -115 sending stop command, original cmd response 0x900, card status 0x800b00
[ 1.991568] mmcblk0: error -110 transferring data, sector 5464, nr 264, cmd response 0x900, card status 0xb00
[ 2.036086] mmc_host mmc0: Bus speed (slot 0) = 200000000Hz (slot req 400000Hz, actual 400000HZ div = 250)
[ 2.172734] mmc_host mmc0: Bus speed (slot 0) = 200000000Hz (slot req 25000000Hz, actual 25000000HZ div = 4)
[ 2.396156] mmcblk0: error -110 sending status command, retrying
[ 2.402200] mmcblk0: error -115 sending stop command, original cmd response 0x900, card status 0x800b00
[ 2.411565] mmcblk0: error -110 transferring data, sector 5464, nr 264, cmd response 0x900, card status 0xb00
[ 2.421655] mmcblk0: retrying using single block read

If I revert to 4.1.22, the problem goes away. Using the same SD card in both cases.

Has anyone seen this problem?


#2

Hello, stevrscott,
this is not an error in kernel. The problem is caused by the DeviceTree, because the driver of DesignWare MMC has changed in Linux kernel 4.9.78-ltsi from that in Linux kernel 4.1.22-ltsi (or 4.1.33-ltsi). It expects different clock record in Device Tree.
You could observe the diffrence if You download and install the last version of Intel Embedded Development Studio (Intel EDS, version 18.0), which has got support for the Linux kernel 4.9.78-lsti. The difference is in a new clock domain called sdmmc_clock_divided.
Good luck a best wishes.
Jan Konečný.


#3

Thanks Jan. This indeed was the problem. I had updated my board_info.xml using the mmc entries found in the EDS 17.1 Cyclone V GSRD example hps_board_info.xml file, and that resolved the issue. The cyclone V example for 17.1 wasn’t installed with the tool chain. I found it here: https://releases.rocketboards.org/release/2017.05/gsrd/hw/. It was referenced from this article: https://rocketboards.org/foswiki/Documentation/AVCVGSRD171