[kernel] add ignore_oc in struct ehci_hcd
authorflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 10 Aug 2011 11:37:21 +0000 (11:37 +0000)
committerflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 10 Aug 2011 11:37:21 +0000 (11:37 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@27945 3c298f89-4303-0410-b956-a3cf2f4a3e73

13 files changed:
target/linux/brcm63xx/patches-2.6.39/011-add_bcm63xx_ehci_controller.patch
target/linux/brcm63xx/patches-2.6.39/210-no_ehci_over_current_check.patch [deleted file]
target/linux/brcm63xx/patches-2.6.39/230-6358-enet1-external-mii-clk.patch
target/linux/brcm63xx/patches-2.6.39/240-spi.patch
target/linux/brcm63xx/patches-3.0/011-add_bcm63xx_ehci_controller.patch
target/linux/brcm63xx/patches-3.0/210-no_ehci_over_current_check.patch [deleted file]
target/linux/brcm63xx/patches-3.1/011-add_bcm63xx_ehci_controller.patch
target/linux/brcm63xx/patches-3.1/210-no_ehci_over_current_check.patch [deleted file]
target/linux/generic/patches-2.6.39/102-ehci_hcd_ignore_oc.patch [new file with mode: 0644]
target/linux/generic/patches-2.6.39/610-netfilter_match_bypass_default_checks.patch
target/linux/generic/patches-3.0/102-ehci_hcd_ignore_oc.patch [new file with mode: 0644]
target/linux/generic/patches-3.0/610-netfilter_match_bypass_default_checks.patch
target/linux/generic/patches-3.1/102-ehci_hcd_ignore_oc.patch [new file with mode: 0644]

index 1acbab0..284cd37 100644 (file)
@@ -7,7 +7,7 @@ Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
 
 --- /dev/null
 +++ b/drivers/usb/host/ehci-bcm63xx.c
-@@ -0,0 +1,154 @@
+@@ -0,0 +1,155 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
@@ -121,6 +121,7 @@ Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
 +              HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase));
 +      ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
 +      ehci->sbrn = 0x20;
++      ehci->ignore_oc = 1;
 +
 +      ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
 +      if (ret)
diff --git a/target/linux/brcm63xx/patches-2.6.39/210-no_ehci_over_current_check.patch b/target/linux/brcm63xx/patches-2.6.39/210-no_ehci_over_current_check.patch
deleted file mode 100644 (file)
index cfdf165..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
---- a/drivers/usb/host/ehci-hub.c
-+++ b/drivers/usb/host/ehci-hub.c
-@@ -883,11 +883,13 @@ static int ehci_hub_control (
-                        * power switching; they're allowed to just limit the
-                        * current.  khubd will turn the power back on.
-                        */
-+#ifndef CONFIG_BCM63XX
-                       if (HCS_PPC (ehci->hcs_params)){
-                               ehci_writel(ehci,
-                                       temp & ~(PORT_RWC_BITS | PORT_POWER),
-                                       status_reg);
-                       }
-+#endif
-               }
-               /* whoever resumes must GetPortStatus to complete it!! */
index f4c1ed9..f064609 100644 (file)
@@ -11,7 +11,7 @@
        bcm_gpio_writel(val, GPIO_MODE_REG);
 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
-@@ -402,6 +402,8 @@
+@@ -401,6 +401,8 @@
  #define GPIO_MODE_6358_EXTRA_SPI_SS   (1 << 7)
  #define GPIO_MODE_6358_SERIAL_LED     (1 << 10)
  #define GPIO_MODE_6358_UTOPIA         (1 << 12)
index b30190e..454bbb6 100644 (file)
  #define BCM_6358_OHCI0_IRQ            (IRQ_INTERNAL_BASE + 5)
 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
-@@ -773,4 +773,116 @@
+@@ -805,4 +805,116 @@
  #define DMIPSPLLCFG_N2_SHIFT          29
  #define DMIPSPLLCFG_N2_MASK           (0x7 << DMIPSPLLCFG_N2_SHIFT)
  
index b313834..913bf36 100644 (file)
@@ -7,7 +7,7 @@ Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
 
 --- /dev/null
 +++ b/drivers/usb/host/ehci-bcm63xx.c
