mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 14:23:38 +00:00
kernel: bump 6.1 to 6.1.94 (#12245)
This commit is contained in:
parent
5e947a9df9
commit
c1573c8ac8
@ -1,2 +1,2 @@
|
|||||||
LINUX_VERSION-6.1 = .92
|
LINUX_VERSION-6.1 = .94
|
||||||
LINUX_KERNEL_HASH-6.1.92 = 9019f427bfdc9ced5bc954d760d37ac08c0cdffb45ad28087fc45a73e64336c9
|
LINUX_KERNEL_HASH-6.1.94 = 38ea71ad22ae0187fd8ee5ff879b33b0d9bd58161ac9a3e868ae0b4c66b95369
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
From 648c906a27d3713f589717f4be36583fc64f2ba1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Steve Glendinning <steve.glendinning@smsc.com>
|
|
||||||
Date: Thu, 19 Feb 2015 18:47:12 +0000
|
|
||||||
Subject: [PATCH] smsx95xx: fix crimes against truesize
|
|
||||||
|
|
||||||
smsc95xx is adjusting truesize when it shouldn't, and following a recent patch from Eric this is now triggering warnings.
|
|
||||||
|
|
||||||
This patch stops smsc95xx from changing truesize.
|
|
||||||
|
|
||||||
Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
|
|
||||||
---
|
|
||||||
drivers/net/usb/smsc95xx.c | 10 ++++++++--
|
|
||||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/usb/smsc95xx.c
|
|
||||||
+++ b/drivers/net/usb/smsc95xx.c
|
|
||||||
@@ -79,6 +79,10 @@ static bool turbo_mode = true;
|
|
||||||
module_param(turbo_mode, bool, 0644);
|
|
||||||
MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
|
|
||||||
|
|
||||||
+static bool truesize_mode = false;
|
|
||||||
+module_param(truesize_mode, bool, 0644);
|
|
||||||
+MODULE_PARM_DESC(truesize_mode, "Report larger truesize value");
|
|
||||||
+
|
|
||||||
static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
|
||||||
u32 *data)
|
|
||||||
{
|
|
||||||
@@ -1870,7 +1874,8 @@ static int smsc95xx_rx_fixup(struct usbn
|
|
||||||
if (dev->net->features & NETIF_F_RXCSUM)
|
|
||||||
smsc95xx_rx_csum_offload(skb);
|
|
||||||
skb_trim(skb, skb->len - 4); /* remove fcs */
|
|
||||||
- skb->truesize = size + sizeof(struct sk_buff);
|
|
||||||
+ if (truesize_mode)
|
|
||||||
+ skb->truesize = size + sizeof(struct sk_buff);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -1888,7 +1893,8 @@ static int smsc95xx_rx_fixup(struct usbn
|
|
||||||
if (dev->net->features & NETIF_F_RXCSUM)
|
|
||||||
smsc95xx_rx_csum_offload(ax_skb);
|
|
||||||
skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */
|
|
||||||
- ax_skb->truesize = size + sizeof(struct sk_buff);
|
|
||||||
+ if (truesize_mode)
|
|
||||||
+ ax_skb->truesize = size + sizeof(struct sk_buff);
|
|
||||||
|
|
||||||
usbnet_skb_return(dev, ax_skb);
|
|
||||||
}
|
|
@ -11,9 +11,9 @@ See: http://forum.kodi.tv/showthread.php?tid=285288
|
|||||||
|
|
||||||
--- a/drivers/net/usb/smsc95xx.c
|
--- a/drivers/net/usb/smsc95xx.c
|
||||||
+++ b/drivers/net/usb/smsc95xx.c
|
+++ b/drivers/net/usb/smsc95xx.c
|
||||||
@@ -83,6 +83,10 @@ static bool truesize_mode = false;
|
@@ -79,6 +79,10 @@ static bool turbo_mode = true;
|
||||||
module_param(truesize_mode, bool, 0644);
|
module_param(turbo_mode, bool, 0644);
|
||||||
MODULE_PARM_DESC(truesize_mode, "Report larger truesize value");
|
MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
|
||||||
|
|
||||||
+static int packetsize = 2560;
|
+static int packetsize = 2560;
|
||||||
+module_param(packetsize, int, 0644);
|
+module_param(packetsize, int, 0644);
|
||||||
@ -22,7 +22,7 @@ See: http://forum.kodi.tv/showthread.php?tid=285288
|
|||||||
static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
||||||
u32 *data)
|
u32 *data)
|
||||||
{
|
{
|
||||||
@@ -936,13 +940,13 @@ static int smsc95xx_reset(struct usbnet
|
@@ -932,13 +936,13 @@ static int smsc95xx_reset(struct usbnet
|
||||||
|
|
||||||
if (!turbo_mode) {
|
if (!turbo_mode) {
|
||||||
burst_cap = 0;
|
burst_cap = 0;
|
||||||
|
@ -22,7 +22,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
|
|
||||||
--- a/drivers/net/usb/smsc95xx.c
|
--- a/drivers/net/usb/smsc95xx.c
|
||||||
+++ b/drivers/net/usb/smsc95xx.c
|
+++ b/drivers/net/usb/smsc95xx.c
|
||||||
@@ -87,6 +87,10 @@ static int packetsize = 2560;
|
@@ -83,6 +83,10 @@ static int packetsize = 2560;
|
||||||
module_param(packetsize, int, 0644);
|
module_param(packetsize, int, 0644);
|
||||||
MODULE_PARM_DESC(packetsize, "Override the RX URB packet size");
|
MODULE_PARM_DESC(packetsize, "Override the RX URB packet size");
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
||||||
u32 *data)
|
u32 *data)
|
||||||
{
|
{
|
||||||
@@ -809,6 +813,52 @@ static int smsc95xx_ioctl(struct net_dev
|
@@ -805,6 +809,52 @@ static int smsc95xx_ioctl(struct net_dev
|
||||||
return phy_mii_ioctl(netdev->phydev, rq, cmd);
|
return phy_mii_ioctl(netdev->phydev, rq, cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
static void smsc95xx_init_mac_address(struct usbnet *dev)
|
static void smsc95xx_init_mac_address(struct usbnet *dev)
|
||||||
{
|
{
|
||||||
u8 addr[ETH_ALEN];
|
u8 addr[ETH_ALEN];
|
||||||
@@ -832,6 +882,10 @@ static void smsc95xx_init_mac_address(st
|
@@ -828,6 +878,10 @@ static void smsc95xx_init_mac_address(st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
|||||||
|
|
||||||
--- a/drivers/firmware/raspberrypi.c
|
--- a/drivers/firmware/raspberrypi.c
|
||||||
+++ b/drivers/firmware/raspberrypi.c
|
+++ b/drivers/firmware/raspberrypi.c
|
||||||
@@ -32,6 +32,8 @@ struct rpi_firmware {
|
@@ -33,6 +33,8 @@ struct rpi_firmware {
|
||||||
struct kref consumers;
|
struct kref consumers;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
|||||||
static DEFINE_MUTEX(transaction_lock);
|
static DEFINE_MUTEX(transaction_lock);
|
||||||
|
|
||||||
static void response_callback(struct mbox_client *cl, void *msg)
|
static void response_callback(struct mbox_client *cl, void *msg)
|
||||||
@@ -280,6 +282,7 @@ static int rpi_firmware_probe(struct pla
|
@@ -281,6 +283,7 @@ static int rpi_firmware_probe(struct pla
|
||||||
kref_init(&fw->consumers);
|
kref_init(&fw->consumers);
|
||||||
|
|
||||||
platform_set_drvdata(pdev, fw);
|
platform_set_drvdata(pdev, fw);
|
||||||
@ -44,7 +44,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
|||||||
|
|
||||||
rpi_firmware_print_firmware_revision(fw);
|
rpi_firmware_print_firmware_revision(fw);
|
||||||
rpi_register_hwmon_driver(dev, fw);
|
rpi_register_hwmon_driver(dev, fw);
|
||||||
@@ -308,6 +311,7 @@ static int rpi_firmware_remove(struct pl
|
@@ -309,6 +312,7 @@ static int rpi_firmware_remove(struct pl
|
||||||
rpi_clk = NULL;
|
rpi_clk = NULL;
|
||||||
|
|
||||||
rpi_firmware_put(fw);
|
rpi_firmware_put(fw);
|
||||||
@ -52,7 +52,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -382,7 +386,18 @@ static struct platform_driver rpi_firmwa
|
@@ -383,7 +387,18 @@ static struct platform_driver rpi_firmwa
|
||||||
.shutdown = rpi_firmware_shutdown,
|
.shutdown = rpi_firmware_shutdown,
|
||||||
.remove = rpi_firmware_remove,
|
.remove = rpi_firmware_remove,
|
||||||
};
|
};
|
||||||
|
@ -156,7 +156,7 @@ See: https://github.com/raspberrypi/linux/issues/1064
|
|||||||
+MODULE_LICENSE("GPL");
|
+MODULE_LICENSE("GPL");
|
||||||
--- a/include/linux/leds.h
|
--- a/include/linux/leds.h
|
||||||
+++ b/include/linux/leds.h
|
+++ b/include/linux/leds.h
|
||||||
@@ -85,6 +85,9 @@ struct led_classdev {
|
@@ -95,6 +95,9 @@ struct led_classdev {
|
||||||
#define LED_BRIGHT_HW_CHANGED BIT(21)
|
#define LED_BRIGHT_HW_CHANGED BIT(21)
|
||||||
#define LED_RETAIN_AT_SHUTDOWN BIT(22)
|
#define LED_RETAIN_AT_SHUTDOWN BIT(22)
|
||||||
#define LED_INIT_DEFAULT_TRIGGER BIT(23)
|
#define LED_INIT_DEFAULT_TRIGGER BIT(23)
|
||||||
|
@ -13,7 +13,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||||||
|
|
||||||
--- a/drivers/firmware/raspberrypi.c
|
--- a/drivers/firmware/raspberrypi.c
|
||||||
+++ b/drivers/firmware/raspberrypi.c
|
+++ b/drivers/firmware/raspberrypi.c
|
||||||
@@ -12,6 +12,7 @@
|
@@ -13,6 +13,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
@ -21,7 +21,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <soc/bcm2835/raspberrypi-firmware.h>
|
#include <soc/bcm2835/raspberrypi-firmware.h>
|
||||||
|
|
||||||
@@ -179,6 +180,26 @@ int rpi_firmware_property(struct rpi_fir
|
@@ -180,6 +181,26 @@ int rpi_firmware_property(struct rpi_fir
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rpi_firmware_property);
|
EXPORT_SYMBOL_GPL(rpi_firmware_property);
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||||||
static void
|
static void
|
||||||
rpi_firmware_print_firmware_revision(struct rpi_firmware *fw)
|
rpi_firmware_print_firmware_revision(struct rpi_firmware *fw)
|
||||||
{
|
{
|
||||||
@@ -387,15 +408,32 @@ static struct platform_driver rpi_firmwa
|
@@ -388,15 +409,32 @@ static struct platform_driver rpi_firmwa
|
||||||
.remove = rpi_firmware_remove,
|
.remove = rpi_firmware_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
|
|||||||
|
|
||||||
--- a/drivers/firmware/raspberrypi.c
|
--- a/drivers/firmware/raspberrypi.c
|
||||||
+++ b/drivers/firmware/raspberrypi.c
|
+++ b/drivers/firmware/raspberrypi.c
|
||||||
@@ -31,6 +31,7 @@ struct rpi_firmware {
|
@@ -32,6 +32,7 @@ struct rpi_firmware {
|
||||||
u32 enabled;
|
u32 enabled;
|
||||||
|
|
||||||
struct kref consumers;
|
struct kref consumers;
|
||||||
@ -24,7 +24,7 @@ Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device *g_pdev;
|
static struct platform_device *g_pdev;
|
||||||
@@ -176,6 +177,12 @@ int rpi_firmware_property(struct rpi_fir
|
@@ -177,6 +178,12 @@ int rpi_firmware_property(struct rpi_fir
|
||||||
|
|
||||||
kfree(data);
|
kfree(data);
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rpi_firmware_property);
|
EXPORT_SYMBOL_GPL(rpi_firmware_property);
|
||||||
@@ -200,6 +207,27 @@ static int rpi_firmware_notify_reboot(st
|
@@ -201,6 +208,27 @@ static int rpi_firmware_notify_reboot(st
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
|
|||||||
static void
|
static void
|
||||||
rpi_firmware_print_firmware_revision(struct rpi_firmware *fw)
|
rpi_firmware_print_firmware_revision(struct rpi_firmware *fw)
|
||||||
{
|
{
|
||||||
@@ -229,6 +257,11 @@ rpi_register_hwmon_driver(struct device
|
@@ -230,6 +258,11 @@ rpi_register_hwmon_driver(struct device
|
||||||
|
|
||||||
rpi_hwmon = platform_device_register_data(dev, "raspberrypi-hwmon",
|
rpi_hwmon = platform_device_register_data(dev, "raspberrypi-hwmon",
|
||||||
-1, NULL, 0);
|
-1, NULL, 0);
|
||||||
|
@ -26,7 +26,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
|||||||
|
|
||||||
--- a/drivers/firmware/raspberrypi.c
|
--- a/drivers/firmware/raspberrypi.c
|
||||||
+++ b/drivers/firmware/raspberrypi.c
|
+++ b/drivers/firmware/raspberrypi.c
|
||||||
@@ -233,6 +233,15 @@ rpi_firmware_print_firmware_revision(str
|
@@ -234,6 +234,15 @@ rpi_firmware_print_firmware_revision(str
|
||||||
{
|
{
|
||||||
time64_t date_and_time;
|
time64_t date_and_time;
|
||||||
u32 packet;
|
u32 packet;
|
||||||
@ -42,7 +42,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
|||||||
int ret = rpi_firmware_property(fw,
|
int ret = rpi_firmware_property(fw,
|
||||||
RPI_FIRMWARE_GET_FIRMWARE_REVISION,
|
RPI_FIRMWARE_GET_FIRMWARE_REVISION,
|
||||||
&packet, sizeof(packet));
|
&packet, sizeof(packet));
|
||||||
@@ -242,7 +251,35 @@ rpi_firmware_print_firmware_revision(str
|
@@ -243,7 +252,35 @@ rpi_firmware_print_firmware_revision(str
|
||||||
|
|
||||||
/* This is not compatible with y2038 */
|
/* This is not compatible with y2038 */
|
||||||
date_and_time = packet;
|
date_and_time = packet;
|
||||||
@ -79,7 +79,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -339,6 +376,7 @@ static int rpi_firmware_probe(struct pla
|
@@ -340,6 +377,7 @@ static int rpi_firmware_probe(struct pla
|
||||||
g_pdev = pdev;
|
g_pdev = pdev;
|
||||||
|
|
||||||
rpi_firmware_print_firmware_revision(fw);
|
rpi_firmware_print_firmware_revision(fw);
|
||||||
|
@ -36,7 +36,7 @@ Co-authored-by: Phil Elwell <phil@raspberrypi.org>
|
|||||||
MODULE_DESCRIPTION("BCM2835 clock driver");
|
MODULE_DESCRIPTION("BCM2835 clock driver");
|
||||||
--- a/drivers/firmware/raspberrypi.c
|
--- a/drivers/firmware/raspberrypi.c
|
||||||
+++ b/drivers/firmware/raspberrypi.c
|
+++ b/drivers/firmware/raspberrypi.c
|
||||||
@@ -499,7 +499,7 @@ out2:
|
@@ -500,7 +500,7 @@ out2:
|
||||||
out1:
|
out1:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
|
|
||||||
--- a/drivers/spi/spi.c
|
--- a/drivers/spi/spi.c
|
||||||
+++ b/drivers/spi/spi.c
|
+++ b/drivers/spi/spi.c
|
||||||
@@ -3690,6 +3690,7 @@ static int spi_set_cs_timing(struct spi_
|
@@ -3694,6 +3694,7 @@ static int spi_set_cs_timing(struct spi_
|
||||||
*/
|
*/
|
||||||
int spi_setup(struct spi_device *spi)
|
int spi_setup(struct spi_device *spi)
|
||||||
{
|
{
|
||||||
@ -40,7 +40,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
unsigned bad_bits, ugly_bits;
|
unsigned bad_bits, ugly_bits;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
@@ -3710,6 +3711,14 @@ int spi_setup(struct spi_device *spi)
|
@@ -3714,6 +3715,14 @@ int spi_setup(struct spi_device *spi)
|
||||||
(SPI_TX_DUAL | SPI_TX_QUAD | SPI_TX_OCTAL |
|
(SPI_TX_DUAL | SPI_TX_QUAD | SPI_TX_OCTAL |
|
||||||
SPI_RX_DUAL | SPI_RX_QUAD | SPI_RX_OCTAL)))
|
SPI_RX_DUAL | SPI_RX_QUAD | SPI_RX_OCTAL)))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -19,7 +19,7 @@ mechanism to be implemented for OS upgrades.
|
|||||||
|
|
||||||
--- a/drivers/firmware/raspberrypi.c
|
--- a/drivers/firmware/raspberrypi.c
|
||||||
+++ b/drivers/firmware/raspberrypi.c
|
+++ b/drivers/firmware/raspberrypi.c
|
||||||
@@ -193,6 +193,7 @@ static int rpi_firmware_notify_reboot(st
|
@@ -194,6 +194,7 @@ static int rpi_firmware_notify_reboot(st
|
||||||
{
|
{
|
||||||
struct rpi_firmware *fw;
|
struct rpi_firmware *fw;
|
||||||
struct platform_device *pdev = g_pdev;
|
struct platform_device *pdev = g_pdev;
|
||||||
@ -27,7 +27,7 @@ mechanism to be implemented for OS upgrades.
|
|||||||
|
|
||||||
if (!pdev)
|
if (!pdev)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -201,8 +202,28 @@ static int rpi_firmware_notify_reboot(st
|
@@ -202,8 +203,28 @@ static int rpi_firmware_notify_reboot(st
|
||||||
if (!fw)
|
if (!fw)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|||||||
|
|
||||||
--- a/drivers/gpu/drm/panel/panel-simple.c
|
--- a/drivers/gpu/drm/panel/panel-simple.c
|
||||||
+++ b/drivers/gpu/drm/panel/panel-simple.c
|
+++ b/drivers/gpu/drm/panel/panel-simple.c
|
||||||
@@ -3193,6 +3193,31 @@ static const struct panel_desc qishenglo
|
@@ -3196,6 +3196,31 @@ static const struct panel_desc qishenglo
|
||||||
.connector_type = DRM_MODE_CONNECTOR_DPI,
|
.connector_type = DRM_MODE_CONNECTOR_DPI,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|||||||
static const struct display_timing rocktech_rk070er9427_timing = {
|
static const struct display_timing rocktech_rk070er9427_timing = {
|
||||||
.pixelclock = { 26400000, 33300000, 46800000 },
|
.pixelclock = { 26400000, 33300000, 46800000 },
|
||||||
.hactive = { 800, 800, 800 },
|
.hactive = { 800, 800, 800 },
|
||||||
@@ -4226,6 +4251,9 @@ static const struct of_device_id platfor
|
@@ -4229,6 +4254,9 @@ static const struct of_device_id platfor
|
||||||
.compatible = "qishenglong,gopher2b-lcd",
|
.compatible = "qishenglong,gopher2b-lcd",
|
||||||
.data = &qishenglong_gopher2b_lcd,
|
.data = &qishenglong_gopher2b_lcd,
|
||||||
}, {
|
}, {
|
||||||
|
@ -46,7 +46,7 @@ Acked-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
static const struct drm_display_mode giantplus_gpg482739qs5_mode = {
|
static const struct drm_display_mode giantplus_gpg482739qs5_mode = {
|
||||||
.clock = 9000,
|
.clock = 9000,
|
||||||
.hdisplay = 480,
|
.hdisplay = 480,
|
||||||
@@ -4110,6 +4136,9 @@ static const struct of_device_id platfor
|
@@ -4113,6 +4139,9 @@ static const struct of_device_id platfor
|
||||||
.compatible = "friendlyarm,hd702e",
|
.compatible = "friendlyarm,hd702e",
|
||||||
.data = &friendlyarm_hd702e,
|
.data = &friendlyarm_hd702e,
|
||||||
}, {
|
}, {
|
||||||
|
@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
|
|
||||||
--- a/drivers/firmware/raspberrypi.c
|
--- a/drivers/firmware/raspberrypi.c
|
||||||
+++ b/drivers/firmware/raspberrypi.c
|
+++ b/drivers/firmware/raspberrypi.c
|
||||||
@@ -429,6 +429,18 @@ static int rpi_firmware_remove(struct pl
|
@@ -430,6 +430,18 @@ static int rpi_firmware_remove(struct pl
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
/**
|
/**
|
||||||
* rpi_firmware_get - Get pointer to rpi_firmware structure.
|
* rpi_firmware_get - Get pointer to rpi_firmware structure.
|
||||||
* @firmware_node: Pointer to the firmware Device Tree node.
|
* @firmware_node: Pointer to the firmware Device Tree node.
|
||||||
@@ -484,12 +496,6 @@ struct rpi_firmware *devm_rpi_firmware_g
|
@@ -485,12 +497,6 @@ struct rpi_firmware *devm_rpi_firmware_g
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(devm_rpi_firmware_get);
|
EXPORT_SYMBOL_GPL(devm_rpi_firmware_get);
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
|
|
||||||
--- a/drivers/firmware/raspberrypi.c
|
--- a/drivers/firmware/raspberrypi.c
|
||||||
+++ b/drivers/firmware/raspberrypi.c
|
+++ b/drivers/firmware/raspberrypi.c
|
||||||
@@ -342,6 +342,26 @@ static void rpi_register_clk_driver(stru
|
@@ -343,6 +343,26 @@ static void rpi_register_clk_driver(stru
|
||||||
-1, NULL, 0);
|
-1, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
#include <sound/dmaengine_pcm.h>
|
#include <sound/dmaengine_pcm.h>
|
||||||
#include <sound/hdmi-codec.h>
|
#include <sound/hdmi-codec.h>
|
||||||
#include <sound/pcm_drm_eld.h>
|
#include <sound/pcm_drm_eld.h>
|
||||||
@@ -3695,7 +3696,7 @@ static int vc4_hdmi_bind(struct device *
|
@@ -3697,7 +3698,7 @@ static int vc4_hdmi_bind(struct device *
|
||||||
|
|
||||||
if (variant->max_pixel_clock == 600000000) {
|
if (variant->max_pixel_clock == 600000000) {
|
||||||
struct vc4_dev *vc4 = to_vc4_dev(drm);
|
struct vc4_dev *vc4 = to_vc4_dev(drm);
|
||||||
|
@ -91,7 +91,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
return MODE_CLOCK_HIGH;
|
return MODE_CLOCK_HIGH;
|
||||||
|
|
||||||
if (info->max_tmds_clock && clock > (info->max_tmds_clock * 1000))
|
if (info->max_tmds_clock && clock > (info->max_tmds_clock * 1000))
|
||||||
@@ -3694,14 +3695,6 @@ static int vc4_hdmi_bind(struct device *
|
@@ -3696,14 +3697,6 @@ static int vc4_hdmi_bind(struct device *
|
||||||
vc4_hdmi->disable_wifi_frequencies =
|
vc4_hdmi->disable_wifi_frequencies =
|
||||||
of_property_read_bool(dev->of_node, "wifi-2.4ghz-coexistence");
|
of_property_read_bool(dev->of_node, "wifi-2.4ghz-coexistence");
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
static const struct drm_display_mode innolux_at070tn92_mode = {
|
static const struct drm_display_mode innolux_at070tn92_mode = {
|
||||||
.clock = 33333,
|
.clock = 33333,
|
||||||
.hdisplay = 800,
|
.hdisplay = 800,
|
||||||
@@ -4146,6 +4178,9 @@ static const struct of_device_id platfor
|
@@ -4149,6 +4181,9 @@ static const struct of_device_id platfor
|
||||||
.compatible = "innolux,at043tn24",
|
.compatible = "innolux,at043tn24",
|
||||||
.data = &innolux_at043tn24,
|
.data = &innolux_at043tn24,
|
||||||
}, {
|
}, {
|
||||||
|
@ -8,8 +8,8 @@ Slave addresses for DMA are meant to be supplied as physical addresses
|
|||||||
|
|
||||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||||
---
|
---
|
||||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 13 ++++---------
|
drivers/gpu/drm/vc4/vc4_hdmi.c | 15 ++++-----------
|
||||||
1 file changed, 4 insertions(+), 9 deletions(-)
|
1 file changed, 4 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||||
@ -22,7 +22,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
int index, len;
|
int index, len;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -2755,20 +2755,15 @@ static int vc4_hdmi_audio_init(struct vc
|
@@ -2755,22 +2755,15 @@ static int vc4_hdmi_audio_init(struct vc
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -40,6 +40,8 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
+ iomem = platform_get_resource(vc4_hdmi->pdev, IORESOURCE_MEM, index);
|
+ iomem = platform_get_resource(vc4_hdmi->pdev, IORESOURCE_MEM, index);
|
||||||
|
|
||||||
- addr = of_get_address(dev->of_node, index, NULL, NULL);
|
- addr = of_get_address(dev->of_node, index, NULL, NULL);
|
||||||
|
- if (!addr)
|
||||||
|
- return -EINVAL;
|
||||||
-
|
-
|
||||||
- vc4_hdmi->audio.dma_data.addr = be32_to_cpup(addr) + mai_data->offset;
|
- vc4_hdmi->audio.dma_data.addr = be32_to_cpup(addr) + mai_data->offset;
|
||||||
+ vc4_hdmi->audio.dma_data.addr = iomem->start + mai_data->offset;
|
+ vc4_hdmi->audio.dma_data.addr = iomem->start + mai_data->offset;
|
||||||
|
@ -43,7 +43,7 @@ Signed-off-by: Lukas Wunner <lukas@wunner.de>
|
|||||||
|
|
||||||
--- a/drivers/net/usb/smsc95xx.c
|
--- a/drivers/net/usb/smsc95xx.c
|
||||||
+++ b/drivers/net/usb/smsc95xx.c
|
+++ b/drivers/net/usb/smsc95xx.c
|
||||||
@@ -814,49 +814,18 @@ static int smsc95xx_ioctl(struct net_dev
|
@@ -810,49 +810,18 @@ static int smsc95xx_ioctl(struct net_dev
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check the macaddr module parameter for a MAC address */
|
/* Check the macaddr module parameter for a MAC address */
|
||||||
@ -103,7 +103,7 @@ Signed-off-by: Lukas Wunner <lukas@wunner.de>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void smsc95xx_init_mac_address(struct usbnet *dev)
|
static void smsc95xx_init_mac_address(struct usbnet *dev)
|
||||||
@@ -883,8 +852,12 @@ static void smsc95xx_init_mac_address(st
|
@@ -879,8 +848,12 @@ static void smsc95xx_init_mac_address(st
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check module parameters */
|
/* Check module parameters */
|
||||||
|
@ -50,7 +50,7 @@ sdhci: remove PYA0_INTR_BUG quirk. Add quirks to disable some of the higher SDR
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************\
|
/*****************************************************************************\
|
||||||
@@ -4605,6 +4615,15 @@ int sdhci_setup_host(struct sdhci_host *
|
@@ -4611,6 +4621,15 @@ int sdhci_setup_host(struct sdhci_host *
|
||||||
!(host->quirks2 & SDHCI_QUIRK2_BROKEN_DDR50))
|
!(host->quirks2 & SDHCI_QUIRK2_BROKEN_DDR50))
|
||||||
mmc->caps |= MMC_CAP_UHS_DDR50;
|
mmc->caps |= MMC_CAP_UHS_DDR50;
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ sdhci: remove PYA0_INTR_BUG quirk. Add quirks to disable some of the higher SDR
|
|||||||
host->flags |= SDHCI_SDR50_NEEDS_TUNING;
|
host->flags |= SDHCI_SDR50_NEEDS_TUNING;
|
||||||
--- a/drivers/mmc/host/sdhci.h
|
--- a/drivers/mmc/host/sdhci.h
|
||||||
+++ b/drivers/mmc/host/sdhci.h
|
+++ b/drivers/mmc/host/sdhci.h
|
||||||
@@ -481,6 +481,11 @@ struct sdhci_host {
|
@@ -482,6 +482,11 @@ struct sdhci_host {
|
||||||
/* Issue CMD and DATA reset together */
|
/* Issue CMD and DATA reset together */
|
||||||
#define SDHCI_QUIRK2_ISSUE_CMD_DAT_RESET_TOGETHER (1<<19)
|
#define SDHCI_QUIRK2_ISSUE_CMD_DAT_RESET_TOGETHER (1<<19)
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ sdhci: remove PYA0_INTR_BUG quirk. Add quirks to disable some of the higher SDR
|
|||||||
int irq; /* Device IRQ */
|
int irq; /* Device IRQ */
|
||||||
void __iomem *ioaddr; /* Mapped address */
|
void __iomem *ioaddr; /* Mapped address */
|
||||||
phys_addr_t mapbase; /* physical address base */
|
phys_addr_t mapbase; /* physical address base */
|
||||||
@@ -663,6 +668,7 @@ struct sdhci_ops {
|
@@ -664,6 +669,7 @@ struct sdhci_ops {
|
||||||
void (*request_done)(struct sdhci_host *host,
|
void (*request_done)(struct sdhci_host *host,
|
||||||
struct mmc_request *mrq);
|
struct mmc_request *mrq);
|
||||||
void (*dump_vendor_regs)(struct sdhci_host *host);
|
void (*dump_vendor_regs)(struct sdhci_host *host);
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
|
|
||||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||||
@@ -3625,6 +3625,7 @@ static int vc4_hdmi_runtime_suspend(stru
|
@@ -3627,6 +3627,7 @@ static int vc4_hdmi_runtime_suspend(stru
|
||||||
{
|
{
|
||||||
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
|
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
clk_disable_unprepare(vc4_hdmi->hsm_rpm_clock);
|
clk_disable_unprepare(vc4_hdmi->hsm_rpm_clock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -3666,6 +3667,10 @@ static int vc4_hdmi_runtime_resume(struc
|
@@ -3668,6 +3669,10 @@ static int vc4_hdmi_runtime_resume(struc
|
||||||
goto err_disable_clk;
|
goto err_disable_clk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
VC4_HD_VID_CTL_ENABLE |
|
VC4_HD_VID_CTL_ENABLE |
|
||||||
VC4_HD_VID_CTL_CLRRGB |
|
VC4_HD_VID_CTL_CLRRGB |
|
||||||
VC4_HD_VID_CTL_UNDERFLOW_ENABLE |
|
VC4_HD_VID_CTL_UNDERFLOW_ENABLE |
|
||||||
@@ -3796,7 +3808,9 @@ static int vc4_hdmi_bind(struct device *
|
@@ -3798,7 +3810,9 @@ static int vc4_hdmi_bind(struct device *
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if ((of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi0") ||
|
if ((of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi0") ||
|
||||||
@ -84,7 +84,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
HDMI_READ(HDMI_VID_CTL) & VC4_HD_VID_CTL_ENABLE) {
|
HDMI_READ(HDMI_VID_CTL) & VC4_HD_VID_CTL_ENABLE) {
|
||||||
clk_prepare_enable(vc4_hdmi->pixel_clock);
|
clk_prepare_enable(vc4_hdmi->pixel_clock);
|
||||||
clk_prepare_enable(vc4_hdmi->hsm_clock);
|
clk_prepare_enable(vc4_hdmi->hsm_clock);
|
||||||
@@ -3931,10 +3945,66 @@ static const struct vc4_hdmi_variant bcm
|
@@ -3933,10 +3947,66 @@ static const struct vc4_hdmi_variant bcm
|
||||||
.hp_detect = vc5_hdmi_hp_detect,
|
.hp_detect = vc5_hdmi_hp_detect,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|||||||
|
|
||||||
--- a/drivers/gpu/drm/panel/panel-simple.c
|
--- a/drivers/gpu/drm/panel/panel-simple.c
|
||||||
+++ b/drivers/gpu/drm/panel/panel-simple.c
|
+++ b/drivers/gpu/drm/panel/panel-simple.c
|
||||||
@@ -3241,11 +3241,11 @@ static const struct panel_desc qishenglo
|
@@ -3244,11 +3244,11 @@ static const struct panel_desc qishenglo
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct drm_display_mode raspberrypi_7inch_mode = {
|
static const struct drm_display_mode raspberrypi_7inch_mode = {
|
||||||
|
@ -74,7 +74,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
|
|||||||
},
|
},
|
||||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||||
@@ -3958,7 +3958,7 @@ static const struct vc4_hdmi_variant bcm
|
@@ -3960,7 +3960,7 @@ static const struct vc4_hdmi_variant bcm
|
||||||
PHY_LANE_2,
|
PHY_LANE_2,
|
||||||
PHY_LANE_CK,
|
PHY_LANE_CK,
|
||||||
},
|
},
|
||||||
@ -83,7 +83,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
|
|||||||
.external_irq_controller = true,
|
.external_irq_controller = true,
|
||||||
|
|
||||||
.init_resources = vc5_hdmi_init_resources,
|
.init_resources = vc5_hdmi_init_resources,
|
||||||
@@ -3985,7 +3985,7 @@ static const struct vc4_hdmi_variant bcm
|
@@ -3987,7 +3987,7 @@ static const struct vc4_hdmi_variant bcm
|
||||||
PHY_LANE_2,
|
PHY_LANE_2,
|
||||||
PHY_LANE_CK,
|
PHY_LANE_CK,
|
||||||
},
|
},
|
||||||
|
@ -50,7 +50,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
if (!mmc_op_tuning(host->cmd->opcode))
|
if (!mmc_op_tuning(host->cmd->opcode))
|
||||||
--- a/drivers/mmc/host/sdhci.h
|
--- a/drivers/mmc/host/sdhci.h
|
||||||
+++ b/drivers/mmc/host/sdhci.h
|
+++ b/drivers/mmc/host/sdhci.h
|
||||||
@@ -486,6 +486,9 @@ struct sdhci_host {
|
@@ -487,6 +487,9 @@ struct sdhci_host {
|
||||||
#define SDHCI_QUIRK2_NO_SDR50 (1<<20)
|
#define SDHCI_QUIRK2_NO_SDR50 (1<<20)
|
||||||
#define SDHCI_QUIRK2_NO_SDR104 (1<<21)
|
#define SDHCI_QUIRK2_NO_SDR104 (1<<21)
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ Signed-off-by: Timon Skerutsch <kernel@diodes-delight.com>
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* struct panel_desc - Describes a simple panel.
|
* struct panel_desc - Describes a simple panel.
|
||||||
@@ -4662,6 +4663,9 @@ static const struct panel_desc_dsi osd10
|
@@ -4665,6 +4666,9 @@ static const struct panel_desc_dsi osd10
|
||||||
.lanes = 4,
|
.lanes = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ Signed-off-by: Timon Skerutsch <kernel@diodes-delight.com>
|
|||||||
static const struct of_device_id dsi_of_match[] = {
|
static const struct of_device_id dsi_of_match[] = {
|
||||||
{
|
{
|
||||||
.compatible = "auo,b080uan01",
|
.compatible = "auo,b080uan01",
|
||||||
@@ -4685,14 +4689,118 @@ static const struct of_device_id dsi_of_
|
@@ -4688,14 +4692,118 @@ static const struct of_device_id dsi_of_
|
||||||
.compatible = "osddisplays,osd101t2045-53ts",
|
.compatible = "osddisplays,osd101t2045-53ts",
|
||||||
.data = &osd101t2045_53ts
|
.data = &osd101t2045_53ts
|
||||||
}, {
|
}, {
|
||||||
@ -152,7 +152,7 @@ Signed-off-by: Timon Skerutsch <kernel@diodes-delight.com>
|
|||||||
const struct of_device_id *id;
|
const struct of_device_id *id;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@@ -4700,7 +4808,20 @@ static int panel_simple_dsi_probe(struct
|
@@ -4703,7 +4811,20 @@ static int panel_simple_dsi_probe(struct
|
||||||
if (!id)
|
if (!id)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ Link: https://lore.kernel.org/linux-mtd/20230308082021.870459-4-michael@walle.cc
|
|||||||
|
|
||||||
--- a/drivers/mtd/mtdcore.c
|
--- a/drivers/mtd/mtdcore.c
|
||||||
+++ b/drivers/mtd/mtdcore.c
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
@@ -953,8 +953,8 @@ static int mtd_otp_nvmem_add(struct mtd_
|
@@ -955,8 +955,8 @@ static int mtd_otp_nvmem_add(struct mtd_
|
||||||
nvmem = mtd_otp_nvmem_register(mtd, "user-otp", size,
|
nvmem = mtd_otp_nvmem_register(mtd, "user-otp", size,
|
||||||
mtd_nvmem_user_otp_reg_read);
|
mtd_nvmem_user_otp_reg_read);
|
||||||
if (IS_ERR(nvmem)) {
|
if (IS_ERR(nvmem)) {
|
||||||
@ -28,7 +28,7 @@ Link: https://lore.kernel.org/linux-mtd/20230308082021.870459-4-michael@walle.cc
|
|||||||
}
|
}
|
||||||
mtd->otp_user_nvmem = nvmem;
|
mtd->otp_user_nvmem = nvmem;
|
||||||
}
|
}
|
||||||
@@ -971,7 +971,6 @@ static int mtd_otp_nvmem_add(struct mtd_
|
@@ -973,7 +973,6 @@ static int mtd_otp_nvmem_add(struct mtd_
|
||||||
nvmem = mtd_otp_nvmem_register(mtd, "factory-otp", size,
|
nvmem = mtd_otp_nvmem_register(mtd, "factory-otp", size,
|
||||||
mtd_nvmem_fact_otp_reg_read);
|
mtd_nvmem_fact_otp_reg_read);
|
||||||
if (IS_ERR(nvmem)) {
|
if (IS_ERR(nvmem)) {
|
||||||
@ -36,7 +36,7 @@ Link: https://lore.kernel.org/linux-mtd/20230308082021.870459-4-michael@walle.cc
|
|||||||
err = PTR_ERR(nvmem);
|
err = PTR_ERR(nvmem);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
@@ -983,7 +982,7 @@ static int mtd_otp_nvmem_add(struct mtd_
|
@@ -985,7 +984,7 @@ static int mtd_otp_nvmem_add(struct mtd_
|
||||||
|
|
||||||
err:
|
err:
|
||||||
nvmem_unregister(mtd->otp_user_nvmem);
|
nvmem_unregister(mtd->otp_user_nvmem);
|
||||||
|
@ -27,7 +27,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4689,8 +4689,8 @@ static int mtk_probe(struct platform_dev
|
@@ -4691,8 +4691,8 @@ static int mtk_probe(struct platform_dev
|
||||||
for (i = 0; i < num_ppe; i++) {
|
for (i = 0; i < num_ppe; i++) {
|
||||||
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
|
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (!eth->ppe[i]) {
|
if (!eth->ppe[i]) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto err_deinit_ppe;
|
goto err_deinit_ppe;
|
||||||
@@ -4814,6 +4814,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -4816,6 +4816,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -46,7 +46,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
@@ -4851,6 +4852,7 @@ static const struct mtk_soc_data mt7629_
|
@@ -4853,6 +4854,7 @@ static const struct mtk_soc_data mt7629_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7629_CLKS_BITMAP,
|
.required_clks = MT7629_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
@ -54,7 +54,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4871,6 +4873,7 @@ static const struct mtk_soc_data mt7981_
|
@@ -4873,6 +4875,7 @@ static const struct mtk_soc_data mt7981_
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||||
@ -62,7 +62,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||||
@@ -4891,6 +4894,7 @@ static const struct mtk_soc_data mt7986_
|
@@ -4893,6 +4896,7 @@ static const struct mtk_soc_data mt7986_
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||||
@ -356,7 +356,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
return 0;
|
return 0;
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
--- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
||||||
@@ -500,6 +500,7 @@ static int
|
@@ -497,6 +497,7 @@ static int
|
||||||
mtk_flow_offload_stats(struct mtk_eth *eth, struct flow_cls_offload *f)
|
mtk_flow_offload_stats(struct mtk_eth *eth, struct flow_cls_offload *f)
|
||||||
{
|
{
|
||||||
struct mtk_flow_entry *entry;
|
struct mtk_flow_entry *entry;
|
||||||
@ -364,7 +364,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
u32 idle;
|
u32 idle;
|
||||||
|
|
||||||
entry = rhashtable_lookup(ð->flow_table, &f->cookie,
|
entry = rhashtable_lookup(ð->flow_table, &f->cookie,
|
||||||
@@ -510,6 +511,13 @@ mtk_flow_offload_stats(struct mtk_eth *e
|
@@ -507,6 +508,13 @@ mtk_flow_offload_stats(struct mtk_eth *e
|
||||||
idle = mtk_foe_entry_idle_time(eth->ppe[entry->ppe_index], entry);
|
idle = mtk_foe_entry_idle_time(eth->ppe[entry->ppe_index], entry);
|
||||||
f->stats.lastused = jiffies - idle * HZ;
|
f->stats.lastused = jiffies - idle * HZ;
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4763,7 +4763,7 @@ static const struct mtk_soc_data mt7621_
|
@@ -4765,7 +4765,7 @@ static const struct mtk_soc_data mt7621_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 1,
|
.offload_version = 1,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -26,7 +26,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4784,7 +4784,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -4786,7 +4786,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
.has_accounting = true,
|
.has_accounting = true,
|
||||||
@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4803,7 +4803,7 @@ static const struct mtk_soc_data mt7623_
|
@@ -4805,7 +4805,7 @@ static const struct mtk_soc_data mt7623_
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
.offload_version = 1,
|
.offload_version = 1,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4841,8 +4841,8 @@ static const struct mtk_soc_data mt7981_
|
@@ -4843,8 +4843,8 @@ static const struct mtk_soc_data mt7981_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
@ -54,7 +54,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||||
@@ -4862,8 +4862,8 @@ static const struct mtk_soc_data mt7986_
|
@@ -4864,8 +4864,8 @@ static const struct mtk_soc_data mt7986_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
|
@ -95,7 +95,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
/* mt7623_pad_clk_setup */
|
/* mt7623_pad_clk_setup */
|
||||||
for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
|
for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
|
||||||
@@ -4340,13 +4312,19 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4342,13 +4314,19 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
mac->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
|
mac->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
|
||||||
MAC_10 | MAC_100 | MAC_1000 | MAC_2500FD;
|
MAC_10 | MAC_100 | MAC_1000 | MAC_2500FD;
|
||||||
|
|
||||||
@ -121,7 +121,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_TRGMII) && !mac->id)
|
if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_TRGMII) && !mac->id)
|
||||||
__set_bit(PHY_INTERFACE_MODE_TRGMII,
|
__set_bit(PHY_INTERFACE_MODE_TRGMII,
|
||||||
@@ -4804,6 +4782,7 @@ static const struct mtk_soc_data mt7623_
|
@@ -4806,6 +4784,7 @@ static const struct mtk_soc_data mt7623_
|
||||||
.offload_version = 1,
|
.offload_version = 1,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||||
|
@ -23,7 +23,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -555,38 +555,6 @@ static int mtk_mac_finish(struct phylink
|
@@ -554,38 +554,6 @@ static int mtk_mac_finish(struct phylink
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
static void mtk_mac_link_down(struct phylink_config *config, unsigned int mode,
|
static void mtk_mac_link_down(struct phylink_config *config, unsigned int mode,
|
||||||
phy_interface_t interface)
|
phy_interface_t interface)
|
||||||
{
|
{
|
||||||
@@ -709,7 +677,6 @@ static void mtk_mac_link_up(struct phyli
|
@@ -708,7 +676,6 @@ static void mtk_mac_link_up(struct phyli
|
||||||
static const struct phylink_mac_ops mtk_phylink_ops = {
|
static const struct phylink_mac_ops mtk_phylink_ops = {
|
||||||
.validate = phylink_generic_validate,
|
.validate = phylink_generic_validate,
|
||||||
.mac_select_pcs = mtk_mac_select_pcs,
|
.mac_select_pcs = mtk_mac_select_pcs,
|
||||||
@ -70,7 +70,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
.mac_config = mtk_mac_config,
|
.mac_config = mtk_mac_config,
|
||||||
.mac_finish = mtk_mac_finish,
|
.mac_finish = mtk_mac_finish,
|
||||||
.mac_link_down = mtk_mac_link_down,
|
.mac_link_down = mtk_mac_link_down,
|
||||||
@@ -4307,8 +4274,6 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4309,8 +4276,6 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
|
|
||||||
mac->phylink_config.dev = ð->netdev[id]->dev;
|
mac->phylink_config.dev = ð->netdev[id]->dev;
|
||||||
mac->phylink_config.type = PHYLINK_NETDEV;
|
mac->phylink_config.type = PHYLINK_NETDEV;
|
||||||
|
@ -23,7 +23,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -580,7 +580,7 @@ static void mtk_set_queue_speed(struct m
|
@@ -579,7 +579,7 @@ static void mtk_set_queue_speed(struct m
|
||||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
|
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
|
||||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
|
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
|
||||||
MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
|
MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
|
||||||
@ -32,7 +32,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
|
val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_SOC_MT7621)) {
|
if (IS_ENABLED(CONFIG_SOC_MT7621)) {
|
||||||
@@ -956,7 +956,7 @@ static bool mtk_rx_get_desc(struct mtk_e
|
@@ -955,7 +955,7 @@ static bool mtk_rx_get_desc(struct mtk_e
|
||||||
rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
|
rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
|
||||||
rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
|
rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
|
||||||
rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
|
rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
|
||||||
@ -41,7 +41,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
rxd->rxd5 = READ_ONCE(dma_rxd->rxd5);
|
rxd->rxd5 = READ_ONCE(dma_rxd->rxd5);
|
||||||
rxd->rxd6 = READ_ONCE(dma_rxd->rxd6);
|
rxd->rxd6 = READ_ONCE(dma_rxd->rxd6);
|
||||||
}
|
}
|
||||||
@@ -1014,7 +1014,7 @@ static int mtk_init_fq_dma(struct mtk_et
|
@@ -1013,7 +1013,7 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||||
|
|
||||||
txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
|
txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
|
||||||
txd->txd4 = 0;
|
txd->txd4 = 0;
|
||||||
@ -50,7 +50,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
txd->txd5 = 0;
|
txd->txd5 = 0;
|
||||||
txd->txd6 = 0;
|
txd->txd6 = 0;
|
||||||
txd->txd7 = 0;
|
txd->txd7 = 0;
|
||||||
@@ -1205,7 +1205,7 @@ static void mtk_tx_set_dma_desc(struct n
|
@@ -1204,7 +1204,7 @@ static void mtk_tx_set_dma_desc(struct n
|
||||||
struct mtk_mac *mac = netdev_priv(dev);
|
struct mtk_mac *mac = netdev_priv(dev);
|
||||||
struct mtk_eth *eth = mac->hw;
|
struct mtk_eth *eth = mac->hw;
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
mtk_tx_set_dma_desc_v2(dev, txd, info);
|
mtk_tx_set_dma_desc_v2(dev, txd, info);
|
||||||
else
|
else
|
||||||
mtk_tx_set_dma_desc_v1(dev, txd, info);
|
mtk_tx_set_dma_desc_v1(dev, txd, info);
|
||||||
@@ -1512,7 +1512,7 @@ static void mtk_update_rx_cpu_idx(struct
|
@@ -1511,7 +1511,7 @@ static void mtk_update_rx_cpu_idx(struct
|
||||||
|
|
||||||
static bool mtk_page_pool_enabled(struct mtk_eth *eth)
|
static bool mtk_page_pool_enabled(struct mtk_eth *eth)
|
||||||
{
|
{
|
||||||
@ -68,7 +68,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct page_pool *mtk_create_page_pool(struct mtk_eth *eth,
|
static struct page_pool *mtk_create_page_pool(struct mtk_eth *eth,
|
||||||
@@ -1854,7 +1854,7 @@ static int mtk_poll_rx(struct napi_struc
|
@@ -1853,7 +1853,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* find out which mac the packet come from. values start at 1 */
|
/* find out which mac the packet come from. values start at 1 */
|
||||||
@ -77,7 +77,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
mac = RX_DMA_GET_SPORT_V2(trxd.rxd5) - 1;
|
mac = RX_DMA_GET_SPORT_V2(trxd.rxd5) - 1;
|
||||||
else if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
|
else if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
|
||||||
!(trxd.rxd4 & RX_DMA_SPECIAL_TAG))
|
!(trxd.rxd4 & RX_DMA_SPECIAL_TAG))
|
||||||
@@ -1950,7 +1950,7 @@ static int mtk_poll_rx(struct napi_struc
|
@@ -1949,7 +1949,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||||
skb->dev = netdev;
|
skb->dev = netdev;
|
||||||
bytes += skb->len;
|
bytes += skb->len;
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON, trxd.rxd5);
|
reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON, trxd.rxd5);
|
||||||
hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY;
|
hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY;
|
||||||
if (hash != MTK_RXD5_FOE_ENTRY)
|
if (hash != MTK_RXD5_FOE_ENTRY)
|
||||||
@@ -1975,8 +1975,8 @@ static int mtk_poll_rx(struct napi_struc
|
@@ -1974,8 +1974,8 @@ static int mtk_poll_rx(struct napi_struc
|
||||||
/* When using VLAN untagging in combination with DSA, the
|
/* When using VLAN untagging in combination with DSA, the
|
||||||
* hardware treats the MTK special tag as a VLAN and untags it.
|
* hardware treats the MTK special tag as a VLAN and untags it.
|
||||||
*/
|
*/
|
||||||
@ -97,7 +97,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
unsigned int port = RX_DMA_VPID(trxd.rxd3) & GENMASK(2, 0);
|
unsigned int port = RX_DMA_VPID(trxd.rxd3) & GENMASK(2, 0);
|
||||||
|
|
||||||
if (port < ARRAY_SIZE(eth->dsa_meta) &&
|
if (port < ARRAY_SIZE(eth->dsa_meta) &&
|
||||||
@@ -2286,7 +2286,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
@@ -2285,7 +2285,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||||
txd->txd2 = next_ptr;
|
txd->txd2 = next_ptr;
|
||||||
txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
|
txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
|
||||||
txd->txd4 = 0;
|
txd->txd4 = 0;
|
||||||
@ -106,7 +106,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
txd->txd5 = 0;
|
txd->txd5 = 0;
|
||||||
txd->txd6 = 0;
|
txd->txd6 = 0;
|
||||||
txd->txd7 = 0;
|
txd->txd7 = 0;
|
||||||
@@ -2339,14 +2339,14 @@ static int mtk_tx_alloc(struct mtk_eth *
|
@@ -2338,14 +2338,14 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
|
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
|
||||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
|
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
|
||||||
MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
|
MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
|
||||||
@ -123,7 +123,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
mtk_w32(eth, val, soc->reg_map->qdma.tx_sch_rate + 4);
|
mtk_w32(eth, val, soc->reg_map->qdma.tx_sch_rate + 4);
|
||||||
} else {
|
} else {
|
||||||
mtk_w32(eth, ring->phys_pdma, MT7628_TX_BASE_PTR0);
|
mtk_w32(eth, ring->phys_pdma, MT7628_TX_BASE_PTR0);
|
||||||
@@ -2475,7 +2475,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
@@ -2474,7 +2474,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||||
|
|
||||||
rxd->rxd3 = 0;
|
rxd->rxd3 = 0;
|
||||||
rxd->rxd4 = 0;
|
rxd->rxd4 = 0;
|
||||||
@ -132,7 +132,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
rxd->rxd5 = 0;
|
rxd->rxd5 = 0;
|
||||||
rxd->rxd6 = 0;
|
rxd->rxd6 = 0;
|
||||||
rxd->rxd7 = 0;
|
rxd->rxd7 = 0;
|
||||||
@@ -3023,7 +3023,7 @@ static int mtk_start_dma(struct mtk_eth
|
@@ -3025,7 +3025,7 @@ static int mtk_start_dma(struct mtk_eth
|
||||||
MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
|
MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
|
||||||
MTK_RX_2B_OFFSET | MTK_TX_WB_DDONE;
|
MTK_RX_2B_OFFSET | MTK_TX_WB_DDONE;
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
val |= MTK_MUTLI_CNT | MTK_RESV_BUF |
|
val |= MTK_MUTLI_CNT | MTK_RESV_BUF |
|
||||||
MTK_WCOMP_EN | MTK_DMAD_WR_WDONE |
|
MTK_WCOMP_EN | MTK_DMAD_WR_WDONE |
|
||||||
MTK_CHK_DDONE_EN | MTK_LEAKY_BUCKET_EN;
|
MTK_CHK_DDONE_EN | MTK_LEAKY_BUCKET_EN;
|
||||||
@@ -3165,7 +3165,7 @@ static int mtk_open(struct net_device *d
|
@@ -3167,7 +3167,7 @@ static int mtk_open(struct net_device *d
|
||||||
phylink_start(mac->phylink);
|
phylink_start(mac->phylink);
|
||||||
netif_tx_start_all_queues(dev);
|
netif_tx_start_all_queues(dev);
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (mtk_uses_dsa(dev) && !eth->prog) {
|
if (mtk_uses_dsa(dev) && !eth->prog) {
|
||||||
@@ -3430,7 +3430,7 @@ static void mtk_hw_reset(struct mtk_eth
|
@@ -3432,7 +3432,7 @@ static void mtk_hw_reset(struct mtk_eth
|
||||||
{
|
{
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
@ -159,7 +159,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN, 0);
|
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN, 0);
|
||||||
val = RSTCTRL_PPE0_V2;
|
val = RSTCTRL_PPE0_V2;
|
||||||
} else {
|
} else {
|
||||||
@@ -3442,7 +3442,7 @@ static void mtk_hw_reset(struct mtk_eth
|
@@ -3444,7 +3444,7 @@ static void mtk_hw_reset(struct mtk_eth
|
||||||
|
|
||||||
ethsys_reset(eth, RSTCTRL_ETH | RSTCTRL_FE | val);
|
ethsys_reset(eth, RSTCTRL_ETH | RSTCTRL_FE | val);
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
|
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
|
||||||
0x3ffffff);
|
0x3ffffff);
|
||||||
}
|
}
|
||||||
@@ -3468,7 +3468,7 @@ static void mtk_hw_warm_reset(struct mtk
|
@@ -3470,7 +3470,7 @@ static void mtk_hw_warm_reset(struct mtk
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,7 +177,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0_V2;
|
rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0_V2;
|
||||||
else
|
else
|
||||||
rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0;
|
rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0;
|
||||||
@@ -3638,7 +3638,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
@@ -3640,7 +3640,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||||
else
|
else
|
||||||
mtk_hw_reset(eth);
|
mtk_hw_reset(eth);
|
||||||
|
|
||||||
@ -186,7 +186,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
/* Set FE to PDMAv2 if necessary */
|
/* Set FE to PDMAv2 if necessary */
|
||||||
val = mtk_r32(eth, MTK_FE_GLO_MISC);
|
val = mtk_r32(eth, MTK_FE_GLO_MISC);
|
||||||
mtk_w32(eth, val | BIT(4), MTK_FE_GLO_MISC);
|
mtk_w32(eth, val | BIT(4), MTK_FE_GLO_MISC);
|
||||||
@@ -3675,7 +3675,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
@@ -3677,7 +3677,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||||
*/
|
*/
|
||||||
val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
|
val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
|
||||||
mtk_w32(eth, val | MTK_CDMQ_STAG_EN, MTK_CDMQ_IG_CTRL);
|
mtk_w32(eth, val | MTK_CDMQ_STAG_EN, MTK_CDMQ_IG_CTRL);
|
||||||
@ -195,7 +195,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
|
val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
|
||||||
mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
|
mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
|
||||||
|
|
||||||
@@ -3697,7 +3697,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
@@ -3699,7 +3699,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||||
mtk_w32(eth, eth->soc->txrx.rx_irq_done_mask, reg_map->qdma.int_grp + 4);
|
mtk_w32(eth, eth->soc->txrx.rx_irq_done_mask, reg_map->qdma.int_grp + 4);
|
||||||
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
||||||
|
|
||||||
@ -204,7 +204,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
/* PSE should not drop port8 and port9 packets from WDMA Tx */
|
/* PSE should not drop port8 and port9 packets from WDMA Tx */
|
||||||
mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
|
mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
|
||||||
|
|
||||||
@@ -4486,7 +4486,7 @@ static int mtk_probe(struct platform_dev
|
@@ -4488,7 +4488,7 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
@@ -4594,9 +4594,8 @@ static int mtk_probe(struct platform_dev
|
@@ -4596,9 +4596,8 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eth->soc->offload_version) {
|
if (eth->soc->offload_version) {
|
||||||
@ -224,7 +224,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
num_ppe = min_t(u32, ARRAY_SIZE(eth->ppe), num_ppe);
|
num_ppe = min_t(u32, ARRAY_SIZE(eth->ppe), num_ppe);
|
||||||
for (i = 0; i < num_ppe; i++) {
|
for (i = 0; i < num_ppe; i++) {
|
||||||
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
|
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
|
||||||
@@ -4688,6 +4687,7 @@ static const struct mtk_soc_data mt2701_
|
@@ -4690,6 +4689,7 @@ static const struct mtk_soc_data mt2701_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7623_CLKS_BITMAP,
|
.required_clks = MT7623_CLKS_BITMAP,
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
@ -232,7 +232,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4704,6 +4704,7 @@ static const struct mtk_soc_data mt7621_
|
@@ -4706,6 +4706,7 @@ static const struct mtk_soc_data mt7621_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7621_CLKS_BITMAP,
|
.required_clks = MT7621_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
@ -240,7 +240,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.offload_version = 1,
|
.offload_version = 1,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||||
@@ -4724,6 +4725,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -4726,6 +4727,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7622_CLKS_BITMAP,
|
.required_clks = MT7622_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
@ -248,7 +248,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
.has_accounting = true,
|
.has_accounting = true,
|
||||||
@@ -4744,6 +4746,7 @@ static const struct mtk_soc_data mt7623_
|
@@ -4746,6 +4748,7 @@ static const struct mtk_soc_data mt7623_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7623_CLKS_BITMAP,
|
.required_clks = MT7623_CLKS_BITMAP,
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
@ -256,7 +256,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.offload_version = 1,
|
.offload_version = 1,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||||
@@ -4766,6 +4769,7 @@ static const struct mtk_soc_data mt7629_
|
@@ -4768,6 +4771,7 @@ static const struct mtk_soc_data mt7629_
|
||||||
.required_clks = MT7629_CLKS_BITMAP,
|
.required_clks = MT7629_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.has_accounting = true,
|
.has_accounting = true,
|
||||||
@ -264,7 +264,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4783,6 +4787,7 @@ static const struct mtk_soc_data mt7981_
|
@@ -4785,6 +4789,7 @@ static const struct mtk_soc_data mt7981_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7981_CLKS_BITMAP,
|
.required_clks = MT7981_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
@ -272,7 +272,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
.has_accounting = true,
|
.has_accounting = true,
|
||||||
@@ -4804,6 +4809,7 @@ static const struct mtk_soc_data mt7986_
|
@@ -4806,6 +4811,7 @@ static const struct mtk_soc_data mt7986_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7986_CLKS_BITMAP,
|
.required_clks = MT7986_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
@ -280,7 +280,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
.has_accounting = true,
|
.has_accounting = true,
|
||||||
@@ -4824,6 +4830,7 @@ static const struct mtk_soc_data rt5350_
|
@@ -4826,6 +4832,7 @@ static const struct mtk_soc_data rt5350_
|
||||||
.hw_features = MTK_HW_FEATURES_MT7628,
|
.hw_features = MTK_HW_FEATURES_MT7628,
|
||||||
.required_clks = MT7628_CLKS_BITMAP,
|
.required_clks = MT7628_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
@ -491,7 +491,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
else
|
else
|
||||||
val = MTK_FOE_IB2_MIB_CNT;
|
val = MTK_FOE_IB2_MIB_CNT;
|
||||||
@@ -965,7 +965,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
@@ -965,7 +965,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||||
MTK_PPE_SCAN_MODE_KEEPALIVE_AGE) |
|
MTK_PPE_SCAN_MODE_CHECK_AGE) |
|
||||||
FIELD_PREP(MTK_PPE_TB_CFG_ENTRY_NUM,
|
FIELD_PREP(MTK_PPE_TB_CFG_ENTRY_NUM,
|
||||||
MTK_PPE_ENTRIES_SHIFT);
|
MTK_PPE_ENTRIES_SHIFT);
|
||||||
- if (MTK_HAS_CAPS(ppe->eth->soc->caps, MTK_NETSYS_V2))
|
- if (MTK_HAS_CAPS(ppe->eth->soc->caps, MTK_NETSYS_V2))
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -882,7 +882,7 @@ static void mtk_stats_update(struct mtk_
|
@@ -881,7 +881,7 @@ static void mtk_stats_update(struct mtk_
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (!eth->mac[i] || !eth->mac[i]->hw_stats)
|
if (!eth->mac[i] || !eth->mac[i]->hw_stats)
|
||||||
continue;
|
continue;
|
||||||
if (spin_trylock(ð->mac[i]->hw_stats->stats_lock)) {
|
if (spin_trylock(ð->mac[i]->hw_stats->stats_lock)) {
|
||||||
@@ -1387,7 +1387,7 @@ static int mtk_queue_stopped(struct mtk_
|
@@ -1386,7 +1386,7 @@ static int mtk_queue_stopped(struct mtk_
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (!eth->netdev[i])
|
if (!eth->netdev[i])
|
||||||
continue;
|
continue;
|
||||||
if (netif_queue_stopped(eth->netdev[i]))
|
if (netif_queue_stopped(eth->netdev[i]))
|
||||||
@@ -1401,7 +1401,7 @@ static void mtk_wake_queue(struct mtk_et
|
@@ -1400,7 +1400,7 @@ static void mtk_wake_queue(struct mtk_et
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (!eth->netdev[i])
|
if (!eth->netdev[i])
|
||||||
continue;
|
continue;
|
||||||
netif_tx_wake_all_queues(eth->netdev[i]);
|
netif_tx_wake_all_queues(eth->netdev[i]);
|
||||||
@@ -1860,7 +1860,7 @@ static int mtk_poll_rx(struct napi_struc
|
@@ -1859,7 +1859,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||||
!(trxd.rxd4 & RX_DMA_SPECIAL_TAG))
|
!(trxd.rxd4 & RX_DMA_SPECIAL_TAG))
|
||||||
mac = RX_DMA_GET_SPORT(trxd.rxd4) - 1;
|
mac = RX_DMA_GET_SPORT(trxd.rxd4) - 1;
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
!eth->netdev[mac]))
|
!eth->netdev[mac]))
|
||||||
goto release_desc;
|
goto release_desc;
|
||||||
|
|
||||||
@@ -2897,7 +2897,7 @@ static void mtk_dma_free(struct mtk_eth
|
@@ -2899,7 +2899,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||||
const struct mtk_soc_data *soc = eth->soc;
|
const struct mtk_soc_data *soc = eth->soc;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (eth->netdev[i])
|
if (eth->netdev[i])
|
||||||
netdev_reset_queue(eth->netdev[i]);
|
netdev_reset_queue(eth->netdev[i]);
|
||||||
if (eth->scratch_ring) {
|
if (eth->scratch_ring) {
|
||||||
@@ -3051,8 +3051,13 @@ static void mtk_gdm_config(struct mtk_et
|
@@ -3053,8 +3053,13 @@ static void mtk_gdm_config(struct mtk_et
|
||||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
/* default setup the forward port to send frame to PDMA */
|
/* default setup the forward port to send frame to PDMA */
|
||||||
val &= ~0xffff;
|
val &= ~0xffff;
|
||||||
@@ -3062,7 +3067,7 @@ static void mtk_gdm_config(struct mtk_et
|
@@ -3064,7 +3069,7 @@ static void mtk_gdm_config(struct mtk_et
|
||||||
|
|
||||||
val |= config;
|
val |= config;
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
val |= MTK_GDMA_SPECIAL_TAG;
|
val |= MTK_GDMA_SPECIAL_TAG;
|
||||||
|
|
||||||
mtk_w32(eth, val, MTK_GDMA_FWD_CFG(i));
|
mtk_w32(eth, val, MTK_GDMA_FWD_CFG(i));
|
||||||
@@ -3659,15 +3664,15 @@ static int mtk_hw_init(struct mtk_eth *e
|
@@ -3661,15 +3666,15 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||||
* up with the more appropriate value when mtk_mac_config call is being
|
* up with the more appropriate value when mtk_mac_config call is being
|
||||||
* invoked.
|
* invoked.
|
||||||
*/
|
*/
|
||||||
@ -109,7 +109,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Indicates CDM to parse the MTK special tag from CPU
|
/* Indicates CDM to parse the MTK special tag from CPU
|
||||||
@@ -3847,7 +3852,7 @@ static void mtk_pending_work(struct work
|
@@ -3849,7 +3854,7 @@ static void mtk_pending_work(struct work
|
||||||
mtk_prepare_for_reset(eth);
|
mtk_prepare_for_reset(eth);
|
||||||
|
|
||||||
/* stop all devices to make sure that dma is properly shut down */
|
/* stop all devices to make sure that dma is properly shut down */
|
||||||
@ -118,7 +118,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (!eth->netdev[i] || !netif_running(eth->netdev[i]))
|
if (!eth->netdev[i] || !netif_running(eth->netdev[i]))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -3863,8 +3868,8 @@ static void mtk_pending_work(struct work
|
@@ -3865,8 +3870,8 @@ static void mtk_pending_work(struct work
|
||||||
mtk_hw_init(eth, true);
|
mtk_hw_init(eth, true);
|
||||||
|
|
||||||
/* restart DMA and enable IRQs */
|
/* restart DMA and enable IRQs */
|
||||||
@ -129,7 +129,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mtk_open(eth->netdev[i])) {
|
if (mtk_open(eth->netdev[i])) {
|
||||||
@@ -3891,7 +3896,7 @@ static int mtk_free_dev(struct mtk_eth *
|
@@ -3893,7 +3898,7 @@ static int mtk_free_dev(struct mtk_eth *
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (!eth->netdev[i])
|
if (!eth->netdev[i])
|
||||||
continue;
|
continue;
|
||||||
free_netdev(eth->netdev[i]);
|
free_netdev(eth->netdev[i]);
|
||||||
@@ -3910,7 +3915,7 @@ static int mtk_unreg_dev(struct mtk_eth
|
@@ -3912,7 +3917,7 @@ static int mtk_unreg_dev(struct mtk_eth
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
struct mtk_mac *mac;
|
struct mtk_mac *mac;
|
||||||
if (!eth->netdev[i])
|
if (!eth->netdev[i])
|
||||||
continue;
|
continue;
|
||||||
@@ -4211,7 +4216,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4213,7 +4218,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
}
|
}
|
||||||
|
|
||||||
id = be32_to_cpup(_id);
|
id = be32_to_cpup(_id);
|
||||||
@ -156,7 +156,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
dev_err(eth->dev, "%d is not a valid mac id\n", id);
|
dev_err(eth->dev, "%d is not a valid mac id\n", id);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@@ -4356,7 +4361,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
@@ -4358,7 +4363,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
dev = eth->netdev[i];
|
dev = eth->netdev[i];
|
||||||
|
|
||||||
if (!dev || !(dev->flags & IFF_UP))
|
if (!dev || !(dev->flags & IFF_UP))
|
||||||
@@ -4662,7 +4667,7 @@ static int mtk_remove(struct platform_de
|
@@ -4664,7 +4669,7 @@ static int mtk_remove(struct platform_de
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* stop all devices to make sure that dma is properly shut down */
|
/* stop all devices to make sure that dma is properly shut down */
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -862,17 +862,32 @@ void mtk_stats_update_mac(struct mtk_mac
|
@@ -861,17 +861,32 @@ void mtk_stats_update_mac(struct mtk_mac
|
||||||
mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x20 + offs);
|
mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x20 + offs);
|
||||||
hw_stats->rx_flow_control_packets +=
|
hw_stats->rx_flow_control_packets +=
|
||||||
mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x24 + offs);
|
mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x24 + offs);
|
||||||
@ -62,7 +62,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
}
|
}
|
||||||
|
|
||||||
u64_stats_update_end(&hw_stats->syncp);
|
u64_stats_update_end(&hw_stats->syncp);
|
||||||
@@ -1176,7 +1191,10 @@ static void mtk_tx_set_dma_desc_v2(struc
|
@@ -1175,7 +1190,10 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||||
data |= TX_DMA_LS0;
|
data |= TX_DMA_LS0;
|
||||||
WRITE_ONCE(desc->txd3, data);
|
WRITE_ONCE(desc->txd3, data);
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
|
data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
|
||||||
WRITE_ONCE(desc->txd4, data);
|
WRITE_ONCE(desc->txd4, data);
|
||||||
|
|
||||||
@@ -1187,6 +1205,8 @@ static void mtk_tx_set_dma_desc_v2(struc
|
@@ -1186,6 +1204,8 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||||
/* tx checksum offload */
|
/* tx checksum offload */
|
||||||
if (info->csum)
|
if (info->csum)
|
||||||
data |= TX_DMA_CHKSUM_V2;
|
data |= TX_DMA_CHKSUM_V2;
|
||||||
@ -83,7 +83,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
}
|
}
|
||||||
WRITE_ONCE(desc->txd5, data);
|
WRITE_ONCE(desc->txd5, data);
|
||||||
|
|
||||||
@@ -1252,8 +1272,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
@@ -1251,8 +1271,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||||
mtk_tx_set_dma_desc(dev, itxd, &txd_info);
|
mtk_tx_set_dma_desc(dev, itxd, &txd_info);
|
||||||
|
|
||||||
itx_buf->flags |= MTK_TX_FLAGS_SINGLE0;
|
itx_buf->flags |= MTK_TX_FLAGS_SINGLE0;
|
||||||
@ -93,7 +93,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
setup_tx_buf(eth, itx_buf, itxd_pdma, txd_info.addr, txd_info.size,
|
setup_tx_buf(eth, itx_buf, itxd_pdma, txd_info.addr, txd_info.size,
|
||||||
k++);
|
k++);
|
||||||
|
|
||||||
@@ -1301,8 +1320,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
@@ -1300,8 +1319,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||||
memset(tx_buf, 0, sizeof(*tx_buf));
|
memset(tx_buf, 0, sizeof(*tx_buf));
|
||||||
tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
|
tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
|
||||||
tx_buf->flags |= MTK_TX_FLAGS_PAGE0;
|
tx_buf->flags |= MTK_TX_FLAGS_PAGE0;
|
||||||
@ -103,7 +103,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
setup_tx_buf(eth, tx_buf, txd_pdma, txd_info.addr,
|
setup_tx_buf(eth, tx_buf, txd_pdma, txd_info.addr,
|
||||||
txd_info.size, k++);
|
txd_info.size, k++);
|
||||||
@@ -1604,7 +1622,7 @@ static int mtk_xdp_frame_map(struct mtk_
|
@@ -1603,7 +1621,7 @@ static int mtk_xdp_frame_map(struct mtk_
|
||||||
}
|
}
|
||||||
mtk_tx_set_dma_desc(dev, txd, txd_info);
|
mtk_tx_set_dma_desc(dev, txd, txd_info);
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
tx_buf->type = dma_map ? MTK_TYPE_XDP_NDO : MTK_TYPE_XDP_TX;
|
tx_buf->type = dma_map ? MTK_TYPE_XDP_NDO : MTK_TYPE_XDP_TX;
|
||||||
tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
|
tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
|
||||||
|
|
||||||
@@ -1854,11 +1872,24 @@ static int mtk_poll_rx(struct napi_struc
|
@@ -1853,11 +1871,24 @@ static int mtk_poll_rx(struct napi_struc
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* find out which mac the packet come from. values start at 1 */
|
/* find out which mac the packet come from. values start at 1 */
|
||||||
@ -141,7 +141,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
if (unlikely(mac < 0 || mac >= MTK_MAX_DEVS ||
|
if (unlikely(mac < 0 || mac >= MTK_MAX_DEVS ||
|
||||||
!eth->netdev[mac]))
|
!eth->netdev[mac]))
|
||||||
@@ -2080,7 +2111,6 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
@@ -2079,7 +2110,6 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||||
|
|
||||||
while ((cpu != dma) && budget) {
|
while ((cpu != dma) && budget) {
|
||||||
u32 next_cpu = desc->txd2;
|
u32 next_cpu = desc->txd2;
|
||||||
@ -149,7 +149,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
desc = mtk_qdma_phys_to_virt(ring, desc->txd2);
|
desc = mtk_qdma_phys_to_virt(ring, desc->txd2);
|
||||||
if ((desc->txd3 & TX_DMA_OWNER_CPU) == 0)
|
if ((desc->txd3 & TX_DMA_OWNER_CPU) == 0)
|
||||||
@@ -2088,15 +2118,13 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
@@ -2087,15 +2117,13 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||||
|
|
||||||
tx_buf = mtk_desc_to_tx_buf(ring, desc,
|
tx_buf = mtk_desc_to_tx_buf(ring, desc,
|
||||||
eth->soc->txrx.txd_size);
|
eth->soc->txrx.txd_size);
|
||||||
@ -167,7 +167,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
budget--;
|
budget--;
|
||||||
}
|
}
|
||||||
@@ -3702,7 +3730,24 @@ static int mtk_hw_init(struct mtk_eth *e
|
@@ -3704,7 +3732,24 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||||
mtk_w32(eth, eth->soc->txrx.rx_irq_done_mask, reg_map->qdma.int_grp + 4);
|
mtk_w32(eth, eth->soc->txrx.rx_irq_done_mask, reg_map->qdma.int_grp + 4);
|
||||||
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
/* PSE should not drop port8 and port9 packets from WDMA Tx */
|
/* PSE should not drop port8 and port9 packets from WDMA Tx */
|
||||||
mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
|
mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
|
||||||
|
|
||||||
@@ -4264,7 +4309,11 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4266,7 +4311,11 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
}
|
}
|
||||||
spin_lock_init(&mac->hw_stats->stats_lock);
|
spin_lock_init(&mac->hw_stats->stats_lock);
|
||||||
u64_stats_init(&mac->hw_stats->syncp);
|
u64_stats_init(&mac->hw_stats->syncp);
|
||||||
|
@ -219,7 +219,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
err_phy:
|
err_phy:
|
||||||
@@ -726,11 +842,15 @@ static int mtk_mdio_init(struct mtk_eth
|
@@ -725,11 +841,15 @@ static int mtk_mdio_init(struct mtk_eth
|
||||||
}
|
}
|
||||||
divider = min_t(unsigned int, DIV_ROUND_UP(MDC_MAX_FREQ, max_clk), 63);
|
divider = min_t(unsigned int, DIV_ROUND_UP(MDC_MAX_FREQ, max_clk), 63);
|
||||||
|
|
||||||
@ -239,7 +239,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
dev_dbg(eth->dev, "MDC is running on %d Hz\n", MDC_MAX_FREQ / divider);
|
dev_dbg(eth->dev, "MDC is running on %d Hz\n", MDC_MAX_FREQ / divider);
|
||||||
|
|
||||||
@@ -1191,10 +1311,19 @@ static void mtk_tx_set_dma_desc_v2(struc
|
@@ -1190,10 +1310,19 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||||
data |= TX_DMA_LS0;
|
data |= TX_DMA_LS0;
|
||||||
WRITE_ONCE(desc->txd3, data);
|
WRITE_ONCE(desc->txd3, data);
|
||||||
|
|
||||||
@ -263,7 +263,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
|
data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
|
||||||
WRITE_ONCE(desc->txd4, data);
|
WRITE_ONCE(desc->txd4, data);
|
||||||
|
|
||||||
@@ -4358,6 +4487,17 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4360,6 +4489,17 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
mac->phylink_config.supported_interfaces);
|
mac->phylink_config.supported_interfaces);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -281,7 +281,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
phylink = phylink_create(&mac->phylink_config,
|
phylink = phylink_create(&mac->phylink_config,
|
||||||
of_fwnode_handle(mac->of_node),
|
of_fwnode_handle(mac->of_node),
|
||||||
phy_mode, &mtk_phylink_ops);
|
phy_mode, &mtk_phylink_ops);
|
||||||
@@ -4878,6 +5018,24 @@ static const struct mtk_soc_data mt7986_
|
@@ -4880,6 +5020,24 @@ static const struct mtk_soc_data mt7986_
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -306,7 +306,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
static const struct mtk_soc_data rt5350_data = {
|
static const struct mtk_soc_data rt5350_data = {
|
||||||
.reg_map = &mt7628_reg_map,
|
.reg_map = &mt7628_reg_map,
|
||||||
.caps = MT7628_CAPS,
|
.caps = MT7628_CAPS,
|
||||||
@@ -4896,14 +5054,15 @@ static const struct mtk_soc_data rt5350_
|
@@ -4898,14 +5056,15 @@ static const struct mtk_soc_data rt5350_
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct of_device_id of_mtk_match[] = {
|
const struct of_device_id of_mtk_match[] = {
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -1659,7 +1659,7 @@ static void mtk_update_rx_cpu_idx(struct
|
@@ -1658,7 +1658,7 @@ static void mtk_update_rx_cpu_idx(struct
|
||||||
|
|
||||||
static bool mtk_page_pool_enabled(struct mtk_eth *eth)
|
static bool mtk_page_pool_enabled(struct mtk_eth *eth)
|
||||||
{
|
{
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -5026,6 +5026,9 @@ static const struct mtk_soc_data mt7988_
|
@@ -5028,6 +5028,9 @@ static const struct mtk_soc_data mt7988_
|
||||||
.required_clks = MT7988_CLKS_BITMAP,
|
.required_clks = MT7988_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.version = 3,
|
.version = 3,
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -5028,6 +5028,7 @@ static const struct mtk_soc_data mt7988_
|
@@ -5030,6 +5030,7 @@ static const struct mtk_soc_data mt7988_
|
||||||
.version = 3,
|
.version = 3,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3592,19 +3592,34 @@ static void mtk_hw_reset(struct mtk_eth
|
@@ -3594,19 +3594,34 @@ static void mtk_hw_reset(struct mtk_eth
|
||||||
{
|
{
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
|
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
|
||||||
0x3ffffff);
|
0x3ffffff);
|
||||||
}
|
}
|
||||||
@@ -3630,13 +3645,21 @@ static void mtk_hw_warm_reset(struct mtk
|
@@ -3632,13 +3647,21 @@ static void mtk_hw_warm_reset(struct mtk
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL, rst_mask, rst_mask);
|
regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL, rst_mask, rst_mask);
|
||||||
|
|
||||||
@@ -3988,11 +4011,17 @@ static void mtk_prepare_for_reset(struct
|
@@ -3990,11 +4013,17 @@ static void mtk_prepare_for_reset(struct
|
||||||
u32 val;
|
u32 val;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
/* adjust PPE configurations to prepare for reset */
|
/* adjust PPE configurations to prepare for reset */
|
||||||
for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
|
for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
|
||||||
@@ -4053,11 +4082,18 @@ static void mtk_pending_work(struct work
|
@@ -4055,11 +4084,18 @@ static void mtk_pending_work(struct work
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -1119,10 +1119,13 @@ static int mtk_init_fq_dma(struct mtk_et
|
@@ -1118,10 +1118,13 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||||
dma_addr_t dma_addr;
|
dma_addr_t dma_addr;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (unlikely(!eth->scratch_ring))
|
if (unlikely(!eth->scratch_ring))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
@@ -2430,8 +2433,14 @@ static int mtk_tx_alloc(struct mtk_eth *
|
@@ -2429,8 +2432,14 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||||
if (!ring->buf)
|
if (!ring->buf)
|
||||||
goto no_tx_mem;
|
goto no_tx_mem;
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (!ring->dma)
|
if (!ring->dma)
|
||||||
goto no_tx_mem;
|
goto no_tx_mem;
|
||||||
|
|
||||||
@@ -2530,8 +2539,7 @@ static void mtk_tx_clean(struct mtk_eth
|
@@ -2529,8 +2538,7 @@ static void mtk_tx_clean(struct mtk_eth
|
||||||
kfree(ring->buf);
|
kfree(ring->buf);
|
||||||
ring->buf = NULL;
|
ring->buf = NULL;
|
||||||
}
|
}
|
||||||
@ -65,7 +65,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
dma_free_coherent(eth->dma_dev,
|
dma_free_coherent(eth->dma_dev,
|
||||||
ring->dma_size * soc->txrx.txd_size,
|
ring->dma_size * soc->txrx.txd_size,
|
||||||
ring->dma, ring->phys);
|
ring->dma, ring->phys);
|
||||||
@@ -2550,9 +2558,14 @@ static int mtk_rx_alloc(struct mtk_eth *
|
@@ -2549,9 +2557,14 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||||
{
|
{
|
||||||
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
||||||
struct mtk_rx_ring *ring;
|
struct mtk_rx_ring *ring;
|
||||||
@ -81,7 +81,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (rx_flag == MTK_RX_FLAGS_QDMA) {
|
if (rx_flag == MTK_RX_FLAGS_QDMA) {
|
||||||
if (ring_no)
|
if (ring_no)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@@ -2587,9 +2600,20 @@ static int mtk_rx_alloc(struct mtk_eth *
|
@@ -2586,9 +2599,20 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||||
ring->page_pool = pp;
|
ring->page_pool = pp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (!ring->dma)
|
if (!ring->dma)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
@@ -2674,7 +2698,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
@@ -2673,7 +2697,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -2697,7 +2721,7 @@ static void mtk_rx_clean(struct mtk_eth
|
@@ -2696,7 +2720,7 @@ static void mtk_rx_clean(struct mtk_eth
|
||||||
ring->data = NULL;
|
ring->data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
dma_free_coherent(eth->dma_dev,
|
dma_free_coherent(eth->dma_dev,
|
||||||
ring->dma_size * eth->soc->txrx.rxd_size,
|
ring->dma_size * eth->soc->txrx.rxd_size,
|
||||||
ring->dma, ring->phys);
|
ring->dma, ring->phys);
|
||||||
@@ -3057,7 +3081,7 @@ static void mtk_dma_free(struct mtk_eth
|
@@ -3059,7 +3083,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||||
for (i = 0; i < MTK_MAX_DEVS; i++)
|
for (i = 0; i < MTK_MAX_DEVS; i++)
|
||||||
if (eth->netdev[i])
|
if (eth->netdev[i])
|
||||||
netdev_reset_queue(eth->netdev[i]);
|
netdev_reset_queue(eth->netdev[i]);
|
||||||
@ -132,7 +132,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
dma_free_coherent(eth->dma_dev,
|
dma_free_coherent(eth->dma_dev,
|
||||||
MTK_QDMA_RING_SIZE * soc->txrx.txd_size,
|
MTK_QDMA_RING_SIZE * soc->txrx.txd_size,
|
||||||
eth->scratch_ring, eth->phy_scratch_ring);
|
eth->scratch_ring, eth->phy_scratch_ring);
|
||||||
@@ -3065,13 +3089,13 @@ static void mtk_dma_free(struct mtk_eth
|
@@ -3067,13 +3091,13 @@ static void mtk_dma_free(struct mtk_eth
|
||||||
eth->phy_scratch_ring = 0;
|
eth->phy_scratch_ring = 0;
|
||||||
}
|
}
|
||||||
mtk_tx_clean(eth);
|
mtk_tx_clean(eth);
|
||||||
@ -149,7 +149,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
}
|
}
|
||||||
|
|
||||||
kfree(eth->scratch_head);
|
kfree(eth->scratch_head);
|
||||||
@@ -4639,7 +4663,7 @@ static int mtk_sgmii_init(struct mtk_eth
|
@@ -4641,7 +4665,7 @@ static int mtk_sgmii_init(struct mtk_eth
|
||||||
|
|
||||||
static int mtk_probe(struct platform_device *pdev)
|
static int mtk_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
@ -158,7 +158,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
struct device_node *mac_np;
|
struct device_node *mac_np;
|
||||||
struct mtk_eth *eth;
|
struct mtk_eth *eth;
|
||||||
int err, i;
|
int err, i;
|
||||||
@@ -4659,6 +4683,20 @@ static int mtk_probe(struct platform_dev
|
@@ -4661,6 +4685,20 @@ static int mtk_probe(struct platform_dev
|
||||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
||||||
eth->ip_align = NET_IP_ALIGN;
|
eth->ip_align = NET_IP_ALIGN;
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
spin_lock_init(ð->page_lock);
|
spin_lock_init(ð->page_lock);
|
||||||
spin_lock_init(ð->tx_irq_lock);
|
spin_lock_init(ð->tx_irq_lock);
|
||||||
spin_lock_init(ð->rx_irq_lock);
|
spin_lock_init(ð->rx_irq_lock);
|
||||||
@@ -4722,6 +4760,18 @@ static int mtk_probe(struct platform_dev
|
@@ -4724,6 +4762,18 @@ static int mtk_probe(struct platform_dev
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
goto err_destroy_sgmii;
|
goto err_destroy_sgmii;
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -1312,6 +1312,10 @@ static void mtk_tx_set_dma_desc_v2(struc
|
@@ -1311,6 +1311,10 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||||
data = TX_DMA_PLEN0(info->size);
|
data = TX_DMA_PLEN0(info->size);
|
||||||
if (info->last)
|
if (info->last)
|
||||||
data |= TX_DMA_LS0;
|
data |= TX_DMA_LS0;
|
||||||
@ -30,7 +30,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
WRITE_ONCE(desc->txd3, data);
|
WRITE_ONCE(desc->txd3, data);
|
||||||
|
|
||||||
/* set forward port */
|
/* set forward port */
|
||||||
@@ -1981,6 +1985,7 @@ static int mtk_poll_rx(struct napi_struc
|
@@ -1980,6 +1984,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||||
bool xdp_flush = false;
|
bool xdp_flush = false;
|
||||||
int idx;
|
int idx;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
@ -38,7 +38,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
u8 *data, *new_data;
|
u8 *data, *new_data;
|
||||||
struct mtk_rx_dma_v2 *rxd, trxd;
|
struct mtk_rx_dma_v2 *rxd, trxd;
|
||||||
int done = 0, bytes = 0;
|
int done = 0, bytes = 0;
|
||||||
@@ -2096,7 +2101,10 @@ static int mtk_poll_rx(struct napi_struc
|
@@ -2095,7 +2100,10 @@ static int mtk_poll_rx(struct napi_struc
|
||||||
goto release_desc;
|
goto release_desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
ring->buf_size, DMA_FROM_DEVICE);
|
ring->buf_size, DMA_FROM_DEVICE);
|
||||||
|
|
||||||
skb = build_skb(data, ring->frag_size);
|
skb = build_skb(data, ring->frag_size);
|
||||||
@@ -2162,6 +2170,9 @@ release_desc:
|
@@ -2161,6 +2169,9 @@ release_desc:
|
||||||
else
|
else
|
||||||
rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size);
|
rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size);
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
ring->calc_idx = idx;
|
ring->calc_idx = idx;
|
||||||
done++;
|
done++;
|
||||||
}
|
}
|
||||||
@@ -2654,6 +2665,9 @@ static int mtk_rx_alloc(struct mtk_eth *
|
@@ -2653,6 +2664,9 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||||
else
|
else
|
||||||
rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size);
|
rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size);
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
rxd->rxd3 = 0;
|
rxd->rxd3 = 0;
|
||||||
rxd->rxd4 = 0;
|
rxd->rxd4 = 0;
|
||||||
if (mtk_is_netsys_v2_or_greater(eth)) {
|
if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||||
@@ -2700,6 +2714,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
@@ -2699,6 +2713,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||||
|
|
||||||
static void mtk_rx_clean(struct mtk_eth *eth, struct mtk_rx_ring *ring, bool in_sram)
|
static void mtk_rx_clean(struct mtk_eth *eth, struct mtk_rx_ring *ring, bool in_sram)
|
||||||
{
|
{
|
||||||
@ -78,7 +78,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (ring->data && ring->dma) {
|
if (ring->data && ring->dma) {
|
||||||
@@ -2713,7 +2728,10 @@ static void mtk_rx_clean(struct mtk_eth
|
@@ -2712,7 +2727,10 @@ static void mtk_rx_clean(struct mtk_eth
|
||||||
if (!rxd->rxd1)
|
if (!rxd->rxd1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
ring->buf_size, DMA_FROM_DEVICE);
|
ring->buf_size, DMA_FROM_DEVICE);
|
||||||
mtk_rx_put_buff(ring, ring->data[i], false);
|
mtk_rx_put_buff(ring, ring->data[i], false);
|
||||||
}
|
}
|
||||||
@@ -4697,6 +4715,14 @@ static int mtk_probe(struct platform_dev
|
@@ -4699,6 +4717,14 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (pl->pcs) {
|
if (pl->pcs) {
|
||||||
err = pl->pcs->ops->pcs_config(pl->pcs, pl->cur_link_an_mode,
|
err = pl->pcs->ops->pcs_config(pl->pcs, pl->cur_link_an_mode,
|
||||||
state->interface,
|
state->interface,
|
||||||
@@ -1498,6 +1524,7 @@ struct phylink *phylink_create(struct ph
|
@@ -1499,6 +1525,7 @@ struct phylink *phylink_create(struct ph
|
||||||
pl->link_config.speed = SPEED_UNKNOWN;
|
pl->link_config.speed = SPEED_UNKNOWN;
|
||||||
pl->link_config.duplex = DUPLEX_UNKNOWN;
|
pl->link_config.duplex = DUPLEX_UNKNOWN;
|
||||||
pl->link_config.an_enabled = true;
|
pl->link_config.an_enabled = true;
|
||||||
@ -84,7 +84,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
pl->mac_ops = mac_ops;
|
pl->mac_ops = mac_ops;
|
||||||
__set_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state);
|
__set_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state);
|
||||||
timer_setup(&pl->link_poll, phylink_fixed_poll, 0);
|
timer_setup(&pl->link_poll, phylink_fixed_poll, 0);
|
||||||
@@ -1899,6 +1926,8 @@ void phylink_start(struct phylink *pl)
|
@@ -1900,6 +1927,8 @@ void phylink_start(struct phylink *pl)
|
||||||
if (pl->netdev)
|
if (pl->netdev)
|
||||||
netif_carrier_off(pl->netdev);
|
netif_carrier_off(pl->netdev);
|
||||||
|
|
||||||
@ -93,7 +93,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
/* Apply the link configuration to the MAC when starting. This allows
|
/* Apply the link configuration to the MAC when starting. This allows
|
||||||
* a fixed-link to start with the correct parameters, and also
|
* a fixed-link to start with the correct parameters, and also
|
||||||
* ensures that we set the appropriate advertisement for Serdes links.
|
* ensures that we set the appropriate advertisement for Serdes links.
|
||||||
@@ -1909,6 +1938,8 @@ void phylink_start(struct phylink *pl)
|
@@ -1910,6 +1939,8 @@ void phylink_start(struct phylink *pl)
|
||||||
*/
|
*/
|
||||||
phylink_mac_initial_config(pl, true);
|
phylink_mac_initial_config(pl, true);
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
phylink_enable_and_run_resolve(pl, PHYLINK_DISABLE_STOPPED);
|
phylink_enable_and_run_resolve(pl, PHYLINK_DISABLE_STOPPED);
|
||||||
|
|
||||||
if (pl->cfg_link_an_mode == MLO_AN_FIXED && pl->link_gpio) {
|
if (pl->cfg_link_an_mode == MLO_AN_FIXED && pl->link_gpio) {
|
||||||
@@ -1927,15 +1958,9 @@ void phylink_start(struct phylink *pl)
|
@@ -1928,15 +1959,9 @@ void phylink_start(struct phylink *pl)
|
||||||
poll = true;
|
poll = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,7 +120,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (poll)
|
if (poll)
|
||||||
mod_timer(&pl->link_poll, jiffies + HZ);
|
mod_timer(&pl->link_poll, jiffies + HZ);
|
||||||
if (pl->phydev)
|
if (pl->phydev)
|
||||||
@@ -1972,6 +1997,10 @@ void phylink_stop(struct phylink *pl)
|
@@ -1973,6 +1998,10 @@ void phylink_stop(struct phylink *pl)
|
||||||
}
|
}
|
||||||
|
|
||||||
phylink_run_resolve_and_disable(pl, PHYLINK_DISABLE_STOPPED);
|
phylink_run_resolve_and_disable(pl, PHYLINK_DISABLE_STOPPED);
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
|
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||||
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
|
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||||
@@ -716,21 +716,6 @@ err_clear_skb:
|
@@ -730,21 +730,6 @@ err_clear_skb:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
qca8k_split_addr(u32 regaddr, u16 *r1, u16 *r2, u16 *page)
|
qca8k_split_addr(u32 regaddr, u16 *r1, u16 *r2, u16 *page)
|
||||||
@@ -1726,6 +1727,10 @@ qca8k_setup(struct dsa_switch *ds)
|
@@ -1751,6 +1752,10 @@ qca8k_setup(struct dsa_switch *ds)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
/**
|
/**
|
||||||
* fwnode_mdio_find_device - Given a fwnode, find the mdio_device
|
* fwnode_mdio_find_device - Given a fwnode, find the mdio_device
|
||||||
* @fwnode: pointer to the mdio_device's fwnode
|
* @fwnode: pointer to the mdio_device's fwnode
|
||||||
@@ -3107,6 +3178,11 @@ static int phy_probe(struct device *dev)
|
@@ -3109,6 +3180,11 @@ static int phy_probe(struct device *dev)
|
||||||
/* Set the state to READY by default */
|
/* Set the state to READY by default */
|
||||||
phydev->state = PHY_READY;
|
phydev->state = PHY_READY;
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
tristate "MDIO Bus/PHY emulation with fixed speed/link PHYs"
|
tristate "MDIO Bus/PHY emulation with fixed speed/link PHYs"
|
||||||
--- 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
|
||||||
@@ -3208,7 +3208,8 @@ static int phy_probe(struct device *dev)
|
@@ -3210,7 +3210,8 @@ static int phy_probe(struct device *dev)
|
||||||
/* Get the LEDs from the device tree, and instantiate standard
|
/* Get the LEDs from the device tree, and instantiate standard
|
||||||
* LEDs for them.
|
* LEDs for them.
|
||||||
*/
|
*/
|
||||||
|
@ -55,7 +55,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3229,6 +3239,9 @@ static int phy_remove(struct device *dev
|
@@ -3231,6 +3241,9 @@ static int phy_remove(struct device *dev
|
||||||
|
|
||||||
cancel_delayed_work_sync(&phydev->state_queue);
|
cancel_delayed_work_sync(&phydev->state_queue);
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|||||||
* of_find_node_by_phandle - Find a node given a phandle
|
* of_find_node_by_phandle - Find a node given a phandle
|
||||||
--- a/drivers/spi/spi.c
|
--- a/drivers/spi/spi.c
|
||||||
+++ b/drivers/spi/spi.c
|
+++ b/drivers/spi/spi.c
|
||||||
@@ -2330,8 +2330,8 @@ of_register_spi_device(struct spi_contro
|
@@ -2334,8 +2334,8 @@ of_register_spi_device(struct spi_contro
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Select device driver */
|
/* Select device driver */
|
||||||
|
@ -91,7 +91,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
|
|
||||||
#include "mtdcore.h"
|
#include "mtdcore.h"
|
||||||
|
|
||||||
@@ -1074,6 +1075,8 @@ int mtd_device_parse_register(struct mtd
|
@@ -1076,6 +1077,8 @@ int mtd_device_parse_register(struct mtd
|
||||||
register_reboot_notifier(&mtd->reboot_notifier);
|
register_reboot_notifier(&mtd->reboot_notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ Subject: [PATCH] kernel: add block fit partition parser
|
|||||||
|
|
||||||
--- a/block/blk.h
|
--- a/block/blk.h
|
||||||
+++ b/block/blk.h
|
+++ b/block/blk.h
|
||||||
@@ -414,6 +414,8 @@ void blk_free_ext_minor(unsigned int min
|
@@ -415,6 +415,8 @@ void blk_free_ext_minor(unsigned int min
|
||||||
#define ADDPART_FLAG_NONE 0
|
#define ADDPART_FLAG_NONE 0
|
||||||
#define ADDPART_FLAG_RAID 1
|
#define ADDPART_FLAG_RAID 1
|
||||||
#define ADDPART_FLAG_WHOLEDISK 2
|
#define ADDPART_FLAG_WHOLEDISK 2
|
||||||
|
@ -84,7 +84,7 @@ Subject: [PATCH] net/bridge: add bridge offload
|
|||||||
|
|
||||||
--- a/net/bridge/br_device.c
|
--- a/net/bridge/br_device.c
|
||||||
+++ b/net/bridge/br_device.c
|
+++ b/net/bridge/br_device.c
|
||||||
@@ -525,6 +525,8 @@ void br_dev_setup(struct net_device *dev
|
@@ -531,6 +531,8 @@ void br_dev_setup(struct net_device *dev
|
||||||
br->bridge_hello_time = br->hello_time = 2 * HZ;
|
br->bridge_hello_time = br->hello_time = 2 * HZ;
|
||||||
br->bridge_forward_delay = br->forward_delay = 15 * HZ;
|
br->bridge_forward_delay = br->forward_delay = 15 * HZ;
|
||||||
br->bridge_ageing_time = br->ageing_time = BR_DEFAULT_AGEING_TIME;
|
br->bridge_ageing_time = br->ageing_time = BR_DEFAULT_AGEING_TIME;
|
||||||
|
@ -9,7 +9,7 @@ Subject: [PATCH] net/dsa/mv88e6xxx: disable ATU violation
|
|||||||
|
|
||||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
@@ -3482,6 +3482,9 @@ static int mv88e6xxx_setup_port(struct m
|
@@ -3492,6 +3492,9 @@ static int mv88e6xxx_setup_port(struct m
|
||||||
else
|
else
|
||||||
reg = 1 << port;
|
reg = 1 << port;
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
*/
|
*/
|
||||||
--- a/include/linux/skbuff.h
|
--- a/include/linux/skbuff.h
|
||||||
+++ b/include/linux/skbuff.h
|
+++ b/include/linux/skbuff.h
|
||||||
@@ -3060,6 +3060,10 @@ static inline int pskb_trim(struct sk_bu
|
@@ -3071,6 +3071,10 @@ static inline int pskb_trim(struct sk_bu
|
||||||
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
|
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
/**
|
/**
|
||||||
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
|
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
|
||||||
* @skb: buffer to alter
|
* @skb: buffer to alter
|
||||||
@@ -3209,16 +3213,6 @@ static inline struct sk_buff *dev_alloc_
|
@@ -3220,16 +3224,6 @@ static inline struct sk_buff *dev_alloc_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -396,7 +396,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
--- a/net/ipv4/route.c
|
--- a/net/ipv4/route.c
|
||||||
+++ b/net/ipv4/route.c
|
+++ b/net/ipv4/route.c
|
||||||
@@ -380,6 +380,9 @@ static struct pernet_operations ip_rt_pr
|
@@ -381,6 +381,9 @@ static struct pernet_operations ip_rt_pr
|
||||||
|
|
||||||
static int __init ip_rt_proc_init(void)
|
static int __init ip_rt_proc_init(void)
|
||||||
{
|
{
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: Steve French <stfrench@microsoft.com>
|
|||||||
|
|
||||||
--- a/fs/smb/server/oplock.c
|
--- a/fs/smb/server/oplock.c
|
||||||
+++ b/fs/smb/server/oplock.c
|
+++ b/fs/smb/server/oplock.c
|
||||||
@@ -1214,6 +1214,12 @@ int smb_grant_oplock(struct ksmbd_work *
|
@@ -1219,6 +1219,12 @@ int smb_grant_oplock(struct ksmbd_work *
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
@@ -3378,6 +3380,7 @@ static int packet_create(struct net *net
|
@@ -3377,6 +3379,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;
|
||||||
@@ -4013,6 +4016,16 @@ packet_setsockopt(struct socket *sock, i
|
@@ -4012,6 +4015,16 @@ packet_setsockopt(struct socket *sock, i
|
||||||
WRITE_ONCE(po->xmit, val ? packet_direct_xmit : dev_queue_xmit);
|
WRITE_ONCE(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;
|
||||||
}
|
}
|
||||||
@@ -4069,6 +4082,13 @@ static int packet_getsockopt(struct sock
|
@@ -4068,6 +4081,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;
|
||||||
|
@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/include/linux/skbuff.h
|
--- a/include/linux/skbuff.h
|
||||||
+++ b/include/linux/skbuff.h
|
+++ b/include/linux/skbuff.h
|
||||||
@@ -3027,7 +3027,7 @@ static inline int pskb_network_may_pull(
|
@@ -3038,7 +3038,7 @@ static inline int pskb_network_may_pull(
|
||||||
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
|
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
|
||||||
*/
|
*/
|
||||||
#ifndef NET_SKB_PAD
|
#ifndef NET_SKB_PAD
|
||||||
|
@ -110,7 +110,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
--- a/net/ipv6/route.c
|
--- a/net/ipv6/route.c
|
||||||
+++ b/net/ipv6/route.c
|
+++ b/net/ipv6/route.c
|
||||||
@@ -97,6 +97,8 @@ static int ip6_pkt_discard(struct sk_bu
|
@@ -98,6 +98,8 @@ static int ip6_pkt_discard(struct sk_bu
|
||||||
static int ip6_pkt_discard_out(struct net *net, struct sock *sk, struct sk_buff *skb);
|
static int ip6_pkt_discard_out(struct net *net, struct sock *sk, struct sk_buff *skb);
|
||||||
static int ip6_pkt_prohibit(struct sk_buff *skb);
|
static int ip6_pkt_prohibit(struct sk_buff *skb);
|
||||||
static int ip6_pkt_prohibit_out(struct net *net, struct sock *sk, struct sk_buff *skb);
|
static int ip6_pkt_prohibit_out(struct net *net, struct sock *sk, struct sk_buff *skb);
|
||||||
@ -119,7 +119,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
static void ip6_link_failure(struct sk_buff *skb);
|
static void ip6_link_failure(struct sk_buff *skb);
|
||||||
static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
|
static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
|
||||||
struct sk_buff *skb, u32 mtu,
|
struct sk_buff *skb, u32 mtu,
|
||||||
@@ -317,6 +319,18 @@ static const struct rt6_info ip6_prohibi
|
@@ -318,6 +320,18 @@ static const struct rt6_info ip6_prohibi
|
||||||
.rt6i_flags = (RTF_REJECT | RTF_NONEXTHOP),
|
.rt6i_flags = (RTF_REJECT | RTF_NONEXTHOP),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
static const struct rt6_info ip6_blk_hole_entry_template = {
|
static const struct rt6_info ip6_blk_hole_entry_template = {
|
||||||
.dst = {
|
.dst = {
|
||||||
.__refcnt = ATOMIC_INIT(1),
|
.__refcnt = ATOMIC_INIT(1),
|
||||||
@@ -1039,6 +1053,7 @@ static const int fib6_prop[RTN_MAX + 1]
|
@@ -1040,6 +1054,7 @@ static const int fib6_prop[RTN_MAX + 1]
|
||||||
[RTN_BLACKHOLE] = -EINVAL,
|
[RTN_BLACKHOLE] = -EINVAL,
|
||||||
[RTN_UNREACHABLE] = -EHOSTUNREACH,
|
[RTN_UNREACHABLE] = -EHOSTUNREACH,
|
||||||
[RTN_PROHIBIT] = -EACCES,
|
[RTN_PROHIBIT] = -EACCES,
|
||||||
@ -146,7 +146,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
[RTN_THROW] = -EAGAIN,
|
[RTN_THROW] = -EAGAIN,
|
||||||
[RTN_NAT] = -EINVAL,
|
[RTN_NAT] = -EINVAL,
|
||||||
[RTN_XRESOLVE] = -EINVAL,
|
[RTN_XRESOLVE] = -EINVAL,
|
||||||
@@ -1074,6 +1089,10 @@ static void ip6_rt_init_dst_reject(struc
|
@@ -1075,6 +1090,10 @@ static void ip6_rt_init_dst_reject(struc
|
||||||
rt->dst.output = ip6_pkt_prohibit_out;
|
rt->dst.output = ip6_pkt_prohibit_out;
|
||||||
rt->dst.input = ip6_pkt_prohibit;
|
rt->dst.input = ip6_pkt_prohibit;
|
||||||
break;
|
break;
|
||||||
@ -157,7 +157,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
case RTN_THROW:
|
case RTN_THROW:
|
||||||
case RTN_UNREACHABLE:
|
case RTN_UNREACHABLE:
|
||||||
default:
|
default:
|
||||||
@@ -4540,6 +4559,17 @@ static int ip6_pkt_prohibit_out(struct n
|
@@ -4544,6 +4563,17 @@ static int ip6_pkt_prohibit_out(struct n
|
||||||
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
/*
|
/*
|
||||||
* Allocate a dst for local (unicast / anycast) address.
|
* Allocate a dst for local (unicast / anycast) address.
|
||||||
*/
|
*/
|
||||||
@@ -5033,7 +5063,8 @@ static int rtm_to_fib6_config(struct sk_
|
@@ -5037,7 +5067,8 @@ static int rtm_to_fib6_config(struct sk_
|
||||||
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
||||||
rtm->rtm_type == RTN_BLACKHOLE ||
|
rtm->rtm_type == RTN_BLACKHOLE ||
|
||||||
rtm->rtm_type == RTN_PROHIBIT ||
|
rtm->rtm_type == RTN_PROHIBIT ||
|
||||||
@ -185,7 +185,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
cfg->fc_flags |= RTF_REJECT;
|
cfg->fc_flags |= RTF_REJECT;
|
||||||
|
|
||||||
if (rtm->rtm_type == RTN_LOCAL)
|
if (rtm->rtm_type == RTN_LOCAL)
|
||||||
@@ -6280,6 +6311,8 @@ static int ip6_route_dev_notify(struct n
|
@@ -6284,6 +6315,8 @@ static int ip6_route_dev_notify(struct n
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
@ -194,7 +194,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
#endif
|
#endif
|
||||||
@@ -6291,6 +6324,7 @@ static int ip6_route_dev_notify(struct n
|
@@ -6295,6 +6328,7 @@ static int ip6_route_dev_notify(struct n
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
||||||
@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -6482,6 +6516,8 @@ static int __net_init ip6_route_net_init
|
@@ -6486,6 +6520,8 @@ static int __net_init ip6_route_net_init
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
net->ipv6.fib6_has_custom_rules = false;
|
net->ipv6.fib6_has_custom_rules = false;
|
||||||
@ -211,7 +211,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
|
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
|
||||||
sizeof(*net->ipv6.ip6_prohibit_entry),
|
sizeof(*net->ipv6.ip6_prohibit_entry),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
@@ -6492,11 +6528,21 @@ static int __net_init ip6_route_net_init
|
@@ -6496,11 +6532,21 @@ static int __net_init ip6_route_net_init
|
||||||
ip6_template_metrics, true);
|
ip6_template_metrics, true);
|
||||||
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->rt6i_uncached);
|
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->rt6i_uncached);
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
||||||
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
||||||
ip6_template_metrics, true);
|
ip6_template_metrics, true);
|
||||||
@@ -6523,6 +6569,8 @@ out:
|
@@ -6527,6 +6573,8 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
@ -243,7 +243,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
out_ip6_prohibit_entry:
|
out_ip6_prohibit_entry:
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
out_ip6_null_entry:
|
out_ip6_null_entry:
|
||||||
@@ -6542,6 +6590,7 @@ static void __net_exit ip6_route_net_exi
|
@@ -6546,6 +6594,7 @@ static void __net_exit ip6_route_net_exi
|
||||||
kfree(net->ipv6.ip6_null_entry);
|
kfree(net->ipv6.ip6_null_entry);
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
@ -251,7 +251,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
kfree(net->ipv6.ip6_blk_hole_entry);
|
kfree(net->ipv6.ip6_blk_hole_entry);
|
||||||
#endif
|
#endif
|
||||||
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
||||||
@@ -6625,6 +6674,9 @@ void __init ip6_route_init_special_entri
|
@@ -6629,6 +6678,9 @@ void __init ip6_route_init_special_entri
|
||||||
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
||||||
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4722,6 +4722,8 @@ static int mtk_probe(struct platform_dev
|
@@ -4939,6 +4939,8 @@ static int mtk_probe(struct platform_dev
|
||||||
* for NAPI to work
|
* for NAPI to work
|
||||||
*/
|
*/
|
||||||
init_dummy_netdev(ð->dummy_dev);
|
init_dummy_netdev(ð->dummy_dev);
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -1562,12 +1562,28 @@ static void mtk_wake_queue(struct mtk_et
|
@@ -1561,12 +1561,28 @@ static void mtk_wake_queue(struct mtk_et
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
bool gso = false;
|
bool gso = false;
|
||||||
int tx_num;
|
int tx_num;
|
||||||
|
|
||||||
@@ -1589,6 +1605,18 @@ static netdev_tx_t mtk_start_xmit(struct
|
@@ -1588,6 +1604,18 @@ static netdev_tx_t mtk_start_xmit(struct
|
||||||
return NETDEV_TX_BUSY;
|
return NETDEV_TX_BUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
/* TSO: fill MSS info in tcp checksum field */
|
/* TSO: fill MSS info in tcp checksum field */
|
||||||
if (skb_is_gso(skb)) {
|
if (skb_is_gso(skb)) {
|
||||||
if (skb_cow_head(skb, 0)) {
|
if (skb_cow_head(skb, 0)) {
|
||||||
@@ -1604,8 +1632,14 @@ static netdev_tx_t mtk_start_xmit(struct
|
@@ -1603,8 +1631,14 @@ static netdev_tx_t mtk_start_xmit(struct
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -709,6 +709,7 @@ static void mtk_mac_link_up(struct phyli
|
@@ -765,6 +765,7 @@ static void mtk_mac_link_up(struct phyli
|
||||||
MAC_MCR_FORCE_RX_FC);
|
MAC_MCR_FORCE_RX_FC);
|
||||||
|
|
||||||
/* Configure speed */
|
/* Configure speed */
|
||||||
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
switch (speed) {
|
switch (speed) {
|
||||||
case SPEED_2500:
|
case SPEED_2500:
|
||||||
case SPEED_1000:
|
case SPEED_1000:
|
||||||
@@ -3203,6 +3204,9 @@ found:
|
@@ -3346,6 +3347,9 @@ found:
|
||||||
if (dp->index >= MTK_QDMA_NUM_QUEUES)
|
if (dp->index >= MTK_QDMA_NUM_QUEUES)
|
||||||
return NOTIFY_DONE;
|
return NOTIFY_DONE;
|
||||||
|
|
||||||
|
@ -387,7 +387,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
err_phy:
|
err_phy:
|
||||||
@@ -676,10 +740,13 @@ static void mtk_mac_link_down(struct phy
|
@@ -675,10 +739,13 @@ static void mtk_mac_link_down(struct phy
|
||||||
{
|
{
|
||||||
struct mtk_mac *mac = container_of(config, struct mtk_mac,
|
struct mtk_mac *mac = container_of(config, struct mtk_mac,
|
||||||
phylink_config);
|
phylink_config);
|
||||||
@ -404,7 +404,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void mtk_set_queue_speed(struct mtk_eth *eth, unsigned int idx,
|
static void mtk_set_queue_speed(struct mtk_eth *eth, unsigned int idx,
|
||||||
@@ -751,13 +818,11 @@ static void mtk_set_queue_speed(struct m
|
@@ -750,13 +817,11 @@ static void mtk_set_queue_speed(struct m
|
||||||
mtk_w32(eth, val, soc->reg_map->qdma.qtx_sch + ofs);
|
mtk_w32(eth, val, soc->reg_map->qdma.qtx_sch + ofs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -422,7 +422,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
u32 mcr;
|
u32 mcr;
|
||||||
|
|
||||||
mcr = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
|
mcr = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
|
||||||
@@ -791,6 +856,55 @@ static void mtk_mac_link_up(struct phyli
|
@@ -790,6 +855,55 @@ static void mtk_mac_link_up(struct phyli
|
||||||
mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
|
mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -478,7 +478,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
static const struct phylink_mac_ops mtk_phylink_ops = {
|
static const struct phylink_mac_ops mtk_phylink_ops = {
|
||||||
.validate = phylink_generic_validate,
|
.validate = phylink_generic_validate,
|
||||||
.mac_select_pcs = mtk_mac_select_pcs,
|
.mac_select_pcs = mtk_mac_select_pcs,
|
||||||
@@ -4612,8 +4726,21 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4614,8 +4728,21 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
phy_interface_zero(mac->phylink_config.supported_interfaces);
|
phy_interface_zero(mac->phylink_config.supported_interfaces);
|
||||||
__set_bit(PHY_INTERFACE_MODE_INTERNAL,
|
__set_bit(PHY_INTERFACE_MODE_INTERNAL,
|
||||||
mac->phylink_config.supported_interfaces);
|
mac->phylink_config.supported_interfaces);
|
||||||
@ -500,7 +500,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
phylink = phylink_create(&mac->phylink_config,
|
phylink = phylink_create(&mac->phylink_config,
|
||||||
of_fwnode_handle(mac->of_node),
|
of_fwnode_handle(mac->of_node),
|
||||||
phy_mode, &mtk_phylink_ops);
|
phy_mode, &mtk_phylink_ops);
|
||||||
@@ -4806,6 +4933,13 @@ static int mtk_probe(struct platform_dev
|
@@ -4808,6 +4935,13 @@ static int mtk_probe(struct platform_dev
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
@ -157,7 +157,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
void netif_napi_add_weight(struct net_device *dev, struct napi_struct *napi,
|
void netif_napi_add_weight(struct net_device *dev, struct napi_struct *napi,
|
||||||
int (*poll)(struct napi_struct *, int), int weight)
|
int (*poll)(struct napi_struct *, int), int weight)
|
||||||
{
|
{
|
||||||
@@ -11141,6 +11212,9 @@ static int dev_cpu_dead(unsigned int old
|
@@ -11142,6 +11213,9 @@ static int dev_cpu_dead(unsigned int old
|
||||||
raise_softirq_irqoff(NET_TX_SOFTIRQ);
|
raise_softirq_irqoff(NET_TX_SOFTIRQ);
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
#ifdef CONFIG_RPS
|
#ifdef CONFIG_RPS
|
||||||
remsd = oldsd->rps_ipi_list;
|
remsd = oldsd->rps_ipi_list;
|
||||||
oldsd->rps_ipi_list = NULL;
|
oldsd->rps_ipi_list = NULL;
|
||||||
@@ -11453,6 +11527,7 @@ static int __init net_dev_init(void)
|
@@ -11454,6 +11528,7 @@ static int __init net_dev_init(void)
|
||||||
INIT_CSD(&sd->defer_csd, trigger_rx_softirq, sd);
|
INIT_CSD(&sd->defer_csd, trigger_rx_softirq, sd);
|
||||||
spin_lock_init(&sd->defer_lock);
|
spin_lock_init(&sd->defer_lock);
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
|||||||
|
|
||||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
@@ -6990,6 +6990,7 @@ static int mv88e6xxx_register_switch(str
|
@@ -7032,6 +7032,7 @@ static int mv88e6xxx_register_switch(str
|
||||||
ds->ops = &mv88e6xxx_switch_ops;
|
ds->ops = &mv88e6xxx_switch_ops;
|
||||||
ds->ageing_time_min = chip->info->age_time_coeff;
|
ds->ageing_time_min = chip->info->age_time_coeff;
|
||||||
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
||||||
|
@ -42,7 +42,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
#define MTK_UART_IER_XOFFI 0x20 /* Enable XOFF character interrupt */
|
#define MTK_UART_IER_XOFFI 0x20 /* Enable XOFF character interrupt */
|
||||||
#define MTK_UART_IER_RTSI 0x40 /* Enable RTS Modem status interrupt */
|
#define MTK_UART_IER_RTSI 0x40 /* Enable RTS Modem status interrupt */
|
||||||
#define MTK_UART_IER_CTSI 0x80 /* Enable CTS Modem status interrupt */
|
#define MTK_UART_IER_CTSI 0x80 /* Enable CTS Modem status interrupt */
|
||||||
@@ -418,13 +418,12 @@ static int __maybe_unused mtk8250_runtim
|
@@ -422,13 +422,12 @@ static int __maybe_unused mtk8250_runtim
|
||||||
struct mtk8250_data *data = dev_get_drvdata(dev);
|
struct mtk8250_data *data = dev_get_drvdata(dev);
|
||||||
struct uart_8250_port *up = serial8250_get_port(data->line);
|
struct uart_8250_port *up = serial8250_get_port(data->line);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/usb/qmi_wwan.c
|
--- a/drivers/net/usb/qmi_wwan.c
|
||||||
+++ b/drivers/net/usb/qmi_wwan.c
|
+++ b/drivers/net/usb/qmi_wwan.c
|
||||||
@@ -1430,6 +1430,9 @@ static const struct usb_device_id produc
|
@@ -1433,6 +1433,9 @@ static const struct usb_device_id produc
|
||||||
{QMI_FIXED_INTF(0x2692, 0x9025, 4)}, /* Cellient MPL200 (rebranded Qualcomm 05c6:9025) */
|
{QMI_FIXED_INTF(0x2692, 0x9025, 4)}, /* Cellient MPL200 (rebranded Qualcomm 05c6:9025) */
|
||||||
{QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 */
|
{QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 */
|
||||||
{QMI_QUIRK_SET_DTR(0x33f8, 0x0104, 4)}, /* Rolling RW101 RMNET */
|
{QMI_QUIRK_SET_DTR(0x33f8, 0x0104, 4)}, /* Rolling RW101 RMNET */
|
||||||
|
@ -31,7 +31,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
help
|
help
|
||||||
--- a/init/main.c
|
--- a/init/main.c
|
||||||
+++ b/init/main.c
|
+++ b/init/main.c
|
||||||
@@ -612,6 +612,29 @@ static inline void setup_nr_cpu_ids(void
|
@@ -611,6 +611,29 @@ static inline void setup_nr_cpu_ids(void
|
||||||
static inline void smp_prepare_cpus(unsigned int maxcpus) { }
|
static inline void smp_prepare_cpus(unsigned int maxcpus) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
/*
|
/*
|
||||||
* We need to store the untouched command line for future reference.
|
* We need to store the untouched command line for future reference.
|
||||||
* We also need to store the touched command line since the parameter
|
* We also need to store the touched command line since the parameter
|
||||||
@@ -961,6 +984,7 @@ asmlinkage __visible void __init __no_sa
|
@@ -960,6 +983,7 @@ asmlinkage __visible void __init __no_sa
|
||||||
pr_notice("%s", linux_banner);
|
pr_notice("%s", linux_banner);
|
||||||
early_security_init();
|
early_security_init();
|
||||||
setup_arch(&command_line);
|
setup_arch(&command_line);
|
||||||
|
@ -11,7 +11,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
|
|||||||
|
|
||||||
--- a/drivers/spi/spi.c
|
--- a/drivers/spi/spi.c
|
||||||
+++ b/drivers/spi/spi.c
|
+++ b/drivers/spi/spi.c
|
||||||
@@ -1385,6 +1385,70 @@ static int spi_transfer_wait(struct spi_
|
@@ -1389,6 +1389,70 @@ static int spi_transfer_wait(struct spi_
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
|
|||||||
static void _spi_transfer_delay_ns(u32 ns)
|
static void _spi_transfer_delay_ns(u32 ns)
|
||||||
{
|
{
|
||||||
if (!ns)
|
if (!ns)
|
||||||
@@ -2223,6 +2287,75 @@ void spi_flush_queue(struct spi_controll
|
@@ -2227,6 +2291,75 @@ void spi_flush_queue(struct spi_controll
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#if defined(CONFIG_OF)
|
#if defined(CONFIG_OF)
|
||||||
@ -158,7 +158,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
|
|||||||
static int of_spi_parse_dt(struct spi_controller *ctlr, struct spi_device *spi,
|
static int of_spi_parse_dt(struct spi_controller *ctlr, struct spi_device *spi,
|
||||||
struct device_node *nc)
|
struct device_node *nc)
|
||||||
{
|
{
|
||||||
@@ -2341,6 +2474,10 @@ of_register_spi_device(struct spi_contro
|
@@ -2345,6 +2478,10 @@ of_register_spi_device(struct spi_contro
|
||||||
if (rc)
|
if (rc)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/phy/Kconfig
|
--- a/drivers/net/phy/Kconfig
|
||||||
+++ b/drivers/net/phy/Kconfig
|
+++ b/drivers/net/phy/Kconfig
|
||||||
@@ -381,6 +381,12 @@ config ROCKCHIP_PHY
|
@@ -389,6 +389,12 @@ config ROCKCHIP_PHY
|
||||||
help
|
help
|
||||||
Currently supports the integrated Ethernet PHY.
|
Currently supports the integrated Ethernet PHY.
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
L: linux-i2c@vger.kernel.org
|
L: linux-i2c@vger.kernel.org
|
||||||
--- a/drivers/net/phy/Kconfig
|
--- a/drivers/net/phy/Kconfig
|
||||||
+++ b/drivers/net/phy/Kconfig
|
+++ b/drivers/net/phy/Kconfig
|
||||||
@@ -306,6 +306,18 @@ config MEDIATEK_GE_PHY
|
@@ -314,6 +314,18 @@ config MEDIATEK_GE_PHY
|
||||||
help
|
help
|
||||||
Supports the MediaTek Gigabit Ethernet PHYs.
|
Supports the MediaTek Gigabit Ethernet PHYs.
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
|
|
||||||
--- a/drivers/net/phy/Kconfig
|
--- a/drivers/net/phy/Kconfig
|
||||||
+++ b/drivers/net/phy/Kconfig
|
+++ b/drivers/net/phy/Kconfig
|
||||||
@@ -318,6 +318,13 @@ config MEDIATEK_GE_SOC_PHY
|
@@ -326,6 +326,13 @@ config MEDIATEK_GE_SOC_PHY
|
||||||
present in the SoCs efuse and will dynamically calibrate VCM
|
present in the SoCs efuse and will dynamically calibrate VCM
|
||||||
(common-mode voltage) during startup.
|
(common-mode voltage) during startup.
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
|
--- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
|
+++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
|
||||||
@@ -471,6 +471,26 @@
|
@@ -476,6 +476,26 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||||||
|
|
||||||
--- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
|
--- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
|
+++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
|
||||||
@@ -352,6 +352,16 @@
|
@@ -357,6 +357,16 @@
|
||||||
clock-names = "core";
|
clock-names = "core";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||||||
cryptobam: dma-controller@704000 {
|
cryptobam: dma-controller@704000 {
|
||||||
compatible = "qcom,bam-v1.7.0";
|
compatible = "qcom,bam-v1.7.0";
|
||||||
reg = <0x0 0x00704000 0x0 0x20000>;
|
reg = <0x0 0x00704000 0x0 0x20000>;
|
||||||
@@ -1037,6 +1047,113 @@
|
@@ -1042,6 +1052,113 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/include/linux/if_bridge.h
|
--- a/include/linux/if_bridge.h
|
||||||
+++ b/include/linux/if_bridge.h
|
+++ b/include/linux/if_bridge.h
|
||||||
@@ -69,6 +69,9 @@ void brioctl_set(int (*hook)(struct net
|
@@ -70,6 +70,9 @@ void brioctl_set(int (*hook)(struct net
|
||||||
void __user *uarg));
|
void __user *uarg));
|
||||||
int br_ioctl_call(struct net *net, struct net_bridge *br, unsigned int cmd,
|
int br_ioctl_call(struct net *net, struct net_bridge *br, unsigned int cmd,
|
||||||
struct ifreq *ifr, void __user *uarg);
|
struct ifreq *ifr, void __user *uarg);
|
||||||
@ -8,9 +8,9 @@
|
|||||||
+ struct rtnl_link_stats64 *nlstats); */
|
+ struct rtnl_link_stats64 *nlstats); */
|
||||||
+extern bool br_is_hairpin_enabled(struct net_device *dev);
|
+extern bool br_is_hairpin_enabled(struct net_device *dev);
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_BRIDGE) && IS_ENABLED(CONFIG_BRIDGE_IGMP_SNOOPING)
|
extern void br_dev_update_stats(struct net_device *dev,
|
||||||
int br_multicast_list_adjacent(struct net_device *dev,
|
struct rtnl_link_stats64 *nlstats);
|
||||||
@@ -211,4 +214,42 @@ static inline clock_t br_get_ageing_time
|
@@ -215,4 +218,42 @@ static inline clock_t br_get_ageing_time
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -55,7 +55,7 @@
|
|||||||
#endif
|
#endif
|
||||||
--- a/include/linux/if_vlan.h
|
--- a/include/linux/if_vlan.h
|
||||||
+++ b/include/linux/if_vlan.h
|
+++ b/include/linux/if_vlan.h
|
||||||
@@ -227,7 +227,28 @@ extern void vlan_vids_del_by_dev(struct
|
@@ -235,7 +235,28 @@ extern void vlan_vids_del_by_dev(struct
|
||||||
|
|
||||||
extern bool vlan_uses_dev(const struct net_device *dev);
|
extern bool vlan_uses_dev(const struct net_device *dev);
|
||||||
|
|
||||||
@ -99,7 +99,7 @@
|
|||||||
|
|
||||||
--- a/include/net/addrconf.h
|
--- a/include/net/addrconf.h
|
||||||
+++ b/include/net/addrconf.h
|
+++ b/include/net/addrconf.h
|
||||||
@@ -506,4 +506,9 @@ int if6_proc_init(void);
|
@@ -518,4 +518,9 @@ int if6_proc_init(void);
|
||||||
void if6_proc_exit(void);
|
void if6_proc_exit(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -157,7 +157,7 @@
|
|||||||
void fib_del_ifaddr(struct in_ifaddr *, struct in_ifaddr *);
|
void fib_del_ifaddr(struct in_ifaddr *, struct in_ifaddr *);
|
||||||
--- a/net/bridge/br_private.h
|
--- a/net/bridge/br_private.h
|
||||||
+++ b/net/bridge/br_private.h
|
+++ b/net/bridge/br_private.h
|
||||||
@@ -2172,4 +2172,9 @@ void br_do_proxy_suppress_arp(struct sk_
|
@@ -2193,4 +2193,9 @@ void br_do_proxy_suppress_arp(struct sk_
|
||||||
void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br,
|
void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br,
|
||||||
u16 vid, struct net_bridge_port *p, struct nd_msg *msg);
|
u16 vid, struct net_bridge_port *p, struct nd_msg *msg);
|
||||||
struct nd_msg *br_is_nd_neigh_msg(struct sk_buff *skb, struct nd_msg *m);
|
struct nd_msg *br_is_nd_neigh_msg(struct sk_buff *skb, struct nd_msg *m);
|
||||||
@ -169,7 +169,7 @@
|
|||||||
#endif
|
#endif
|
||||||
--- a/net/8021q/vlan_core.c
|
--- a/net/8021q/vlan_core.c
|
||||||
+++ b/net/8021q/vlan_core.c
|
+++ b/net/8021q/vlan_core.c
|
||||||
@@ -548,4 +548,52 @@ static int __init vlan_offload_init(void
|
@@ -555,4 +555,52 @@ static int __init vlan_offload_init(void
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,7 +224,7 @@
|
|||||||
fs_initcall(vlan_offload_init);
|
fs_initcall(vlan_offload_init);
|
||||||
--- a/net/bridge/br_fdb.c
|
--- a/net/bridge/br_fdb.c
|
||||||
+++ b/net/bridge/br_fdb.c
|
+++ b/net/bridge/br_fdb.c
|
||||||
@@ -33,6 +33,35 @@ static const struct rhashtable_params br
|
@@ -34,6 +34,35 @@ static const struct rhashtable_params br
|
||||||
|
|
||||||
static struct kmem_cache *br_fdb_cache __read_mostly;
|
static struct kmem_cache *br_fdb_cache __read_mostly;
|
||||||
|
|
||||||
@ -260,9 +260,9 @@
|
|||||||
int __init br_fdb_init(void)
|
int __init br_fdb_init(void)
|
||||||
{
|
{
|
||||||
br_fdb_cache = kmem_cache_create("bridge_fdb_cache",
|
br_fdb_cache = kmem_cache_create("bridge_fdb_cache",
|
||||||
@@ -185,7 +214,26 @@ static void fdb_notify(struct net_bridge
|
@@ -188,7 +217,26 @@ static void fdb_notify(struct net_bridge
|
||||||
struct sk_buff *skb;
|
|
||||||
int err = -ENOBUFS;
|
br_offload_fdb_update(fdb);
|
||||||
|
|
||||||
- if (swdev_notify)
|
- if (swdev_notify)
|
||||||
+ /* QCA NSS ECM support - Start */
|
+ /* QCA NSS ECM support - Start */
|
||||||
@ -288,7 +288,7 @@
|
|||||||
br_switchdev_fdb_notify(br, fdb, type);
|
br_switchdev_fdb_notify(br, fdb, type);
|
||||||
|
|
||||||
skb = nlmsg_new(fdb_nlmsg_size(), GFP_ATOMIC);
|
skb = nlmsg_new(fdb_nlmsg_size(), GFP_ATOMIC);
|
||||||
@@ -520,6 +568,7 @@ void br_fdb_cleanup(struct work_struct *
|
@@ -525,6 +573,7 @@ void br_fdb_cleanup(struct work_struct *
|
||||||
unsigned long delay = hold_time(br);
|
unsigned long delay = hold_time(br);
|
||||||
unsigned long work_delay = delay;
|
unsigned long work_delay = delay;
|
||||||
unsigned long now = jiffies;
|
unsigned long now = jiffies;
|
||||||
@ -296,7 +296,7 @@
|
|||||||
|
|
||||||
/* this part is tricky, in order to avoid blocking learning and
|
/* this part is tricky, in order to avoid blocking learning and
|
||||||
* consequently forwarding, we rely on rcu to delete objects with
|
* consequently forwarding, we rely on rcu to delete objects with
|
||||||
@@ -546,8 +595,15 @@ void br_fdb_cleanup(struct work_struct *
|
@@ -551,8 +600,15 @@ void br_fdb_cleanup(struct work_struct *
|
||||||
work_delay = min(work_delay, this_timer - now);
|
work_delay = min(work_delay, this_timer - now);
|
||||||
} else {
|
} else {
|
||||||
spin_lock_bh(&br->hash_lock);
|
spin_lock_bh(&br->hash_lock);
|
||||||
@ -313,7 +313,7 @@
|
|||||||
spin_unlock_bh(&br->hash_lock);
|
spin_unlock_bh(&br->hash_lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -879,6 +935,12 @@ void br_fdb_update(struct net_bridge *br
|
@@ -884,6 +940,12 @@ void br_fdb_update(struct net_bridge *br
|
||||||
&fdb->flags)))
|
&fdb->flags)))
|
||||||
clear_bit(BR_FDB_ADDED_BY_EXT_LEARN,
|
clear_bit(BR_FDB_ADDED_BY_EXT_LEARN,
|
||||||
&fdb->flags);
|
&fdb->flags);
|
||||||
@ -326,7 +326,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(test_bit(BR_FDB_ADDED_BY_USER, &flags)))
|
if (unlikely(test_bit(BR_FDB_ADDED_BY_USER, &flags)))
|
||||||
@@ -1466,3 +1528,62 @@ void br_fdb_clear_offload(const struct n
|
@@ -1471,3 +1533,62 @@ void br_fdb_clear_offload(const struct n
|
||||||
spin_unlock_bh(&p->br->hash_lock);
|
spin_unlock_bh(&p->br->hash_lock);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(br_fdb_clear_offload);
|
EXPORT_SYMBOL_GPL(br_fdb_clear_offload);
|
||||||
@ -391,9 +391,9 @@
|
|||||||
+
|
+
|
||||||
--- a/net/bridge/br_if.c
|
--- a/net/bridge/br_if.c
|
||||||
+++ b/net/bridge/br_if.c
|
+++ b/net/bridge/br_if.c
|
||||||
@@ -26,6 +26,12 @@
|
@@ -27,6 +27,12 @@
|
||||||
|
|
||||||
#include "br_private.h"
|
#include "br_private.h"
|
||||||
|
#include "br_private_offload.h"
|
||||||
|
|
||||||
+/* QCA NSS ECM support - Start */
|
+/* QCA NSS ECM support - Start */
|
||||||
+/* Hook for external forwarding logic */
|
+/* Hook for external forwarding logic */
|
||||||
@ -404,7 +404,7 @@
|
|||||||
/*
|
/*
|
||||||
* Determine initial path cost based on speed.
|
* Determine initial path cost based on speed.
|
||||||
* using recommendations from 802.1d standard
|
* using recommendations from 802.1d standard
|
||||||
@@ -697,6 +703,8 @@ int br_add_if(struct net_bridge *br, str
|
@@ -698,6 +704,8 @@ int br_add_if(struct net_bridge *br, str
|
||||||
|
|
||||||
kobject_uevent(&p->kobj, KOBJ_ADD);
|
kobject_uevent(&p->kobj, KOBJ_ADD);
|
||||||
|
|
||||||
@ -413,7 +413,7 @@
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err6:
|
err6:
|
||||||
@@ -732,6 +740,8 @@ int br_del_if(struct net_bridge *br, str
|
@@ -733,6 +741,8 @@ int br_del_if(struct net_bridge *br, str
|
||||||
if (!p || p->br != br)
|
if (!p || p->br != br)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -422,7 +422,7 @@
|
|||||||
/* Since more than one interface can be attached to a bridge,
|
/* Since more than one interface can be attached to a bridge,
|
||||||
* there still maybe an alternate path for netconsole to use;
|
* there still maybe an alternate path for netconsole to use;
|
||||||
* therefore there is no reason for a NETDEV_RELEASE event.
|
* therefore there is no reason for a NETDEV_RELEASE event.
|
||||||
@@ -775,3 +785,96 @@ bool br_port_flag_is_set(const struct ne
|
@@ -801,3 +811,96 @@ bool br_port_flag_is_set(const struct ne
|
||||||
return p->flags & flag;
|
return p->flags & flag;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(br_port_flag_is_set);
|
EXPORT_SYMBOL_GPL(br_port_flag_is_set);
|
||||||
@ -521,7 +521,7 @@
|
|||||||
+/* QCA NSS ECM support - End */
|
+/* QCA NSS ECM support - End */
|
||||||
--- a/net/core/neighbour.c
|
--- a/net/core/neighbour.c
|
||||||
+++ b/net/core/neighbour.c
|
+++ b/net/core/neighbour.c
|
||||||
@@ -1268,6 +1268,22 @@ static void neigh_update_hhs(struct neig
|
@@ -1275,6 +1275,22 @@ static void neigh_update_hhs(struct neig
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -544,7 +544,7 @@
|
|||||||
/* Generic update routine.
|
/* Generic update routine.
|
||||||
-- lladdr is new lladdr or NULL, if it is not supplied.
|
-- lladdr is new lladdr or NULL, if it is not supplied.
|
||||||
-- new is new state.
|
-- new is new state.
|
||||||
@@ -1296,6 +1312,7 @@ static int __neigh_update(struct neighbo
|
@@ -1303,6 +1319,7 @@ static int __neigh_update(struct neighbo
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
int err, notify = 0;
|
int err, notify = 0;
|
||||||
u8 old;
|
u8 old;
|
||||||
@ -552,33 +552,29 @@
|
|||||||
|
|
||||||
trace_neigh_update(neigh, lladdr, new, flags, nlmsg_pid);
|
trace_neigh_update(neigh, lladdr, new, flags, nlmsg_pid);
|
||||||
|
|
||||||
@@ -1310,7 +1327,10 @@ static int __neigh_update(struct neighbo
|
@@ -1317,6 +1334,9 @@ static int __neigh_update(struct neighbo
|
||||||
new = old;
|
new = old;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
- if (!(flags & NEIGH_UPDATE_F_ADMIN) &&
|
|
||||||
+
|
+
|
||||||
+ memset(&nmu, 0, sizeof(struct neigh_mac_update)); /* QCA NSS ECM support */
|
+ memset(&nmu, 0, sizeof(struct neigh_mac_update)); /* QCA NSS ECM support */
|
||||||
+
|
+
|
||||||
+ if (!(flags & NEIGH_UPDATE_F_ADMIN) &&
|
if (!(flags & NEIGH_UPDATE_F_ADMIN) &&
|
||||||
(old & (NUD_NOARP | NUD_PERMANENT)))
|
(old & (NUD_NOARP | NUD_PERMANENT)))
|
||||||
goto out;
|
goto out;
|
||||||
|
@@ -1354,6 +1374,11 @@ static int __neigh_update(struct neighbo
|
||||||
@@ -1347,7 +1367,12 @@ static int __neigh_update(struct neighbo
|
|
||||||
- compare new & old
|
- compare new & old
|
||||||
- if they are different, check override flag
|
- if they are different, check override flag
|
||||||
*/
|
*/
|
||||||
- if ((old & NUD_VALID) &&
|
|
||||||
+ /* QCA NSS ECM update - Start */
|
+ /* QCA NSS ECM update - Start */
|
||||||
+ memcpy(nmu.old_mac, neigh->ha, dev->addr_len);
|
+ memcpy(nmu.old_mac, neigh->ha, dev->addr_len);
|
||||||
+ memcpy(nmu.update_mac, lladdr, dev->addr_len);
|
+ memcpy(nmu.update_mac, lladdr, dev->addr_len);
|
||||||
+ /* QCA NSS ECM update - End */
|
+ /* QCA NSS ECM update - End */
|
||||||
+
|
+
|
||||||
+ if ((old & NUD_VALID) &&
|
if ((old & NUD_VALID) &&
|
||||||
!memcmp(lladdr, neigh->ha, dev->addr_len))
|
!memcmp(lladdr, neigh->ha, dev->addr_len))
|
||||||
lladdr = neigh->ha;
|
lladdr = neigh->ha;
|
||||||
} else {
|
@@ -1476,8 +1501,11 @@ out:
|
||||||
@@ -1469,8 +1494,11 @@ out:
|
|
||||||
neigh_update_gc_list(neigh);
|
neigh_update_gc_list(neigh);
|
||||||
if (managed_update)
|
if (managed_update)
|
||||||
neigh_update_managed_list(neigh);
|
neigh_update_managed_list(neigh);
|
||||||
@ -656,7 +652,7 @@
|
|||||||
const struct in6_addr *daddr)
|
const struct in6_addr *daddr)
|
||||||
--- a/net/ipv6/route.c
|
--- a/net/ipv6/route.c
|
||||||
+++ b/net/ipv6/route.c
|
+++ b/net/ipv6/route.c
|
||||||
@@ -3857,6 +3857,9 @@ out_free:
|
@@ -3855,6 +3855,9 @@ out_free:
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -666,7 +662,7 @@
|
|||||||
int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_flags,
|
int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_flags,
|
||||||
struct netlink_ext_ack *extack)
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
@@ -3868,6 +3871,10 @@ int ip6_route_add(struct fib6_config *cf
|
@@ -3866,6 +3869,10 @@ int ip6_route_add(struct fib6_config *cf
|
||||||
return PTR_ERR(rt);
|
return PTR_ERR(rt);
|
||||||
|
|
||||||
err = __ip6_ins_rt(rt, &cfg->fc_nlinfo, extack);
|
err = __ip6_ins_rt(rt, &cfg->fc_nlinfo, extack);
|
||||||
@ -677,7 +673,7 @@
|
|||||||
fib6_info_release(rt);
|
fib6_info_release(rt);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
@@ -3889,6 +3896,9 @@ static int __ip6_del_rt(struct fib6_info
|
@@ -3887,6 +3894,9 @@ static int __ip6_del_rt(struct fib6_info
|
||||||
err = fib6_del(rt, info);
|
err = fib6_del(rt, info);
|
||||||
spin_unlock_bh(&table->tb6_lock);
|
spin_unlock_bh(&table->tb6_lock);
|
||||||
|
|
||||||
@ -687,7 +683,7 @@
|
|||||||
out:
|
out:
|
||||||
fib6_info_release(rt);
|
fib6_info_release(rt);
|
||||||
return err;
|
return err;
|
||||||
@@ -6342,6 +6352,20 @@ static int ip6_route_dev_notify(struct n
|
@@ -6336,6 +6346,20 @@ static int ip6_route_dev_notify(struct n
|
||||||
return NOTIFY_OK;
|
return NOTIFY_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -710,7 +706,7 @@
|
|||||||
*/
|
*/
|
||||||
--- a/net/core/dev.c
|
--- a/net/core/dev.c
|
||||||
+++ b/net/core/dev.c
|
+++ b/net/core/dev.c
|
||||||
@@ -1639,6 +1639,7 @@ const char *netdev_cmd_to_name(enum netd
|
@@ -1654,6 +1654,7 @@ const char *netdev_cmd_to_name(enum netd
|
||||||
N(SVLAN_FILTER_PUSH_INFO) N(SVLAN_FILTER_DROP_INFO)
|
N(SVLAN_FILTER_PUSH_INFO) N(SVLAN_FILTER_DROP_INFO)
|
||||||
N(PRE_CHANGEADDR) N(OFFLOAD_XSTATS_ENABLE) N(OFFLOAD_XSTATS_DISABLE)
|
N(PRE_CHANGEADDR) N(OFFLOAD_XSTATS_ENABLE) N(OFFLOAD_XSTATS_DISABLE)
|
||||||
N(OFFLOAD_XSTATS_REPORT_USED) N(OFFLOAD_XSTATS_REPORT_DELTA)
|
N(OFFLOAD_XSTATS_REPORT_USED) N(OFFLOAD_XSTATS_REPORT_DELTA)
|
||||||
@ -720,7 +716,7 @@
|
|||||||
return "UNKNOWN_NETDEV_EVENT";
|
return "UNKNOWN_NETDEV_EVENT";
|
||||||
--- a/net/ipv6/addrconf.c
|
--- a/net/ipv6/addrconf.c
|
||||||
+++ b/net/ipv6/addrconf.c
|
+++ b/net/ipv6/addrconf.c
|
||||||
@@ -987,6 +987,7 @@ void inet6_ifa_finish_destroy(struct ine
|
@@ -1002,6 +1002,7 @@ void inet6_ifa_finish_destroy(struct ine
|
||||||
|
|
||||||
kfree_rcu(ifp, rcu);
|
kfree_rcu(ifp, rcu);
|
||||||
}
|
}
|
||||||
@ -728,7 +724,7 @@
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
ipv6_link_dev_addr(struct inet6_dev *idev, struct inet6_ifaddr *ifp)
|
ipv6_link_dev_addr(struct inet6_dev *idev, struct inet6_ifaddr *ifp)
|
||||||
@@ -2045,6 +2046,36 @@ struct inet6_ifaddr *ipv6_get_ifaddr(str
|
@@ -2061,6 +2062,36 @@ struct inet6_ifaddr *ipv6_get_ifaddr(str
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -466,7 +466,7 @@
|
|||||||
#endif /* !(__LINUX_IF_PPPOX_H) */
|
#endif /* !(__LINUX_IF_PPPOX_H) */
|
||||||
--- a/include/linux/netdevice.h
|
--- a/include/linux/netdevice.h
|
||||||
+++ b/include/linux/netdevice.h
|
+++ b/include/linux/netdevice.h
|
||||||
@@ -1709,6 +1709,24 @@ enum netdev_priv_flags {
|
@@ -1710,6 +1710,24 @@ enum netdev_priv_flags {
|
||||||
IFF_NO_IP_ALIGN = BIT_ULL(33),
|
IFF_NO_IP_ALIGN = BIT_ULL(33),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -491,16 +491,14 @@
|
|||||||
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
|
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
|
||||||
#define IFF_EBRIDGE IFF_EBRIDGE
|
#define IFF_EBRIDGE IFF_EBRIDGE
|
||||||
#define IFF_BONDING IFF_BONDING
|
#define IFF_BONDING IFF_BONDING
|
||||||
@@ -2051,7 +2069,8 @@ struct net_device {
|
@@ -2053,6 +2071,7 @@ struct net_device {
|
||||||
/* Read-mostly cache-line for fast-path access */
|
/* Read-mostly cache-line for fast-path access */
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
unsigned long long priv_flags;
|
unsigned long long priv_flags;
|
||||||
- const struct net_device_ops *netdev_ops;
|
|
||||||
+ unsigned int priv_flags_ext;
|
+ unsigned int priv_flags_ext;
|
||||||
+ const struct net_device_ops *netdev_ops;
|
const struct net_device_ops *netdev_ops;
|
||||||
int ifindex;
|
int ifindex;
|
||||||
unsigned short gflags;
|
unsigned short gflags;
|
||||||
unsigned short hard_header_len;
|
|
||||||
--- a/include/linux/ppp_channel.h
|
--- a/include/linux/ppp_channel.h
|
||||||
+++ b/include/linux/ppp_channel.h
|
+++ b/include/linux/ppp_channel.h
|
||||||
@@ -19,6 +19,10 @@
|
@@ -19,6 +19,10 @@
|
||||||
|
@ -81,16 +81,15 @@
|
|||||||
case AD_MUX_COLLECTING_DISTRIBUTING:
|
case AD_MUX_COLLECTING_DISTRIBUTING:
|
||||||
port->actor_oper_port_state |= LACP_STATE_COLLECTING;
|
port->actor_oper_port_state |= LACP_STATE_COLLECTING;
|
||||||
port->actor_oper_port_state |= LACP_STATE_DISTRIBUTING;
|
port->actor_oper_port_state |= LACP_STATE_DISTRIBUTING;
|
||||||
@@ -1908,13 +1963,24 @@ static void ad_enable_collecting_distrib
|
@@ -1908,6 +1963,7 @@ static void ad_enable_collecting_distrib
|
||||||
bool *update_slave_arr)
|
bool *update_slave_arr)
|
||||||
{
|
{
|
||||||
if (port->aggregator->is_active) {
|
if (port->aggregator->is_active) {
|
||||||
- slave_dbg(port->slave->bond->dev, port->slave->dev,
|
|
||||||
+ struct bond_cb *lag_cb_main; /* QCA NSS ECM bonding support */
|
+ struct bond_cb *lag_cb_main; /* QCA NSS ECM bonding support */
|
||||||
+ slave_dbg(port->slave->bond->dev, port->slave->dev,
|
slave_dbg(port->slave->bond->dev, port->slave->dev,
|
||||||
"Enabling port %d (LAG %d)\n",
|
"Enabling port %d (LAG %d)\n",
|
||||||
port->actor_port_number,
|
port->actor_port_number,
|
||||||
port->aggregator->aggregator_identifier);
|
@@ -1915,6 +1971,16 @@ static void ad_enable_collecting_distrib
|
||||||
__enable_port(port);
|
__enable_port(port);
|
||||||
/* Slave array needs update */
|
/* Slave array needs update */
|
||||||
*update_slave_arr = true;
|
*update_slave_arr = true;
|
||||||
@ -238,16 +237,14 @@
|
|||||||
if (bond_is_lb(bond))
|
if (bond_is_lb(bond))
|
||||||
bond_alb_handle_link_change(bond, new_active, BOND_LINK_UP);
|
bond_alb_handle_link_change(bond, new_active, BOND_LINK_UP);
|
||||||
} else {
|
} else {
|
||||||
@@ -1809,7 +1826,8 @@ int bond_enslave(struct net_device *bond
|
@@ -1809,6 +1826,7 @@ int bond_enslave(struct net_device *bond
|
||||||
const struct net_device_ops *slave_ops = slave_dev->netdev_ops;
|
const struct net_device_ops *slave_ops = slave_dev->netdev_ops;
|
||||||
struct slave *new_slave = NULL, *prev_slave;
|
struct slave *new_slave = NULL, *prev_slave;
|
||||||
struct sockaddr_storage ss;
|
struct sockaddr_storage ss;
|
||||||
- int link_reporting;
|
|
||||||
+ struct bond_cb *lag_cb_main; /* QCA NSS ECM bonding support */
|
+ struct bond_cb *lag_cb_main; /* QCA NSS ECM bonding support */
|
||||||
+ int link_reporting;
|
int link_reporting;
|
||||||
int res = 0, i;
|
int res = 0, i;
|
||||||
|
|
||||||
if (slave_dev->flags & IFF_MASTER &&
|
|
||||||
@@ -2252,6 +2270,15 @@ int bond_enslave(struct net_device *bond
|
@@ -2252,6 +2270,15 @@ int bond_enslave(struct net_device *bond
|
||||||
bond_is_active_slave(new_slave) ? "an active" : "a backup",
|
bond_is_active_slave(new_slave) ? "an active" : "a backup",
|
||||||
new_slave->link != BOND_LINK_DOWN ? "an up" : "a down");
|
new_slave->link != BOND_LINK_DOWN ? "an up" : "a down");
|
||||||
@ -280,16 +277,14 @@
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2339,7 +2375,8 @@ static int __bond_release_one(struct net
|
@@ -2339,6 +2375,7 @@ static int __bond_release_one(struct net
|
||||||
struct slave *slave, *oldcurrent;
|
struct slave *slave, *oldcurrent;
|
||||||
struct sockaddr_storage ss;
|
struct sockaddr_storage ss;
|
||||||
int old_flags = bond_dev->flags;
|
int old_flags = bond_dev->flags;
|
||||||
- netdev_features_t old_features = bond_dev->features;
|
|
||||||
+ struct bond_cb *lag_cb_main; /* QCA NSS ECM bonding support */
|
+ struct bond_cb *lag_cb_main; /* QCA NSS ECM bonding support */
|
||||||
+ netdev_features_t old_features = bond_dev->features;
|
netdev_features_t old_features = bond_dev->features;
|
||||||
|
|
||||||
/* slave is not a slave or master is not master of this slave */
|
/* slave is not a slave or master is not master of this slave */
|
||||||
if (!(slave_dev->flags & IFF_SLAVE) ||
|
|
||||||
@@ -2360,6 +2397,15 @@ static int __bond_release_one(struct net
|
@@ -2360,6 +2397,15 @@ static int __bond_release_one(struct net
|
||||||
|
|
||||||
bond_set_slave_inactive_flags(slave, BOND_SLAVE_NOTIFY_NOW);
|
bond_set_slave_inactive_flags(slave, BOND_SLAVE_NOTIFY_NOW);
|
||||||
@ -345,14 +340,14 @@
|
|||||||
bond_set_carrier(bond);
|
bond_set_carrier(bond);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4013,8 +4077,219 @@ static inline u32 bond_eth_hash(struct s
|
@@ -4013,9 +4077,220 @@ static inline u32 bond_eth_hash(struct s
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ep = (struct ethhdr *)(data + mhoff);
|
ep = (struct ethhdr *)(data + mhoff);
|
||||||
- return ep->h_dest[5] ^ ep->h_source[5] ^ be16_to_cpu(ep->h_proto);
|
- return ep->h_dest[5] ^ ep->h_source[5] ^ be16_to_cpu(ep->h_proto);
|
||||||
+ return ep->h_dest[5] ^ ep->h_source[5]; /* QCA NSS ECM bonding support */
|
+ return ep->h_dest[5] ^ ep->h_source[5]; /* QCA NSS ECM bonding support */
|
||||||
+}
|
}
|
||||||
+
|
|
||||||
+/* QCA NSS ECM bonding support - Start */
|
+/* QCA NSS ECM bonding support - Start */
|
||||||
+/* Extract the appropriate headers based on bond's xmit policy */
|
+/* Extract the appropriate headers based on bond's xmit policy */
|
||||||
+static bool bond_flow_dissect_without_skb(struct bonding *bond,
|
+static bool bond_flow_dissect_without_skb(struct bonding *bond,
|
||||||
@ -537,7 +532,7 @@
|
|||||||
+ default:
|
+ default:
|
||||||
+ return NULL;
|
+ return NULL;
|
||||||
+ }
|
+ }
|
||||||
}
|
+}
|
||||||
+EXPORT_SYMBOL(bond_get_tx_dev);
|
+EXPORT_SYMBOL(bond_get_tx_dev);
|
||||||
+
|
+
|
||||||
+/* In bond_xmit_xor() , we determine the output device by using a pre-
|
+/* In bond_xmit_xor() , we determine the output device by using a pre-
|
||||||
@ -563,9 +558,10 @@
|
|||||||
+ return NETDEV_TX_OK;
|
+ return NETDEV_TX_OK;
|
||||||
+}
|
+}
|
||||||
+/* QCA NSS ECM bonding support - End */
|
+/* QCA NSS ECM bonding support - End */
|
||||||
|
+
|
||||||
static bool bond_flow_ip(struct sk_buff *skb, struct flow_keys *fk, const void *data,
|
static bool bond_flow_ip(struct sk_buff *skb, struct flow_keys *fk, const void *data,
|
||||||
int hlen, __be16 l2_proto, int *nhoff, int *ip_proto, bool l34)
|
int hlen, __be16 l2_proto, int *nhoff, int *ip_proto, bool l34)
|
||||||
|
{
|
||||||
@@ -5211,15 +5486,23 @@ static netdev_tx_t bond_3ad_xor_xmit(str
|
@@ -5211,15 +5486,23 @@ static netdev_tx_t bond_3ad_xor_xmit(str
|
||||||
struct net_device *dev)
|
struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net/netfilter/Kconfig
|
--- a/net/netfilter/Kconfig
|
||||||
+++ b/net/netfilter/Kconfig
|
+++ b/net/netfilter/Kconfig
|
||||||
@@ -171,6 +171,13 @@ config NF_CONNTRACK_TIMEOUT
|
@@ -179,6 +179,13 @@ config NF_CONNTRACK_TIMEOUT
|
||||||
|
|
||||||
If unsure, say `N'.
|
If unsure, say `N'.
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/include/linux/netdevice.h
|
--- a/include/linux/netdevice.h
|
||||||
+++ b/include/linux/netdevice.h
|
+++ b/include/linux/netdevice.h
|
||||||
@@ -1724,7 +1724,9 @@ enum netdev_priv_flags_ext {
|
@@ -1725,7 +1725,9 @@ enum netdev_priv_flags_ext {
|
||||||
IFF_EXT_PPP_PPTP = 1<<3,
|
IFF_EXT_PPP_PPTP = 1<<3,
|
||||||
IFF_EXT_GRE_V4_TAP = 1<<4,
|
IFF_EXT_GRE_V4_TAP = 1<<4,
|
||||||
IFF_EXT_GRE_V6_TAP = 1<<5,
|
IFF_EXT_GRE_V6_TAP = 1<<5,
|
||||||
|
@ -10,7 +10,7 @@ Subject: [PATCH] Update 607-qca-add-add-nss-bridge-mgr-support.patch for kernel
|
|||||||
|
|
||||||
--- a/include/linux/if_bridge.h
|
--- a/include/linux/if_bridge.h
|
||||||
+++ b/include/linux/if_bridge.h
|
+++ b/include/linux/if_bridge.h
|
||||||
@@ -252,4 +252,8 @@ typedef struct net_bridge_port *br_get_d
|
@@ -256,4 +256,8 @@ typedef struct net_bridge_port *br_get_d
|
||||||
extern br_get_dst_hook_t __rcu *br_get_dst_hook;
|
extern br_get_dst_hook_t __rcu *br_get_dst_hook;
|
||||||
/* QCA NSS ECM support - End */
|
/* QCA NSS ECM support - End */
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ Subject: [PATCH] Update 607-qca-add-add-nss-bridge-mgr-support.patch for kernel
|
|||||||
#endif
|
#endif
|
||||||
--- a/net/bridge/br_fdb.c
|
--- a/net/bridge/br_fdb.c
|
||||||
+++ b/net/bridge/br_fdb.c
|
+++ b/net/bridge/br_fdb.c
|
||||||
@@ -62,6 +62,15 @@ void br_fdb_update_unregister_notify(str
|
@@ -63,6 +63,15 @@ void br_fdb_update_unregister_notify(str
|
||||||
EXPORT_SYMBOL_GPL(br_fdb_update_unregister_notify);
|
EXPORT_SYMBOL_GPL(br_fdb_update_unregister_notify);
|
||||||
/* QCA NSS ECM support - End */
|
/* QCA NSS ECM support - End */
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ Subject: [PATCH] Update 607-qca-add-add-nss-bridge-mgr-support.patch for kernel
|
|||||||
int __init br_fdb_init(void)
|
int __init br_fdb_init(void)
|
||||||
{
|
{
|
||||||
br_fdb_cache = kmem_cache_create("bridge_fdb_cache",
|
br_fdb_cache = kmem_cache_create("bridge_fdb_cache",
|
||||||
@@ -568,7 +577,7 @@ void br_fdb_cleanup(struct work_struct *
|
@@ -573,7 +582,7 @@ void br_fdb_cleanup(struct work_struct *
|
||||||
unsigned long delay = hold_time(br);
|
unsigned long delay = hold_time(br);
|
||||||
unsigned long work_delay = delay;
|
unsigned long work_delay = delay;
|
||||||
unsigned long now = jiffies;
|
unsigned long now = jiffies;
|
||||||
@ -46,7 +46,7 @@ Subject: [PATCH] Update 607-qca-add-add-nss-bridge-mgr-support.patch for kernel
|
|||||||
|
|
||||||
/* this part is tricky, in order to avoid blocking learning and
|
/* this part is tricky, in order to avoid blocking learning and
|
||||||
* consequently forwarding, we rely on rcu to delete objects with
|
* consequently forwarding, we rely on rcu to delete objects with
|
||||||
@@ -596,12 +605,13 @@ void br_fdb_cleanup(struct work_struct *
|
@@ -601,12 +610,13 @@ void br_fdb_cleanup(struct work_struct *
|
||||||
} else {
|
} else {
|
||||||
spin_lock_bh(&br->hash_lock);
|
spin_lock_bh(&br->hash_lock);
|
||||||
if (!hlist_unhashed(&f->fdb_node)) {
|
if (!hlist_unhashed(&f->fdb_node)) {
|
||||||
@ -62,7 +62,7 @@ Subject: [PATCH] Update 607-qca-add-add-nss-bridge-mgr-support.patch for kernel
|
|||||||
/* QCA NSS ECM support - End */
|
/* QCA NSS ECM support - End */
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&br->hash_lock);
|
spin_unlock_bh(&br->hash_lock);
|
||||||
@@ -903,6 +913,7 @@ void br_fdb_update(struct net_bridge *br
|
@@ -908,6 +918,7 @@ void br_fdb_update(struct net_bridge *br
|
||||||
const unsigned char *addr, u16 vid, unsigned long flags)
|
const unsigned char *addr, u16 vid, unsigned long flags)
|
||||||
{
|
{
|
||||||
struct net_bridge_fdb_entry *fdb;
|
struct net_bridge_fdb_entry *fdb;
|
||||||
@ -70,7 +70,7 @@ Subject: [PATCH] Update 607-qca-add-add-nss-bridge-mgr-support.patch for kernel
|
|||||||
|
|
||||||
/* some users want to always flood. */
|
/* some users want to always flood. */
|
||||||
if (hold_time(br) == 0)
|
if (hold_time(br) == 0)
|
||||||
@@ -928,6 +939,12 @@ void br_fdb_update(struct net_bridge *br
|
@@ -933,6 +944,12 @@ void br_fdb_update(struct net_bridge *br
|
||||||
if (unlikely(source != READ_ONCE(fdb->dst) &&
|
if (unlikely(source != READ_ONCE(fdb->dst) &&
|
||||||
!test_bit(BR_FDB_STICKY, &fdb->flags))) {
|
!test_bit(BR_FDB_STICKY, &fdb->flags))) {
|
||||||
br_switchdev_fdb_notify(br, fdb, RTM_DELNEIGH);
|
br_switchdev_fdb_notify(br, fdb, RTM_DELNEIGH);
|
||||||
@ -83,7 +83,7 @@ Subject: [PATCH] Update 607-qca-add-add-nss-bridge-mgr-support.patch for kernel
|
|||||||
WRITE_ONCE(fdb->dst, source);
|
WRITE_ONCE(fdb->dst, source);
|
||||||
fdb_modified = true;
|
fdb_modified = true;
|
||||||
/* Take over HW learned entry */
|
/* Take over HW learned entry */
|
||||||
@@ -939,7 +956,7 @@ void br_fdb_update(struct net_bridge *br
|
@@ -944,7 +961,7 @@ void br_fdb_update(struct net_bridge *br
|
||||||
/* QCA NSS ECM support - Start */
|
/* QCA NSS ECM support - Start */
|
||||||
atomic_notifier_call_chain(
|
atomic_notifier_call_chain(
|
||||||
&br_fdb_update_notifier_list,
|
&br_fdb_update_notifier_list,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/include/linux/skbuff.h
|
--- a/include/linux/skbuff.h
|
||||||
+++ b/include/linux/skbuff.h
|
+++ b/include/linux/skbuff.h
|
||||||
@@ -773,6 +773,7 @@ typedef unsigned char *sk_buff_data_t;
|
@@ -771,6 +771,7 @@ typedef unsigned char *sk_buff_data_t;
|
||||||
* @offload_fwd_mark: Packet was L2-forwarded in hardware
|
* @offload_fwd_mark: Packet was L2-forwarded in hardware
|
||||||
* @offload_l3_fwd_mark: Packet was L3-forwarded in hardware
|
* @offload_l3_fwd_mark: Packet was L3-forwarded in hardware
|
||||||
* @tc_skip_classify: do not classify packet. set by IFB device
|
* @tc_skip_classify: do not classify packet. set by IFB device
|
||||||
@ -8,7 +8,7 @@
|
|||||||
* @tc_at_ingress: used within tc_classify to distinguish in/egress
|
* @tc_at_ingress: used within tc_classify to distinguish in/egress
|
||||||
* @redirected: packet was redirected by packet classifier
|
* @redirected: packet was redirected by packet classifier
|
||||||
* @from_ingress: packet was redirected from the ingress path
|
* @from_ingress: packet was redirected from the ingress path
|
||||||
@@ -968,6 +969,8 @@ struct sk_buff {
|
@@ -963,6 +964,8 @@ struct sk_buff {
|
||||||
#ifdef CONFIG_NET_CLS_ACT
|
#ifdef CONFIG_NET_CLS_ACT
|
||||||
__u8 tc_skip_classify:1;
|
__u8 tc_skip_classify:1;
|
||||||
__u8 tc_at_ingress:1; /* See TC_AT_INGRESS_MASK */
|
__u8 tc_at_ingress:1; /* See TC_AT_INGRESS_MASK */
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
u32 flags;
|
u32 flags;
|
||||||
+ unsigned long cust_data;
|
+ unsigned long cust_data;
|
||||||
|
|
||||||
#ifdef CONFIG_LOCKDEP
|
#ifdef CONFIG_SHORTCUT_FE
|
||||||
struct lockdep_map lockdep_map;
|
unsigned long cust_data;
|
||||||
--- a/drivers/net/ifb.c
|
--- a/drivers/net/ifb.c
|
||||||
+++ b/drivers/net/ifb.c
|
+++ b/drivers/net/ifb.c
|
||||||
@@ -151,6 +151,31 @@ resched:
|
@@ -151,6 +151,31 @@ resched:
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
__u32 flags; /* tunnel flags */
|
__u32 flags; /* tunnel flags */
|
||||||
--- a/include/net/ip_tunnels.h
|
--- a/include/net/ip_tunnels.h
|
||||||
+++ b/include/net/ip_tunnels.h
|
+++ b/include/net/ip_tunnels.h
|
||||||
@@ -553,4 +553,9 @@ static inline void ip_tunnel_info_opts_s
|
@@ -586,4 +586,9 @@ static inline void ip_tunnel_info_opts_s
|
||||||
|
|
||||||
#endif /* CONFIG_INET */
|
#endif /* CONFIG_INET */
|
||||||
|
|
||||||
@ -22,7 +22,7 @@
|
|||||||
#endif /* __NET_IP_TUNNELS_H */
|
#endif /* __NET_IP_TUNNELS_H */
|
||||||
--- a/net/ipv6/ip6_tunnel.c
|
--- a/net/ipv6/ip6_tunnel.c
|
||||||
+++ b/net/ipv6/ip6_tunnel.c
|
+++ b/net/ipv6/ip6_tunnel.c
|
||||||
@@ -2398,6 +2398,26 @@ nla_put_failure:
|
@@ -2413,6 +2413,26 @@ nla_put_failure:
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,19 +29,17 @@
|
|||||||
int err = -ENOBUFS;
|
int err = -ENOBUFS;
|
||||||
|
|
||||||
skb = nlmsg_new(vxlan_nlmsg_size(), GFP_ATOMIC);
|
skb = nlmsg_new(vxlan_nlmsg_size(), GFP_ATOMIC);
|
||||||
@@ -322,7 +337,11 @@ static void __vxlan_fdb_notify(struct vx
|
@@ -322,6 +337,10 @@ static void __vxlan_fdb_notify(struct vx
|
||||||
}
|
}
|
||||||
|
|
||||||
rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
|
rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
|
||||||
- return;
|
|
||||||
+ vfe.dev = vxlan->dev;
|
+ vfe.dev = vxlan->dev;
|
||||||
+ vfe.rdst = rd;
|
+ vfe.rdst = rd;
|
||||||
+ ether_addr_copy(vfe.eth_addr, fdb->eth_addr);
|
+ ether_addr_copy(vfe.eth_addr, fdb->eth_addr);
|
||||||
+ atomic_notifier_call_chain(&vxlan_fdb_notifier_list, type, (void *)&vfe);
|
+ atomic_notifier_call_chain(&vxlan_fdb_notifier_list, type, (void *)&vfe);
|
||||||
+ return;
|
return;
|
||||||
errout:
|
errout:
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
|
|
||||||
@@ -488,6 +507,18 @@ static struct vxlan_fdb *vxlan_find_mac(
|
@@ -488,6 +507,18 @@ static struct vxlan_fdb *vxlan_find_mac(
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
@ -61,7 +59,7 @@
|
|||||||
/* caller should hold vxlan->hash_lock */
|
/* caller should hold vxlan->hash_lock */
|
||||||
static struct vxlan_rdst *vxlan_fdb_find_rdst(struct vxlan_fdb *f,
|
static struct vxlan_rdst *vxlan_fdb_find_rdst(struct vxlan_fdb *f,
|
||||||
union vxlan_addr *ip, __be16 port,
|
union vxlan_addr *ip, __be16 port,
|
||||||
@@ -2654,6 +2685,9 @@ static void vxlan_xmit_one(struct sk_buf
|
@@ -2671,6 +2702,9 @@ static void vxlan_xmit_one(struct sk_buf
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,18 +69,16 @@
|
|||||||
tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
|
tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
|
||||||
ttl = ttl ? : ip4_dst_hoplimit(&rt->dst);
|
ttl = ttl ? : ip4_dst_hoplimit(&rt->dst);
|
||||||
err = vxlan_build_skb(skb, ndst, sizeof(struct iphdr),
|
err = vxlan_build_skb(skb, ndst, sizeof(struct iphdr),
|
||||||
@@ -2725,7 +2759,10 @@ static void vxlan_xmit_one(struct sk_buf
|
@@ -2742,6 +2776,9 @@ static void vxlan_xmit_one(struct sk_buf
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto tx_error;
|
goto tx_error;
|
||||||
|
|
||||||
- udp_tunnel6_xmit_skb(ndst, sock6->sock->sk, skb, dev,
|
|
||||||
+ /* Reset the skb_iif to Tunnels interface index */
|
+ /* Reset the skb_iif to Tunnels interface index */
|
||||||
+ skb->skb_iif = dev->ifindex;
|
+ skb->skb_iif = dev->ifindex;
|
||||||
+
|
+
|
||||||
+ udp_tunnel6_xmit_skb(ndst, sock6->sock->sk, skb, dev,
|
udp_tunnel6_xmit_skb(ndst, sock6->sock->sk, skb, dev,
|
||||||
&local_ip.sin6.sin6_addr,
|
&local_ip.sin6.sin6_addr,
|
||||||
&dst->sin6.sin6_addr, tos, ttl,
|
&dst->sin6.sin6_addr, tos, ttl,
|
||||||
label, src_port, dst_port, !udp_sum);
|
|
||||||
--- a/include/net/vxlan.h
|
--- a/include/net/vxlan.h
|
||||||
+++ b/include/net/vxlan.h
|
+++ b/include/net/vxlan.h
|
||||||
@@ -344,6 +344,19 @@ struct vxlan_dev {
|
@@ -344,6 +344,19 @@ struct vxlan_dev {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net/ipv6/ip6_tunnel.c
|
--- a/net/ipv6/ip6_tunnel.c
|
||||||
+++ b/net/ipv6/ip6_tunnel.c
|
+++ b/net/ipv6/ip6_tunnel.c
|
||||||
@@ -2404,7 +2404,7 @@ nla_put_failure:
|
@@ -2419,7 +2419,7 @@ nla_put_failure:
|
||||||
*/
|
*/
|
||||||
void ip6_update_offload_stats(struct net_device *dev, void *ptr)
|
void ip6_update_offload_stats(struct net_device *dev, void *ptr)
|
||||||
{
|
{
|
||||||
|
@ -65,7 +65,7 @@ Cc: stable@vger.kernel.org # v5.15+
|
|||||||
|
|
||||||
--- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c
|
--- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c
|
||||||
+++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
|
+++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
|
||||||
@@ -240,7 +240,7 @@ static int rockchip_pcie_resource_get(struct platform_device *pdev,
|
@@ -240,7 +240,7 @@ static int rockchip_pcie_resource_get(st
|
||||||
return PTR_ERR(rockchip->apb_base);
|
return PTR_ERR(rockchip->apb_base);
|
||||||
|
|
||||||
rockchip->rst_gpio = devm_gpiod_get_optional(&pdev->dev, "reset",
|
rockchip->rst_gpio = devm_gpiod_get_optional(&pdev->dev, "reset",
|
||||||
|
@ -25,7 +25,7 @@ Subject: [PATCH] r8169: add LED configuration from OF
|
|||||||
TxDescStartAddrLow = 0x20,
|
TxDescStartAddrLow = 0x20,
|
||||||
TxDescStartAddrHigh = 0x24,
|
TxDescStartAddrHigh = 0x24,
|
||||||
TxHDescStartAddrLow = 0x28,
|
TxHDescStartAddrLow = 0x28,
|
||||||
@@ -5265,6 +5267,22 @@ static bool rtl_aspm_is_safe(struct rtl8
|
@@ -5264,6 +5266,22 @@ static bool rtl_aspm_is_safe(struct rtl8
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ Subject: [PATCH] r8169: add LED configuration from OF
|
|||||||
static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
{
|
{
|
||||||
struct rtl8169_private *tp;
|
struct rtl8169_private *tp;
|
||||||
@@ -5436,6 +5454,7 @@ static int rtl_init_one(struct pci_dev *
|
@@ -5435,6 +5453,7 @@ static int rtl_init_one(struct pci_dev *
|
||||||
if (!tp->counters)
|
if (!tp->counters)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ and performance for all other cases.
|
|||||||
* and hopefully then we'll have sufficient space.
|
* and hopefully then we'll have sufficient space.
|
||||||
--- a/net/ipv4/tcp_ipv4.c
|
--- a/net/ipv4/tcp_ipv4.c
|
||||||
+++ b/net/ipv4/tcp_ipv4.c
|
+++ b/net/ipv4/tcp_ipv4.c
|
||||||
@@ -3231,6 +3231,8 @@ static int __net_init tcp_sk_init(struct
|
@@ -3240,6 +3240,8 @@ static int __net_init tcp_sk_init(struct
|
||||||
|
|
||||||
net->ipv4.sysctl_tcp_shrink_window = 0;
|
net->ipv4.sysctl_tcp_shrink_window = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user