On Friday, October 28, 2016 11:22:12 PM CEST Ben Mulvihill wrote:
> On Fri, 2016-10-28 at 18:28 +0200, Christian Lamparter wrote:
> > Hello,
> > 
> > On Friday, October 28, 2016 4:30:56 PM CEST Ben Mulvihill wrote:
> > > Add device tree binding for dwc2 usb driver on lantiq danube
> > > 
> > > Signed-off-by: Ben Mulvihill <ben.mulvih...@gmail.com>
> > > ---
> > > diff -uprN a/target/linux/lantiq/dts/danube.dtsi 
> > > b/target/linux/lantiq/dts/danube.dtsi
> > > --- a/target/linux/lantiq/dts/danube.dtsi 2016-10-27 19:56:07.090392399 
> > > +0200
> > > +++ b/target/linux/lantiq/dts/danube.dtsi 2016-10-27 20:47:34.387511522 
> > > +0200
> > > @@ -140,7 +140,7 @@
> > >           };
> > >  
> > >           ifxhcd@E101000 {
> > > -                 compatible = "lantiq,ifxhcd-danube";
> > > +                 compatible = "lantiq,ifxhcd-danube", 
> > > "lantiq,ifxhcd-danube-dwc2";
> > Usually for device tree, the first compatible string is reserved for the
> > "exact device" that the node represents [0]. So wouldn't switching around
> > the strings (i.e.: "lantiq,ifxhcd-danube-dwc2", "lantiq,ifxhcd-danube")
> > make more sense? After all, the dwc2 is the "more exact device" in this 
> > case?
> > 
> 
> Thanks for reviewing.
> 
> Are they not equally "exact"? They are two alternative, and completely
> separate, drivers. (The names chosen for the bindings are perhaps a
> little misleading in that regard.) I Left "lantiq,ifxhcd-danube" in 
> first position simply because it has been the default driver until 
> now, and I didn't want to change the default at this stage. Not that
> it will make any difference to which driver is actually used unless
> for some strange reason someone decides to include both drivers in
> the same build.
> 
> Once we're sure that dwc2 works properly on danube, the old 
> ifxhcd-danube driver can be ditched from the source tree completely.
> But I thought it was better to get an ack from John on
> these first.

Ok, Thanks, I guess this should work fine if you follow through with 
phasing out the old driver too (Yay for that!). The 
"lantiq,ifxhcd-danube" will take preference as it is the first entry,
but that's fine.

I tested the patch on my EasyBox 802 (Arcadyan ARV752DPW).

[    6.291426] dwc2 1e101000.ifxhcd: requested GPIO 464
[    6.294998] dwc2 1e101000.ifxhcd: Configuration mismatch. Forcing host mode
^^

This can be fixed by setting dr_mode to host in the DTS.

---
diff --git a/target/linux/lantiq/dts/danube.dtsi 
b/target/linux/lantiq/dts/danube.dtsi
index 009696a..538ec19 100644
--- a/target/linux/lantiq/dts/danube.dtsi
+++ b/target/linux/lantiq/dts/danube.dtsi
@@ -146,6 +146,7 @@
                        interrupt-parent = <&icu0>;
                        interrupts = <62>;
                        status = "disabled";
+                       dr_mode = "host";
                };
 
                deu@E103100 {
---

The generic dwc2 defaults to OTG mode (as per generic.txt) [0].
(Well, technically, it's UNKNOWN at first but here's the logic [1]).

[    7.159262] dwc2 1e101000.ifxhcd: DWC OTG Controller
[    7.162832] dwc2 1e101000.ifxhcd: new USB bus registered, assigned bus 
number 1
[    7.169959] dwc2 1e101000.ifxhcd: irq 62, io mem 0x00000000
[    7.177488] hub 1-0:1.0: USB hub found
[    7.180650] hub 1-0:1.0: 1 port detected
[    7.196214] init: - preinit -

[    7.849577] dwc2 1e101000.ifxhcd: Mode Mismatch Interrupt: currently in Host 
mode
[    7.855582] dwc2 1e101000.ifxhcd: Mode Mismatch Interrupt: currently in Host 
mode
[    7.862820] dwc2 1e101000.ifxhcd: Mode Mismatch Interrupt: currently in Host 
mode
[    8.051083] usb 1-1: new high-speed USB device number 2 using dwc2
[    8.055952] dwc2 1e101000.ifxhcd: Mode Mismatch Interrupt: currently in Host 
mode
[    8.063064] dwc2 1e101000.ifxhcd: Mode Mismatch Interrupt: currently in Host 
mode

I don't think these are much of an issue. At least for this device the ifxhcd 
driver
also produces the same messages. For example, this is an extract bootlog from 
the
opernwrt wiki [2].

| [    6.980000] IFXUSB: ifxusb_hcd: version 3.2 B110801
| [    7.484000] IFXUSB: USB core #0 soft-reset
| [    7.688000] IFXUSB: USB core #0 soft-reset
| [    7.692000] ifxusb_hcd ifxusb_hcd: IFX USB Controller
| [    7.696000] ifxusb_hcd ifxusb_hcd: new USB bus registered, assigned bus 
number 1
| [    7.704000] ifxusb_hcd ifxusb_hcd: irq 62, io mem 0xbe101000
| [    7.712000] IFXUSB: Mode Mismatch Interrupt: currently in Host mode
| [    7.716000] IFXUSB: Mode Mismatch Interrupt: currently in Host mode
 
Now, there has been recent changes to dwc2 which might fix these pesky
errors. The discussion can be found on the LKML [3] and three patches
were committed to 4.9-rc.

usb: dwc2: Properly account for the force mode delays [4]
usb: dwc2: Add delay to core soft reset [5]
usb: dwc2: gadget: Only initialize device if in device mode [6]

I'll give then a try and see test if they help. Otherwise:

Tested-by: Christian Lamparter <chunk...@gmail.com>

Regards,
Christian

[0] 
<https://www.kernel.org/doc/Documentation/devicetree/bindings/usb/generic.txt>
[1] <http://lxr.free-electrons.com/source/drivers/usb/dwc2/platform.c#L213>
[2] <https://wiki.openwrt.org/toh/arcadyan/arv752dpw>
[3] <https://lkml.org/lkml/2016/4/7/690>

[4] 
<https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/drivers/usb/dwc2?id=2938fc63e0c26bf694436ac81bc776c8b7eced0c>
[5] 
<https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/drivers/usb/dwc2?id=fef6bc37dbafe0d6d71c808c8867a8c5ab4b9816>
[6] 
<https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/drivers/usb/dwc2?id=d0f0ac56b34b28e80223d7086b4decdf027c27ed>


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to