lkml.org 
[lkml]   [2011]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] mmc: Added quirks for Ricoh 1180:e823 lower base clock frequency

Chris,

Test System: ThinkPad X220 Tablet, using Sandisk 2GB Class 2 SD, I did not
see any considerable change in read/write times. Also, tested a Transcend
MMCPlus 2GB card, before the patch was applied it would not mount the
card, and would cause IO errors on read/write, but after the patch it
mounts and works correctly.

Linux u 3.0.0-4-generic-pae #5 SMP Mon Jul 11 20:26:49 UTC 2011 i686
GNU/Linux

Dmesg outputs:
=== SD ===
[ 44.510107] mmc0: new SD card at address 0002
[ 44.510292] mmcblk0: mmc0:0002 00000 1.86 GiB
[ 44.512408] mmcblk0: p1
u@u:~/Documents$
=== MMC ===

[ 726.510850] mmc0: card 0001 removed
[ 731.688463] mmc0: error -110 whilst initialising MMC card
[ 731.776506] mmc0: error -110 whilst initialising MMC card
[ 731.864157] mmc0: new MMC card at address 0001
[ 731.864611] mmcblk0: mmc0:0001 MMC 1.87 GiB
[ 731.866047] mmcblk0: p1
u@u:~/Documents$


============ BEFORE THE PATCH ===============
Sandisk 2GB Class2 SD
=============================================
=== WRITE ===
u@u:~$ ls -lh test.file
-rw-r--r-- 1 u u 10M 2011-07-12 10:19 test.file
u@u:~$ time cp test.file /media/E0FD-1813/copyto
real 0m0.480s
user 0m0.000s
sys 0m0.024s
u@u:~$ time cp test.file /media/E0FD-1813/copyto1

real 0m0.476s
user 0m0.000s
sys 0m0.028s
u@u:~$ time cp test.file /media/E0FD-1813/copyto2

real 0m0.484s
user 0m0.000s
sys 0m0.024s
u@u:~$ time cp test.file /media/E0FD-1813/copyto3

real 0m0.480s
user 0m0.000s
sys 0m0.020s
u@u:~$
u@u:~$ ls -lh /media/E0FD-1813/copyto*
-rw-r--r-- 1 u u 10M 2011-07-12 10:20 /media/E0FD-1813/copyto
-rw-r--r-- 1 u u 10M 2011-07-12 10:20 /media/E0FD-1813/copyto1
-rw-r--r-- 1 u u 10M 2011-07-12 10:20 /media/E0FD-1813/copyto2
-rw-r--r-- 1 u u 10M 2011-07-12 10:20 /media/E0FD-1813/copyto3
u@u:~$

=== READ ===
u@u:~$ time cp /media/E0FD-1813/copyto1 /tmp/copyfrom1

real 0m0.017s
user 0m0.000s
sys 0m0.016s
u@u:~$ time cp /media/E0FD-1813/copyto1 /tmp/copyfrom2

real 0m0.021s
user 0m0.004s
sys 0m0.020s
u@u:~$ time cp /media/E0FD-1813/copyto1 /tmp/copyfrom3

real 0m0.020s
user 0m0.000s
sys 0m0.016s
u@u:~$ time cp /media/E0FD-1813/copyto1 /tmp/copyfrom4

real 0m0.022s
user 0m0.000s
sys 0m0.020s
u@u:~$
u@u:~$ ls -lh /tmp/copyfrom*
-rw-r--r-- 1 u u 10M 2011-07-12 10:22 /tmp/copyfrom1
-rw-r--r-- 1 u u 10M 2011-07-12 10:22 /tmp/copyfrom2
-rw-r--r-- 1 u u 10M 2011-07-12 10:22 /tmp/copyfrom3
-rw-r--r-- 1 u u 10M 2011-07-12 10:22 /tmp/copyfrom4
u@u:~$

============ AFTER THE PATCH =============
Sandisk 2GB Class2 SD
==========================================
=== WRITE ===
u@u:~$ time cp ./test.file /media/E0FD-1813/copyto1

