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 |
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 --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,