Adding Philip and Zhangfei. Hi Subhash, Does your controller follow some non-standard steps for initialization? I referred to Figure 3-14, section 3.9.4 of Physical Layer Spec v3.01, and it shows the order, setting Driver Strength Select, Bus Speed Mode, and then Current Limit. So please confirm back. Thanks, Arindam > -----Original Message----- > From: subhashj@xxxxxxxxxxxxxx [mailto:subhashj@xxxxxxxxxxxxxx] > Sent: Tuesday, June 14, 2011 1:27 AM > To: Nath, Arindam > Subject: FW: UHS-I bus speed mode should be set last in UHS > initialization > > Hi Arindam, > > Does this change make sense for you? If yes, then I can go ahead and > post a > patch for this. > > Regards, > Subhash > > -----Original Message----- > From: linux-mmc-owner@xxxxxxxxxxxxxxx > [mailto:linux-mmc-owner@xxxxxxxxxxxxxxx] On Behalf Of Subhash Jadavani > Sent: Monday, June 06, 2011 3:44 PM > To: linux-mmc@xxxxxxxxxxxxxxx > Subject: UHS-I bus speed mode should be set last in UHS initialization > > Hi Chris, Arindam, > > mmc_sd_init_uhs_card function sets the driver type, current limit and > bus > speed mode on card as well as on host controller side. Currently bus > speed > mode is set by sending CMD6 to card and setting timing mode in host > controller and then before initiating tuning sequence, it also tries to > set current limit by sending CMD6 to card which fails on our host > controller (due to data CRC or timeout errors) if bus speed mode is > SDR50/SDR104 mode. > > So basically bus speed mode should be set only after current limit is > set > in the card and immediately after setting the bus speed mode, tuning > sequence should be initiated. So following changes is needed. If it > looks > fine then I can send you this change in patch. > > diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index > 0da37eb..19634d5 100644 > --- a/drivers/mmc/core/sd.c > +++ b/drivers/mmc/core/sd.c > @@ -610,13 +610,13 @@ static int mmc_sd_init_uhs_card(struct mmc_card > *card) > if (err) > goto out; > > - /* Set bus speed mode of the card */ > - err = sd_set_bus_speed_mode(card, status); > + /* Set current limit for the card */ > + err = sd_set_current_limit(card, status); > if (err) > goto out; > > - /* Set current limit for the card */ > - err = sd_set_current_limit(card, status); > + /* Set bus speed mode of the card */ > + err = sd_set_bus_speed_mode(card, status); > if (err) > goto out; > > Regards, > Subhash > > -- > Sent by a consultant of the Qualcomm Innovation Center, Inc. > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora > Forum. > > > -- > 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 > -- 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