real 0m0.757s
user 0m0.000s
sys 0m0.044s
u@u:~$ time cp ./test.file /media/E0FD-1813/copyto2

real 0m0.488s
user 0m0.004s
sys 0m0.020s
u@u:~$ time cp ./test.file /media/E0FD-1813/copyto3

real 0m0.484s
user 0m0.004s
sys 0m0.024s
u@u:~$ time cp ./test.file /media/E0FD-1813/copyto4

real 0m0.486s
user 0m0.000s
sys 0m0.024s
u@u:~$ ls -lh /media/E0FD-1813/
copyto1 copyto2 copyto3 copyto4 .Trash-1001/
u@u:~$ ls -lh /media/E0FD-1813/copyto*
-rw-r--r-- 1 u u 10M 2011-07-12 10:30 /media/E0FD-1813/copyto1
-rw-r--r-- 1 u u 10M 2011-07-12 10:30 /media/E0FD-1813/copyto2
-rw-r--r-- 1 u u 10M 2011-07-12 10:30 /media/E0FD-1813/copyto3
-rw-r--r-- 1 u u 10M 2011-07-12 10:30 /media/E0FD-1813/copyto4
u@u:~$

=== READ ===
u@u:~$ time cp /media/E0FD-1813/copyto1 /tmp/copyfrom1

real 0m0.020s
user 0m0.000s
sys 0m0.016s
u@u:~$ time cp /media/E0FD-1813/copyto1 /tmp/copyfrom2

real 0m0.020s
user 0m0.000s
sys 0m0.016s
u@u:~$ time cp /media/E0FD-1813/copyto1 /tmp/copyfrom3

real 0m0.020s
user 0m0.000s
sys 0m0.016s
u@u:~$ time cp /media/E0FD-1813/copyto1 /tmp/copyfrom4

real 0m0.015s
user 0m0.000s
sys 0m0.012s
u@u:~$ ls -lh /tmp/copyfrom*
-rw-r--r-- 1 u u 10M 2011-07-12 10:31 /tmp/copyfrom1
-rw-r--r-- 1 u u 10M 2011-07-12 10:31 /tmp/copyfrom2
-rw-r--r-- 1 u u 10M 2011-07-12 10:31 /tmp/copyfrom3
-rw-r--r-- 1 u u 10M 2011-07-12 10:31 /tmp/copyfrom4
u@u:~$


====== AFTER THE PATCH - MMC CARD ===========
Transcend MMC 2GB
=============================================
=== WRITE ===
u@u:~$ time cp test.file /media/New\ Volume/copyto1

real 0m0.557s
user 0m0.000s
sys 0m0.024s
u@u:~$ time cp test.file /media/New\ Volume/copyto2

real 0m0.581s
user 0m0.000s
sys 0m0.028s
u@u:~$ time cp test.file /media/New\ Volume/copyto3

real 0m0.581s
user 0m0.000s
sys 0m0.032s
u@u:~$ time cp test.file /media/New\ Volume/copyto4

real 0m0.585s
user 0m0.000s
sys 0m0.028s
u@u:~$ ls -lh /media/New\ Volume/copyto*
-rw-r--r-- 1 u u 10M 2011-07-12 10:42 /media/New Volume/copyto1
-rw-r--r-- 1 u u 10M 2011-07-12 10:42 /media/New Volume/copyto2
-rw-r--r-- 1 u u 10M 2011-07-12 10:42 /media/New Volume/copyto3
-rw-r--r-- 1 u u 10M 2011-07-12 10:42 /media/New Volume/copyto4
u@u:~$

=== READ ===
u@u:~$ time cp /media/New\ Volume/copyto1 /tmp/copyfrom1

real 0m0.154s
user 0m0.000s
sys 0m0.024s
u@u:~$ time cp /media/New\ Volume/copyto1 /tmp/copyfrom2

real 0m0.024s
user 0m0.000s
sys 0m0.020s
u@u:~$ time cp /media/New\ Volume/copyto1 /tmp/copyfrom3

real 0m0.024s
user 0m0.000s
sys 0m0.020s
u@u:~$ time cp /media/New\ Volume/copyto1 /tmp/copyfrom4

