If the host controller do not support high speed, do not send the
read switch CMD 6. Same as done in mmc_sd_switch_hs().
Signed-off-by: Heiko Schocher h...@denx.de
Cc: Wolfgang Denk w...@denx.de
Cc: Dieter Schaffner dieter.schaff...@ids.de
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-...@vger.kernel.org
---
drivers/mmc/core/sd.c |4
1 files changed, 4 insertions(+), 0 deletions(-)
Found this on a MPC8313 based system with mmc over spi and a Transcend
2 GB SD card running a 2.6.37.6 kernel. Without this patch I get this
when reading the CMD6:
mmc1: starting CMD6 arg 00f1 flags 00b5
mmc1: blksz 64 blocks 1 flags 0200 tsac 100 ms nsac 0
mmc_spi spi1.2: mmc_spi: CMD6, resp R1
mmc_spi spi1.2: mmc_spi: read block, 64 bytes
mmc_spi spi1.2: read error ff92 (-110)
mmc_spi spi1.2: read status -110
mmc1: req done (CMD6): 0:
mmc1: 0 bytes transferred: -110
Adding for example a longer timeout for the CMD6 did not helped.
With this patch the transcend card gets detected and can be used
fine. Here the infos from the card, shown in the sysfs:
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/cid
1b534d3030303030100bc3874c00c10b
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/csd
007fff325b5a83baf6dbdfff0e8000b5
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/date
01/2012
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/erase_size
512
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/fwrev
0x0
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/hwrev
0x1
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/manfid
0x1b
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/name
0
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/oemid
0x534d
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/preferred_erase_size
4194304
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/scr
02258000
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/serial
0x0bc3874c
-bash-3.2# cat /sys/bus/mmc/devices/mmc0\:/type
SD
So the question raises, is this a known bug and/or a valid patch?
Other patches known to help here?
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index 49da4df..3142df0 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -268,6 +268,10 @@ static int mmc_read_switch(struct mmc_card *card)
return 0;
}
+ /* no need, if the host do not support high speed */
+ if (!(card-host-caps MMC_CAP_SD_HIGHSPEED))
+ return 0;
+
err = -EIO;
status = kmalloc(64, GFP_KERNEL);
--
1.7.7.6
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev