On 22 November 2016 at 22:01, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > On 22 November 2016 at 21:56, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: >> Changes in v2: >> >> - From discussions around the difficulties for how to support CMD13 >> polling for HS200, HS400 HS400ES, I decided to drop those patches for >> now. It's is particularly due to the need for tuning, after a speed mode >> switch, that makes it hard to rely on CMD13 polling for these cases. >> Perhaps we can allow CMD13 polling when switching to the intermediate >> speed modes, but let's deal with that outside of this series. >> >> - Folded in a new patch, which checks the SWITCH_ERROR bit in each >> CMD13 response when polling with CMD13. Patch v2 4/7. >> >> - No other changes made to the rest of the series. >> >> >> >> Several changes has been made for how and when to use CMD13 as a >> polling-method, to find out when the mmc cards stops signaling busy after >> sending a CMD6. This particularly concerns the cases when switching to new bus >> speed modes, such as HS (high-speed), HS DDR, HS200, HS400 and HS400ES. >> >> Currently CMD13 polling is *not* allowed for these cases, but this was recently >> changed - and which did cause regressions for card detection for some >> platforms. >> >> A simple fix was made to solve these regressions, simply by using a default >> CMD6 generic timeout of 500ms, as to avoid using the fall-back timeout in >> __mmc_switch() of 10min. That greatly improve the situation and one could >> consider the regressions as "solved". >> >> However, this simple fix is still causing unnecessary long card initialization >> times, especially for those mmc hosts that doesn't support HW busy detection >> (using MMC_CAP_WAIT_WHILE_BUSY and/or implements the ->card_busy() host ops). >> >> This because we wait a fixed amount of time (CMD6 generic timeout) to make sure >> the card is done signaling busy, while in practice this happens a lot sooner. >> >> A couple of tests for HS and HS DDR eMMC cards, shows the card only need a few >> ms to complete the bus speed mode changes, thus it's far less than the CMD6 >> generic timeout. >> >> To improve this behaviour and shorten the card initialization time, we need to >> allow using CMD13 as polling method to find out when the card stops signaling >> busy. Although, enabling CMD13 polling may also introduce other issues as >> according to the JEDEC spec, it's not the recommended method. Especially it >> mentions that CRC errors may be triggered when sending a CMD13 command during a >> bus timing change. >> >> To deal with these issues, we need to change from ignoring those CRC errors but >> instead continue to treat the card as being busy and continue to poll with >> CMD13. Perhaps this behaviour is one of reasons to why the earlier CMD13 polling >> method didn't work out well. >> >> This series requires extensive testing, please help with that! >> >> I have currently tested it with HS and HS DDR eMMC cards, and for combinations >> of an mmc hosts (mmci) supporting HW busy detection and not (local hacks in >> mmci.c). >> >> >> Ulf Hansson (9): >> mmc: core: Retry instead of ignore at CRC errors when polling for busy >> mmc: core: Remove redundant __mmc_send_status() >> mmc: core: Rename ignore_crc to retry_crc_err to reflect its purpose >> mmc: core: Enable __mmc_switch() to change bus speed timing for the >> host >> mmc: core: Allow CMD13 polling when switching to HS mode for mmc >> mmc: core: Update CMD13 polling policy when switch to HS DDR mode >> mmc: core: Allow CMD13 polling when switch to HS200 mode >> mmc: core: Allow CMD13 polling when switch to HS400 mode >> mmc: core: Allow CMD13 polling when switch to HS400ES mode >> >> drivers/mmc/core/core.c | 2 +- >> drivers/mmc/core/mmc.c | 156 ++++++++++++++------------------------------- >> drivers/mmc/core/mmc_ops.c | 45 +++++++------ >> drivers/mmc/core/mmc_ops.h | 4 +- >> 4 files changed, 77 insertions(+), 130 deletions(-) > > Oops, forgot to clean up the cover letter. Please ignore the summary > of changes above. It's the below changes that are the v2 series. > > Apologize for the inconvenience! > > Kind regards > Uffe > >> >> -- >> 1.9.1 >> >> >> >> >> >> >> *** BLURB HERE *** >> >> Ulf Hansson (7): >> mmc: core: Retry instead of ignore at CRC errors when polling for busy >> mmc: core: Remove redundant __mmc_send_status() >> mmc: core: Rename ignore_crc to retry_crc_err to reflect its purpose >> mmc: core: Check SWITCH_ERROR bit from each CMD13 response when >> polling >> mmc: core: Enable __mmc_switch() to change bus speed timing for the >> host >> mmc: core: Allow CMD13 polling when switching to HS mode for mmc >> mmc: core: Update CMD13 polling policy when switch to HS DDR mode >> >> drivers/mmc/core/core.c | 2 +- >> drivers/mmc/core/mmc.c | 53 +++++++++++++++++++++++----------------------- >> drivers/mmc/core/mmc_ops.c | 51 ++++++++++++++++++++++++++------------------ >> drivers/mmc/core/mmc_ops.h | 4 ++-- >> 4 files changed, 60 insertions(+), 50 deletions(-) >> >> -- >> 1.9.1 >> I have applied this for next, let's see what the kernelci reports. More tests is still warmly appreciated, and I can still add tested/reviewed-by tags. Kind regards Uffe -- 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