real 0m0.022s
user 0m0.000s
sys 0m0.020s
u@u:~$ time cp /media/New\ Volume/copyto2 /tmp/copyfrom5

real 0m0.020s
user 0m0.000s
sys 0m0.016s
u@u:~$ ls -lh /tmp/copyfrom*
-rw-r--r-- 1 u u 10M 2011-07-12 10:44 /tmp/copyfrom1
-rw-r--r-- 1 u u 10M 2011-07-12 10:44 /tmp/copyfrom2
-rw-r--r-- 1 u u 10M 2011-07-12 10:44 /tmp/copyfrom3
-rw-r--r-- 1 u u 10M 2011-07-12 10:44 /tmp/copyfrom4
-rw-r--r-- 1 u u 10M 2011-07-12 10:44 /tmp/copyfrom5
u@u:~$



On Mon, 11 Jul 2011, Chris Ball wrote:

> Hi Manoj, adding linux-mmc@,
>
> On Mon, Jul 11 2011, Manoj Iyer wrote:
>> Ricoh 1180:e823 does not recognize certain types of SD/MMC cards.
>> Lowering the SD base clock frequency from 200Mhz to 50Mhz fixes
>> this issue. This solution was suggest by Koji Matsumuro, Ricoh
>> Company,Ltd.
>>
>> BugLink: http://launchpad.net/bugs/773524
>> Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com>
>> Tested-by: Daniel Manrique <daniel.manrique@canonical.com>
>> Cc: Koji Matsumuro <matsumur@nts.ricoh.co.jp>
>> ---
>> drivers/pci/quirks.c | 24 ++++++++++++++++++++++++
>> 1 files changed, 24 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
>> index 02145e9..fe5bffa 100644
>> --- a/drivers/pci/quirks.c
>> +++ b/drivers/pci/quirks.c
>> @@ -2758,6 +2758,30 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
>>
>> dev_notice(&dev->dev, "proprietary Ricoh MMC controller disabled (via firewire function)\n");
>> dev_notice(&dev->dev, "MMC cards are now supported by standard SDHCI controller\n");
>> +
>> + /*
>> + * RICOH 0xe823 SD/MMC card reader fails to recognize
>> + * certain types of SD/MMC cards. Lowering the SD base
>> + * clock frequency from 200Mhz to 50Mhz fixes this issue.
>> + *
>> + * 0x150 - SD2.0 mode enable for changing base clock
>> + * frequency to 50Mhz
>> + * 0xe1 - Base clock frequency
>> + * 0x32 - 50Mhz new clock frequency
>> + * 0xf9 - Key register for 0x150
>> + * 0xfc - key register for 0xe1
>> + */
>> + if (dev->device == PCI_DEVICE_ID_RICOH_R5CE823) {
>> + pci_write_config_byte(dev, 0xf9, 0xfc);
>> + pci_write_config_byte(dev, 0x150, 0x10);
>> + pci_write_config_byte(dev, 0xf9, 0x00);
>> + pci_write_config_byte(dev, 0xfc, 0x01);
>> + pci_write_config_byte(dev, 0xe1, 0x32);
>> + pci_write_config_byte(dev, 0xfc, 0x00);
>> +
>> + dev_notice(&dev->dev, "Controller base frequency changed to 50Mhz)\n");
>
> There's an erroneous ")" in this string; I'll replace it with a "." if
> this patch goes in via my tree. Also, let's make it "MMC controller"
> instead of just "Controller".
>
>> + }
>> +
>> }
>> DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
>> DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
>
> Have you checked to see how SD I/O performance differs after this change?
>
> (If this is significant, perhaps we want to try lowering the frequency
> only after a card starts returning errors, since some cards work fine
> at the higher frequency.)
>
> Thanks,
>
> - Chris.
> --
> Chris Ball <cjb@laptop.org> <http://printf.net/>
> One Laptop Per Child
>
>

--
====================
Manoj Iyer
Ubuntu/Canonical
Hardware Enablement
====================

\
 
 \ /
  Last update: 2011-07-12 18:03    [from the cache]
©2003-2011 Jasper Spaans