openwrtv3/target/linux
Thomas Reifferscheid 17f60b1cd2 ipq8064: fix dwc3-of-simple module unloading
Without patch unloading the dwc3-of-simple module went stuck after
successfully removing hcd.1 during the hcd.0 removal:

root@LEDE:/# rmmod dwc3-of-simple
[   21.391846] xhci-hcd xhci-hcd.1.auto: remove, state 1
[   21.391931] usb usb4: USB disconnect, device number 1
[   21.397038] xhci-hcd xhci-hcd.1.auto: USB bus 4 deregistered
[   21.401111] xhci-hcd xhci-hcd.1.auto: remove, state 1
[   21.406685] usb usb3: USB disconnect, device number 1
[   21.412848] xhci-hcd xhci-hcd.1.auto: USB bus 3 deregistered
[   21.417248] xhci-hcd xhci-hcd.0.auto: remove, state 1
[   21.422521] usb usb2: USB disconnect, device number 1
followed by nothing.

Sometimes a stall CPU was detected, or a kernel panic,
or a reboot occurred after a couple of minutes.

At the same time unloading the dwc3 module followed by dwc3-of-simple
module was working repeatedly.

root@LEDE:/# rmmod dwc3
[   53.827328] xhci-hcd xhci-hcd.1.auto: remove, state 1
[   53.827412] usb usb4: USB disconnect, device number 1
[   53.832630] xhci-hcd xhci-hcd.1.auto: USB bus 4 deregistered
[   53.836452] xhci-hcd xhci-hcd.1.auto: remove, state 1
[   53.842314] usb usb3: USB disconnect, device number 1
[   53.848412] xhci-hcd xhci-hcd.1.auto: USB bus 3 deregistered
[   53.852542] xhci-hcd xhci-hcd.0.auto: remove, state 1
[   53.857882] usb usb2: USB disconnect, device number 1
[   53.863956] xhci-hcd xhci-hcd.0.auto: USB bus 2 deregistered
[   53.867875] xhci-hcd xhci-hcd.0.auto: remove, state 1
[   53.873696] usb usb1: USB disconnect, device number 1
[   53.879742] xhci-hcd xhci-hcd.0.auto: USB bus 1 deregistered
root@LEDE:/# rmmod dwc3-of-simple
root@LEDE:/#

For the non-working case, the code was stuck in a readl() in
http://lxr.free-electrons.com/source/drivers/usb/host/xhci.c#L91
because
http://lxr.free-electrons.com/source/drivers/usb/dwc3/dwc3-of-simple.c#L126
was disabling the wrong clocks when removing hcd.1 (it was disabling
the clock of hcd.0). That's why the readl() went stuck when removing
hcd.0

The patch however addresses the clock assignment from the .dtsi
file. Most probably it went into openwrt here:
https://dev.openwrt.org/browser/trunk/target/linux/ipq806x/patches-3.18/101-ARM-qcom-add-USB-nodes-to-ipq806x-ap148.patch?rev=45261
copied from Qualcomms attempt here: https://lkml.org/lkml/2015/11/20/116

Now unloading and repeated module loading is working just fine,
no matter if you'd remove dwc3-of-simple or dwc3.

root@LEDE:/# rmmod dwc3-of-simple
[   24.089679] xhci-hcd xhci-hcd.1.auto: remove, state 1
[   24.089765] usb usb4: USB disconnect, device number 1
[   24.094856] xhci-hcd xhci-hcd.1.auto: USB bus 4 deregistered
[   24.098963] xhci-hcd xhci-hcd.1.auto: remove, state 1
[   24.104522] usb usb3: USB disconnect, device number 1
[   24.111194] xhci-hcd xhci-hcd.1.auto: USB bus 3 deregistered
[   24.115086] xhci-hcd xhci-hcd.0.auto: remove, state 1
[   24.120396] usb usb2: USB disconnect, device number 1
[   24.126503] xhci-hcd xhci-hcd.0.auto: USB bus 2 deregistered
[   24.130347] xhci-hcd xhci-hcd.0.auto: remove, state 1
[   24.135948] usb usb1: USB disconnect, device number 1
[   24.142085] xhci-hcd xhci-hcd.0.auto: USB bus 1 deregistered
root@LEDE:/#

Fixes: dwc3-of-simple module unloading

