On 24/11/16 14:02, Adrian Hunter wrote: > The JEDEC specification indicates CMD13 can be used after a HS200 switch > to check for errors. However in practice some boards experience CRC errors > in the CMD13 response. Consequently, for HS200, CRC errors are not a > reliable way to know the switch failed. If there really is a problem, we > would expect tuning will fail and the result ends up the same. So change > the error condition to ignore CRC errors in that case. > > Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> Any comments on this? > --- > drivers/mmc/core/mmc.c | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c > index 3268fcd3378d..34d30e2a09ff 100644 > --- a/drivers/mmc/core/mmc.c > +++ b/drivers/mmc/core/mmc.c > @@ -1223,7 +1223,12 @@ int mmc_hs400_to_hs200(struct mmc_card *card) > mmc_set_timing(host, MMC_TIMING_MMC_HS200); > > err = mmc_switch_status(card); > - if (err) > + /* > + * For HS200, CRC errors are not a reliable way to know the switch > + * failed. If there really is a problem, we would expect tuning will > + * fail and the result ends up the same. > + */ > + if (err && err != -EILSEQ) > goto out_err; > > mmc_set_bus_speed(card); > @@ -1387,6 +1392,14 @@ static int mmc_select_hs200(struct mmc_card *card) > > err = mmc_switch_status(card); > /* > + * For HS200, CRC errors are not a reliable way to know the > + * switch failed. If there really is a problem, we would expect > + * tuning will fail and the result ends up the same. > + */ > + if (err == -EILSEQ) > + err = 0; > + > + /* > * mmc_select_timing() assumes timing has not changed if > * it is a switch error. > */ > -- 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