956e31b1e4
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>
393 lines
7.3 KiB
Text
393 lines
7.3 KiB
Text
#include "qcom-ipq8064-v1.0.dtsi"
|
|
|
|
#include <dt-bindings/input/input.h>
|
|
#include <dt-bindings/soc/qcom,tcsr.h>
|
|
|
|
/ {
|
|
model = "Netgear Nighthawk X4 R7500";
|
|
compatible = "netgear,r7500", "qcom,ipq8064";
|
|
|
|
memory@0 {
|
|
reg = <0x42000000 0xe000000>;
|
|
device_type = "memory";
|
|
};
|
|
|
|
reserved-memory {
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
ranges;
|
|
rsvd@41200000 {
|
|
reg = <0x41200000 0x300000>;
|
|
no-map;
|
|
};
|
|
};
|
|
|
|
aliases {
|
|
serial0 = &gsbi4_serial;
|
|
mdio-gpio0 = &mdio0;
|
|
|
|
led-boot = &power_white;
|
|
led-failsafe = &power_amber;
|
|
led-running = &power_white;
|
|
led-upgrade = &power_amber;
|
|
};
|
|
|
|
chosen {
|
|
bootargs = "rootfstype=squashfs noinitrd";
|
|
linux,stdout-path = "serial0:115200n8";
|
|
};
|
|
|
|
soc {
|
|
pinmux@800000 {
|
|
button_pins: button_pins {
|
|
mux {
|
|
pins = "gpio6", "gpio54", "gpio65";
|
|
function = "gpio";
|
|
drive-strength = <2>;
|
|
bias-pull-up;
|
|
};
|
|
};
|
|
|
|
i2c4_pins: i2c4_pinmux {
|
|
mux {
|
|
pins = "gpio12", "gpio13";
|
|
function = "gsbi4";
|
|
drive-strength = <12>;
|
|
bias-disable;
|
|
};
|
|
};
|
|
|
|
led_pins: led_pins {
|
|
mux {
|
|
pins = "gpio7", "gpio8", "gpio9", "gpio22", "gpio23",
|
|
"gpio24","gpio26", "gpio53", "gpio64";
|
|
function = "gpio";
|
|
drive-strength = <2>;
|
|
bias-pull-up;
|
|
};
|
|
};
|
|
|
|
mdio0_pins: mdio0_pins {
|
|
mux {
|
|
pins = "gpio0", "gpio1";
|
|
function = "gpio";
|
|
drive-strength = <8>;
|
|
bias-disable;
|
|
};
|
|
};
|
|
|
|
nand_pins: nand_pins {
|
|
mux {
|
|
pins = "gpio34", "gpio35", "gpio36",
|
|
"gpio37", "gpio38", "gpio39",
|
|
"gpio40", "gpio41", "gpio42",
|
|
"gpio43", "gpio44", "gpio45",
|
|
"gpio46", "gpio47";
|
|
function = "nand";
|
|
drive-strength = <10>;
|
|
bias-disable;
|
|
};
|
|
pullups {
|
|
pins = "gpio39";
|
|
bias-pull-up;
|
|
};
|
|
hold {
|
|
pins = "gpio40", "gpio41", "gpio42",
|
|
"gpio43", "gpio44", "gpio45",
|
|
"gpio46", "gpio47";
|
|
bias-bus-hold;
|
|
};
|
|
};
|
|
|
|
rgmii2_pins: rgmii2_pins {
|
|
mux {
|
|
pins = "gpio27", "gpio28", "gpio29", "gpio30", "gpio31", "gpio32",
|
|
"gpio51", "gpio52", "gpio59", "gpio60", "gpio61", "gpio62" ;
|
|
function = "rgmii2";
|
|
drive-strength = <8>;
|
|
bias-disable;
|
|
};
|
|
};
|
|
};
|
|
|
|
gsbi@16300000 {
|
|
qcom,mode = <GSBI_PROT_I2C_UART>;
|
|
status = "ok";
|
|
serial@16340000 {
|
|
status = "ok";
|
|
};
|
|
/*
|
|
* The i2c device on gsbi4 should not be enabled.
|
|
* On ipq806x designs gsbi4 i2c is meant for exclusive
|
|
* RPM usage. Turning this on in kernel manifests as
|
|
* i2c failure for the RPM.
|
|
*/
|
|
};
|
|
|
|
sata-phy@1b400000 {
|
|
status = "ok";
|
|
};
|
|
|
|
sata@29000000 {
|
|
status = "ok";
|
|
};
|
|
|
|
phy@100f8800 { /* USB3 port 1 HS phy */
|
|
clocks = <&gcc USB30_0_UTMI_CLK>;
|
|
status = "ok";
|
|
};
|
|
|
|
phy@100f8830 { /* USB3 port 1 SS phy */
|
|
clocks = <&gcc USB30_0_MASTER_CLK>;
|
|
status = "ok";
|
|
};
|
|
|
|
phy@110f8800 { /* USB3 port 0 HS phy */
|
|
clocks = <&gcc USB30_1_UTMI_CLK>;
|
|
status = "ok";
|
|
};
|
|
|
|
phy@110f8830 { /* USB3 port 0 SS phy */
|
|
clocks = <&gcc USB30_1_MASTER_CLK>;
|
|
status = "ok";
|
|
};
|
|
|
|
usb30@0 {
|
|
clocks = <&gcc USB30_1_MASTER_CLK>;
|
|
status = "ok";
|
|
};
|
|
|
|
usb30@1 {
|
|
clocks = <&gcc USB30_0_MASTER_CLK>;
|
|
status = "ok";
|
|
};
|
|
|
|
pcie0: pci@1b500000 {
|
|
status = "ok";
|
|
};
|
|
|
|
pcie1: pci@1b700000 {
|
|
status = "ok";
|
|
};
|
|
|
|
nand@1ac00000 {
|
|
status = "ok";
|
|
|
|
pinctrl-0 = <&nand_pins>;
|
|
pinctrl-names = "default";
|
|
|
|
cs0 {
|
|
reg = <0>;
|
|
compatible = "qcom,nandcs";
|
|
|
|
nand-ecc-strength = <4>;
|
|
nand-bus-width = <8>;
|
|
nand-ecc-step-size = <512>;
|
|
|
|
partitions {
|
|
compatible = "fixed-partitions";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
|
|
qcadata@0 {
|
|
label = "qcadata";
|
|
reg = <0x0000000 0x0c80000>;
|
|
read-only;
|
|
};
|
|
|
|
APPSBL@c80000 {
|
|
label = "APPSBL";
|
|
reg = <0x0c80000 0x0500000>;
|
|
read-only;
|
|
};
|
|
|
|
APPSBLENV@1180000 {
|
|
label = "APPSBLENV";
|
|
reg = <0x1180000 0x0080000>;
|
|
read-only;
|
|
};
|
|
|
|
art: art@1200000 {
|
|
label = "art";
|
|
reg = <0x1200000 0x0140000>;
|
|
read-only;
|
|
};
|
|
|
|
kernel@1340000 {
|
|
label = "kernel";
|
|
reg = <0x1340000 0x0200000>;
|
|
};
|
|
|
|
ubi@1540000 {
|
|
label = "ubi";
|
|
reg = <0x1540000 0x1800000>;
|
|
};
|
|
|
|
netgear@2d40000 {
|
|
label = "netgear";
|
|
reg = <0x2d40000 0x0c00000>;
|
|
read-only;
|
|
};
|
|
|
|
reserve@3940000 {
|
|
label = "reserve";
|
|
reg = <0x3940000 0x46c0000>;
|
|
read-only;
|
|
};
|
|
|
|
firmware@1340000 {
|
|
label = "firmware";
|
|
reg = <0x1340000 0x1a00000>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
mdio0: mdio {
|
|
compatible = "virtual,mdio-gpio";
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
gpios = <&qcom_pinmux 1 GPIO_ACTIVE_HIGH &qcom_pinmux 0 GPIO_ACTIVE_HIGH>;
|
|
pinctrl-0 = <&mdio0_pins>;
|
|
pinctrl-names = "default";
|
|
|
|
phy0: ethernet-phy@0 {
|
|
device_type = "ethernet-phy";
|
|
reg = <0>;
|
|
qca,ar8327-initvals = <
|
|
0x00004 0x7600000 /* PAD0_MODE */
|
|
0x00008 0x1000000 /* PAD5_MODE */
|
|
0x0000c 0x80 /* PAD6_MODE */
|
|
0x000e4 0x6a545 /* MAC_POWER_SEL */
|
|
0x000e0 0xc74164de /* SGMII_CTRL */
|
|
0x0007c 0x4e /* PORT0_STATUS */
|
|
0x00094 0x4e /* PORT6_STATUS */
|
|
>;
|
|
};
|
|
|
|
phy4: ethernet-phy@4 {
|
|
device_type = "ethernet-phy";
|
|
reg = <4>;
|
|
};
|
|
};
|
|
|
|
gmac1: ethernet@37200000 {
|
|
status = "ok";
|
|
phy-mode = "rgmii";
|
|
qcom,id = <1>;
|
|
|
|
pinctrl-0 = <&rgmii2_pins>;
|
|
pinctrl-names = "default";
|
|
|
|
mtd-mac-address = <&art 6>;
|
|
|
|
fixed-link {
|
|
speed = <1000>;
|
|
full-duplex;
|
|
};
|
|
};
|
|
|
|
gmac2: ethernet@37400000 {
|
|
status = "ok";
|
|
phy-mode = "sgmii";
|
|
qcom,id = <2>;
|
|
|
|
mtd-mac-address = <&art 0>;
|
|
|
|
fixed-link {
|
|
speed = <1000>;
|
|
full-duplex;
|
|
};
|
|
};
|
|
|
|
rpm@108000 {
|
|
pinctrl-0 = <&i2c4_pins>;
|
|
pinctrl-names = "default";
|
|
};
|
|
};
|
|
|
|
gpio-keys {
|
|
compatible = "gpio-keys";
|
|
pinctrl-0 = <&button_pins>;
|
|
pinctrl-names = "default";
|
|
|
|
wifi {
|
|
label = "wifi";
|
|
gpios = <&qcom_pinmux 6 GPIO_ACTIVE_LOW>;
|
|
linux,code = <KEY_RFKILL>;
|
|
};
|
|
|
|
reset {
|
|
label = "reset";
|
|
gpios = <&qcom_pinmux 54 GPIO_ACTIVE_LOW>;
|
|
linux,code = <KEY_RESTART>;
|
|
};
|
|
|
|
wps {
|
|
label = "wps";
|
|
gpios = <&qcom_pinmux 65 GPIO_ACTIVE_LOW>;
|
|
linux,code = <KEY_WPS_BUTTON>;
|
|
};
|
|
};
|
|
|
|
gpio-leds {
|
|
compatible = "gpio-leds";
|
|
pinctrl-0 = <&led_pins>;
|
|
pinctrl-names = "default";
|
|
|
|
usb1 {
|
|
label = "r7500:white:usb1";
|
|
gpios = <&qcom_pinmux 7 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
usb2 {
|
|
label = "r7500:white:usb2";
|
|
gpios = <&qcom_pinmux 8 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
power_amber: power_amber {
|
|
label = "r7500:amber:power";
|
|
gpios = <&qcom_pinmux 9 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
wan_white {
|
|
label = "r7500:white:wan";
|
|
gpios = <&qcom_pinmux 22 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
wan_amber {
|
|
label = "r7500:amber:wan";
|
|
gpios = <&qcom_pinmux 23 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
wps {
|
|
label = "r7500:white:wps";
|
|
gpios = <&qcom_pinmux 24 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
esata {
|
|
label = "r7500:white:esata";
|
|
gpios = <&qcom_pinmux 26 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
power_white: power_white {
|
|
label = "r7500:white:power";
|
|
gpios = <&qcom_pinmux 53 GPIO_ACTIVE_HIGH>;
|
|
default-state = "keep";
|
|
};
|
|
|
|
wifi {
|
|
label = "r7500:white:wifi";
|
|
gpios = <&qcom_pinmux 64 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&tcsr {
|
|
qcom,usb-ctrl-select = <TCSR_USB_SELECT_USB3_DUAL>;
|
|
compatible = "qcom,tcsr";
|
|
};
|
|
|
|
&adm_dma {
|
|
status = "ok";
|
|
};
|