> -----Original Message----- > From: subhashj@xxxxxxxxxxxxxx [mailto:subhashj@xxxxxxxxxxxxxx] > Sent: Thursday, March 10, 2011 7:50 PM > To: Nath, Arindam; cjb@xxxxxxxxxx > Cc: zhangfei.gao@xxxxxxxxx; prakity@xxxxxxxxxxx; linux- > mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; anath.amd@xxxxxxxxx > Subject: RE: [PATCH v2 10/12] mmc: sdhci: enable preset value after uhs > initialization > > > > > -----Original Message----- > > From: Nath, Arindam [mailto:Arindam.Nath@xxxxxxx] > > Sent: Thursday, March 10, 2011 7:46 PM > > To: subhashj@xxxxxxxxxxxxxx; cjb@xxxxxxxxxx > > Cc: zhangfei.gao@xxxxxxxxx; prakity@xxxxxxxxxxx; linux- > > mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; anath.amd@xxxxxxxxx > > Subject: RE: [PATCH v2 10/12] mmc: sdhci: enable preset value after > uhs > > initialization > > > > > > > > > -----Original Message----- > > > From: subhashj@xxxxxxxxxxxxxx [mailto:subhashj@xxxxxxxxxxxxxx] > > > Sent: Thursday, March 10, 2011 7:43 PM > > > To: Nath, Arindam; cjb@xxxxxxxxxx > > > Cc: zhangfei.gao@xxxxxxxxx; prakity@xxxxxxxxxxx; linux- > > > mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; anath.amd@xxxxxxxxx > > > Subject: RE: [PATCH v2 10/12] mmc: sdhci: enable preset value after > > uhs > > > initialization > > > > > > > > > > > > > -----Original Message----- > > > > From: linux-mmc-owner@xxxxxxxxxxxxxxx [mailto:linux-mmc- > > > > owner@xxxxxxxxxxxxxxx] On Behalf Of Nath, Arindam > > > > Sent: Thursday, March 10, 2011 7:38 PM > > > > To: subhashj@xxxxxxxxxxxxxx; cjb@xxxxxxxxxx > > > > Cc: zhangfei.gao@xxxxxxxxx; prakity@xxxxxxxxxxx; linux- > > > > mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; anath.amd@xxxxxxxxx > > > > Subject: RE: [PATCH v2 10/12] mmc: sdhci: enable preset value > after > > > uhs > > > > initialization > > > > > > > > > -----Original Message----- > > > > > From: subhashj@xxxxxxxxxxxxxx [mailto:subhashj@xxxxxxxxxxxxxx] > > > > > Sent: Thursday, March 10, 2011 7:34 PM > > > > > To: Nath, Arindam; cjb@xxxxxxxxxx > > > > > Cc: zhangfei.gao@xxxxxxxxx; prakity@xxxxxxxxxxx; linux- > > > > > mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; anath.amd@xxxxxxxxx > > > > > Subject: RE: [PATCH v2 10/12] mmc: sdhci: enable preset value > > after > > > > uhs > > > > > initialization > > > > > > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > From: linux-mmc-owner@xxxxxxxxxxxxxxx [mailto:linux-mmc- > > > > > > owner@xxxxxxxxxxxxxxx] On Behalf Of Nath, Arindam > > > > > > Sent: Thursday, March 10, 2011 7:20 PM > > > > > > To: subhashj@xxxxxxxxxxxxxx; cjb@xxxxxxxxxx > > > > > > Cc: zhangfei.gao@xxxxxxxxx; prakity@xxxxxxxxxxx; linux- > > > > > > mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; > anath.amd@xxxxxxxxx > > > > > > Subject: RE: [PATCH v2 10/12] mmc: sdhci: enable preset value > > > after > > > > > uhs > > > > > > initialization > > > > > > > > > > > > > -----Original Message----- > > > > > > > From: subhashj@xxxxxxxxxxxxxx > > [mailto:subhashj@xxxxxxxxxxxxxx] > > > > > > > Sent: Thursday, March 10, 2011 7:15 PM > > > > > > > To: Nath, Arindam; cjb@xxxxxxxxxx > > > > > > > Cc: zhangfei.gao@xxxxxxxxx; prakity@xxxxxxxxxxx; linux- > > > > > > > mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; > > anath.amd@xxxxxxxxx > > > > > > > Subject: RE: [PATCH v2 10/12] mmc: sdhci: enable preset > value > > > > after > > > > > > uhs > > > > > > > initialization > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > From: linux-mmc-owner@xxxxxxxxxxxxxxx [mailto:linux-mmc- > > > > > > > > owner@xxxxxxxxxxxxxxx] On Behalf Of Nath, Arindam > > > > > > > > Sent: Thursday, March 10, 2011 7:01 PM > > > > > > > > To: subhashj@xxxxxxxxxxxxxx; cjb@xxxxxxxxxx > > > > > > > > Cc: zhangfei.gao@xxxxxxxxx; prakity@xxxxxxxxxxx; linux- > > > > > > > > mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; > > > anath.amd@xxxxxxxxx > > > > > > > > Subject: RE: [PATCH v2 10/12] mmc: sdhci: enable preset > > value > > > > > after > > > > > > > uhs > > > > > > > > initialization > > > > > > > > > > > > > > > > Hi Subhash, > > > > > > > > > > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > > From: subhashj@xxxxxxxxxxxxxx > > > > [mailto:subhashj@xxxxxxxxxxxxxx] > > > > > > > > > Sent: Thursday, March 10, 2011 6:54 PM > > > > > > > > > To: Nath, Arindam; cjb@xxxxxxxxxx > > > > > > > > > Cc: zhangfei.gao@xxxxxxxxx; prakity@xxxxxxxxxxx; linux- > > > > > > > > > mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; > > > > anath.amd@xxxxxxxxx > > > > > > > > > Subject: RE: [PATCH v2 10/12] mmc: sdhci: enable preset > > > value > > > > > > after > > > > > > > > uhs > > > > > > > > > initialization > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > > > From: linux-mmc-owner@xxxxxxxxxxxxxxx [mailto:linux- > > mmc- > > > > > > > > > > owner@xxxxxxxxxxxxxxx] On Behalf Of Arindam Nath > > > > > > > > > > Sent: Friday, March 04, 2011 5:03 PM > > > > > > > > > > To: cjb@xxxxxxxxxx > > > > > > > > > > Cc: zhangfei.gao@xxxxxxxxx; prakity@xxxxxxxxxxx; > > > > > > > > > > subhashj@xxxxxxxxxxxxxx; linux-mmc@xxxxxxxxxxxxxxx; > > > > > > > > henry.su@xxxxxxx; > > > > > > > > > > aaron.lu@xxxxxxx; anath.amd@xxxxxxxxx; Arindam Nath > > > > > > > > > > Subject: [PATCH v2 10/12] mmc: sdhci: enable preset > > value > > > > > after > > > > > > > uhs > > > > > > > > > > initialization > > > > > > > > > > > > > > > > > > > > According to the Host Controller spec v3.00, setting > > > Preset > > > > > > Value > > > > > > > > > > Enable > > > > > > > > > > in the Host Control2 register lets SDCLK Frequency > > > Select, > > > > > > Clock > > > > > > > > > > Generator > > > > > > > > > > Select and Driver Strength Select to be set > > automatically > > > > by > > > > > > the > > > > > > > > Host > > > > > > > > > > Controller based on the UHS-I mode set. This patch > > > enables > > > > > this > > > > > > > > > > feature. > > > > > > > > > > We also reset Preset Value Enable when the card is > > > removed > > > > > from > > > > > > > the > > > > > > > > > > slot. > > > > > > > > > > > > > > > > > > What does this preset_value means? Is this defined in > > > SD3.01 > > > > > > spec? > > > > > > > I > > > > > > > > > think > > > > > > > > > it looks like specific to your controller (sdhci). If > > it's > > > > > > specific > > > > > > > > to > > > > > > > > > your > > > > > > > > > controller then this new mmc_ops should not be added. > > > > > > > > > > > > > > > > Preset Value Enable is very much part of the standard SD > > Host > > > > > > > > Controller spec v3.00. Please refer to Host Control 2 > > > register. > > > > > > > > > > > > > > I don't think all controllers should be compliant to SD > host > > > > > > controller > > > > > > > spec. I don't think controller on our chips has something > > like > > > > > this. > > > > > > > > > > > > But from the spec it looks as if controllers conforming to > > v3.00 > > > > > should > > > > > > provide this feature. There is no other bit anywhere else in > > the > > > > spec > > > > > > which can indicate support for Preset Value Enable except for > > the > > > > > > controller version number. > > > > > > > > > > Actually, I am not aware about this controller spec v3.00. can > > you > > > > > please > > > > > point me to the link for this spec (if it's available)? > > > > > > > > The spec is named "SD Host Controller Standard Specification > > > Ver3.00". > > > > I think it can be downloaded from sdcard.org, but you will need > to > > > pay > > > > for the license. > > > > > > > > > Thanks. I just read from here: > > > http://www.sdcard.org/developers/tech/host_controller/. I think > this > > > spec is > > > just recommendation for implementing Host controller Hw. > > > It doesn't mean all Host controllers on all different chipset > should > > > have > > > same register interface as mentioned by the spec. I don't think > > > controller > > > on our chipset complies to this. Controller just complies to > provide > > > all SD > > > Physical layer spec v3.00/v3.01. > > > > In that case I think it is safe enough to check the version of Host > > Controller for v3.00 before enabling Preset Value. > > I don't think controller on our chipset is compliant to any of the host > controller spec (2.0 or 3.0). But in that case the Host Controller Version Register, offset FEh, should actually tell us the conformance level of the HC. Please correct if wrong. Thanks, Arindam > > > > > > > Thanks, > > Arindam > > > > > > > > > > > > > > > > Thanks, > > > > Arindam > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > Arindam > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > Arindam > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Signed-off-by: Arindam Nath <arindam.nath@xxxxxxx> > > > > > > > > > > --- > > > > > > > > > > drivers/mmc/core/sd.c | 7 +++++++ > > > > > > > > > > drivers/mmc/host/sdhci.c | 36 > > > > > > > > ++++++++++++++++++++++++++++++++++++ > > > > > > > > > > include/linux/mmc/host.h | 1 + > > > > > > > > > > 3 files changed, 44 insertions(+), 0 deletions(-) > > > > > > > > > > > > > > > > > > > > diff --git a/drivers/mmc/core/sd.c > > > b/drivers/mmc/core/sd.c > > > > > > > > > > index 1e2d157..ae7a771 100644 > > > > > > > > > > --- a/drivers/mmc/core/sd.c > > > > > > > > > > +++ b/drivers/mmc/core/sd.c > > > > > > > > > > @@ -962,6 +962,13 @@ static int > mmc_sd_init_card(struct > > > > > > mmc_host > > > > > > > > > *host, > > > > > > > > > > u32 ocr, > > > > > > > > > > } > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > + /* > > > > > > > > > > + * Since initialization is now complete, enable > > > > preset > > > > > > > > > > + * value registers. > > > > > > > > > > + */ > > > > > > > > > > + if (host->ops->enable_preset_value) > > > > > > > > > > + host->ops->enable_preset_value(host); > > > > > > > > > > + > > > > > > > > > > host->card = card; > > > > > > > > > > return 0; > > > > > > > > > > > > > > > > > > > > diff --git a/drivers/mmc/host/sdhci.c > > > > > > b/drivers/mmc/host/sdhci.c > > > > > > > > > > index 8f4f102..1f6e4ad 100644 > > > > > > > > > > --- a/drivers/mmc/host/sdhci.c > > > > > > > > > > +++ b/drivers/mmc/host/sdhci.c > > > > > > > > > > @@ -1602,6 +1602,40 @@ out: > > > > > > > > > > spin_unlock_irqrestore(&host->lock, flags); > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > +static void sdhci_enable_preset_value(struct > mmc_host > > > > *mmc) > > > > > > > > > > +{ > > > > > > > > > > + struct sdhci_host *host; > > > > > > > > > > + u16 ctrl; > > > > > > > > > > + unsigned long flags; > > > > > > > > > > + > > > > > > > > > > + host = mmc_priv(mmc); > > > > > > > > > > + > > > > > > > > > > + /* Host Controller v3.00 defines preset value > > > > registers */ > > > > > > > > > > + if (host->version < SDHCI_SPEC_300) > > > > > > > > > > + return; > > > > > > > > > > + > > > > > > > > > > + spin_lock_irqsave(&host->lock, flags); > > > > > > > > > > + > > > > > > > > > > + ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); > > > > > > > > > > + ctrl |= SDHCI_CTRL_PRESET_VAL_ENABLE; > > > > > > > > > > + sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); > > > > > > > > > > + > > > > > > > > > > + spin_unlock_irqrestore(&host->lock, flags); > > > > > > > > > > +} > > > > > > > > > > + > > > > > > > > > > +static void sdhci_disable_preset_value(struct > > sdhci_host > > > > > > *host) > > > > > > > > > > +{ > > > > > > > > > > + u16 ctrl; > > > > > > > > > > + > > > > > > > > > > + /* Only for Host Controller version >= v3.00 */ > > > > > > > > > > + if (host->version < SDHCI_SPEC_300) > > > > > > > > > > + return; > > > > > > > > > > + > > > > > > > > > > + ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); > > > > > > > > > > + ctrl &= ~SDHCI_CTRL_PRESET_VAL_ENABLE; > > > > > > > > > > + sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); > > > > > > > > > > +} > > > > > > > > > > + > > > > > > > > > > static const struct mmc_host_ops sdhci_ops = { > > > > > > > > > > .request = sdhci_request, > > > > > > > > > > .set_ios = sdhci_set_ios, > > > > > > > > > > @@ -1610,6 +1644,7 @@ static const struct > mmc_host_ops > > > > > > sdhci_ops > > > > > > > = > > > > > > > > { > > > > > > > > > > .start_signal_voltage_switch = > > > > > > > > > > sdhci_start_signal_voltage_switch, > > > > > > > > > > .get_max_current_180 = > > > > sdhci_get_max_current_180, > > > > > > > > > > .execute_tuning = > sdhci_execute_tuning, > > > > > > > > > > + .enable_preset_value = > > > > sdhci_enable_preset_value, > > > > > > > > > > }; > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > /********************************************************************** > > > > > > > > > > *******\ > > > > > > > > > > @@ -1920,6 +1955,7 @@ static irqreturn_t > sdhci_irq(int > > > irq, > > > > > > void > > > > > > > > > > *dev_id) > > > > > > > > > > sdhci_writel(host, intmask & > > > > (SDHCI_INT_CARD_INSERT > > > > > | > > > > > > > > > > SDHCI_INT_CARD_REMOVE), > > > > SDHCI_INT_STATUS); > > > > > > > > > > tasklet_schedule(&host->card_tasklet); > > > > > > > > > > + sdhci_disable_preset_value(host); > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > intmask &= ~(SDHCI_INT_CARD_INSERT | > > > > > > > SDHCI_INT_CARD_REMOVE); > > > > > > > > > > diff --git a/include/linux/mmc/host.h > > > > > > b/include/linux/mmc/host.h > > > > > > > > > > index 651e40b..e63e063 100644 > > > > > > > > > > --- a/include/linux/mmc/host.h > > > > > > > > > > +++ b/include/linux/mmc/host.h > > > > > > > > > > @@ -130,6 +130,7 @@ struct mmc_host_ops { > > > > > > > > > > int (*start_signal_voltage_switch)(struct > mmc_host > > > > > > > *host); > > > > > > > > > > int (*get_max_current_180)(struct mmc_host > *mmc); > > > > > > > > > > void (*execute_tuning)(struct mmc_host *host); > > > > > > > > > > + void (*enable_preset_value)(struct mmc_host > *host); > > > > > > > > > > }; > > > > > > > > > > > > > > > > > > > > struct mmc_card; > > > > > > > > > > -- > > > > > > > > > > 1.7.1 > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > 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 > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > 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 > > > > > > > -- 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