usb: musb: dsps: do not bind to "musb-hdrc"
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Tue, 1 Oct 2013 12:31:53 +0000 (14:31 +0200)
committerFelipe Balbi <balbi@ti.com>
Tue, 1 Oct 2013 14:02:09 +0000 (09:02 -0500)
commit4fc4b274f9b3b5f18896a069e5f9f8dd8f0d450a
tree9f364777bb536485f8a093def372566d98712a6a
parent9b0a1de3c85d99d881c86a29b3d52da7b9c7bd61
usb: musb: dsps: do not bind to "musb-hdrc"

This went unnoticed in durin the merge window:
The dsps driver creates a child device for the musb core driver _and_
attaches the of_node to it so devm_usb_get_phy_by_phandle() grabs the
correct phy and attaches the devm resources to the proper device. We
could also use the parent device but then devm would attach the
resource to the wrong device and it would be destroyed once the parent
device is gone - not the device that is used by the musb core driver.

If the phy is now not available then dsps_musb_init() /
devm_usb_get_phy_by_phandle() returns with EPROBE_DEFER. Since the
of_node is attached it tries OF drivers as well and matches the driver
against DSPS. That one creates a new child device for the musb core
driver which gets probed immediately.

The whole thing repeats itself until the stack overflows.

I belive the same problem exists in ux500 glue code (since 313bdb11
("usb: musb: ux500: add device tree probing support") but the drivers are
now probed in the right order so they don't see it.

The problem is that the dsps driver gets bound to the musb-child device
due to the same of_node / matching binding. I don't really agree with
having yet another child node in DT to fix this. Ideally we would have
musb core driver with DT bindings and according to the binding we would
select the few extra hacks / gleue layer.

Therefore I suggest the driver to reject the musb-core device.

Cc: Lee Jones <lee.jones@linaro.org>
Tested-by: Tom Rini <trini@ti.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/musb/musb_dsps.c