From: Florian Fainelli Date: Wed, 10 Aug 2011 11:37:21 +0000 (+0000) Subject: [kernel] add ignore_oc in struct ehci_hcd X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=9fd291dd8b631c6e4c16c135caaf52e25368c9f5;p=openwrt%2Fsvn-archive%2Farchive.git [kernel] add ignore_oc in struct ehci_hcd SVN-Revision: 27945 --- diff --git a/target/linux/brcm63xx/patches-2.6.39/011-add_bcm63xx_ehci_controller.patch b/target/linux/brcm63xx/patches-2.6.39/011-add_bcm63xx_ehci_controller.patch index 1acbab0383..284cd37781 100644 --- a/target/linux/brcm63xx/patches-2.6.39/011-add_bcm63xx_ehci_controller.patch +++ b/target/linux/brcm63xx/patches-2.6.39/011-add_bcm63xx_ehci_controller.patch @@ -7,7 +7,7 @@ Signed-off-by: Maxime Bizon --- /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 + 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 index cfdf16531a..0000000000 --- a/target/linux/brcm63xx/patches-2.6.39/210-no_ehci_over_current_check.patch +++ /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!! */ diff --git a/target/linux/brcm63xx/patches-2.6.39/230-6358-enet1-external-mii-clk.patch b/target/linux/brcm63xx/patches-2.6.39/230-6358-enet1-external-mii-clk.patch index f4c1ed9a6d..f064609783 100644 --- a/target/linux/brcm63xx/patches-2.6.39/230-6358-enet1-external-mii-clk.patch +++ b/target/linux/brcm63xx/patches-2.6.39/230-6358-enet1-external-mii-clk.patch @@ -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) diff --git a/target/linux/brcm63xx/patches-2.6.39/240-spi.patch b/target/linux/brcm63xx/patches-2.6.39/240-spi.patch index b30190ea3a..454bbb6d20 100644 --- a/target/linux/brcm63xx/patches-2.6.39/240-spi.patch +++ b/target/linux/brcm63xx/patches-2.6.39/240-spi.patch @@ -170,7 +170,7 @@ #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) diff --git a/target/linux/brcm63xx/patches-3.0/011-add_bcm63xx_ehci_controller.patch b/target/linux/brcm63xx/patches-3.0/011-add_bcm63xx_ehci_controller.patch index b3138345fa..913bf36158 100644 --- a/target/linux/brcm63xx/patches-3.0/011-add_bcm63xx_ehci_controller.patch +++ b/target/linux/brcm63xx/patches-3.0/011-add_bcm63xx_ehci_controller.patch @@ -7,7 +7,7 @@ Signed-off-by: Maxime Bizon --- /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 + 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 +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 index f2c10da855..0000000000 --- a/target/linux/brcm63xx/patches-3.0/210-no_ehci_over_current_check.patch +++ /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!! */ diff --git a/target/linux/brcm63xx/patches-3.1/011-add_bcm63xx_ehci_controller.patch b/target/linux/brcm63xx/patches-3.1/011-add_bcm63xx_ehci_controller.patch index 397562cacc..62c39c3a0c 100644 --- a/target/linux/brcm63xx/patches-3.1/011-add_bcm63xx_ehci_controller.patch +++ b/target/linux/brcm63xx/patches-3.1/011-add_bcm63xx_ehci_controller.patch @@ -7,7 +7,7 @@ Signed-off-by: Maxime Bizon --- /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 + 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 index bb5d9e77f9..0000000000 --- a/target/linux/brcm63xx/patches-3.1/210-no_ehci_over_current_check.patch +++ /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 index 0000000000..f98d8ee02f --- /dev/null +++ b/target/linux/generic/patches-2.6.39/102-ehci_hcd_ignore_oc.patch @@ -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) diff --git a/target/linux/generic/patches-2.6.39/610-netfilter_match_bypass_default_checks.patch b/target/linux/generic/patches-2.6.39/610-netfilter_match_bypass_default_checks.patch index 98c28c7433..c834beedd6 100644 --- a/target/linux/generic/patches-2.6.39/610-netfilter_match_bypass_default_checks.patch +++ b/target/linux/generic/patches-2.6.39/610-netfilter_match_bypass_default_checks.patch @@ -76,10 +76,11 @@ 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 index 0000000000..79e26b32db --- /dev/null +++ b/target/linux/generic/patches-3.0/102-ehci_hcd_ignore_oc.patch @@ -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) diff --git a/target/linux/generic/patches-3.0/610-netfilter_match_bypass_default_checks.patch b/target/linux/generic/patches-3.0/610-netfilter_match_bypass_default_checks.patch index b65e00ff82..51c9e0999b 100644 --- a/target/linux/generic/patches-3.0/610-netfilter_match_bypass_default_checks.patch +++ b/target/linux/generic/patches-3.0/610-netfilter_match_bypass_default_checks.patch @@ -76,10 +76,11 @@ 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 index 0000000000..6cef4d9918 --- /dev/null +++ b/target/linux/generic/patches-3.1/102-ehci_hcd_ignore_oc.patch @@ -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)