Procházet zdrojové kódy

add ignore_oc in struct ehci_hcd

SVN-Revision: 27945
Florian Fainelli před 14 roky
rodič
revize
0e40c19b45

+ 2 - 1
target/linux/brcm63xx/patches-2.6.39/011-add_bcm63xx_ehci_controller.patch

@@ -7,7 +7,7 @@ Signed-off-by: Maxime Bizon <[email protected]>
 
 
 --- /dev/null
 --- /dev/null
 +++ b/drivers/usb/host/ehci-bcm63xx.c
 +++ 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
 + * 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
 + * License.  See the file "COPYING" in the main directory of this archive
@@ -121,6 +121,7 @@ Signed-off-by: Maxime Bizon <[email protected]>
 +		HC_LENGTH(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->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
 +	ehci->sbrn = 0x20;
 +	ehci->sbrn = 0x20;
++	ehci->ignore_oc = 1;
 +
 +
 +	ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
 +	ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
 +	if (ret)
 +	if (ret)

+ 0 - 16
target/linux/brcm63xx/patches-2.6.39/210-no_ehci_over_current_check.patch

@@ -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!! */

+ 1 - 1
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);
  	bcm_gpio_writel(val, GPIO_MODE_REG);
 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
 +++ b/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_EXTRA_SPI_SS	(1 << 7)
  #define GPIO_MODE_6358_SERIAL_LED	(1 << 10)
  #define GPIO_MODE_6358_SERIAL_LED	(1 << 10)
  #define GPIO_MODE_6358_UTOPIA		(1 << 12)
  #define GPIO_MODE_6358_UTOPIA		(1 << 12)

+ 1 - 1
target/linux/brcm63xx/patches-2.6.39/240-spi.patch

@@ -170,7 +170,7 @@
  #define BCM_6358_OHCI0_IRQ		(IRQ_INTERNAL_BASE + 5)
  #define BCM_6358_OHCI0_IRQ		(IRQ_INTERNAL_BASE + 5)
 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
 +++ b/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_SHIFT		29
  #define DMIPSPLLCFG_N2_MASK		(0x7 << DMIPSPLLCFG_N2_SHIFT)
  #define DMIPSPLLCFG_N2_MASK		(0x7 << DMIPSPLLCFG_N2_SHIFT)
  
  

+ 4 - 3
target/linux/brcm63xx/patches-3.0/011-add_bcm63xx_ehci_controller.patch

@@ -7,7 +7,7 @@ Signed-off-by: Maxime Bizon <[email protected]>
 
 
 --- /dev/null
 --- /dev/null
 +++ b/drivers/usb/host/ehci-bcm63xx.c
 +++ 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
 + * 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
 + * License.  See the file "COPYING" in the main directory of this archive
@@ -118,9 +118,10 @@ Signed-off-by: Maxime Bizon <[email protected]>
 +	ehci->big_endian_desc = 0;
 +	ehci->big_endian_desc = 0;
 +	ehci->caps = hcd->regs;
 +	ehci->caps = hcd->regs;
 +	ehci->regs = 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->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
 +	ehci->sbrn = 0x20;
 +	ehci->sbrn = 0x20;
++	ehci->ignore_oc = 1;
 +
 +
 +	ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
 +	ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
 +	if (ret)
 +	if (ret)
@@ -164,7 +165,7 @@ Signed-off-by: Maxime Bizon <[email protected]>
 +MODULE_ALIAS("platform:bcm63xx_ehci");
 +MODULE_ALIAS("platform:bcm63xx_ehci");
 --- a/drivers/usb/host/ehci-hcd.c
 --- a/drivers/usb/host/ehci-hcd.c
 +++ b/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
  #define PLATFORM_DRIVER		ehci_grlib_driver
  #endif
  #endif
  
  

+ 0 - 16
target/linux/brcm63xx/patches-3.0/210-no_ehci_over_current_check.patch

@@ -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!! */

+ 3 - 2
target/linux/brcm63xx/patches-3.1/011-add_bcm63xx_ehci_controller.patch

@@ -7,7 +7,7 @@ Signed-off-by: Maxime Bizon <[email protected]>
 
 
 --- /dev/null
 --- /dev/null
 +++ b/drivers/usb/host/ehci-bcm63xx.c
 +++ 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
 + * 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
 + * License.  See the file "COPYING" in the main directory of this archive
@@ -118,9 +118,10 @@ Signed-off-by: Maxime Bizon <[email protected]>
 +	ehci->big_endian_desc = 0;
 +	ehci->big_endian_desc = 0;
 +	ehci->caps = hcd->regs;
 +	ehci->caps = hcd->regs;
 +	ehci->regs = 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->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
 +	ehci->sbrn = 0x20;
 +	ehci->sbrn = 0x20;
++	ehci->ignore_oc = 1;
 +
 +
 +	ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
 +	ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
 +	if (ret)
 +	if (ret)

+ 0 - 17
target/linux/brcm63xx/patches-3.1/210-no_ehci_over_current_check.patch

@@ -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!! */

+ 41 - 0
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)

+ 4 - 4
target/linux/generic/patches-2.6.39/610-netfilter_match_bypass_default_checks.patch

@@ -76,10 +76,11 @@
  
  
  	counters = alloc_counters(table);
  	counters = alloc_counters(table);
  	if (IS_ERR(counters))
  	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;
  			goto free_counters;
  		}
  		}
- 
++
 +		flags = e->ip.flags & IPT_F_MASK;
 +		flags = e->ip.flags & IPT_F_MASK;
 +		if (copy_to_user(userptr + off
 +		if (copy_to_user(userptr + off
 +				 + offsetof(struct ipt_entry, ip.flags),
 +				 + offsetof(struct ipt_entry, ip.flags),
@@ -87,7 +88,6 @@
 +			ret = -EFAULT;
 +			ret = -EFAULT;
 +			goto free_counters;
 +			goto free_counters;
 +		}
 +		}
-+
+ 
  		for (i = sizeof(struct ipt_entry);
  		for (i = sizeof(struct ipt_entry);
  		     i < e->target_offset;
  		     i < e->target_offset;
- 		     i += m->u.match_size) {

+ 41 - 0
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)

+ 4 - 4
target/linux/generic/patches-3.0/610-netfilter_match_bypass_default_checks.patch

@@ -76,10 +76,11 @@
  
  
  	counters = alloc_counters(table);
  	counters = alloc_counters(table);
  	if (IS_ERR(counters))
  	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;
  			goto free_counters;
  		}
  		}
- 
++
 +		flags = e->ip.flags & IPT_F_MASK;
 +		flags = e->ip.flags & IPT_F_MASK;
 +		if (copy_to_user(userptr + off
 +		if (copy_to_user(userptr + off
 +				 + offsetof(struct ipt_entry, ip.flags),
 +				 + offsetof(struct ipt_entry, ip.flags),
@@ -87,7 +88,6 @@
 +			ret = -EFAULT;
 +			ret = -EFAULT;
 +			goto free_counters;
 +			goto free_counters;
 +		}
 +		}
-+
+ 
  		for (i = sizeof(struct ipt_entry);
  		for (i = sizeof(struct ipt_entry);
  		     i < e->target_offset;
  		     i < e->target_offset;
- 		     i += m->u.match_size) {

+ 41 - 0
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)