kernel: bump 4.19 to 4.19.115

Refreshed all patches.

Remove upstreamed:
- 600-ipv6-addrconf-call-ipv6_mc_up-for-non-Ethernet-inter.patch
- 184-USB-serial-option-add-Wistron-Neweb-D19Q1.patch

Fixes:
- CVE-2020-8647
- CVE-2020-8648 (potentially)
- CVE-2020-8649

Compile-tested on: cns3xxx
Runtime-tested on: cns3xxx

Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
master
Koen Vandeputte 4 years ago
parent e31d158c4d
commit 3c3825436e

@ -7,11 +7,11 @@ ifdef CONFIG_TESTING_KERNEL
endif endif
LINUX_VERSION-4.14 = .176 LINUX_VERSION-4.14 = .176
LINUX_VERSION-4.19 = .108 LINUX_VERSION-4.19 = .115
LINUX_VERSION-5.4 = .32 LINUX_VERSION-5.4 = .32
LINUX_KERNEL_HASH-4.14.176 = bcae0956baaeb55dab5bad0401873fbc5baaa7fbe957ea6d27a5ab241cec5ca2 LINUX_KERNEL_HASH-4.14.176 = bcae0956baaeb55dab5bad0401873fbc5baaa7fbe957ea6d27a5ab241cec5ca2
LINUX_KERNEL_HASH-4.19.108 = 09aeeca5b08efea2f54b977b2999afb60d42f93b9f65b2b0111969f183f750a3 LINUX_KERNEL_HASH-4.19.115 = 11b2d97c8ea5ceb40c5e1d0bb87ad5b2b8c84560181bc60c0d28ec3a3e3801c2
LINUX_KERNEL_HASH-5.4.32 = 192d99fab7a47a537493b6d7eddb52892b98f8ada655c0bbb419b360a995f2b3 LINUX_KERNEL_HASH-5.4.32 = 192d99fab7a47a537493b6d7eddb52892b98f8ada655c0bbb419b360a995f2b3
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))

