diff mbox series

mmc: sdhci-esdhc-imx: validate pinctrl before use it

Message ID 20210115032423.15108-1-peng.fan@oss.nxp.com
State Superseded
Headers show
Series mmc: sdhci-esdhc-imx: validate pinctrl before use it | expand

Commit Message

Peng Fan (OSS) Jan. 15, 2021, 3:24 a.m. UTC
From: Peng Fan <peng.fan@nxp.com>


When imx_data->pinctrl is not a valid pointer, pinctrl_lookup_state
will trigger kernel panic.

When we boot Dual OS on Jailhouse hypervisor, we let the 1st Linux to
configure pinmux ready for the 2nd OS, so the 2nd OS not have pinctrl
settings.

Similar to this commit b62eee9f804e ("mmc: sdhci-esdhc-imx: no fail when no pinctrl available").

Reviewed-by: Bough Chen <haobo.chen@nxp.com>

Reviewed-by: Alice Guo <alice.guo@nxp.com>

Signed-off-by: Peng Fan <peng.fan@nxp.com>

---
 drivers/mmc/host/sdhci-esdhc-imx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.28.0

Comments

Ulf Hansson Jan. 19, 2021, 1:37 p.m. UTC | #1
On Fri, 15 Jan 2021 at 03:55, Peng Fan (OSS) <peng.fan@oss.nxp.com> wrote:
>

> From: Peng Fan <peng.fan@nxp.com>

>

> When imx_data->pinctrl is not a valid pointer, pinctrl_lookup_state

> will trigger kernel panic.

>

> When we boot Dual OS on Jailhouse hypervisor, we let the 1st Linux to

> configure pinmux ready for the 2nd OS, so the 2nd OS not have pinctrl

> settings.

>

> Similar to this commit b62eee9f804e ("mmc: sdhci-esdhc-imx: no fail when no pinctrl available").

>

> Reviewed-by: Bough Chen <haobo.chen@nxp.com>

> Reviewed-by: Alice Guo <alice.guo@nxp.com>

> Signed-off-by: Peng Fan <peng.fan@nxp.com>


Looks like the documentation of DT bindings doesn't specify pinctrls
at all. Please add it and explain when they should be used.

Kind regards
Uffe

> ---

>  drivers/mmc/host/sdhci-esdhc-imx.c | 2 +-

>  1 file changed, 1 insertion(+), 1 deletion(-)

>

> diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c

> index 16ed19f47939..11d3a2244b36 100644

> --- a/drivers/mmc/host/sdhci-esdhc-imx.c

> +++ b/drivers/mmc/host/sdhci-esdhc-imx.c

> @@ -1488,7 +1488,7 @@ sdhci_esdhc_imx_probe_dt(struct platform_device *pdev,

>

>         mmc_of_parse_voltage(np, &host->ocr_mask);

>

> -       if (esdhc_is_usdhc(imx_data)) {

> +       if (esdhc_is_usdhc(imx_data) && !IS_ERR(imx_data->pinctrl)) {

>                 imx_data->pins_100mhz = pinctrl_lookup_state(imx_data->pinctrl,

>                                                 ESDHC_PINCTRL_STATE_100MHZ);

>                 imx_data->pins_200mhz = pinctrl_lookup_state(imx_data->pinctrl,

> --

> 2.28.0

>
diff mbox series

Patch

diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
index 16ed19f47939..11d3a2244b36 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -1488,7 +1488,7 @@  sdhci_esdhc_imx_probe_dt(struct platform_device *pdev,
 
 	mmc_of_parse_voltage(np, &host->ocr_mask);
 
-	if (esdhc_is_usdhc(imx_data)) {
+	if (esdhc_is_usdhc(imx_data) && !IS_ERR(imx_data->pinctrl)) {
 		imx_data->pins_100mhz = pinctrl_lookup_state(imx_data->pinctrl,
 						ESDHC_PINCTRL_STATE_100MHZ);
 		imx_data->pins_200mhz = pinctrl_lookup_state(imx_data->pinctrl,