Rasmus Pank Roulund Coffee & Coding Chronicles

Fixing the Thinkpad W530 memory card reader on Linux

My Thinkpad W530 memory card reader has been reporting errors with my sd uhs-I card. Worrisome! However, it seems to be a bug in the Kernel (v. 4.10.6 on Archlinux) that can be “fixed” with a modprobe.

My memory card is a Transcend uhs-I sd card. I get messages like this in dmesg

[  258.834818] blk_update_request: I/O error, dev mmcblk0, sector 8216
[  258.841858] mmcblk0: error -110 sending status command, retrying
[  258.844222] mmcblk0: error -110 sending status command, aborting
[  258.844231] Buffer I/O error on dev mmcblk0p1, logical block 0, async page read

Interestingly ,the card works perfectly with my camera and also when copying photos through the usb interface of the camera.

The memory card reader is made by Ricoh, according to lspci.

$> lspci | grep SD
   : 02:00.0 System peripheral: Ricoh Co Ltd MMC/SD Host Controller (rev 08)

Fortunately, there’s a couple of bug reports and helpful blog posts that suggest that this is a common problem. To test if it works run

rmmod sdhci_pci
rmmod sdhci
modprobe sdhci debug_quirks2="0x2"
modprobe sdhci_pci

Like in these reports, I am able to solve the problem by adding the debug_quirks2=0x2 flag to the sdhci module (I have also tried the 0x10000). Adding modprobe configuration file seems to do the trick on my system.

$> cat /etc/modprobe.d/sdhci-pci.conf
   options sdhci debug_quirks2=0x2