On 04/08/17 05:08, Shawn Lin wrote: > Per the SD physical layer simplified specification V4.10, > section 4.6.2, CSD version 1.0 SD card should use taac, nsac > and r2w_factor for calculating the data access time. But the > taac and nsac for SDHC(CSD version 2.0) are always fixed and > the software should use the recommended value for timeout. When > parsing the CSD, we sanely set them to zero for SDHC(CSD version > 2.0), all the calculation for timeout_ns and timeout_clk is zero > as well. So what we actually want to limit here is either SDHC > case or unreasonable timeout reported by the cards. In principle > we should at least be able to remove the bogus check for the > mmc_card_blockaddr. > > Signed-off-by: Shawn Lin <shawn.lin@xxxxxxxxxxxxxx> > > --- > > Changes in v2: > - rephrase the changelog and only remove mmc_card_blockaddr. > > drivers/mmc/core/core.c | 12 ++++-------- > 1 file changed, 4 insertions(+), 8 deletions(-) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > index 6177eb0..edc2e75 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -761,15 +761,11 @@ void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card) > limit_us = 100000; > > /* > - * SDHC cards always use these fixed values. > + * Assign limit value if invalid. Note that for the SDHC case, > + * we set taac and nasc to zero when parsing CSD, so it's safe > + * to fall through here. > */ > - if (timeout_us > limit_us || mmc_card_blockaddr(card)) { > - data->timeout_ns = limit_us * 1000; > - data->timeout_clks = 0; > - } > - > - /* assign limit value if invalid */ > - if (timeout_us == 0) > + if (timeout_us == 0 || timeout_us > limit_us) > data->timeout_ns = limit_us * 1000; Shouldn't we still be ensuring 'data->timeout_clks = 0' for the 'timeout_us > limit_us' case > } > > -- 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