mmc: msm_sdhci: Use mmc_of_parse for setting host_caps

Message ID 20200716090726.13343-1-manivannan.sadhasivam@linaro.org
State Accepted
Commit 8505147403584f322bf1cb66b1c796bc11f29ad4
Headers show
Series
  • mmc: msm_sdhci: Use mmc_of_parse for setting host_caps
Related show

Commit Message

Manivannan Sadhasivam July 16, 2020, 9:07 a.m.
Since the introduction of 'get_cd' callback in sdhci core,
dragonboard410c's MMC interface is broken. It turns out that 'get_cd'
callback checks for the host_caps for validating the chip select. And
since the msm_sdhci driver is not parsing the host_caps from DT, not
all of the cababilities are parsed properly. This results in the MMC
interfaces to be broken.

Hence, fix this by adding a call to 'mmc_of_parse' during driver probe.

Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

---
 drivers/mmc/msm_sdhci.c | 4 ++++
 1 file changed, 4 insertions(+)

-- 
2.17.1

Comments

Anibal Limon July 16, 2020, 1:50 p.m. | #1
I tested the patch using,

https://snapshots.linaro.org/96boards/dragonboard410c/linaro/uboot/28/

And now the mmc devices appears.

On Thu, 16 Jul 2020 at 04:07, Manivannan Sadhasivam <
manivannan.sadhasivam@linaro.org> wrote:

> Since the introduction of 'get_cd' callback in sdhci core,

> dragonboard410c's MMC interface is broken. It turns out that 'get_cd'

> callback checks for the host_caps for validating the chip select. And

> since the msm_sdhci driver is not parsing the host_caps from DT, not

> all of the cababilities are parsed properly. This results in the MMC

> interfaces to be broken.

>

> Hence, fix this by adding a call to 'mmc_of_parse' during driver probe.

>

> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

>

Tested-by: Aníbal Limón <anibal.limon@linaro.org>


> ---

>  drivers/mmc/msm_sdhci.c | 4 ++++

>  1 file changed, 4 insertions(+)

>

> diff --git a/drivers/mmc/msm_sdhci.c b/drivers/mmc/msm_sdhci.c

> index da3ae2ec35..23e2e0fbc3 100644

> --- a/drivers/mmc/msm_sdhci.c

> +++ b/drivers/mmc/msm_sdhci.c

> @@ -142,6 +142,10 @@ static int msm_sdc_probe(struct udevice *dev)

>                 writel(caps, host->ioaddr +

> SDHCI_VENDOR_SPEC_CAPABILITIES0);

>         }

>

> +       ret = mmc_of_parse(dev, &plat->cfg);

> +       if (ret)

> +               return ret;

> +

>         host->mmc = &plat->mmc;

>         host->mmc->dev = dev;

>         ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0);

> --

> 2.17.1

>

>
Ramon Fried July 16, 2020, 4:48 p.m. | #2
On Thu, Jul 16, 2020 at 4:50 PM Anibal Limon <anibal.limon@linaro.org> wrote:
>

> I tested the patch using,

>

> https://snapshots.linaro.org/96boards/dragonboard410c/linaro/uboot/28/

>

> And now the mmc devices appears.

>

> On Thu, 16 Jul 2020 at 04:07, Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> wrote:

>>

>> Since the introduction of 'get_cd' callback in sdhci core,

>> dragonboard410c's MMC interface is broken. It turns out that 'get_cd'

>> callback checks for the host_caps for validating the chip select. And

>> since the msm_sdhci driver is not parsing the host_caps from DT, not

>> all of the cababilities are parsed properly. This results in the MMC

>> interfaces to be broken.

>>

>> Hence, fix this by adding a call to 'mmc_of_parse' during driver probe.

>>

>> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

>

> Tested-by: Aníbal Limón <anibal.limon@linaro.org>

>>

>> ---

>>  drivers/mmc/msm_sdhci.c | 4 ++++

>>  1 file changed, 4 insertions(+)

>>

>> diff --git a/drivers/mmc/msm_sdhci.c b/drivers/mmc/msm_sdhci.c

>> index da3ae2ec35..23e2e0fbc3 100644

>> --- a/drivers/mmc/msm_sdhci.c

>> +++ b/drivers/mmc/msm_sdhci.c

>> @@ -142,6 +142,10 @@ static int msm_sdc_probe(struct udevice *dev)

>>                 writel(caps, host->ioaddr + SDHCI_VENDOR_SPEC_CAPABILITIES0);

>>         }

>>

>> +       ret = mmc_of_parse(dev, &plat->cfg);

>> +       if (ret)

>> +               return ret;

>> +

>>         host->mmc = &plat->mmc;

>>         host->mmc->dev = dev;

>>         ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0);

>> --

>> 2.17.1

>>

Reviewed-By: Ramon Fried <rfried.dev@gmail.com>
Jaehoon Chung July 17, 2020, 12:36 a.m. | #3
On 7/16/20 6:07 PM, Manivannan Sadhasivam wrote:
> Since the introduction of 'get_cd' callback in sdhci core,

> dragonboard410c's MMC interface is broken. It turns out that 'get_cd'

> callback checks for the host_caps for validating the chip select. And

> since the msm_sdhci driver is not parsing the host_caps from DT, not

> all of the cababilities are parsed properly. This results in the MMC

> interfaces to be broken.

> 

> Hence, fix this by adding a call to 'mmc_of_parse' during driver probe.

> 

> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>


Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>


Best Regards,
Jaehoon Chung

> ---

>  drivers/mmc/msm_sdhci.c | 4 ++++

>  1 file changed, 4 insertions(+)

> 

> diff --git a/drivers/mmc/msm_sdhci.c b/drivers/mmc/msm_sdhci.c

> index da3ae2ec35..23e2e0fbc3 100644

> --- a/drivers/mmc/msm_sdhci.c

> +++ b/drivers/mmc/msm_sdhci.c

> @@ -142,6 +142,10 @@ static int msm_sdc_probe(struct udevice *dev)

>  		writel(caps, host->ioaddr + SDHCI_VENDOR_SPEC_CAPABILITIES0);

>  	}

>  

> +	ret = mmc_of_parse(dev, &plat->cfg);

> +	if (ret)

> +		return ret;

> +

>  	host->mmc = &plat->mmc;

>  	host->mmc->dev = dev;

>  	ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0);

>

Patch

diff --git a/drivers/mmc/msm_sdhci.c b/drivers/mmc/msm_sdhci.c
index da3ae2ec35..23e2e0fbc3 100644
--- a/drivers/mmc/msm_sdhci.c
+++ b/drivers/mmc/msm_sdhci.c
@@ -142,6 +142,10 @@  static int msm_sdc_probe(struct udevice *dev)
 		writel(caps, host->ioaddr + SDHCI_VENDOR_SPEC_CAPABILITIES0);
 	}
 
+	ret = mmc_of_parse(dev, &plat->cfg);
+	if (ret)
+		return ret;
+
 	host->mmc = &plat->mmc;
 	host->mmc->dev = dev;
 	ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0);