RE: Linux v3.1-rc8 : SDHC card do not switch to high speed mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



+Subhash

Hi Subhash,

If I am not mistaken, there was patch by you couple of weeks back to fix the issue. Did you not post your final version of the patch to community?

Thanks,
Arindam

> -----Original Message-----
> From: Hiremath, Vaibhav [mailto:hvaibhav@xxxxxx]
> Sent: Monday, October 17, 2011 8:19 PM
> To: Hebbar, Gururaja; linux-mmc@xxxxxxxxxxxxxxx
> Cc: linux-omap@xxxxxxxxxxxxxxx; Nath, Arindam; prakity@xxxxxxxxxxx;
> prakity@xxxxxxxxxxx; zhangfei.gao@xxxxxxxxxxx; cjb@xxxxxxxxxx; Saxena,
> Parth
> Subject: RE: Linux v3.1-rc8 : SDHC card do not switch to high speed
> mode
> 
> > -----Original Message-----
> > From: linux-omap-owner@xxxxxxxxxxxxxxx [mailto:linux-omap-
> > owner@xxxxxxxxxxxxxxx] On Behalf Of Hebbar, Gururaja
> > Sent: Thursday, October 13, 2011 8:19 PM
> > To: linux-mmc@xxxxxxxxxxxxxxx
> > Cc: linux-omap@xxxxxxxxxxxxxxx
> > Subject: Linux v3.1-rc8 : SDHC card do not switch to high speed mode
> >
> > Hi all,
> >
> > We are porting existing OMAP HSMMC driver (omap_hsmmc.c) to an
> upcoming
> > SOC.
> >
> > When testing the driver with SanDisk 16GB SDHC Card (SanDisk Extreme
> HD
> > Video 16GB 20Mb/s), we observed that the card doesn't switch to High
> Speed
> > mode.
> >
> > The card shows that it is compatible with SDA spec3.
> >
> > We are testing on Linux v3.1-rc8
> >
> >
> > In mmc_sd_init_card(), rocr received from card is 0xc0ff8000, (S18A
> bit
> > not set).
> >
> > During mmc_sd_setup_card() --> mmc_decode_scr(), when decoding scr,
> the
> > card specifies that it is sda spec3 compatible
> >
> > 	if (scr->sda_vsn == SCR_SPEC_VER_2)
> > 		/* Check if Physical Layer Spec v3.0 is supported */
> > 		scr->sda_spec3 = UNSTUFF_BITS(resp, 47, 1);
> 	--
> > > true
> >
> > Then during mmc_read_switch(), since it's a sda spec3 card, the code
> goes
> > to read sd3_drv_type & sd3_curr_limit and skips settings hs_max_dtr.
> >
> > mmc_sd_switch_hs() returns back since hs_max_dtr == 0
> >
> > 	if (card->sw_caps.hs_max_dtr == 0)
> > 		return 0;
> >
> > Because of this Card isn't switched to High Speed mode.
> >
> [Hiremath, Vaibhav] After doing bisect, I could able to nail down the
> commit which is leading to this issue.
> 
> 
> psplinux060:/datalocal/omap-kernel>git bisect good
> d6d50a15a2897d4133d536dd4343b5cf21163db3 is the first bad commit
> commit d6d50a15a2897d4133d536dd4343b5cf21163db3
> Author: Arindam Nath <arindam.nath@xxxxxxx>
> Date:   Thu May 5 12:18:59 2011 +0530
> 
>     mmc: sd: add support for driver type selection
> 
>     This patch adds support for setting driver strength during UHS-I
>     initialization procedure. Since UHS-I cards set S18A (bit 24) in
>     response to ACMD41, we use this as a base for UHS-I initialization.
>     We modify the parameter list of mmc_sd_get_cid() so that we can
>     save the ROCR from ACMD41 to check whether bit 24 is set.
> 
>     We decide whether the Host Controller supports A, C, or D driver
>     type depending on the Capabilities register. Driver type B is
>     suported by default. We then set the appropriate driver type for
>     the card using CMD6 mode 1. As per Host Controller spec v3.00, we
>     set driver type for the host only if Preset Value Enable in the
>     Host Control2 register is not set. SDHCI_HOST_CONTROL has been
>     renamed to SDHCI_HOST_CONTROL1 to conform to the spec.
> 
>     Tested by Zhangfei Gao with a Toshiba uhs card and general hs card,
>     on mmp2 in SDMA mode.
> 
>     Signed-off-by: Arindam Nath <arindam.nath@xxxxxxx>
>     Reviewed-by: Philip Rakity <prakity@xxxxxxxxxxx>
>     Tested-by: Philip Rakity <prakity@xxxxxxxxxxx>
>     Acked-by: Zhangfei Gao <zhangfei.gao@xxxxxxxxxxx>
>     Signed-off-by: Chris Ball <cjb@xxxxxxxxxx>
> 
> 
> I am not a MMC/SD expert, but looking at the logic I did change to code
> to something like,
> 
> 
> diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
> index 0370e03..1a45059 100644
> --- a/drivers/mmc/core/sd.c
> +++ b/drivers/mmc/core/sd.c
> @@ -348,10 +348,9 @@ static int mmc_read_switch(struct mmc_card *card)
>                 }
> 
>                 card->sw_caps.sd3_curr_limit = status[7];
> -       } else {
> -               if (status[13] & 0x02)
> -                       card->sw_caps.hs_max_dtr = 50000000;
>         }
> +       if (status[13] & 0x02)
> +               card->sw_caps.hs_max_dtr = 50000000;
> 
>  out:
>         kfree(status);
> 
> 
> This resolves the issue, and now card is getting detected properly as a
> high speed card.
> May be I am wrong completely here, any pointers? Any comments?
> 
> Thanks,
> Vaibhav
> 
> > Is there any solution for this? Has anyone seen this issue.
> >
> > Thanks in advance.
> >
> >
> > I am also attaching the log I get from the sd dev attr
> >
> > Regards
> > Gururaja
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > cid
> > 0353445344313647800c03994400ac6f
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > csd
> > 400e00325b59000076b27f800a404013
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > date
> > 12/2010
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > erase_size
> > 512
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > fwrev
> > 0x0
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > hwrev
> > 0x8
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > name
> > SD16G
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > manfid
> > 0x000003
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > oemid
> > 0x5344
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > preferred_erase_size
> > 4194304
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > scr
> > 0235800000000000
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > serial
> > 0x0c039944
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > type
> > SD
> >
> > root@arago-
> >
> armv7:/sys/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0/mmc0:aaaa#
> cat
> > uevent
> > DRIVER=mmcblk
> > MMC_TYPE=SD
> > MMC_NAME=SD16G
> > MODALIAS=mmc:block
> >
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-omap"
> in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html


--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux