mmc: core: Don't do eMMC HW reset when resuming the eMMC card
authorUlf Hansson <ulf.hansson@linaro.org>
Mon, 8 May 2017 21:52:04 +0000 (23:52 +0200)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:38:17 +0000 (15:38 -0500)
commitef2e9bd847178d0803f0f8b6673d1505594b76ce
tree658df5c226f2bd6226d351ded25f2066eec21135
parent5cc91fcf25ad6f9c93998b31a2d45a3627d67488
mmc: core: Don't do eMMC HW reset when resuming the eMMC card

In case if a pwrseq-emmc has been bound to the host, a call to
mmc_power_up() triggers an eMMC HW reset via the pwrseq_emmc's
->post_power_on() callback. This isn't really what we want, as
mmc_power_up() is called each time when resuming the card.

As a matter of fact, the current approach may also violate the eMMC spec,
as the involved delays managed in pwrseq_emmc assumes both VCC and VCCQ has
been turned on, which isn't the case for VCCQ, unless the regulator is
always on.

Fix this behaviour by aligning to the same procedure used when the mmc host
implements the ->hw_reset() callback and has the MMC_CAP_HW_RESET flag set.
In this way the eMMC HW reset is issued at card detection scan, to cope
with bogus bootloaders and in the error recovery path via the mmc specific
bus_ops->reset() callback.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
(cherry picked from commit 52c8212d80b69d2197bb8506384b6e6a0aef7fb7)
drivers/mmc/core/core.c
drivers/mmc/core/mmc.c
drivers/mmc/core/pwrseq_emmc.c