usb: musb: ux500: don't propagate the OF node

Message ID 1402390456-26794-1-git-send-email-linus.walleij@linaro.org
State Accepted
Commit 82363cf2eeafeea6ba88849f5e2febdc8a05943f
Headers show

Commit Message

Linus Walleij June 10, 2014, 8:54 a.m.
There is a regression in the upcoming v3.16-rc1, that is caused
by a problem that has been around for a while but now finally
hangs the system. The bootcrawl looks like this:

pinctrl-nomadik soc:pinctrl: pin GPIO256_AF28 already
requested by a03e0000.usb_per5; cannot claim for musb-hdrc.0.auto
pinctrl-nomadik soc:pinctrl: pin-256 (musb-hdrc.0.auto) status -22
pinctrl-nomadik soc:pinctrl: could not request pin 256
(GPIO256_AF28) from group usb_a_1  on device pinctrl-nomadik
musb-hdrc musb-hdrc.0.auto: Error applying setting, reverse
things back
HS USB OTG: no transceiver configured
musb-hdrc musb-hdrc.0.auto: musb_init_controller failed
with status -517
platform musb-hdrc.0.auto: Driver musb-hdrc requests
probe deferral
(...)

The ux500 MUSB driver propagates the OF node to the dynamically
created musb-hdrc device, which is incorrect as it makes the OF
core believe there are two devices spun from the very same
DT node, which confuses other parts of the device core, notably
the pin control subsystem, which will try to apply all the pin
control settings also to the HDRC device as it gets
instantiated. (The OMAP2430 for example, does not set the
of_node member.)

Cc: stable@vger.kernel.org
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Felipe Balbi <balbi@ti.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/usb/musb/ux500.c | 1 -
 1 file changed, 1 deletion(-)

Comments

Lee Jones June 16, 2014, 8:56 a.m. | #1
On Tue, 10 Jun 2014, Linus Walleij wrote:

> There is a regression in the upcoming v3.16-rc1, that is caused
> by a problem that has been around for a while but now finally
> hangs the system. The bootcrawl looks like this:
> 
> pinctrl-nomadik soc:pinctrl: pin GPIO256_AF28 already
> requested by a03e0000.usb_per5; cannot claim for musb-hdrc.0.auto
> pinctrl-nomadik soc:pinctrl: pin-256 (musb-hdrc.0.auto) status -22
> pinctrl-nomadik soc:pinctrl: could not request pin 256
> (GPIO256_AF28) from group usb_a_1  on device pinctrl-nomadik
> musb-hdrc musb-hdrc.0.auto: Error applying setting, reverse
> things back
> HS USB OTG: no transceiver configured
> musb-hdrc musb-hdrc.0.auto: musb_init_controller failed
> with status -517
> platform musb-hdrc.0.auto: Driver musb-hdrc requests
> probe deferral
> (...)
> 
> The ux500 MUSB driver propagates the OF node to the dynamically
> created musb-hdrc device, which is incorrect as it makes the OF
> core believe there are two devices spun from the very same
> DT node, which confuses other parts of the device core, notably
> the pin control subsystem, which will try to apply all the pin
> control settings also to the HDRC device as it gets
> instantiated. (The OMAP2430 for example, does not set the
> of_node member.)
> 
> Cc: stable@vger.kernel.org
> Cc: Lee Jones <lee.jones@linaro.org>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Felipe Balbi <balbi@ti.com>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> ---
>  drivers/usb/musb/ux500.c | 1 -
>  1 file changed, 1 deletion(-)

Looks good.  Assuming it's fully tested:
  Acked-by: Lee Jones <lee.jones@linaro.org>

> diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c
> index c2e45e632723..f202e5088461 100644
> --- a/drivers/usb/musb/ux500.c
> +++ b/drivers/usb/musb/ux500.c
> @@ -274,7 +274,6 @@ static int ux500_probe(struct platform_device *pdev)
>  	musb->dev.parent		= &pdev->dev;
>  	musb->dev.dma_mask		= &pdev->dev.coherent_dma_mask;
>  	musb->dev.coherent_dma_mask	= pdev->dev.coherent_dma_mask;
> -	musb->dev.of_node		= pdev->dev.of_node;
>  
>  	glue->dev			= &pdev->dev;
>  	glue->musb			= musb;

Patch

diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c
index c2e45e632723..f202e5088461 100644
--- a/drivers/usb/musb/ux500.c
+++ b/drivers/usb/musb/ux500.c
@@ -274,7 +274,6 @@  static int ux500_probe(struct platform_device *pdev)
 	musb->dev.parent		= &pdev->dev;
 	musb->dev.dma_mask		= &pdev->dev.coherent_dma_mask;
 	musb->dev.coherent_dma_mask	= pdev->dev.coherent_dma_mask;
-	musb->dev.of_node		= pdev->dev.of_node;
 
 	glue->dev			= &pdev->dev;
 	glue->musb			= musb;