immortalwrt/target/linux
Thomas Reifferscheid 956e31b1e4 ipq8064: fix dwc3-of-simple module unloading for Netgear R7500
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 Netgear R7500
dts file and backs off the previous attempt.

Now unloading and repeated module loading is working just fine.

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 for Netgear R7500

Signed-off-by: Thomas Reifferscheid <thomas@reifferscheid.org>
2017-04-24 09:20:23 +02:00
..
adm5120 adm5120: mark the rb1xx subtarget as broken 2017-01-16 20:40:12 +01:00
adm8668
apm821xx apm821xx: remove 4.4 kernel support 2017-04-12 09:51:47 +02:00
ar7 ar7: diag.sh: use common status_led_* functions 2017-03-15 23:14:54 +01:00
ar71xx ar71xx: fix minor syntax error in /lib/upgrade/platform.sh 2017-04-22 18:58:44 +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
armvirt armvirt: merge arm64 as subtarget 64 2017-04-23 09:19:33 +08:00
at91
ath25
au1000
bcm53xx bcm53xx: enable Northstar thermal driver 2017-04-20 22:45:05 +02:00
brcm47xx kernel: update kernel 4.4 to 4.4.61 2017-04-15 18:26:41 +02:00
brcm63xx brcm63xx: diag.sh: use common status_led_blink_* functions 2017-03-15 23:15:19 +01:00
brcm2708 brcm2708: disable CONFIG_BCM2835_THERMAL by default 2017-04-15 08:24:42 +02:00
cns3xxx cns3xxx: enable mpcore watchdog 2017-04-12 12:13:16 +02:00
gemini
generic kernel: use skb_cow_head() to deal with cloned skbs 2017-04-23 13:51:55 +02:00
imx6 kernel: update kernel 4.4 to 4.4.59 2017-04-02 12:48:00 +02:00
ipq806x ipq8064: fix dwc3-of-simple module unloading for Netgear R7500 2017-04-24 09:20:23 +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: improve DGN3500 LED definitions 2017-04-21 07:50:55 +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 mediatek: various fixes for v4.9 2017-04-07 17:42:08 +02:00
mpc85xx
mvebu Revert "mvebu: remove linux 4.4 support" 2017-04-17 08:44:37 +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
omap24xx
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
ppc44x
ramips ramips: update DEVICE_PACKAGES for Ubiquiti EdgeRouter X 2017-04-22 18:55:22 +02:00
rb532
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 build: allow specifying flow-control to grub on serial console 2017-04-03 08:51:02 +02: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