Message ID | 20201208061839.21163-7-chris.ruehl@gtsys.com.hk |
---|---|
State | New |
Headers | show |
Series | mmc: core: hs400(es) fix probe/init | expand |
On Tue, 8 Dec 2020 at 07:19, Chris Ruehl <chris.ruehl@gtsys.com.hk> wrote: > > When set mmc-hs400-1_8(2)v in dts, hs200 capabilities are not checked > in the mmc logic. Thus cleanup and remove MMC_CAP2_HS200_1_8V_SDR / > MMC_CAP2_HS200_1_2V_SDR from host->caps2. I had another look at this - and I am struggling to get a grip of the problem you are trying to solve, sorry. Please try to clarify things through more descriptive commit messages. *Plain* HS400 mode does seem to require HS200 mode, because tuning needs to happen in HS200 mode. HS400 mode with enhanced strobe being supported, doesn't need HS200 to be supported as tuning isn't done in HS200 mode. In your case, the controller supports HS400 mode in (1.8V or 1.2V) with enhanced strobe, but not HS200 mode, correct? Then because of the code that runs the initialization for the eMMC card, we end up switching to HS200 mode prior enabling HS400 ES mode, which causes problems in the driver/controller for your case, correct? > > Signed-off-by: Chris Ruehl <chris.ruehl@gtsys.com.hk> > --- > drivers/mmc/core/host.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c > index 96b2ca1f1b06..46fde60a2372 100644 > --- a/drivers/mmc/core/host.c > +++ b/drivers/mmc/core/host.c > @@ -295,9 +295,9 @@ int mmc_of_parse(struct mmc_host *host) > if (device_property_read_bool(dev, "mmc-hs200-1_2v")) > host->caps2 |= MMC_CAP2_HS200_1_2V_SDR; > if (device_property_read_bool(dev, "mmc-hs400-1_8v")) > - host->caps2 |= MMC_CAP2_HS400_1_8V | MMC_CAP2_HS200_1_8V_SDR; > + host->caps2 |= MMC_CAP2_HS400_1_8V; > if (device_property_read_bool(dev, "mmc-hs400-1_2v")) > - host->caps2 |= MMC_CAP2_HS400_1_2V | MMC_CAP2_HS200_1_2V_SDR; > + host->caps2 |= MMC_CAP2_HS400_1_2V; > if (device_property_read_bool(dev, "mmc-hs400-enhanced-strobe")) > host->caps2 |= MMC_CAP2_HS400_ES; > if (device_property_read_bool(dev, "no-sdio")) > -- > 2.20.1 > Kind regards Uffe
diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c index 96b2ca1f1b06..46fde60a2372 100644 --- a/drivers/mmc/core/host.c +++ b/drivers/mmc/core/host.c @@ -295,9 +295,9 @@ int mmc_of_parse(struct mmc_host *host) if (device_property_read_bool(dev, "mmc-hs200-1_2v")) host->caps2 |= MMC_CAP2_HS200_1_2V_SDR; if (device_property_read_bool(dev, "mmc-hs400-1_8v")) - host->caps2 |= MMC_CAP2_HS400_1_8V | MMC_CAP2_HS200_1_8V_SDR; + host->caps2 |= MMC_CAP2_HS400_1_8V; if (device_property_read_bool(dev, "mmc-hs400-1_2v")) - host->caps2 |= MMC_CAP2_HS400_1_2V | MMC_CAP2_HS200_1_2V_SDR; + host->caps2 |= MMC_CAP2_HS400_1_2V; if (device_property_read_bool(dev, "mmc-hs400-enhanced-strobe")) host->caps2 |= MMC_CAP2_HS400_ES; if (device_property_read_bool(dev, "no-sdio"))
When set mmc-hs400-1_8(2)v in dts, hs200 capabilities are not checked in the mmc logic. Thus cleanup and remove MMC_CAP2_HS200_1_8V_SDR / MMC_CAP2_HS200_1_2V_SDR from host->caps2. Signed-off-by: Chris Ruehl <chris.ruehl@gtsys.com.hk> --- drivers/mmc/core/host.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)