MMC card reader slow on Linux

Posted on

Problem :

I have been searching in and out on google and the forum about the issue I am experiencing with Linux, with no luck so far.

This is my system:

System:    Host: wally Kernel: 3.13.0-37-generic x86_64 (64 bit) Desktop: Gnome Distro: Linux Mint 17.1 Rebecca
Machine:   System: Hewlett-Packard (portable) product: HP EliteBook Folio 9470m version: A1029D1102
           Mobo: Hewlett-Packard model: 18DF version: KBC Version 62.17
           Bios: Hewlett-Packard version: 68IBD Ver. F.46 date: 07/16/2013

I have an MMC card reader with a 128Gb card

The very same laptop can read and write at a considerable higher speed with Windows though.

Here are more info:

~ cat /sys/kernel/debug/mmc0/ios
clock:      25000000 Hz
actual clock:   25000000 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:   0 (legacy)
signal voltage:   0 (3.30 V)

(while writing)
~ cat /proc/interrupts | grep mmc
 18:     416899     327705     150854      74913  IR-IO-APIC-fasteoi   mmc0

dmesg | grep mmc
[    3.374525] mmc0: no vqmmc regulator found
[    3.374530] mmc0: no vmmc regulator found
[    3.374669] mmc0: SDHCI controller on PCI [0000:02:00.0] using DMA
[    3.624502] mmc0: new SDXC card at address 59b4
[    3.626966] mmcblk0: mmc0:59b4       119 GiB
[    3.628030]  mmcblk0: p1
[  141.158242] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)

lsmod | grep mmc
mmc_block              35929  2

According to my understanding, I should have seen something like this this in dmesg

mmc0: new high speed SDHC card at address 0007

which I don’t apparently.

Windows Perf: 60Mbps (read and write approx)
Linux Perf: 6Mbps (10 times slower). While copying file over the SD card, I can see the CPU goes 60/70% wa status.

Am I doing something wrong?
Any help is appreciated.


Solution :

As I mentioned in the comments, I’m having a similar problem.
I managed to double the clock manually, putting it in old-school “high-speed” mode.

echo 50000000 | sudo tee  /sys/kernel/debug/mmc0/clock

Now I need to lower the voltage to 1.8V to be able to further push the performance, hopefully up to UHS-1 level.

I have opened another question in Linux stack exchange, I should share updates there:

It’s saddening to see no answers. Maybe this is just an edge case with card speed detection.

Leave a Reply

Your email address will not be published. Required fields are marked *