@ -44,7 +44,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
#include "xhci.h" #include "xhci.h"
#include "xhci-trace.h" #include "xhci-trace.h"
@@ -264,6 +266,458 @@ static void xhci_pme_acpi_rtd3_enable(st @@ -265,6 +267,458 @@ static void xhci_pme_acpi_rtd3_enable(st
static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { } static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
#endif /* CONFIG_ACPI */ #endif /* CONFIG_ACPI */
@ -503,7 +503,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
/* called during probe() after chip reset completes */ /* called during probe() after chip reset completes */
static int xhci_pci_setup(struct usb_hcd *hcd) static int xhci_pci_setup(struct usb_hcd *hcd)
{ {
@@ -305,6 +759,22 @@ static int xhci_pci_probe(struct pci_dev @@ -306,6 +760,22 @@ static int xhci_pci_probe(struct pci_dev
struct hc_driver *driver; struct hc_driver *driver;
struct usb_hcd *hcd; struct usb_hcd *hcd;
@ -526,7 +526,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
driver = (struct hc_driver *)id->driver_data; driver = (struct hc_driver *)id->driver_data;
/* Prevent runtime suspending between USB-2 and USB-3 initialization */ /* Prevent runtime suspending between USB-2 and USB-3 initialization */
@@ -363,6 +833,16 @@ static void xhci_pci_remove(struct pci_d @@ -364,6 +834,16 @@ static void xhci_pci_remove(struct pci_d
{ {
struct xhci_hcd *xhci; struct xhci_hcd *xhci;

@ -13,7 +13,7 @@ produce a noisy warning.
--- a/drivers/usb/host/xhci-pci.c --- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c
@@ -217,6 +217,7 @@ static void xhci_pci_quirks(struct devic @@ -218,6 +218,7 @@ static void xhci_pci_quirks(struct devic
pdev->device == 0x0015) { pdev->device == 0x0015) {
xhci->quirks |= XHCI_RESET_ON_RESUME; xhci->quirks |= XHCI_RESET_ON_RESUME;
xhci->quirks |= XHCI_ZERO_64B_REGS; xhci->quirks |= XHCI_ZERO_64B_REGS;

@ -40,9 +40,9 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/tty/serial/ar933x_uart.c --- a/drivers/tty/serial/ar933x_uart.c
+++ b/drivers/tty/serial/ar933x_uart.c +++ b/drivers/tty/serial/ar933x_uart.c
@@ -286,6 +286,10 @@ static void ar933x_uart_set_termios(stru @@ -290,6 +290,10 @@ static void ar933x_uart_set_termios(stru
ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, ar933x_uart_rmw_set(up, AR933X_UART_CS_REG,
AR933X_UART_CS_HOST_INT_EN); AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE);
+ /* enable RX and TX ready overide */ + /* enable RX and TX ready overide */
+ ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, + ar933x_uart_rmw_set(up, AR933X_UART_CS_REG,
@ -51,14 +51,14 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
/* reenable the UART */ /* reenable the UART */
ar933x_uart_rmw(up, AR933X_UART_CS_REG, ar933x_uart_rmw(up, AR933X_UART_CS_REG,
AR933X_UART_CS_IF_MODE_M << AR933X_UART_CS_IF_MODE_S, AR933X_UART_CS_IF_MODE_M << AR933X_UART_CS_IF_MODE_S,
@@ -418,6 +422,10 @@ static int ar933x_uart_startup(struct ua @@ -424,6 +428,10 @@ static int ar933x_uart_startup(struct ua
ar933x_uart_rmw_set(up, AR933X_UART_CS_REG,
AR933X_UART_CS_HOST_INT_EN);
+ /* enable RX and TX ready overide */ /* enable RX and TX ready overide */
+ ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, ar933x_uart_rmw_set(up, AR933X_UART_CS_REG,
+ AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE); + AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE);
+ +
+ /* enable RX and TX ready overide */
+ ar933x_uart_rmw_set(up, AR933X_UART_CS_REG,
AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE);
/* Enable RX interrupts */ /* Enable RX interrupts */
up->ier = AR933X_UART_INT_RX_VALID;
ar933x_uart_write(up, AR933X_UART_INT_EN_REG, up->ier);

@ -160,7 +160,7 @@ v2: use bool to indicate ongoing half-duplex send, use it afterwards
} }
static void ar933x_uart_break_ctl(struct uart_port *port, int break_state) static void ar933x_uart_break_ctl(struct uart_port *port, int break_state)
@@ -336,11 +393,20 @@ static void ar933x_uart_rx_chars(struct @@ -340,11 +397,20 @@ static void ar933x_uart_rx_chars(struct
static void ar933x_uart_tx_chars(struct ar933x_uart_port *up) static void ar933x_uart_tx_chars(struct ar933x_uart_port *up)
{ {
struct circ_buf *xmit = &up->port.state->xmit; struct circ_buf *xmit = &up->port.state->xmit;
@ -181,7 +181,7 @@ v2: use bool to indicate ongoing half-duplex send, use it afterwards
count = up->port.fifosize; count = up->port.fifosize;
do { do {
unsigned int rdata; unsigned int rdata;
@@ -368,8 +434,14 @@ static void ar933x_uart_tx_chars(struct @@ -372,8 +438,14 @@ static void ar933x_uart_tx_chars(struct
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
uart_write_wakeup(&up->port); uart_write_wakeup(&up->port);
@ -197,7 +197,7 @@ v2: use bool to indicate ongoing half-duplex send, use it afterwards
} }
static irqreturn_t ar933x_uart_interrupt(int irq, void *dev_id) static irqreturn_t ar933x_uart_interrupt(int irq, void *dev_id)
@@ -427,8 +499,7 @@ static int ar933x_uart_startup(struct ua @@ -435,8 +507,7 @@ static int ar933x_uart_startup(struct ua
AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE); AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE);
/* Enable RX interrupts */ /* Enable RX interrupts */
@ -207,7 +207,7 @@ v2: use bool to indicate ongoing half-duplex send, use it afterwards
spin_unlock_irqrestore(&up->port.lock, flags); spin_unlock_irqrestore(&up->port.lock, flags);
@@ -511,6 +582,21 @@ static const struct uart_ops ar933x_uart @@ -519,6 +590,21 @@ static const struct uart_ops ar933x_uart
.verify_port = ar933x_uart_verify_port, .verify_port = ar933x_uart_verify_port,
}; };
@ -229,7 +229,7 @@ v2: use bool to indicate ongoing half-duplex send, use it afterwards
#ifdef CONFIG_SERIAL_AR933X_CONSOLE #ifdef CONFIG_SERIAL_AR933X_CONSOLE
static struct ar933x_uart_port * static struct ar933x_uart_port *
ar933x_console_ports[CONFIG_SERIAL_AR933X_NR_UARTS]; ar933x_console_ports[CONFIG_SERIAL_AR933X_NR_UARTS];
@@ -680,6 +766,8 @@ static int ar933x_uart_probe(struct plat @@ -688,6 +774,8 @@ static int ar933x_uart_probe(struct plat
goto err_disable_clk; goto err_disable_clk;
} }
@ -238,7 +238,7 @@ v2: use bool to indicate ongoing half-duplex send, use it afterwards
port->mapbase = mem_res->start; port->mapbase = mem_res->start;
port->line = id; port->line = id;
port->irq = irq_res->start; port->irq = irq_res->start;
@@ -690,6 +778,7 @@ static int ar933x_uart_probe(struct plat @@ -698,6 +786,7 @@ static int ar933x_uart_probe(struct plat
port->regshift = 2; port->regshift = 2;
port->fifosize = AR933X_UART_FIFO_SIZE; port->fifosize = AR933X_UART_FIFO_SIZE;
port->ops = &ar933x_uart_ops; port->ops = &ar933x_uart_ops;
@ -246,7 +246,7 @@ v2: use bool to indicate ongoing half-duplex send, use it afterwards
baud = ar933x_uart_get_baud(port->uartclk, AR933X_UART_MAX_SCALE, 1); baud = ar933x_uart_get_baud(port->uartclk, AR933X_UART_MAX_SCALE, 1);
up->min_baud = max_t(unsigned int, baud, AR933X_UART_MIN_BAUD); up->min_baud = max_t(unsigned int, baud, AR933X_UART_MIN_BAUD);
@@ -697,6 +786,18 @@ static int ar933x_uart_probe(struct plat @@ -705,6 +794,18 @@ static int ar933x_uart_probe(struct plat
baud = ar933x_uart_get_baud(port->uartclk, 0, AR933X_UART_MAX_STEP); baud = ar933x_uart_get_baud(port->uartclk, 0, AR933X_UART_MAX_STEP);
up->max_baud = min_t(unsigned int, baud, AR933X_UART_MAX_BAUD); up->max_baud = min_t(unsigned int, baud, AR933X_UART_MAX_BAUD);

@ -8,10 +8,8 @@ Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
drivers/spi/spi-ath79.c | 35 +++++++++++++++++++++++++++++++++++ drivers/spi/spi-ath79.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+) 1 file changed, 35 insertions(+)
Index: linux-4.19.106/drivers/spi/spi-ath79.c --- a/drivers/spi/spi-ath79.c
=================================================================== +++ b/drivers/spi/spi-ath79.c
--- linux-4.19.106.orig/drivers/spi/spi-ath79.c
+++ linux-4.19.106/drivers/spi/spi-ath79.c
@@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/io.h> #include <linux/io.h>

@ -214,7 +214,7 @@
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/ipv6.h> #include <linux/ipv6.h>
#include <linux/icmpv6.h> #include <linux/icmpv6.h>
@@ -837,10 +838,10 @@ static void tcp_v6_send_response(const s @@ -836,10 +837,10 @@ static void tcp_v6_send_response(const s
topt = (__be32 *)(t1 + 1); topt = (__be32 *)(t1 + 1);
if (tsecr) { if (tsecr) {

@ -917,7 +917,7 @@ Fixes https://github.com/raspberrypi/linux/issues/2408
} }
--- a/drivers/usb/core/hub.c --- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c
@@ -5228,7 +5228,7 @@ static void port_event(struct usb_hub *h @@ -5232,7 +5232,7 @@ static void port_event(struct usb_hub *h
u16 status = 0, unused; u16 status = 0, unused;
port_dev->over_current_count++; port_dev->over_current_count++;

@ -170,7 +170,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
goto out; goto out;
--- a/drivers/mmc/core/core.c --- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c
@@ -2230,7 +2230,8 @@ EXPORT_SYMBOL(mmc_erase); @@ -2233,7 +2233,8 @@ EXPORT_SYMBOL(mmc_erase);
int mmc_can_erase(struct mmc_card *card) int mmc_can_erase(struct mmc_card *card)
{ {
if ((card->host->caps & MMC_CAP_ERASE) && if ((card->host->caps & MMC_CAP_ERASE) &&

@ -276,7 +276,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
ENDPROC(arm_copy_from_user) ENDPROC(arm_copy_from_user)
+ENDPROC(__copy_from_user_std) +ENDPROC(__copy_from_user_std)
.pushsection .fixup,"ax" .pushsection .text.fixup,"ax"
.align 0 .align 0
--- /dev/null --- /dev/null
+++ b/arch/arm/lib/exports_rpi.c +++ b/arch/arm/lib/exports_rpi.c

@ -96,7 +96,7 @@ Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
+whwave,sd3078 I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC +whwave,sd3078 I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC
--- a/drivers/rtc/Kconfig --- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig
@@ -625,6 +625,15 @@ config RTC_DRV_EM3027 @@ -626,6 +626,15 @@ config RTC_DRV_EM3027
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called rtc-em3027. will be called rtc-em3027.

@ -10,7 +10,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
--- a/drivers/usb/host/xhci-pci.c --- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c
@@ -224,6 +224,10 @@ static void xhci_pci_quirks(struct devic @@ -225,6 +225,10 @@ static void xhci_pci_quirks(struct devic
pdev->device == 0x3432) pdev->device == 0x3432)
xhci->quirks |= XHCI_BROKEN_STREAMS; xhci->quirks |= XHCI_BROKEN_STREAMS;

@ -23,7 +23,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
--- a/drivers/usb/host/xhci-pci.c --- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c
@@ -225,8 +225,10 @@ static void xhci_pci_quirks(struct devic @@ -226,8 +226,10 @@ static void xhci_pci_quirks(struct devic
xhci->quirks |= XHCI_BROKEN_STREAMS; xhci->quirks |= XHCI_BROKEN_STREAMS;
if (pdev->vendor == PCI_VENDOR_ID_VIA && if (pdev->vendor == PCI_VENDOR_ID_VIA &&

@ -33,7 +33,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
#define USB_VENDOR_ID_BELKIN 0x050d #define USB_VENDOR_ID_BELKIN 0x050d
#define USB_DEVICE_ID_FLIP_KVM 0x3201 #define USB_DEVICE_ID_FLIP_KVM 0x3201
@@ -1196,6 +1199,9 @@ @@ -1197,6 +1200,9 @@
#define USB_VENDOR_ID_XAT 0x2505 #define USB_VENDOR_ID_XAT 0x2505
#define USB_DEVICE_ID_XAT_CSR 0x0220 #define USB_DEVICE_ID_XAT_CSR 0x0220

@ -124,7 +124,7 @@ Acked-by: Eric Anholt <eric@anholt.net>
pinctrl-0 = <&uart0_gpio14>; pinctrl-0 = <&uart0_gpio14>;
--- a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts --- a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
+++ b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts +++ b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
@@ -129,6 +129,13 @@ @@ -130,6 +130,13 @@
}; };
}; };

@ -18,9 +18,9 @@ Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
--- a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts --- a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
+++ b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts +++ b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
@@ -119,6 +119,7 @@ @@ -120,6 +120,7 @@
#address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&emmc_gpio34 &gpclk2_gpio43>; pinctrl-0 = <&emmc_gpio34 &gpclk2_gpio43>;
+ bus-width = <4>; + bus-width = <4>;
mmc-pwrseq = <&wifi_pwrseq>; mmc-pwrseq = <&wifi_pwrseq>;

@ -13,7 +13,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
--- a/drivers/mtd/spi-nor/spi-nor.c --- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -1305,6 +1305,18 @@ static const struct flash_info *spi_nor_ @@ -1307,6 +1307,18 @@ static const struct flash_info *spi_nor_
} }
dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n", dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n",
id[0], id[1], id[2]); id[0], id[1], id[2]);

@ -1,71 +0,0 @@
From 82afdcd4ec3c8ca6551cbf7c43c09e2fd240487a Mon Sep 17 00:00:00 2001
From: Hangbin Liu <liuhangbin@gmail.com>
Date: Tue, 10 Mar 2020 15:27:37 +0800
Subject: [PATCH] ipv6/addrconf: call ipv6_mc_up() for non-Ethernet interface
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Rafał found an issue that for non-Ethernet interface, if we down and up
frequently, the memory will be consumed slowly.
The reason is we add allnodes/allrouters addressed in multicast list in
ipv6_add_dev(). When link down, we call ipv6_mc_down(), store all multicast
addresses via mld_add_delrec(). But when link up, we don't call ipv6_mc_up()
for non-Ethernet interface to remove the addresses. This makes idev->mc_tomb
getting bigger and bigger. The call stack looks like:
addrconf_notify(NETDEV_REGISTER)
ipv6_add_dev
ipv6_dev_mc_inc(ff01::1)
ipv6_dev_mc_inc(ff02::1)
ipv6_dev_mc_inc(ff02::2)
addrconf_notify(NETDEV_UP)
addrconf_dev_config
/* Alas, we support only Ethernet autoconfiguration. */
return;
addrconf_notify(NETDEV_DOWN)
addrconf_ifdown
ipv6_mc_down
igmp6_group_dropped(ff02::2)
mld_add_delrec(ff02::2)
igmp6_group_dropped(ff02::1)
igmp6_group_dropped(ff01::1)
After investigating, I can't found a rule to disable multicast on
non-Ethernet interface. In RFC2460, the link could be Ethernet, PPP, ATM,
tunnels, etc. In IPv4, it doesn't check the dev type when calls ip_mc_up()
in inetdev_event(). Even for IPv6, we don't check the dev type and call
ipv6_add_dev(), ipv6_dev_mc_inc() after register device.
So I think it's OK to fix this memory consumer by calling ipv6_mc_up() for
non-Ethernet interface.
v2: Also check IFF_MULTICAST flag to make sure the interface supports
multicast
Reported-by: Rafał Miłecki <zajec5@gmail.com>
Tested-by: Rafał Miłecki <zajec5@gmail.com>
Fixes: 74235a25c673 ("[IPV6] addrconf: Fix IPv6 on tuntap tunnels")
Fixes: 1666d49e1d41 ("mld: do not remove mld souce list info when set link down")
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
net/ipv6/addrconf.c | 4 ++++
1 file changed, 4 insertions(+)
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3291,6 +3291,10 @@ static void addrconf_dev_config(struct n
(dev->type != ARPHRD_NONE) &&
(dev->type != ARPHRD_RAWIP)) {
/* Alas, we support only Ethernet autoconfiguration. */
+ idev = __in6_dev_get(dev);
+ if (!IS_ERR_OR_NULL(idev) && dev->flags & IFF_UP &&
+ dev->flags & IFF_MULTICAST)
+ ipv6_mc_up(idev);
return;
}

@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/phy/phy_device.c --- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c
@@ -1777,6 +1777,19 @@ int phy_set_max_speed(struct phy_device @@ -1781,6 +1781,19 @@ int phy_set_max_speed(struct phy_device
} }
EXPORT_SYMBOL(phy_set_max_speed); EXPORT_SYMBOL(phy_set_max_speed);
@ -39,7 +39,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct device_node *node = phydev->mdio.dev.of_node; struct device_node *node = phydev->mdio.dev.of_node;
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -1049,6 +1049,7 @@ int phy_mii_ioctl(struct phy_device *phy @@ -1051,6 +1051,7 @@ int phy_mii_ioctl(struct phy_device *phy
int phy_start_interrupts(struct phy_device *phydev); int phy_start_interrupts(struct phy_device *phydev);
void phy_print_status(struct phy_device *phydev); void phy_print_status(struct phy_device *phydev);
int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);

@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/phy/phy_device.c --- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c
@@ -1790,6 +1790,36 @@ void phy_support_asym_pause(struct phy_d @@ -1794,6 +1794,36 @@ void phy_support_asym_pause(struct phy_d
} }
EXPORT_SYMBOL(phy_support_asym_pause); EXPORT_SYMBOL(phy_support_asym_pause);
@ -56,7 +56,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct device_node *node = phydev->mdio.dev.of_node; struct device_node *node = phydev->mdio.dev.of_node;
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -1050,6 +1050,7 @@ int phy_start_interrupts(struct phy_devi @@ -1052,6 +1052,7 @@ int phy_start_interrupts(struct phy_devi
void phy_print_status(struct phy_device *phydev); void phy_print_status(struct phy_device *phydev);
int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
void phy_support_asym_pause(struct phy_device *phydev); void phy_support_asym_pause(struct phy_device *phydev);

@ -29,7 +29,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/phy_device.c --- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c
@@ -886,8 +886,6 @@ int phy_init_hw(struct phy_device *phyde @@ -890,8 +890,6 @@ int phy_init_hw(struct phy_device *phyde
if (phydev->drv->soft_reset) if (phydev->drv->soft_reset)
ret = phydev->drv->soft_reset(phydev); ret = phydev->drv->soft_reset(phydev);

@ -208,7 +208,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
return phydev->drv->read_page(phydev); return phydev->drv->read_page(phydev);
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -695,17 +695,6 @@ size_t phy_speeds(unsigned int *speeds, @@ -697,17 +697,6 @@ size_t phy_speeds(unsigned int *speeds,
void phy_resolve_aneg_linkmode(struct phy_device *phydev); void phy_resolve_aneg_linkmode(struct phy_device *phydev);
/** /**
@ -226,7 +226,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
* phy_read - Convenience function for reading a given PHY register * phy_read - Convenience function for reading a given PHY register
* @phydev: the phy_device struct * @phydev: the phy_device struct
* @regnum: register number to read * @regnum: register number to read
@@ -760,9 +749,60 @@ static inline int __phy_write(struct phy @@ -762,9 +751,60 @@ static inline int __phy_write(struct phy
val); val);
} }
@ -287,7 +287,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
/** /**
* __phy_set_bits - Convenience function for setting bits in a PHY register * __phy_set_bits - Convenience function for setting bits in a PHY register
* @phydev: the phy_device struct * @phydev: the phy_device struct
@@ -813,6 +853,66 @@ static inline int phy_clear_bits(struct @@ -815,6 +855,66 @@ static inline int phy_clear_bits(struct
} }
/** /**
@ -354,7 +354,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
* phy_interrupt_is_valid - Convenience function for testing a given PHY irq * phy_interrupt_is_valid - Convenience function for testing a given PHY irq
* @phydev: the phy_device struct * @phydev: the phy_device struct
* *
@@ -888,18 +988,6 @@ static inline bool phy_is_pseudo_fixed_l @@ -890,18 +990,6 @@ static inline bool phy_is_pseudo_fixed_l
return phydev->is_pseudo_fixed_link; return phydev->is_pseudo_fixed_link;
} }

@ -191,7 +191,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
} }
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -795,13 +795,21 @@ int phy_write_mmd(struct phy_device *phy @@ -797,13 +797,21 @@ int phy_write_mmd(struct phy_device *phy
*/ */
int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val); int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);

@ -54,7 +54,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
* *
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -1098,6 +1098,7 @@ int genphy_write_mmd_unsupported(struct @@ -1100,6 +1100,7 @@ int genphy_write_mmd_unsupported(struct
/* Clause 45 PHY */ /* Clause 45 PHY */
int genphy_c45_restart_aneg(struct phy_device *phydev); int genphy_c45_restart_aneg(struct phy_device *phydev);

@ -54,7 +54,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
#include <linux/mdio.h> #include <linux/mdio.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
@@ -944,6 +945,65 @@ void phy_attached_print(struct phy_devic @@ -948,6 +949,65 @@ void phy_attached_print(struct phy_devic
EXPORT_SYMBOL(phy_attached_print); EXPORT_SYMBOL(phy_attached_print);
/** /**
@ -120,7 +120,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
* phy_attach_direct - attach a network device to a given PHY device pointer * phy_attach_direct - attach a network device to a given PHY device pointer
* @dev: network device to attach * @dev: network device to attach
* @phydev: Pointer to phy_device to attach * @phydev: Pointer to phy_device to attach
@@ -1016,6 +1076,9 @@ int phy_attach_direct(struct net_device @@ -1020,6 +1080,9 @@ int phy_attach_direct(struct net_device
phydev->attached_dev = dev; phydev->attached_dev = dev;
dev->phydev = phydev; dev->phydev = phydev;
@ -130,7 +130,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
/* Some Ethernet drivers try to connect to a PHY device before /* Some Ethernet drivers try to connect to a PHY device before
* calling register_netdevice() -> netdev_register_kobject() and * calling register_netdevice() -> netdev_register_kobject() and
* does the dev->dev.kobj initialization. Here we only check for * does the dev->dev.kobj initialization. Here we only check for
@@ -1950,6 +2013,9 @@ static int phy_remove(struct device *dev @@ -1954,6 +2017,9 @@ static int phy_remove(struct device *dev
phydev->state = PHY_DOWN; phydev->state = PHY_DOWN;
mutex_unlock(&phydev->lock); mutex_unlock(&phydev->lock);
@ -151,7 +151,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
struct sk_buff; struct sk_buff;
/* /*
@@ -382,6 +384,8 @@ struct phy_c45_device_ids { @@ -383,6 +385,8 @@ struct phy_c45_device_ids {
* irq: IRQ number of the PHY's interrupt (-1 if none) * irq: IRQ number of the PHY's interrupt (-1 if none)
* phy_timer: The timer for handling the state machine * phy_timer: The timer for handling the state machine
* phy_queue: A work_queue for the phy_mac_interrupt * phy_queue: A work_queue for the phy_mac_interrupt
@ -160,7 +160,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
* attached_dev: The attached enet driver's device instance ptr * attached_dev: The attached enet driver's device instance ptr
* adjust_link: Callback for the enet controller to respond to * adjust_link: Callback for the enet controller to respond to
* changes in the link state. * changes in the link state.
@@ -471,6 +475,9 @@ struct phy_device { @@ -473,6 +477,9 @@ struct phy_device {
struct mutex lock; struct mutex lock;
@ -170,7 +170,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
struct phylink *phylink; struct phylink *phylink;
struct net_device *attached_dev; struct net_device *attached_dev;
@@ -1031,6 +1038,10 @@ int phy_suspend(struct phy_device *phyde @@ -1033,6 +1040,10 @@ int phy_suspend(struct phy_device *phyde
int phy_resume(struct phy_device *phydev); int phy_resume(struct phy_device *phydev);
int __phy_resume(struct phy_device *phydev); int __phy_resume(struct phy_device *phydev);
int phy_loopback(struct phy_device *phydev, bool enable); int phy_loopback(struct phy_device *phydev, bool enable);

@ -37,7 +37,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/phy_device.c --- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c
@@ -335,7 +335,7 @@ static int phy_bus_match(struct device * @@ -339,7 +339,7 @@ static int phy_bus_match(struct device *
if (phydev->is_c45) { if (phydev->is_c45) {
for (i = 1; i < num_ids; i++) { for (i = 1; i < num_ids; i++) {
@ -46,7 +46,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
continue; continue;
if ((phydrv->phy_id & phydrv->phy_id_mask) == if ((phydrv->phy_id & phydrv->phy_id_mask) ==
@@ -623,10 +623,13 @@ static int get_phy_id(struct mii_bus *bu @@ -627,10 +627,13 @@ static int get_phy_id(struct mii_bus *bu
*/ */
struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45) struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
{ {

@ -52,7 +52,7 @@
/* For layer 4 checksum field offset. */ /* For layer 4 checksum field offset. */
#include <linux/tcp.h> #include <linux/tcp.h>
#include <linux/udp.h> #include <linux/udp.h>
@@ -267,6 +268,7 @@ nf_flow_offload_ip_hook(void *priv, stru @@ -268,6 +269,7 @@ nf_flow_offload_ip_hook(void *priv, stru
skb->dev = outdev; skb->dev = outdev;
nexthop = rt_nexthop(rt, flow->tuplehash[!dir].tuple.src_v4.s_addr); nexthop = rt_nexthop(rt, flow->tuplehash[!dir].tuple.src_v4.s_addr);
skb_dst_set_noref(skb, &rt->dst); skb_dst_set_noref(skb, &rt->dst);
@ -60,7 +60,7 @@
neigh_xmit(NEIGH_ARP_TABLE, outdev, &nexthop, skb); neigh_xmit(NEIGH_ARP_TABLE, outdev, &nexthop, skb);
return NF_STOLEN; return NF_STOLEN;
@@ -487,6 +489,7 @@ nf_flow_offload_ipv6_hook(void *priv, st @@ -489,6 +491,7 @@ nf_flow_offload_ipv6_hook(void *priv, st
skb->dev = outdev; skb->dev = outdev;
nexthop = rt6_nexthop(rt, &flow->tuplehash[!dir].tuple.src_v6); nexthop = rt6_nexthop(rt, &flow->tuplehash[!dir].tuple.src_v6);
skb_dst_set_noref(skb, &rt->dst); skb_dst_set_noref(skb, &rt->dst);

@ -1,6 +1,6 @@
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -555,6 +555,12 @@ struct phy_driver { @@ -557,6 +557,12 @@ struct phy_driver {
/* Determines the negotiated speed and duplex */ /* Determines the negotiated speed and duplex */
int (*read_status)(struct phy_device *phydev); int (*read_status)(struct phy_device *phydev);
@ -15,7 +15,7 @@
--- a/drivers/net/phy/phy_device.c --- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c
@@ -1577,6 +1577,9 @@ int genphy_update_link(struct phy_device @@ -1581,6 +1581,9 @@ int genphy_update_link(struct phy_device
{ {
int status; int status;

@ -101,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
help help
--- a/net/core/dev.c --- a/net/core/dev.c
+++ b/net/core/dev.c +++ b/net/core/dev.c
@@ -3253,10 +3253,20 @@ static int xmit_one(struct sk_buff *skb, @@ -3255,10 +3255,20 @@ static int xmit_one(struct sk_buff *skb,
if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all)) if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
dev_queue_xmit_nit(skb, dev); dev_queue_xmit_nit(skb, dev);

@ -96,7 +96,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
u64 res; u64 res;
--- a/net/ipv4/Kconfig --- a/net/ipv4/Kconfig
+++ b/net/ipv4/Kconfig +++ b/net/ipv4/Kconfig
@@ -425,6 +425,7 @@ config INET_XFRM_MODE_BEET @@ -426,6 +426,7 @@ config INET_XFRM_MODE_BEET
config INET_DIAG config INET_DIAG
tristate "INET: socket monitoring interface" tristate "INET: socket monitoring interface"

@ -232,7 +232,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!pe) if (!pe)
--- a/mm/vmalloc.c --- a/mm/vmalloc.c
+++ b/mm/vmalloc.c +++ b/mm/vmalloc.c
@@ -2749,6 +2749,8 @@ static const struct seq_operations vmall @@ -2752,6 +2752,8 @@ static const struct seq_operations vmall
static int __init proc_vmalloc_init(void) static int __init proc_vmalloc_init(void)
{ {
@ -327,7 +327,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/core/sock.c --- a/net/core/sock.c
+++ b/net/core/sock.c +++ b/net/core/sock.c
@@ -3486,6 +3486,8 @@ static __net_initdata struct pernet_oper @@ -3489,6 +3489,8 @@ static __net_initdata struct pernet_oper
static int __init proto_init(void) static int __init proto_init(void)
{ {
@ -338,7 +338,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/ipv4/fib_trie.c --- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c
@@ -2717,11 +2717,13 @@ static const struct seq_operations fib_r @@ -2720,11 +2720,13 @@ static const struct seq_operations fib_r
int __net_init fib_proc_init(struct net *net) int __net_init fib_proc_init(struct net *net)
{ {
@ -354,7 +354,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
fib_triestat_seq_show, NULL)) fib_triestat_seq_show, NULL))
goto out2; goto out2;
@@ -2732,17 +2734,21 @@ int __net_init fib_proc_init(struct net @@ -2735,17 +2737,21 @@ int __net_init fib_proc_init(struct net
return 0; return 0;
out3: out3:

@ -1,55 +0,0 @@
From 9d2e23253eb5fabff02a7ce4be9c4a7fc23562e8 Mon Sep 17 00:00:00 2001
From: Pawel Dembicki <paweldembicki@gmail.com>
Date: Fri, 20 Mar 2020 22:56:28 +0100
Subject: [PATCH v2 3/3] USB: serial: option: add Wistron Neweb D19Q1
This modem is embedded on dlink dwr-960 router.
The oem configuration states:
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1435 ProdID=d191 Rev=ff.ff
S: Manufacturer=Android
S: Product=Android
S: SerialNumber=0123456789ABCDEF
C:* #Ifs= 6 Cfg#= 1 Atr=80 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E: Ad=86(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
E: Ad=88(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 5 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=(none)
E: Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=125us
Tested on openwrt distribution
Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
---
drivers/usb/serial/option.c | 2 ++
1 file changed, 2 insertions(+)
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -1990,6 +1990,8 @@ static const struct usb_device_id option
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x7e11, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/A3 */
+ { USB_DEVICE_INTERFACE_CLASS(0x1435, 0xd191, 0xff), /* Wistron Neweb D19Q1 */
+ .driver_info = RSVD(1) | RSVD(4) },
{ USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2031, 0xff), /* Olicard 600 */
.driver_info = RSVD(4) },
{ USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2060, 0xff), /* BroadMobi BM818 */

@ -71,7 +71,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!net_eq(dev_net(dev), sock_net(sk))) if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop; goto drop;
@@ -2174,12 +2176,12 @@ static int tpacket_rcv(struct sk_buff *s @@ -2175,12 +2177,12 @@ static int tpacket_rcv(struct sk_buff *s
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32); BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48); BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!net_eq(dev_net(dev), sock_net(sk))) if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop; goto drop;
@@ -3265,6 +3267,7 @@ static int packet_create(struct net *net @@ -3277,6 +3279,7 @@ static int packet_create(struct net *net
mutex_init(&po->pg_vec_lock); mutex_init(&po->pg_vec_lock);
po->rollover = NULL; po->rollover = NULL;
po->prot_hook.func = packet_rcv; po->prot_hook.func = packet_rcv;
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (sock->type == SOCK_PACKET) if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt; po->prot_hook.func = packet_rcv_spkt;
@@ -3885,6 +3888,16 @@ packet_setsockopt(struct socket *sock, i @@ -3897,6 +3900,16 @@ packet_setsockopt(struct socket *sock, i
po->xmit = val ? packet_direct_xmit : dev_queue_xmit; po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
return 0; return 0;
} }
@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
default: default:
return -ENOPROTOOPT; return -ENOPROTOOPT;
} }
@@ -3937,6 +3950,13 @@ static int packet_getsockopt(struct sock @@ -3949,6 +3962,13 @@ static int packet_getsockopt(struct sock
case PACKET_VNET_HDR: case PACKET_VNET_HDR:
val = po->has_vnet_hdr; val = po->has_vnet_hdr;
break; break;
@ -128,7 +128,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
break; break;
--- a/net/packet/internal.h --- a/net/packet/internal.h
+++ b/net/packet/internal.h +++ b/net/packet/internal.h
@@ -132,6 +132,7 @@ struct packet_sock { @@ -135,6 +135,7 @@ struct packet_sock {
struct net_device __rcu *cached_dev; struct net_device __rcu *cached_dev;
int (*xmit)(struct sk_buff *skb); int (*xmit)(struct sk_buff *skb);
struct packet_type prot_hook ____cacheline_aligned_in_smp; struct packet_type prot_hook ____cacheline_aligned_in_smp;

@ -66,7 +66,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
static void rt_fibinfo_free(struct rtable __rcu **rtp) static void rt_fibinfo_free(struct rtable __rcu **rtp)
--- a/net/ipv4/fib_trie.c --- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c
@@ -2474,6 +2474,7 @@ static const char *const rtn_type_names[ @@ -2477,6 +2477,7 @@ static const char *const rtn_type_names[
[RTN_THROW] = "THROW", [RTN_THROW] = "THROW",
[RTN_NAT] = "NAT", [RTN_NAT] = "NAT",
[RTN_XRESOLVE] = "XRESOLVE", [RTN_XRESOLVE] = "XRESOLVE",

@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
__u16 tc_index; /* traffic control index */ __u16 tc_index; /* traffic control index */
--- a/net/core/dev.c --- a/net/core/dev.c
+++ b/net/core/dev.c +++ b/net/core/dev.c
@@ -5454,6 +5454,9 @@ static enum gro_result dev_gro_receive(s @@ -5456,6 +5456,9 @@ static enum gro_result dev_gro_receive(s
int same_flow; int same_flow;
int grow; int grow;
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (netif_elide_gro(skb->dev)) if (netif_elide_gro(skb->dev))
goto normal; goto normal;
@@ -7112,6 +7115,48 @@ static void __netdev_adjacent_dev_unlink @@ -7114,6 +7117,48 @@ static void __netdev_adjacent_dev_unlink
&upper_dev->adj_list.lower); &upper_dev->adj_list.lower);
} }
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int __netdev_upper_dev_link(struct net_device *dev, static int __netdev_upper_dev_link(struct net_device *dev,
struct net_device *upper_dev, bool master, struct net_device *upper_dev, bool master,
void *upper_priv, void *upper_info, void *upper_priv, void *upper_info,
@@ -7162,6 +7207,7 @@ static int __netdev_upper_dev_link(struc @@ -7164,6 +7209,7 @@ static int __netdev_upper_dev_link(struc
if (ret) if (ret)
return ret; return ret;
@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info); &changeupper_info.info);
ret = notifier_to_errno(ret); ret = notifier_to_errno(ret);
@@ -7254,6 +7300,7 @@ void netdev_upper_dev_unlink(struct net_ @@ -7256,6 +7302,7 @@ void netdev_upper_dev_unlink(struct net_
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev); __netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info); &changeupper_info.info);
@@ -7893,6 +7940,7 @@ int dev_set_mac_address(struct net_devic @@ -7895,6 +7942,7 @@ int dev_set_mac_address(struct net_devic
if (err) if (err)
return err; return err;
dev->addr_assign_type = NET_ADDR_SET; dev->addr_assign_type = NET_ADDR_SET;

@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/net/phy/phy_device.c --- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c
@@ -1201,6 +1201,9 @@ void phy_detach(struct phy_device *phyde @@ -1205,6 +1205,9 @@ void phy_detach(struct phy_device *phyde
struct module *ndev_owner = dev->dev.parent->driver->owner; struct module *ndev_owner = dev->dev.parent->driver->owner;
struct mii_bus *bus; struct mii_bus *bus;
@ -23,7 +23,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev"); sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev");
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -567,6 +567,12 @@ struct phy_driver { @@ -569,6 +569,12 @@ struct phy_driver {
*/ */
int (*did_interrupt)(struct phy_device *phydev); int (*did_interrupt)(struct phy_device *phydev);

@ -26,11 +26,9 @@ Signed-off-by: Shawn Guo <shawnguo@kernel.org>
create mode 100644 arch/arm/boot/dts/imx6q-gw5907.dts create mode 100644 arch/arm/boot/dts/imx6q-gw5907.dts
create mode 100644 arch/arm/boot/dts/imx6qdl-gw5907.dtsi create mode 100644 arch/arm/boot/dts/imx6qdl-gw5907.dtsi
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 1e9e1af..9ee80e2 100644
--- a/arch/arm/boot/dts/Makefile --- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile
@@ -422,6 +422,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ @@ -404,6 +404,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
imx6dl-gw560x.dtb \ imx6dl-gw560x.dtb \
imx6dl-gw5903.dtb \ imx6dl-gw5903.dtb \
imx6dl-gw5904.dtb \ imx6dl-gw5904.dtb \
@ -38,7 +36,7 @@ index 1e9e1af..9ee80e2 100644
imx6dl-hummingboard.dtb \ imx6dl-hummingboard.dtb \
imx6dl-hummingboard-emmc-som-v15.dtb \ imx6dl-hummingboard-emmc-som-v15.dtb \
imx6dl-hummingboard-som-v15.dtb \ imx6dl-hummingboard-som-v15.dtb \
@@ -493,6 +494,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ @@ -471,6 +472,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
imx6q-gw560x.dtb \ imx6q-gw560x.dtb \
imx6q-gw5903.dtb \ imx6q-gw5903.dtb \
imx6q-gw5904.dtb \ imx6q-gw5904.dtb \
@ -46,9 +44,6 @@ index 1e9e1af..9ee80e2 100644
imx6q-h100.dtb \ imx6q-h100.dtb \
imx6q-hummingboard.dtb \ imx6q-hummingboard.dtb \
imx6q-hummingboard-emmc-som-v15.dtb \ imx6q-hummingboard-emmc-som-v15.dtb \
diff --git a/arch/arm/boot/dts/imx6dl-gw5907.dts b/arch/arm/boot/dts/imx6dl-gw5907.dts
new file mode 100644
index 00000000..3fa2822
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-gw5907.dts +++ b/arch/arm/boot/dts/imx6dl-gw5907.dts
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
@ -66,9 +61,6 @@ index 00000000..3fa2822
+ model = "Gateworks Ventana i.MX6 DualLite/Solo GW5907"; + model = "Gateworks Ventana i.MX6 DualLite/Solo GW5907";
+ compatible = "gw,imx6dl-gw5907", "gw,ventana", "fsl,imx6dl"; + compatible = "gw,imx6dl-gw5907", "gw,ventana", "fsl,imx6dl";
+}; +};
diff --git a/arch/arm/boot/dts/imx6q-gw5907.dts b/arch/arm/boot/dts/imx6q-gw5907.dts
new file mode 100644
index 00000000..b25526e
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6q-gw5907.dts +++ b/arch/arm/boot/dts/imx6q-gw5907.dts
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
@ -86,9 +78,6 @@ index 00000000..b25526e
+ model = "Gateworks Ventana i.MX6 Dual/Quad GW5907"; + model = "Gateworks Ventana i.MX6 Dual/Quad GW5907";
+ compatible = "gw,imx6q-gw5907", "gw,ventana", "fsl,imx6q"; + compatible = "gw,imx6q-gw5907", "gw,ventana", "fsl,imx6q";
+}; +};
diff --git a/arch/arm/boot/dts/imx6qdl-gw5907.dtsi b/arch/arm/boot/dts/imx6qdl-gw5907.dtsi
new file mode 100644
index 00000000..0bdebdd
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-gw5907.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw5907.dtsi
@@ -0,0 +1,399 @@ @@ -0,0 +1,399 @@
@ -491,6 +480,3 @@ index 00000000..0bdebdd
+ >; + >;
+ }; + };
+}; +};
--
2.7.4

@ -35,11 +35,9 @@ Signed-off-by: Shawn Guo <shawnguo@kernel.org>
create mode 100644 arch/arm/boot/dts/imx6q-gw5910.dts create mode 100644 arch/arm/boot/dts/imx6q-gw5910.dts
create mode 100644 arch/arm/boot/dts/imx6qdl-gw5910.dtsi create mode 100644 arch/arm/boot/dts/imx6qdl-gw5910.dtsi
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 9ee80e2..85e53cc 100644
--- a/arch/arm/boot/dts/Makefile --- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile
@@ -423,6 +423,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ @@ -405,6 +405,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
imx6dl-gw5903.dtb \ imx6dl-gw5903.dtb \
imx6dl-gw5904.dtb \ imx6dl-gw5904.dtb \
imx6dl-gw5907.dtb \ imx6dl-gw5907.dtb \
@ -47,7 +45,7 @@ index 9ee80e2..85e53cc 100644
imx6dl-hummingboard.dtb \ imx6dl-hummingboard.dtb \
imx6dl-hummingboard-emmc-som-v15.dtb \ imx6dl-hummingboard-emmc-som-v15.dtb \
imx6dl-hummingboard-som-v15.dtb \ imx6dl-hummingboard-som-v15.dtb \
@@ -495,6 +496,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ @@ -473,6 +474,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
imx6q-gw5903.dtb \ imx6q-gw5903.dtb \
imx6q-gw5904.dtb \ imx6q-gw5904.dtb \
imx6q-gw5907.dtb \ imx6q-gw5907.dtb \
@ -55,9 +53,6 @@ index 9ee80e2..85e53cc 100644
imx6q-h100.dtb \ imx6q-h100.dtb \
imx6q-hummingboard.dtb \ imx6q-hummingboard.dtb \
imx6q-hummingboard-emmc-som-v15.dtb \ imx6q-hummingboard-emmc-som-v15.dtb \
diff --git a/arch/arm/boot/dts/imx6dl-gw5910.dts b/arch/arm/boot/dts/imx6dl-gw5910.dts
new file mode 100644
index 00000000..0d5e7e5
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-gw5910.dts +++ b/arch/arm/boot/dts/imx6dl-gw5910.dts
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
@ -75,9 +70,6 @@ index 00000000..0d5e7e5
+ model = "Gateworks Ventana i.MX6 DualLite/Solo GW5910"; + model = "Gateworks Ventana i.MX6 DualLite/Solo GW5910";
+ compatible = "gw,imx6dl-gw5910", "gw,ventana", "fsl,imx6dl"; + compatible = "gw,imx6dl-gw5910", "gw,ventana", "fsl,imx6dl";
+}; +};
diff --git a/arch/arm/boot/dts/imx6q-gw5910.dts b/arch/arm/boot/dts/imx6q-gw5910.dts
new file mode 100644
index 00000000..6aafa2f
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6q-gw5910.dts +++ b/arch/arm/boot/dts/imx6q-gw5910.dts
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
@ -95,9 +87,6 @@ index 00000000..6aafa2f
+ model = "Gateworks Ventana i.MX6 Dual/Quad GW5910"; + model = "Gateworks Ventana i.MX6 Dual/Quad GW5910";
+ compatible = "gw,imx6q-gw5910", "gw,ventana", "fsl,imx6q"; + compatible = "gw,imx6q-gw5910", "gw,ventana", "fsl,imx6q";
+}; +};
diff --git a/arch/arm/boot/dts/imx6qdl-gw5910.dtsi b/arch/arm/boot/dts/imx6qdl-gw5910.dtsi
new file mode 100644
index 00000000..be1af74
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-gw5910.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw5910.dtsi
@@ -0,0 +1,491 @@ @@ -0,0 +1,491 @@
@ -592,6 +581,3 @@ index 00000000..be1af74
+ >; + >;
+ }; + };
+}; +};
--
2.7.4

@ -30,11 +30,9 @@ Signed-off-by: Shawn Guo <shawnguo@kernel.org>
create mode 100644 arch/arm/boot/dts/imx6q-gw5913.dts create mode 100644 arch/arm/boot/dts/imx6q-gw5913.dts
create mode 100644 arch/arm/boot/dts/imx6qdl-gw5913.dtsi create mode 100644 arch/arm/boot/dts/imx6qdl-gw5913.dtsi
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 85e53cc..5b059fc 100644
--- a/arch/arm/boot/dts/Makefile --- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile
@@ -424,6 +424,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ @@ -406,6 +406,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
imx6dl-gw5904.dtb \ imx6dl-gw5904.dtb \
imx6dl-gw5907.dtb \ imx6dl-gw5907.dtb \
imx6dl-gw5910.dtb \ imx6dl-gw5910.dtb \
@ -42,7 +40,7 @@ index 85e53cc..5b059fc 100644
imx6dl-hummingboard.dtb \ imx6dl-hummingboard.dtb \
imx6dl-hummingboard-emmc-som-v15.dtb \ imx6dl-hummingboard-emmc-som-v15.dtb \
imx6dl-hummingboard-som-v15.dtb \ imx6dl-hummingboard-som-v15.dtb \
@@ -497,6 +498,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ @@ -475,6 +476,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
imx6q-gw5904.dtb \ imx6q-gw5904.dtb \
imx6q-gw5907.dtb \ imx6q-gw5907.dtb \
imx6q-gw5910.dtb \ imx6q-gw5910.dtb \
@ -50,9 +48,6 @@ index 85e53cc..5b059fc 100644
imx6q-h100.dtb \ imx6q-h100.dtb \
imx6q-hummingboard.dtb \ imx6q-hummingboard.dtb \
imx6q-hummingboard-emmc-som-v15.dtb \ imx6q-hummingboard-emmc-som-v15.dtb \
diff --git a/arch/arm/boot/dts/imx6dl-gw5913.dts b/arch/arm/boot/dts/imx6dl-gw5913.dts
new file mode 100644
index 00000000..b74e533
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-gw5913.dts +++ b/arch/arm/boot/dts/imx6dl-gw5913.dts
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
@ -70,9 +65,6 @@ index 00000000..b74e533
+ model = "Gateworks Ventana i.MX6 DualLite/Solo GW5913"; + model = "Gateworks Ventana i.MX6 DualLite/Solo GW5913";
+ compatible = "gw,imx6dl-gw5913", "gw,ventana", "fsl,imx6dl"; + compatible = "gw,imx6dl-gw5913", "gw,ventana", "fsl,imx6dl";
+}; +};
diff --git a/arch/arm/boot/dts/imx6q-gw5913.dts b/arch/arm/boot/dts/imx6q-gw5913.dts
new file mode 100644
index 00000000..6f511f1
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6q-gw5913.dts +++ b/arch/arm/boot/dts/imx6q-gw5913.dts
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
@ -90,9 +82,6 @@ index 00000000..6f511f1
+ model = "Gateworks Ventana i.MX6 Dual/Quad GW5913"; + model = "Gateworks Ventana i.MX6 Dual/Quad GW5913";
+ compatible = "gw,imx6q-gw5913", "gw,ventana", "fsl,imx6q"; + compatible = "gw,imx6q-gw5913", "gw,ventana", "fsl,imx6q";
+}; +};
diff --git a/arch/arm/boot/dts/imx6qdl-gw5913.dtsi b/arch/arm/boot/dts/imx6qdl-gw5913.dtsi
new file mode 100644
index 00000000..635c203
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-gw5913.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw5913.dtsi
@@ -0,0 +1,348 @@ @@ -0,0 +1,348 @@
@ -444,6 +433,3 @@ index 00000000..635c203
+ >; + >;
+ }; + };
+}; +};
--
2.7.4

@ -35,11 +35,9 @@ Signed-off-by: Shawn Guo <shawnguo@kernel.org>
create mode 100644 arch/arm/boot/dts/imx6q-gw5912.dts create mode 100644 arch/arm/boot/dts/imx6q-gw5912.dts
create mode 100644 arch/arm/boot/dts/imx6qdl-gw5912.dtsi create mode 100644 arch/arm/boot/dts/imx6qdl-gw5912.dtsi
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 5b059fc..1a32a7d 100644
--- a/arch/arm/boot/dts/Makefile --- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile
@@ -424,6 +424,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ @@ -406,6 +406,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
imx6dl-gw5904.dtb \ imx6dl-gw5904.dtb \
imx6dl-gw5907.dtb \ imx6dl-gw5907.dtb \
imx6dl-gw5910.dtb \ imx6dl-gw5910.dtb \
@ -47,7 +45,7 @@ index 5b059fc..1a32a7d 100644
imx6dl-gw5913.dtb \ imx6dl-gw5913.dtb \
imx6dl-hummingboard.dtb \ imx6dl-hummingboard.dtb \
imx6dl-hummingboard-emmc-som-v15.dtb \ imx6dl-hummingboard-emmc-som-v15.dtb \
@@ -498,6 +499,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ @@ -476,6 +477,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
imx6q-gw5904.dtb \ imx6q-gw5904.dtb \
imx6q-gw5907.dtb \ imx6q-gw5907.dtb \
imx6q-gw5910.dtb \ imx6q-gw5910.dtb \
@ -55,9 +53,6 @@ index 5b059fc..1a32a7d 100644
imx6q-gw5913.dtb \ imx6q-gw5913.dtb \
imx6q-h100.dtb \ imx6q-h100.dtb \
imx6q-hummingboard.dtb \ imx6q-hummingboard.dtb \
diff --git a/arch/arm/boot/dts/imx6dl-gw5912.dts b/arch/arm/boot/dts/imx6dl-gw5912.dts
new file mode 100644
index 00000000..5260e01
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-gw5912.dts +++ b/arch/arm/boot/dts/imx6dl-gw5912.dts
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
@ -74,9 +69,6 @@ index 00000000..5260e01
+ model = "Gateworks Ventana i.MX6 DualLite/Solo GW5912"; + model = "Gateworks Ventana i.MX6 DualLite/Solo GW5912";
+ compatible = "gw,imx6dl-gw5912", "gw,ventana", "fsl,imx6dl"; + compatible = "gw,imx6dl-gw5912", "gw,ventana", "fsl,imx6dl";
+}; +};
diff --git a/arch/arm/boot/dts/imx6q-gw5912.dts b/arch/arm/boot/dts/imx6q-gw5912.dts
new file mode 100644
index 00000000..4dcbd94
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6q-gw5912.dts +++ b/arch/arm/boot/dts/imx6q-gw5912.dts
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
@ -93,9 +85,6 @@ index 00000000..4dcbd94
+ model = "Gateworks Ventana i.MX6 Dual/Quad GW5912"; + model = "Gateworks Ventana i.MX6 Dual/Quad GW5912";
+ compatible = "gw,imx6q-gw5912", "gw,ventana", "fsl,imx6q"; + compatible = "gw,imx6q-gw5912", "gw,ventana", "fsl,imx6q";
+}; +};
diff --git a/arch/arm/boot/dts/imx6qdl-gw5912.dtsi b/arch/arm/boot/dts/imx6qdl-gw5912.dtsi
new file mode 100644
index 00000000..8c57fd2
--- /dev/null --- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-gw5912.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw5912.dtsi
@@ -0,0 +1,461 @@ @@ -0,0 +1,461 @@
@ -560,6 +549,3 @@ index 00000000..8c57fd2
+ >; + >;
+ }; + };
+}; +};
--
2.7.4

@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- ---
--- a/drivers/net/ethernet/marvell/mvneta.c --- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -4272,6 +4272,15 @@ static int mvneta_ethtool_set_eee(struct @@ -4271,6 +4271,15 @@ static int mvneta_ethtool_set_eee(struct
return phylink_ethtool_set_eee(pp->phylink, eee); return phylink_ethtool_set_eee(pp->phylink, eee);
} }
@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static const struct net_device_ops mvneta_netdev_ops = { static const struct net_device_ops mvneta_netdev_ops = {
.ndo_open = mvneta_open, .ndo_open = mvneta_open,
.ndo_stop = mvneta_stop, .ndo_stop = mvneta_stop,
@@ -4282,6 +4291,7 @@ static const struct net_device_ops mvnet @@ -4281,6 +4290,7 @@ static const struct net_device_ops mvnet
.ndo_fix_features = mvneta_fix_features, .ndo_fix_features = mvneta_fix_features,
.ndo_get_stats64 = mvneta_get_stats64, .ndo_get_stats64 = mvneta_get_stats64,
.ndo_do_ioctl = mvneta_ioctl, .ndo_do_ioctl = mvneta_ioctl,

@ -32,7 +32,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
#define MVNETA_MIB_COUNTERS_BASE 0x3000 #define MVNETA_MIB_COUNTERS_BASE 0x3000
#define MVNETA_MIB_LATE_COLLISION 0x7c #define MVNETA_MIB_LATE_COLLISION 0x7c
#define MVNETA_DA_FILT_SPEC_MCAST 0x3400 #define MVNETA_DA_FILT_SPEC_MCAST 0x3400
@@ -3359,6 +3361,7 @@ static void mvneta_validate(struct net_d @@ -3358,6 +3360,7 @@ static void mvneta_validate(struct net_d
if (state->interface != PHY_INTERFACE_MODE_NA && if (state->interface != PHY_INTERFACE_MODE_NA &&
state->interface != PHY_INTERFACE_MODE_QSGMII && state->interface != PHY_INTERFACE_MODE_QSGMII &&
state->interface != PHY_INTERFACE_MODE_SGMII && state->interface != PHY_INTERFACE_MODE_SGMII &&
@ -40,7 +40,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
!phy_interface_mode_is_8023z(state->interface) && !phy_interface_mode_is_8023z(state->interface) &&
!phy_interface_mode_is_rgmii(state->interface)) { !phy_interface_mode_is_rgmii(state->interface)) {
bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS);
@@ -3371,9 +3374,15 @@ static void mvneta_validate(struct net_d @@ -3370,9 +3373,15 @@ static void mvneta_validate(struct net_d
/* Asymmetric pause is unsupported */ /* Asymmetric pause is unsupported */
phylink_set(mask, Pause); phylink_set(mask, Pause);
@ -59,7 +59,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (!phy_interface_mode_is_8023z(state->interface)) { if (!phy_interface_mode_is_8023z(state->interface)) {
/* 10M and 100M are only supported in non-802.3z mode */ /* 10M and 100M are only supported in non-802.3z mode */
@@ -3434,12 +3443,14 @@ static void mvneta_mac_config(struct net @@ -3433,12 +3442,14 @@ static void mvneta_mac_config(struct net
struct mvneta_port *pp = netdev_priv(ndev); struct mvneta_port *pp = netdev_priv(ndev);
u32 new_ctrl0, gmac_ctrl0 = mvreg_read(pp, MVNETA_GMAC_CTRL_0); u32 new_ctrl0, gmac_ctrl0 = mvreg_read(pp, MVNETA_GMAC_CTRL_0);
u32 new_ctrl2, gmac_ctrl2 = mvreg_read(pp, MVNETA_GMAC_CTRL_2); u32 new_ctrl2, gmac_ctrl2 = mvreg_read(pp, MVNETA_GMAC_CTRL_2);
@ -74,7 +74,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
new_clk = gmac_clk & ~MVNETA_GMAC_1MS_CLOCK_ENABLE; new_clk = gmac_clk & ~MVNETA_GMAC_1MS_CLOCK_ENABLE;
new_an = gmac_an & ~(MVNETA_GMAC_INBAND_AN_ENABLE | new_an = gmac_an & ~(MVNETA_GMAC_INBAND_AN_ENABLE |
MVNETA_GMAC_INBAND_RESTART_AN | MVNETA_GMAC_INBAND_RESTART_AN |
@@ -3472,7 +3483,7 @@ static void mvneta_mac_config(struct net @@ -3471,7 +3482,7 @@ static void mvneta_mac_config(struct net
if (state->duplex) if (state->duplex)
new_an |= MVNETA_GMAC_CONFIG_FULL_DUPLEX; new_an |= MVNETA_GMAC_CONFIG_FULL_DUPLEX;
@ -83,7 +83,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
new_an |= MVNETA_GMAC_CONFIG_GMII_SPEED; new_an |= MVNETA_GMAC_CONFIG_GMII_SPEED;
else if (state->speed == SPEED_100) else if (state->speed == SPEED_100)
new_an |= MVNETA_GMAC_CONFIG_MII_SPEED; new_an |= MVNETA_GMAC_CONFIG_MII_SPEED;
@@ -3511,10 +3522,18 @@ static void mvneta_mac_config(struct net @@ -3510,10 +3521,18 @@ static void mvneta_mac_config(struct net
MVNETA_GMAC_FORCE_LINK_DOWN); MVNETA_GMAC_FORCE_LINK_DOWN);
} }

@ -27,7 +27,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/marvell/mvneta.c --- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -3361,7 +3361,6 @@ static void mvneta_validate(struct net_d @@ -3360,7 +3360,6 @@ static void mvneta_validate(struct net_d
if (state->interface != PHY_INTERFACE_MODE_NA && if (state->interface != PHY_INTERFACE_MODE_NA &&
state->interface != PHY_INTERFACE_MODE_QSGMII && state->interface != PHY_INTERFACE_MODE_QSGMII &&
state->interface != PHY_INTERFACE_MODE_SGMII && state->interface != PHY_INTERFACE_MODE_SGMII &&
@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
!phy_interface_mode_is_8023z(state->interface) && !phy_interface_mode_is_8023z(state->interface) &&
!phy_interface_mode_is_rgmii(state->interface)) { !phy_interface_mode_is_rgmii(state->interface)) {
bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS);
@@ -3375,14 +3374,9 @@ static void mvneta_validate(struct net_d @@ -3374,14 +3373,9 @@ static void mvneta_validate(struct net_d
/* Asymmetric pause is unsupported */ /* Asymmetric pause is unsupported */
phylink_set(mask, Pause); phylink_set(mask, Pause);

@ -18,7 +18,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/marvell/mvneta.c --- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -4268,8 +4268,7 @@ static int mvneta_ethtool_set_eee(struct @@ -4267,8 +4267,7 @@ static int mvneta_ethtool_set_eee(struct
/* The Armada 37x documents do not give limits for this other than /* The Armada 37x documents do not give limits for this other than
* it being an 8-bit register. */ * it being an 8-bit register. */

@ -31,7 +31,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mvneta_bm *bm_priv; struct mvneta_bm *bm_priv;
struct mvneta_bm_pool *pool_long; struct mvneta_bm_pool *pool_long;
@@ -3168,6 +3170,8 @@ static void mvneta_start_dev(struct mvne @@ -3167,6 +3169,8 @@ static void mvneta_start_dev(struct mvne
{ {
int cpu; int cpu;
@ -40,7 +40,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mvneta_max_rx_size_set(pp, pp->pkt_size); mvneta_max_rx_size_set(pp, pp->pkt_size);
mvneta_txq_max_tx_size_set(pp, pp->pkt_size); mvneta_txq_max_tx_size_set(pp, pp->pkt_size);
@@ -3230,6 +3234,8 @@ static void mvneta_stop_dev(struct mvnet @@ -3229,6 +3233,8 @@ static void mvneta_stop_dev(struct mvnet
mvneta_tx_reset(pp); mvneta_tx_reset(pp);
mvneta_rx_reset(pp); mvneta_rx_reset(pp);
@ -49,7 +49,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
} }
static void mvneta_percpu_enable(void *arg) static void mvneta_percpu_enable(void *arg)
@@ -3355,6 +3361,7 @@ static int mvneta_set_mac_addr(struct ne @@ -3354,6 +3360,7 @@ static int mvneta_set_mac_addr(struct ne
static void mvneta_validate(struct net_device *ndev, unsigned long *supported, static void mvneta_validate(struct net_device *ndev, unsigned long *supported,
struct phylink_link_state *state) struct phylink_link_state *state)
{ {
@ -57,7 +57,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
__ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
/* We only support QSGMII, SGMII, 802.3z and RGMII modes */ /* We only support QSGMII, SGMII, 802.3z and RGMII modes */
@@ -3375,8 +3382,13 @@ static void mvneta_validate(struct net_d @@ -3374,8 +3381,13 @@ static void mvneta_validate(struct net_d
phylink_set(mask, Pause); phylink_set(mask, Pause);
/* Half-duplex at speeds higher than 100Mbit is unsupported */ /* Half-duplex at speeds higher than 100Mbit is unsupported */
@ -73,7 +73,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (!phy_interface_mode_is_8023z(state->interface)) { if (!phy_interface_mode_is_8023z(state->interface)) {
/* 10M and 100M are only supported in non-802.3z mode */ /* 10M and 100M are only supported in non-802.3z mode */
@@ -3390,6 +3402,11 @@ static void mvneta_validate(struct net_d @@ -3389,6 +3401,11 @@ static void mvneta_validate(struct net_d
__ETHTOOL_LINK_MODE_MASK_NBITS); __ETHTOOL_LINK_MODE_MASK_NBITS);
bitmap_and(state->advertising, state->advertising, mask, bitmap_and(state->advertising, state->advertising, mask,
__ETHTOOL_LINK_MODE_MASK_NBITS); __ETHTOOL_LINK_MODE_MASK_NBITS);
@ -85,7 +85,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
} }
static int mvneta_mac_link_state(struct net_device *ndev, static int mvneta_mac_link_state(struct net_device *ndev,
@@ -3401,7 +3418,9 @@ static int mvneta_mac_link_state(struct @@ -3400,7 +3417,9 @@ static int mvneta_mac_link_state(struct
gmac_stat = mvreg_read(pp, MVNETA_GMAC_STATUS); gmac_stat = mvreg_read(pp, MVNETA_GMAC_STATUS);
if (gmac_stat & MVNETA_GMAC_SPEED_1000) if (gmac_stat & MVNETA_GMAC_SPEED_1000)
@ -96,7 +96,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
else if (gmac_stat & MVNETA_GMAC_SPEED_100) else if (gmac_stat & MVNETA_GMAC_SPEED_100)
state->speed = SPEED_100; state->speed = SPEED_100;
else else
@@ -3516,12 +3535,20 @@ static void mvneta_mac_config(struct net @@ -3515,12 +3534,20 @@ static void mvneta_mac_config(struct net
MVNETA_GMAC_FORCE_LINK_DOWN); MVNETA_GMAC_FORCE_LINK_DOWN);
} }
@ -117,7 +117,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (new_ctrl0 != gmac_ctrl0) if (new_ctrl0 != gmac_ctrl0)
mvreg_write(pp, MVNETA_GMAC_CTRL_0, new_ctrl0); mvreg_write(pp, MVNETA_GMAC_CTRL_0, new_ctrl0);
if (new_ctrl2 != gmac_ctrl2) if (new_ctrl2 != gmac_ctrl2)
@@ -4434,7 +4461,7 @@ static int mvneta_port_power_up(struct m @@ -4433,7 +4460,7 @@ static int mvneta_port_power_up(struct m
if (phy_mode == PHY_INTERFACE_MODE_QSGMII) if (phy_mode == PHY_INTERFACE_MODE_QSGMII)
mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_QSGMII_SERDES_PROTO); mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_QSGMII_SERDES_PROTO);
else if (phy_mode == PHY_INTERFACE_MODE_SGMII || else if (phy_mode == PHY_INTERFACE_MODE_SGMII ||
@ -126,7 +126,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO); mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO);
else if (!phy_interface_mode_is_rgmii(phy_mode)) else if (!phy_interface_mode_is_rgmii(phy_mode))
return -EINVAL; return -EINVAL;
@@ -4451,6 +4478,7 @@ static int mvneta_probe(struct platform_ @@ -4450,6 +4477,7 @@ static int mvneta_probe(struct platform_
struct mvneta_port *pp; struct mvneta_port *pp;
struct net_device *dev; struct net_device *dev;
struct phylink *phylink; struct phylink *phylink;
@ -134,7 +134,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
const char *dt_mac_addr; const char *dt_mac_addr;
char hw_mac_addr[ETH_ALEN]; char hw_mac_addr[ETH_ALEN];
const char *mac_from; const char *mac_from;
@@ -4476,6 +4504,14 @@ static int mvneta_probe(struct platform_ @@ -4475,6 +4503,14 @@ static int mvneta_probe(struct platform_
goto err_free_irq; goto err_free_irq;
} }
@ -149,7 +149,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
phylink = phylink_create(dev, pdev->dev.fwnode, phy_mode, phylink = phylink_create(dev, pdev->dev.fwnode, phy_mode,
&mvneta_phylink_ops); &mvneta_phylink_ops);
if (IS_ERR(phylink)) { if (IS_ERR(phylink)) {
@@ -4492,6 +4528,7 @@ static int mvneta_probe(struct platform_ @@ -4491,6 +4527,7 @@ static int mvneta_probe(struct platform_
pp = netdev_priv(dev); pp = netdev_priv(dev);
spin_lock_init(&pp->lock); spin_lock_init(&pp->lock);
pp->phylink = phylink; pp->phylink = phylink;

@ -28,7 +28,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/marvell/mvneta.c --- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -3166,11 +3166,26 @@ static int mvneta_setup_txqs(struct mvne @@ -3165,11 +3165,26 @@ static int mvneta_setup_txqs(struct mvne
return 0; return 0;
} }
@ -56,7 +56,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mvneta_max_rx_size_set(pp, pp->pkt_size); mvneta_max_rx_size_set(pp, pp->pkt_size);
mvneta_txq_max_tx_size_set(pp, pp->pkt_size); mvneta_txq_max_tx_size_set(pp, pp->pkt_size);
@@ -3542,12 +3557,15 @@ static void mvneta_mac_config(struct net @@ -3541,12 +3556,15 @@ static void mvneta_mac_config(struct net
if (state->speed == SPEED_2500) if (state->speed == SPEED_2500)
new_ctrl4 |= MVNETA_GMAC4_SHORT_PREAMBLE_ENABLE; new_ctrl4 |= MVNETA_GMAC4_SHORT_PREAMBLE_ENABLE;

@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/marvell/mvneta.c --- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -3402,6 +3402,7 @@ static void mvneta_validate(struct net_d @@ -3401,6 +3401,7 @@ static void mvneta_validate(struct net_d
phylink_set(mask, 1000baseX_Full); phylink_set(mask, 1000baseX_Full);
} }
if (pp->comphy || state->interface == PHY_INTERFACE_MODE_2500BASEX) { if (pp->comphy || state->interface == PHY_INTERFACE_MODE_2500BASEX) {

Loading…
Cancel
Save