Signed-off-by: Thomas Reifferscheid <thomas@reifferscheid.org>
2017-03-28 09:03:55 +02:00
..
adm5120 adm5120: mark the rb1xx subtarget as broken 2017-01-16 20:40:12 +01:00
adm8668 build: fix subtarget descriptions 2016-09-04 13:35:11 +02:00
apm821xx kernel: update kernel 4.4 to 4.4.53 2017-03-12 15:46:02 +01:00
ar7 ar7: diag.sh: use common status_led_* functions 2017-03-15 23:14:54 +01:00
ar71xx ar71xx: wpj531: fix GPIOs for LED 2017-03-27 08:36:32 +02:00
arc770 arc770: only calculate entry point address when necessary 2017-02-21 16:10:30 +01:00
archs38 archs38: only calculate entry point address when necessary 2017-02-21 16:10:32 +01:00
arm64 Revert "arm64: boot-wrapper: Add mirror" 2016-12-22 21:08:17 +01:00
armvirt armvirt: add kernel config change missing from 0d44f0cb 2017-01-13 11:05:32 +01:00
at91 kernel: remove ubifs xz decompression support 2017-01-09 14:07:06 +01:00
ath25 kernel: backport MIPS changes introducing a separate IRQ stack 2017-01-15 18:25:54 +01:00
au1000 kernel: update kernel 3.18 to version 3.18.43 2016-10-24 20:25:14 +03:00
bcm53xx bcm53xx: put kernel into TRX when building initramfs images 2017-03-27 10:41:36 +02:00
brcm47xx kernel: update kernel 4.4 to 4.4.53 2017-03-12 15:46:02 +01:00
brcm63xx brcm63xx: diag.sh: use common status_led_blink_* functions 2017-03-15 23:15:19 +01:00
brcm2708 kernel: update kernel 4.9 to 4.9.17 2017-03-26 12:23:19 +02:00
cns3xxx kernel: update kernel 4.9 to 4.9.17 2017-03-26 12:23:19 +02:00
gemini gemini: rename config-default to config-4.4 2016-08-24 01:44:05 +03:00
generic kernel: add arm64 erratums into config 2017-03-26 19:20:33 +02:00
imx6 imx6: add DSA driver for MV88E6176 switch 2017-03-12 15:06:52 +01:00
ipq806x ipq8064: fix dwc3-of-simple module unloading 2017-03-28 09:03:55 +02:00
ixp4xx kernel: update kernel 4.4 to 4.4.53 2017-03-12 15:46:02 +01:00
kirkwood kirkwood: fix include in etc/board.d/02_network 2017-02-28 23:46:02 +01:00
lantiq lantiq: update spi driver to upstream version 2017-03-26 15:58:17 +02:00
layerscape kernel: update kernel 4.4 to 4.4.52 2017-03-03 18:17:47 +01:00
malta malta: restore "be" subtarget from being source-only 2017-03-05 16:34:17 +01:00
mcs814x kernel: remove kmod packages for bridge, stp, llc and 8021q 2017-02-09 14:49:34 +01:00
mediatek kernel: update kernel 4.9 to 4.9.17 2017-03-26 12:23:19 +02:00
mpc85xx kernel: remove DEVMEM/DEVKMEM platform overrides 2017-01-10 13:48:53 +01:00
mvebu kernel: update kernel 4.9 to 4.9.17 2017-03-26 12:23:19 +02:00
mxs mxs: enable nvmem support 2017-02-10 11:05:57 +01:00
octeon octeon: only copy sysupgrade file if present 2017-02-15 06:36:21 +01:00
omap omap: build various core drivers into the kernel instead of packaging them 2017-01-10 13:44:26 +01:00
omap24xx kernel: clean up usb gadget support 2016-09-15 13:11:21 +02:00
orion kernel: split up 980-arm_openwrt_machtypes.patch and move to target folders 2017-01-27 11:18:27 +01:00
oxnas oxnas: put u-boot images into image staging directory 2017-01-27 16:53:31 +01:00
pistachio kernel: update kernel 4.9 to 4.9.17 2017-03-26 12:23:19 +02:00
ppc40x build: fix subtarget descriptions 2016-09-04 13:35:11 +02:00
ppc44x ppc44x: mark as broken 2017-01-10 12:49:34 +01:00
ramips ramips: fix pcie irq mapping for mt7621 on v4.9 2017-03-28 08:50:13 +02:00
rb532 kernel: remove ubifs xz decompression support 2017-01-09 14:07:06 +01:00
sunxi build: get rid of host.mk 2017-02-26 13:31:44 +01:00
uml build: get rid of host.mk 2017-02-26 13:31:44 +01:00
x86 x86: enable ACPI support for the Geode subtarget 2017-03-22 11:51:24 +01:00
xburst kernel: remove kmod packages for bridge, stp, llc and 8021q 2017-02-09 14:49:34 +01:00
zynq build: get rid of host.mk 2017-02-26 13:31:44 +01:00
Makefile