2015-08-06 13:10:28

by Tomeu Vizoso

[permalink] [raw]
Subject: [PATCH] usb: chipidea: imx: properly check for usbmisc

If usbmisc hasn't probed yet, defer the probe.

It's not enough to check if the platform device for the OF node of the
usbmisc has been registered, but it also needs to have been probed
already before we can call imx_usbmisc_init().

This can happen if the order in which devices are probed change due to
async probing or on-demand probing of dependencies.

Signed-off-by: Tomeu Vizoso <[email protected]>
---
drivers/usb/chipidea/ci_hdrc_imx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
index 504554e41922..e3c61d5e9270 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
@@ -104,7 +104,7 @@ static struct imx_usbmisc_data *usbmisc_get_init_data(struct device *dev)
misc_pdev = of_find_device_by_node(args.np);
of_node_put(args.np);

- if (!misc_pdev)
+ if (!misc_pdev || !platform_get_drvdata(misc_pdev))
return ERR_PTR(-EPROBE_DEFER);

data->dev = &misc_pdev->dev;
--
2.4.3


2015-08-07 03:22:14

by Peter Chen

[permalink] [raw]
Subject: Re: [PATCH] usb: chipidea: imx: properly check for usbmisc

On Thu, Aug 06, 2015 at 03:09:54PM +0200, Tomeu Vizoso wrote:
> If usbmisc hasn't probed yet, defer the probe.
>
> It's not enough to check if the platform device for the OF node of the
> usbmisc has been registered, but it also needs to have been probed
> already before we can call imx_usbmisc_init().
>
> This can happen if the order in which devices are probed change due to
> async probing or on-demand probing of dependencies.
>
> Signed-off-by: Tomeu Vizoso <[email protected]>
> ---
> drivers/usb/chipidea/ci_hdrc_imx.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
> index 504554e41922..e3c61d5e9270 100644
> --- a/drivers/usb/chipidea/ci_hdrc_imx.c
> +++ b/drivers/usb/chipidea/ci_hdrc_imx.c
> @@ -104,7 +104,7 @@ static struct imx_usbmisc_data *usbmisc_get_init_data(struct device *dev)
> misc_pdev = of_find_device_by_node(args.np);
> of_node_put(args.np);
>
> - if (!misc_pdev)
> + if (!misc_pdev || !platform_get_drvdata(misc_pdev))
> return ERR_PTR(-EPROBE_DEFER);

"||"? or "&&"? You want usbmisc has already been probed.


>
> data->dev = &misc_pdev->dev;
> --
> 2.4.3
>

--

Best Regards,
Peter Chen

2015-08-07 05:56:32

by Peter Chen

[permalink] [raw]
Subject: Re: [PATCH] usb: chipidea: imx: properly check for usbmisc

On Fri, Aug 07, 2015 at 10:11:47AM +0800, Peter Chen wrote:
> On Thu, Aug 06, 2015 at 03:09:54PM +0200, Tomeu Vizoso wrote:
> > If usbmisc hasn't probed yet, defer the probe.
> >
> > It's not enough to check if the platform device for the OF node of the
> > usbmisc has been registered, but it also needs to have been probed
> > already before we can call imx_usbmisc_init().
> >
> > This can happen if the order in which devices are probed change due to
> > async probing or on-demand probing of dependencies.
> >
> > Signed-off-by: Tomeu Vizoso <[email protected]>
> > ---
> > drivers/usb/chipidea/ci_hdrc_imx.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
> > index 504554e41922..e3c61d5e9270 100644
> > --- a/drivers/usb/chipidea/ci_hdrc_imx.c
> > +++ b/drivers/usb/chipidea/ci_hdrc_imx.c
> > @@ -104,7 +104,7 @@ static struct imx_usbmisc_data *usbmisc_get_init_data(struct device *dev)
> > misc_pdev = of_find_device_by_node(args.np);
> > of_node_put(args.np);
> >
> > - if (!misc_pdev)
> > + if (!misc_pdev || !platform_get_drvdata(misc_pdev))
> > return ERR_PTR(-EPROBE_DEFER);
>
> "||"? or "&&"? You want usbmisc has already been probed.

Oh, oops. The patch is right, I will queue it.

--

Best Regards,
Peter Chen