usb: dwc2: regression during boot on Raspberry Pi

Stephen Warren swarren at wwwdotorg.org
Sat Nov 7 21:06:15 PST 2015


On 11/07/2015 05:16 PM, Stefan Wahren wrote:
> Hi,
> 
> i try to run linux-next-20151106 (U-Boot + USB patches from Stephen
> Warren) on my Raspberry Pi B rev2 and get a kernel oops (see bootlog at
> the end). I bisect the issue to this commit:
> 
> 09a75e8577901489f77a14a3b305a9a1f67bf25b ("usb: dwc2: refactor common
> low-level hw code to platform.c")
> 
> Looking at the messages before the oops
> 
> [ 1.658393] dwc2 20980000.usb: Configuration mismatch. Forcing host mode
> [ 1.665605] dwc2 20980000.usb: no platform data or transceiver defined
> 
> seems to come from missing DT properties according to
> Documentation/devicetree/bindings/usb/dwc2.txt:
> 
>   * dr_mode (optional)
>   * clocks (required)
>   * clock-names (required)

When I first added the USB node into bcm2835.dtsi, the binding did not
state that "clocks" and "clock-names" were required. The later addition
of that requirement is a non-backwards-compatible change, and should not
have been made. The new properties should have been optional.

The following commit added the clock-related properties as required:

65b4eb9e3513 staging: dwc2: update DT binding to add generic clock/phy
properties

The following commit, at almost exactly the same time, added DWC2 into
bcm2835.dtsi:

5631e7f4e29b ARM: bcm2835: add USB controller to device tree

>   * phys (optional)
>   * phy-names (optional)
> 
> So here are my questions:
> 
> How to fix the kernel oops in dwc2 driver?

Do you know exactly what causes the crash; you've bisected to the
specific commit, but I don't think mentioned why that commit causes an
issue.

> Should we specify dr_mode = "host" for all Raspberry Pi variants in DT?

It's optional so the driver must work without it. However, that value
seems appropriate, so you could certainly add it.

> Which clock should be referenced by USB host in DT?
> 
> Do we need a USB PHY DT node and driver for bcm2835?

I don't think there's a separate PHY module in bcm2835 is there?
Certainly there is no documentation, binding, or driver for it that I'm
aware of. I haven't checked the RPi Foundation downstream kernel though.



More information about the linux-rpi-kernel mailing list