aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ar71xx
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2014-05-24 08:01:42 +0000
committerFelix Fietkau <nbd@openwrt.org>2014-05-24 08:01:42 +0000
commit30c105064f5a7e992e6a09d1a41b26a636990dae (patch)
tree5ef8b847dc760b57fdf3caa83972d0a58bdf6f77 /target/linux/ar71xx
parent5352064817670bc18fc907f4847f7ce127e21281 (diff)
downloadupstream-30c105064f5a7e992e6a09d1a41b26a636990dae.tar.gz
upstream-30c105064f5a7e992e6a09d1a41b26a636990dae.tar.bz2
upstream-30c105064f5a7e992e6a09d1a41b26a636990dae.zip
ar71xx: enable usb quirks for all chipidea based devices
The most important one is qca_force_host_mode, which also sets the 'Stream Disable' bit in the usbmode register. Fixes usb stability issues on AR933x and AR7241/AR7242 Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@40841 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar71xx')
-rw-r--r--target/linux/ar71xx/patches-3.10/525-MIPS-ath79-enable-qca-usb-quirks.patch33
1 files changed, 19 insertions, 14 deletions
diff --git a/target/linux/ar71xx/patches-3.10/525-MIPS-ath79-enable-qca-usb-quirks.patch b/target/linux/ar71xx/patches-3.10/525-MIPS-ath79-enable-qca-usb-quirks.patch
index ede8035c7c..df6825771e 100644
--- a/target/linux/ar71xx/patches-3.10/525-MIPS-ath79-enable-qca-usb-quirks.patch
+++ b/target/linux/ar71xx/patches-3.10/525-MIPS-ath79-enable-qca-usb-quirks.patch
@@ -1,6 +1,15 @@
--- a/arch/mips/ath79/dev-usb.c
+++ b/arch/mips/ath79/dev-usb.c
-@@ -182,14 +182,34 @@ static void __init ar933x_usb_setup(void
+@@ -37,6 +37,8 @@ static struct usb_ehci_pdata ath79_ehci_
+ static struct usb_ehci_pdata ath79_ehci_pdata_v2 = {
+ .caps_offset = 0x100,
+ .has_tt = 1,
++ .qca_force_host_mode = 1,
++ .qca_force_16bit_ptw = 1,
+ };
+
+ static void __init ath79_usb_register(const char *name, int id,
+@@ -182,14 +184,34 @@ static void __init ar933x_usb_setup(void
&ath79_ehci_pdata_v2, sizeof(ath79_ehci_pdata_v2));
}
@@ -10,11 +19,13 @@
- u32 bootstrap;
+ void __iomem *phy_reg;
+ u32 t;
-+
+
+- bootstrap = ath79_reset_rr(AR934X_RESET_REG_BOOTSTRAP);
+- if (bootstrap & AR934X_BOOTSTRAP_USB_MODE_DEVICE)
+ phy_reg = ioremap(base, 4);
+ if (!phy_reg)
-+ return;
-+
+ return;
+
+ t = ioread32(phy_reg);
+ t &= ~0xff;
+ t |= 0x58;
@@ -22,14 +33,12 @@
+
+ iounmap(phy_reg);
+}
-
-- bootstrap = ath79_reset_rr(AR934X_RESET_REG_BOOTSTRAP);
-- if (bootstrap & AR934X_BOOTSTRAP_USB_MODE_DEVICE)
++
+static void ar934x_usb_reset_notifier(struct platform_device *pdev)
+{
+ if (pdev->id != -1)
- return;
-
++ return;
++
+ enable_tx_tx_idp_violation_fix(0x18116c94);
+ dev_info(&pdev->dev, "TX-TX IDP fix enabled\n");
+}
@@ -39,12 +48,10 @@
ath79_device_reset_set(AR934X_RESET_USBSUS_OVERRIDE);
udelay(1000);
-@@ -202,14 +222,44 @@ static void __init ar934x_usb_setup(void
+@@ -202,14 +224,40 @@ static void __init ar934x_usb_setup(void
ath79_device_reset_clear(AR934X_RESET_USB_HOST);
udelay(1000);
-+ ath79_ehci_pdata_v2.qca_force_host_mode = 1;
-+ ath79_ehci_pdata_v2.qca_force_16bit_ptw = 1;
+ if (ath79_soc_rev >= 3)
+ ath79_ehci_pdata_v2.reset_notifier = ar934x_usb_reset_notifier;
+
@@ -77,8 +84,6 @@
+
static void __init qca955x_usb_setup(void)
{
-+ ath79_ehci_pdata_v2.qca_force_host_mode = 1;
-+ ath79_ehci_pdata_v2.qca_force_16bit_ptw = 1;
+ ath79_ehci_pdata_v2.reset_notifier = qca955x_usb_reset_notifier;
+
ath79_usb_register("ehci-platform", 0,