On 2017/9/22 19:22, Fabrizio Castro wrote:
mmc_regulator_get_supply returns -EPROBE_DEFER if either vmmc or vqmmc regulators had their probing deferred. vqmmc regulator is needed by UHS to work properly, therefore this patch checks the value returned by mmc_regulator_get_supply to make sure we have a reference to both vmmc and vqmmc (if found in the DT). Signed-off-by: Fabrizio Castro <fabrizio.castro@xxxxxxxxxxxxxx> --- I believe this patch is in order for UHS to work properly on the RZ/G1 platforms as the signal voltage needs to be switched from 3.3V to 1.8V, and therefore we need to make sure we hold a reference to vqmmc. Without this patch there is a chance that the regulator driver gets probed later on and therefore we end up without control over the power regulator. I have seen an RZ/G1E based platform failing the transition to UHS because of this.
It makes sense.
However, there are side effects to it as the mmc devices will be enumerated in a different order (due to -EPROBE_DEFER), this means this patch would likely break existing platforms.
However this doesn't. The user daemon should never relies on the sequency of probing the mmc block part. We neither support to provide alias for the device id, nor guarantee the first probed controller get the first block id. Please use PARTUUID for rootfs, etc. So this shouldn't be a big deal.
Please, let me know your comments. drivers/mmc/host/tmio_mmc_core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c index 88a9435..3df0413 100644 --- a/drivers/mmc/host/tmio_mmc_core.c +++ b/drivers/mmc/host/tmio_mmc_core.c @@ -1153,8 +1153,11 @@ static int tmio_mmc_init_ocr(struct tmio_mmc_host *host) { struct tmio_mmc_data *pdata = host->pdata; struct mmc_host *mmc = host->mmc; + int err; - mmc_regulator_get_supply(mmc); + err = mmc_regulator_get_supply(mmc); + if (err) + return err; /* use ocr_mask if no regulator */ if (!mmc->ocr_avail)
-- Best Regards Shawn Lin