-@@ -0,0 +1,154 @@
+@@ -0,0 +1,155 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
@@ -118,9 +118,10 @@ Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
 +      ehci->big_endian_desc = 0;
 +      ehci->caps = hcd->regs;
 +      ehci->regs = hcd->regs +
-+              HC_LENGTH(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase));
++              HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase));
 +      ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
 +      ehci->sbrn = 0x20;
++      ehci->ignore_oc = 1;
 +
 +      ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
 +      if (ret)
@@ -164,7 +165,7 @@ Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
 +MODULE_ALIAS("platform:bcm63xx_ehci");
 --- a/drivers/usb/host/ehci-hcd.c
 +++ b/drivers/usb/host/ehci-hcd.c
-@@ -1286,6 +1286,11 @@ MODULE_LICENSE ("GPL");
+@@ -1284,6 +1284,11 @@ MODULE_LICENSE ("GPL");
  #define PLATFORM_DRIVER               ehci_grlib_driver
  #endif
  
diff --git a/target/linux/brcm63xx/patches-3.0/210-no_ehci_over_current_check.patch b/target/linux/brcm63xx/patches-3.0/210-no_ehci_over_current_check.patch
deleted file mode 100644 (file)
index f2c10da..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
---- a/drivers/usb/host/ehci-hub.c
-+++ b/drivers/usb/host/ehci-hub.c
-@@ -891,11 +891,13 @@ static int ehci_hub_control (
-                        * power switching; they're allowed to just limit the
-                        * current.  khubd will turn the power back on.
-                        */
-+#ifndef CONFIG_BCM63XX
-                       if (HCS_PPC (ehci->hcs_params)){
-                               ehci_writel(ehci,
-                                       temp & ~(PORT_RWC_BITS | PORT_POWER),
-                                       status_reg);
-                       }
-+#endif
-               }
-               /* whoever resumes must GetPortStatus to complete it!! */
index 397562c..62c39c3 100644 (file)
@@ -7,7 +7,7 @@ Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
 
 --- /dev/null
 +++ b/drivers/usb/host/ehci-bcm63xx.c
-@@ -0,0 +1,154 @@
+@@ -0,0 +1,155 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
@@ -118,9 +118,10 @@ Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
 +      ehci->big_endian_desc = 0;
 +      ehci->caps = hcd->regs;
 +      ehci->regs = hcd->regs +
-+              HC_LENGTH(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase));
++              HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase));
 +      ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
 +      ehci->sbrn = 0x20;
++      ehci->ignore_oc = 1;
 +
 +      ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
 +      if (ret)
