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 00fffff1 flags 000000b5 mmc1: blksz 64 blocks 1 flags 00000200 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 ffffff92 (-110) mmc_spi spi1.2: read status -110 mmc1: req done (CMD6): 0: 00000000 00000000 00000000 00000000 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\:0000/cid 1b534d3030303030100bc3874c00c10b -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/csd 007fff325b5a83baf6dbdfff0e8000b5 -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/date 01/2012 -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/erase_size 512 -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/fwrev 0x0 -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/hwrev 0x1 -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/manfid 0x00001b -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/name 00000 -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/oemid 0x534d -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/preferred_erase_size 4194304 -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/scr 0225800000000000 -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/serial 0x0bc3874c -bash-3.2# cat /sys/bus/mmc/devices/mmc0\:0000/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