openwrt/target/linux/brcm63xx/patches-4.14/350-MIPS-BCM63XX-support-settings-num-usbh-ports.patch
Koen Vandeputte 4eba86820f kernel: bump 4.14 to 4.14.169
Refreshed all patches.

Fixes:
- CVE-2019-14896
- CVE-2019-14897

Remove upstreamed:
- 023-0007-crypto-crypto4xx-Fix-wrong-ppc4xx_trng_probe-ppc4xx_.patch

Altered patches:
- 102-MIPS-BCM63XX-move-code-touching-the-USB-private-regi.patch
- 105-MIPS-BCM63XX-add-support-for-the-on-chip-OHCI-contro.patch
- 106-MIPS-BCM63XX-register-OHCI-controller-if-board-enabl.patch
- 108-MIPS-BCM63XX-add-support-for-the-on-chip-EHCI-contro.patch
- 207-MIPS-BCM63XX-move-device-registration-code-into-its-.patch
- 350-MIPS-BCM63XX-support-settings-num-usbh-ports.patch
- 356-MIPS-BCM63XX-move-fallback-sprom-support-into-its-ow.patch
- 390-MIPS-BCM63XX-do-not-register-SPI-controllers.patch
- 391-MIPS-BCM63XX-do-not-register-uart.patch
- 392-MIPS-BCM63XX-remove-leds-and-buttons.patch
- 416-BCM63XX-add-a-fixup-for-ath9k-devices.patch
- 422-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
-

Compile-tested on: brcm63xx, cns3xxx
Runtime-tested on: cns3xxx

Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
2020-02-04 18:12:19 +01:00

109 lines
3.2 KiB
Diff

--- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
+++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
@@ -40,6 +40,7 @@ struct board_info {
/* USB config */
struct bcm63xx_usbd_platform_data usbd;
+ unsigned int num_usbh_ports:2;
/* GPIO LEDs */
struct gpio_led leds[5];
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ehci.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ehci.h
@@ -1,6 +1,6 @@
#ifndef BCM63XX_DEV_USB_EHCI_H_
#define BCM63XX_DEV_USB_EHCI_H_
-int bcm63xx_ehci_register(void);
+int bcm63xx_ehci_register(unsigned int num_ports);
#endif /* BCM63XX_DEV_USB_EHCI_H_ */
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ohci.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ohci.h
@@ -1,6 +1,6 @@
#ifndef BCM63XX_DEV_USB_OHCI_H_
#define BCM63XX_DEV_USB_OHCI_H_
-int bcm63xx_ohci_register(void);
+int bcm63xx_ohci_register(unsigned int num_ports);
#endif /* BCM63XX_DEV_USB_OHCI_H_ */
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -166,6 +166,8 @@ static struct platform_device bcm63xx_gp
*/
int __init board_register_devices(void)
{
+ int usbh_ports = 0;
+
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -187,14 +189,21 @@ int __init board_register_devices(void)
!board_get_mac_address(board.enetsw.mac_addr))
bcm63xx_enetsw_register(&board.enetsw);
+ if ((board.has_ohci0 || board.has_ehci0)) {
+ usbh_ports = board.num_usbh_ports;
+
+ if (!usbh_ports || WARN_ON(usbh_ports > 1 && board.has_usbd))
+ usbh_ports = 1;
+ }
+
if (board.has_usbd)
bcm63xx_usbd_register(&board.usbd);
if (board.has_ehci0)
- bcm63xx_ehci_register();
+ bcm63xx_ehci_register(usbh_ports);
if (board.has_ohci0)
- bcm63xx_ohci_register();
+ bcm63xx_ohci_register(usbh_ports);
if (board.has_dsp)
bcm63xx_dsp_register(&board.dsp);
--- a/arch/mips/bcm63xx/dev-usb-ehci.c
+++ b/arch/mips/bcm63xx/dev-usb-ehci.c
@@ -79,12 +79,14 @@ static struct platform_device bcm63xx_eh
},
};
-int __init bcm63xx_ehci_register(void)
+int __init bcm63xx_ehci_register(unsigned int num_ports)
{
if (!BCMCPU_IS_6318() && !BCMCPU_IS_6328() && !BCMCPU_IS_6358() &&
!BCMCPU_IS_6362() && !BCMCPU_IS_6368() && !BCMCPU_IS_63268())
return 0;
+ bcm63xx_ehci_pdata.num_ports = num_ports;
+
ehci_resources[0].start = bcm63xx_regset_address(RSET_EHCI0);
ehci_resources[0].end = ehci_resources[0].start;
ehci_resources[0].end += RSET_EHCI_SIZE - 1;
--- a/arch/mips/bcm63xx/dev-usb-ohci.c
+++ b/arch/mips/bcm63xx/dev-usb-ohci.c
@@ -62,7 +62,6 @@ static struct usb_ohci_pdata bcm63xx_ohc
.big_endian_desc = 1,
.big_endian_mmio = 1,
.no_big_frame_no = 1,
- .num_ports = 1,
.power_on = bcm63xx_ohci_power_on,
.power_off = bcm63xx_ohci_power_off,
.power_suspend = bcm63xx_ohci_power_off,
@@ -80,11 +79,13 @@ static struct platform_device bcm63xx_oh
},
};
-int __init bcm63xx_ohci_register(void)
+int __init bcm63xx_ohci_register(unsigned int num_ports)
{
if (BCMCPU_IS_6345() || BCMCPU_IS_6338())
return -ENODEV;
+ bcm63xx_ohci_pdata.num_ports = num_ports;
+
ohci_resources[0].start = bcm63xx_regset_address(RSET_OHCI0);
ohci_resources[0].end = ohci_resources[0].start;
ohci_resources[0].end += RSET_OHCI_SIZE - 1;