diff --git a/target/linux/brcm63xx/patches-3.1/210-no_ehci_over_current_check.patch b/target/linux/brcm63xx/patches-3.1/210-no_ehci_over_current_check.patch
deleted file mode 100644 (file)
index bb5d9e7..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/drivers/usb/host/ehci-hub.c
-+++ b/drivers/usb/host/ehci-hub.c
-@@ -816,12 +816,14 @@ static int ehci_hub_control (
-                        * power switching; they're allowed to just limit the
-                        * current.  khubd will turn the power back on.
-                        */
-+#ifndef CONFIG_BCM63XX
-                       if ((temp & PORT_OC) && HCS_PPC(ehci->hcs_params)) {
-                               ehci_writel(ehci,
-                                       temp & ~(PORT_RWC_BITS | PORT_POWER),
-                                       status_reg);
-                               temp = ehci_readl(ehci, status_reg);
-                       }
-+#endif
-               }
-               /* whoever resumes must GetPortStatus to complete it!! */
diff --git a/target/linux/generic/patches-2.6.39/102-ehci_hcd_ignore_oc.patch b/target/linux/generic/patches-2.6.39/102-ehci_hcd_ignore_oc.patch
new file mode 100644 (file)
index 0000000..f98d8ee
--- /dev/null
@@ -0,0 +1,41 @@
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -744,7 +744,7 @@ static int ehci_run (struct usb_hcd *hcd
+               "USB %x.%x started, EHCI %x.%02x%s\n",
+               ((ehci->sbrn & 0xf0)>>4), (ehci->sbrn & 0x0f),
+               temp >> 8, temp & 0xff,
+-              ignore_oc ? ", overcurrent ignored" : "");
++              (ignore_oc || ehci->ignore_oc) ? ", overcurrent ignored" : "");
+       ehci_writel(ehci, INTR_MASK,
+                   &ehci->regs->intr_enable); /* Turn On Interrupts */
+--- a/drivers/usb/host/ehci-hub.c
++++ b/drivers/usb/host/ehci-hub.c
+@@ -655,7 +655,7 @@ ehci_hub_status_data (struct usb_hcd *hc
+        * always set, seem to clear PORT_OCC and PORT_CSC when writing to
+        * PORT_POWER; that's surprising, but maybe within-spec.
+        */
+-      if (!ignore_oc)
++      if (!ignore_oc || !ehci->ignore_oc)
+               mask = PORT_CSC | PORT_PEC | PORT_OCC;
+       else
+               mask = PORT_CSC | PORT_PEC;
+@@ -873,7 +873,7 @@ static int ehci_hub_control (
+               if (temp & PORT_PEC)
+                       status |= USB_PORT_STAT_C_ENABLE << 16;
+-              if ((temp & PORT_OCC) && !ignore_oc){
++              if ((temp & PORT_OCC) && (!ignore_oc || !ehci->ignore_oc)){
+                       status |= USB_PORT_STAT_C_OVERCURRENT << 16;
+                       /*
+--- a/drivers/usb/host/ehci.h
++++ b/drivers/usb/host/ehci.h
+@@ -134,6 +134,7 @@ struct ehci_hcd {                  /* one per controlle
+       unsigned                amd_pll_fix:1;
+       unsigned                fs_i_thresh:1;  /* Intel iso scheduling */
+       unsigned                use_dummy_qh:1; /* AMD Frame List table quirk*/
++      unsigned                ignore_oc:1;
+       /* required for usb32 quirk */
+       #define OHCI_CTRL_HCFS          (3 << 6)
index 98c28c7..c834bee 100644 (file)
  
        counters = alloc_counters(table);
        if (IS_ERR(counters))
-@@ -967,6 +996,14 @@ copy_entries_to_user(unsigned int total_
+@@ -966,6 +995,14 @@ copy_entries_to_user(unsigned int total_
+                       ret = -EFAULT;
                        goto free_counters;
                }
++
 +              flags = e->ip.flags & IPT_F_MASK;
 +              if (copy_to_user(userptr + off
 +                               + offsetof(struct ipt_entry, ip.flags),
@@ -87,7 +88,6 @@
 +                      ret = -EFAULT;
 +                      goto free_counters;
 +              }
-+
                for (i = sizeof(struct ipt_entry);
                     i < e->target_offset;
-                    i += m->u.match_size) {
diff --git a/target/linux/generic/patches-3.0/102-ehci_hcd_ignore_oc.patch b/target/linux/generic/patches-3.0/102-ehci_hcd_ignore_oc.patch
new file mode 100644 (file)
index 0000000..79e26b3
--- /dev/null
@@ -0,0 +1,41 @@
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -746,7 +746,7 @@ static int ehci_run (struct usb_hcd *hcd
+               "USB %x.%x started, EHCI %x.%02x%s\n",
+               ((ehci->sbrn & 0xf0)>>4), (ehci->sbrn & 0x0f),
+               temp >> 8, temp & 0xff,
+-              ignore_oc ? ", overcurrent ignored" : "");
++              (ignore_oc || ehci->ignore_oc) ? ", overcurrent ignored" : "");
+       ehci_writel(ehci, INTR_MASK,
+                   &ehci->regs->intr_enable); /* Turn On Interrupts */
+--- a/drivers/usb/host/ehci-hub.c
++++ b/drivers/usb/host/ehci-hub.c
+@@ -656,7 +656,7 @@ ehci_hub_status_data (struct usb_hcd *hc
+        * always set, seem to clear PORT_OCC and PORT_CSC when writing to
+        * PORT_POWER; that's surprising, but maybe within-spec.
+        */
+-      if (!ignore_oc)
++      if (!ignore_oc || !ehci->ignore_oc)
+               mask = PORT_CSC | PORT_PEC | PORT_OCC;
+       else
+               mask = PORT_CSC | PORT_PEC;
+@@ -881,7 +881,7 @@ static int ehci_hub_control (
+               if (temp & PORT_PEC)
+                       status |= USB_PORT_STAT_C_ENABLE << 16;
+-              if ((temp & PORT_OCC) && !ignore_oc){
++              if ((temp & PORT_OCC) && (!ignore_oc || !ehci->ignore_oc)){
+                       status |= USB_PORT_STAT_C_OVERCURRENT << 16;
+                       /*
+--- a/drivers/usb/host/ehci.h
++++ b/drivers/usb/host/ehci.h
+@@ -137,6 +137,7 @@ struct ehci_hcd {                  /* one per controlle
+       unsigned                fs_i_thresh:1;  /* Intel iso scheduling */
+       unsigned                use_dummy_qh:1; /* AMD Frame List table quirk*/
+       unsigned                has_synopsys_hc_bug:1; /* Synopsys HC */
++      unsigned                ignore_oc:1;
+       /* required for usb32 quirk */
+       #define OHCI_CTRL_HCFS          (3 << 6)
index b65e00f..51c9e09 100644 (file)
  
        counters = alloc_counters(table);
        if (IS_ERR(counters))
-@@ -962,6 +991,14 @@ copy_entries_to_user(unsigned int total_
+@@ -961,6 +990,14 @@ copy_entries_to_user(unsigned int total_
+                       ret = -EFAULT;
                        goto free_counters;
                }
++
 +              flags = e->ip.flags & IPT_F_MASK;
 +              if (copy_to_user(userptr + off
 +                               + offsetof(struct ipt_entry, ip.flags),
@@ -87,7 +88,6 @@
 +                      ret = -EFAULT;
 +                      goto free_counters;
 +              }
-+
                for (i = sizeof(struct ipt_entry);
                     i < e->target_offset;
-                    i += m->u.match_size) {
diff --git a/target/linux/generic/patches-3.1/102-ehci_hcd_ignore_oc.patch b/target/linux/generic/patches-3.1/102-ehci_hcd_ignore_oc.patch
new file mode 100644 (file)
index 0000000..6cef4d9
--- /dev/null
@@ -0,0 +1,41 @@
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -753,7 +753,7 @@ static int ehci_run (struct usb_hcd *hcd
+               "USB %x.%x started, EHCI %x.%02x%s\n",
+               ((ehci->sbrn & 0xf0)>>4), (ehci->sbrn & 0x0f),
+               temp >> 8, temp & 0xff,
+-              ignore_oc ? ", overcurrent ignored" : "");
++              (ignore_oc || ehci->ignore_oc) ? ", overcurrent ignored" : "");
+       ehci_writel(ehci, INTR_MASK,
+                   &ehci->regs->intr_enable); /* Turn On Interrupts */
+--- a/drivers/usb/host/ehci-hub.c
++++ b/drivers/usb/host/ehci-hub.c
+@@ -581,7 +581,7 @@ ehci_hub_status_data (struct usb_hcd *hc
+        * always set, seem to clear PORT_OCC and PORT_CSC when writing to
+        * PORT_POWER; that's surprising, but maybe within-spec.
+        */
+-      if (!ignore_oc)
++      if (!ignore_oc || !ehci->ignore_oc)
+               mask = PORT_CSC | PORT_PEC | PORT_OCC;
+       else
+               mask = PORT_CSC | PORT_PEC;
+@@ -806,7 +806,7 @@ static int ehci_hub_control (
+               if (temp & PORT_PEC)
+                       status |= USB_PORT_STAT_C_ENABLE << 16;
+-              if ((temp & PORT_OCC) && !ignore_oc){
++              if ((temp & PORT_OCC) && (!ignore_oc || !ehci->ignore_oc)){
+                       status |= USB_PORT_STAT_C_OVERCURRENT << 16;
+                       /*
+--- a/drivers/usb/host/ehci.h
++++ b/drivers/usb/host/ehci.h
+@@ -139,6 +139,7 @@ struct ehci_hcd {                  /* one per controlle
+       unsigned                fs_i_thresh:1;  /* Intel iso scheduling */
+       unsigned                use_dummy_qh:1; /* AMD Frame List table quirk*/
+       unsigned                has_synopsys_hc_bug:1; /* Synopsys HC */
++      unsigned                ignore_oc:1;
+       /* required for usb32 quirk */
+       #define OHCI_CTRL_HCFS          (3 << 6)