Merge Official Source

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
Tianling Shen 2023-03-26 01:34:25 +08:00
commit 52029366a7
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
179 changed files with 2397 additions and 1894 deletions

View File

@ -1,2 +1,2 @@
LINUX_VERSION-5.10 = .175
LINUX_KERNEL_HASH-5.10.175 = e277562e28f234e36665ae12b7585f9557a83a86bc4a8de8840a305af6307bce
LINUX_VERSION-5.10 = .176
LINUX_KERNEL_HASH-5.10.176 = ce072c60ba04173e05b2a1de3fefdeba5ac8b28b1958d92d21bdbf9b736ef793

View File

@ -1,2 +1,2 @@
LINUX_VERSION-5.15 = .102
LINUX_KERNEL_HASH-5.15.102 = 441cddfb970b97759eebdb9b142673662ce0770500e3ae8bcd4b90af369b01e6
LINUX_VERSION-5.15 = .104
LINUX_KERNEL_HASH-5.15.104 = 71c532ce09992e470f3259ffeb38d2b5bba990c243a559e4726a57412bd36b54

View File

@ -0,0 +1,25 @@
From: Felix Fietkau <nbd@nbd.name>
Date: Fri, 24 Mar 2023 13:04:17 +0100
Subject: [PATCH] wifi: mac80211: fix invalid drv_sta_pre_rcu_remove calls for
non-uploaded sta
Avoid potential data corruption issues caused by uninitialized driver
private data structures.
Reported-by: Brian Coverstone <brian@mainsequence.net>
Fixes: 6a9d1b91f34d ("mac80211: add pre-RCU-sync sta removal driver operation")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -1241,7 +1241,8 @@ static int __must_check __sta_info_destr
list_del_rcu(&sta->list);
sta->removed = true;
- drv_sta_pre_rcu_remove(local, sta->sdata, sta);
+ if (sta->uploaded)
+ drv_sta_pre_rcu_remove(local, sta->sdata, sta);
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
rcu_access_pointer(sdata->u.vlan.sta) == sta)

View File

@ -9,9 +9,9 @@ PKG_RELEASE:=$(AUTORELEASE)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firewall4.git
PKG_SOURCE_DATE:=2022-11-29
PKG_SOURCE_VERSION:=700a925fd9c1f1ff404e6b125cd5347ad7c45668
PKG_MIRROR_HASH:=18fb7a27399bf2e9e094a4cbacd4e859448c1c9194b6da4a78c9f37a642d1703
PKG_SOURCE_DATE:=2023-03-23
PKG_SOURCE_VERSION:=04a06bd70b9808b14444cae81a2faba4708ee231
PKG_MIRROR_HASH:=37c34facb733c50d0fdbfa238765a23e667e4daaae9728aaccbaba87a2a07bb9
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
PKG_LICENSE:=ISC

View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=util-linux
PKG_VERSION:=2.38.1
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/utils/$(PKG_NAME)/v2.38
@ -415,6 +415,17 @@ define Package/rename/description
expression in their name by replacement
endef
define Package/rev
$(call Package/util-linux/Default)
TITLE:=Reverse lines characterwise
endef
define Package/rev/description
rev utility copies the specified files to the standard output, reversing the
order of characters in every line. If no files are specified, the standard
input is read.
endef
define Package/partx-utils
$(call Package/util-linux/Default)
TITLE:=inform kernel about the presence and numbering of on-disk partitions
@ -804,6 +815,11 @@ define Package/rename/install
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rename $(1)/usr/bin/
endef
define Package/rev/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rev $(1)/usr/bin/
endef
define Package/partx-utils/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/partx $(1)/usr/sbin/
@ -904,6 +920,7 @@ $(eval $(call BuildPackage,namei))
$(eval $(call BuildPackage,nsenter))
$(eval $(call BuildPackage,prlimit))
$(eval $(call BuildPackage,rename))
$(eval $(call BuildPackage,rev))
$(eval $(call BuildPackage,partx-utils))
$(eval $(call BuildPackage,script-utils))
$(eval $(call BuildPackage,setterm))

View File

@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -2716,6 +2716,11 @@ static int lan78xx_reset(struct lan78xx_
@@ -2691,6 +2691,11 @@ static int lan78xx_reset(struct lan78xx_
int ret;
u32 buf;
u8 sig;
@ -26,7 +26,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
ret = lan78xx_read_reg(dev, HW_CFG, &buf);
if (ret < 0)
@@ -2797,6 +2802,10 @@ static int lan78xx_reset(struct lan78xx_
@@ -2772,6 +2777,10 @@ static int lan78xx_reset(struct lan78xx_
buf |= HW_CFG_MEF_;
@ -37,7 +37,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
ret = lan78xx_write_reg(dev, HW_CFG, buf);
if (ret < 0)
return ret;
@@ -2895,6 +2904,9 @@ static int lan78xx_reset(struct lan78xx_
@@ -2870,6 +2879,9 @@ static int lan78xx_reset(struct lan78xx_
buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
}
}

View File

@ -15,7 +15,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -2960,6 +2960,22 @@ static int lan78xx_open(struct net_devic
@@ -2935,6 +2935,22 @@ static int lan78xx_open(struct net_devic
netif_dbg(dev, ifup, dev->net, "phy initialised successfully");

View File

@ -37,7 +37,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data)
{
u32 *buf;
@@ -3288,8 +3297,14 @@ static int lan78xx_bind(struct lan78xx_n
@@ -3263,8 +3272,14 @@ static int lan78xx_bind(struct lan78xx_n
if (DEFAULT_RX_CSUM_ENABLE)
dev->net->features |= NETIF_F_RXCSUM;

View File

@ -16,7 +16,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -2277,6 +2277,22 @@ static int lan78xx_phy_init(struct lan78
@@ -2252,6 +2252,22 @@ static int lan78xx_phy_init(struct lan78
mii_adv_to_linkmode_adv_t(fc, mii_adv);
linkmode_or(phydev->advertising, fc, phydev->advertising);
@ -39,7 +39,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
if (phydev->mdio.dev.of_node) {
u32 reg;
int len;
@@ -2969,22 +2985,6 @@ static int lan78xx_open(struct net_devic
@@ -2944,22 +2960,6 @@ static int lan78xx_open(struct net_devic
netif_dbg(dev, ifup, dev->net, "phy initialised successfully");

View File

@ -28,7 +28,7 @@ See: https://github.com/raspberrypi/linux/issues/2447
static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data)
{
u32 *buf;
@@ -4148,7 +4153,13 @@ static int lan78xx_probe(struct usb_inte
@@ -4123,7 +4128,13 @@ static int lan78xx_probe(struct usb_inte
netdev->max_mtu = MAX_SINGLE_PACKET_SIZE;
netif_set_gso_max_size(netdev, MAX_SINGLE_PACKET_SIZE - MAX_HEADER);

View File

@ -15,7 +15,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -2282,7 +2282,7 @@ static int lan78xx_phy_init(struct lan78
@@ -2257,7 +2257,7 @@ static int lan78xx_phy_init(struct lan78
mii_adv_to_linkmode_adv_t(fc, mii_adv);
linkmode_or(phydev->advertising, fc, phydev->advertising);

View File

@ -12,7 +12,7 @@ in both dwc_otg and in ipv6 processing.
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -3527,7 +3527,7 @@ static int rx_submit(struct lan78xx_net
@@ -3502,7 +3502,7 @@ static int rx_submit(struct lan78xx_net
size_t size = dev->rx_urb_size;
int ret = 0;

View File

@ -21,7 +21,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/net/phy/smsc.c
+++ b/drivers/net/phy/smsc.c
@@ -230,12 +230,12 @@ static int lan87xx_read_status(struct ph
@@ -223,12 +223,12 @@ static int lan87xx_read_status(struct ph
if (rc < 0)
return rc;

View File

@ -18,8 +18,8 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/net/phy/smsc.c
+++ b/drivers/net/phy/smsc.c
@@ -220,6 +220,8 @@ static int lan87xx_read_status(struct ph
int err = genphy_read_status(phydev);
@@ -213,6 +213,8 @@ static int lan87xx_read_status(struct ph
return err;
if (!phydev->link && priv->energy_enable && phydev->irq == PHY_POLL) {
+ int energy_detected;
@ -27,7 +27,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
/* Disable EDPD to wake up PHY */
int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
if (rc < 0)
@@ -235,7 +237,7 @@ static int lan87xx_read_status(struct ph
@@ -228,7 +230,7 @@ static int lan87xx_read_status(struct ph
*/
read_poll_timeout(phy_read, rc,
rc & MII_LAN83C185_ENERGYON || rc < 0,
@ -36,7 +36,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
MII_LAN83C185_CTRL_STATUS);
if (rc < 0)
return rc;
@@ -245,10 +247,16 @@ static int lan87xx_read_status(struct ph
@@ -238,10 +240,16 @@ static int lan87xx_read_status(struct ph
if (rc < 0)
return rc;

View File

@ -1,76 +0,0 @@
From 327dabbd0111910a7d174b0b812d608d6b67bead Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
Date: Mon, 8 Aug 2022 23:05:25 +0200
Subject: [PATCH] bgmac: fix *initial* chip reset to support BCM5358
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
While bringing hardware up we should perform a full reset including the
switch bit (BGMAC_BCMA_IOCTL_SW_RESET aka SICF_SWRST). It's what
specification says and what reference driver does.
This seems to be critical for the BCM5358. Without this hardware doesn't
get initialized properly and doesn't seem to transmit or receive any
packets.
Originally bgmac was calling bgmac_chip_reset() before setting
"has_robosw" property which resulted in expected behaviour. That has
changed as a side effect of adding platform device support which
regressed BCM5358 support.
Fixes: f6a95a24957a ("net: ethernet: bgmac: Add platform device support")
Cc: Jon Mason <jdmason@kudzu.us>
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
drivers/net/ethernet/broadcom/bgmac.c | 8 ++++++--
drivers/net/ethernet/broadcom/bgmac.h | 2 ++
2 files changed, 8 insertions(+), 2 deletions(-)
--- a/drivers/net/ethernet/broadcom/bgmac.c
+++ b/drivers/net/ethernet/broadcom/bgmac.c
@@ -891,13 +891,13 @@ static void bgmac_chip_reset_idm_config(
if (iost & BGMAC_BCMA_IOST_ATTACHED) {
flags = BGMAC_BCMA_IOCTL_SW_CLKEN;
- if (!bgmac->has_robosw)
+ if (bgmac->in_init || !bgmac->has_robosw)
flags |= BGMAC_BCMA_IOCTL_SW_RESET;
}
bgmac_clk_enable(bgmac, flags);
}
- if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw)
+ if (iost & BGMAC_BCMA_IOST_ATTACHED && (bgmac->in_init || !bgmac->has_robosw))
bgmac_idm_write(bgmac, BCMA_IOCTL,
bgmac_idm_read(bgmac, BCMA_IOCTL) &
~BGMAC_BCMA_IOCTL_SW_RESET);
@@ -1502,6 +1502,8 @@ int bgmac_enet_probe(struct bgmac *bgmac
struct net_device *net_dev = bgmac->net_dev;
int err;
+ bgmac->in_init = true;
+
bgmac_chip_intrs_off(bgmac);
net_dev->irq = bgmac->irq;
@@ -1562,6 +1564,8 @@ int bgmac_enet_probe(struct bgmac *bgmac
bgmac->b53_device = &bgmac_b53_dev;
}
+ bgmac->in_init = false;
+
err = register_netdev(bgmac->net_dev);
if (err) {
dev_err(bgmac->dev, "Cannot register net device\n");
--- a/drivers/net/ethernet/broadcom/bgmac.h
+++ b/drivers/net/ethernet/broadcom/bgmac.h
@@ -475,6 +475,8 @@ struct bgmac {
int irq;
u32 int_mask;
+ bool in_init;
+
/* Current MAC state */
int mac_speed;
int mac_duplex;

View File

@ -155,7 +155,7 @@
port@8 {
reg = <8>;
phy-mode = "rgmii";
phy-mode = "rgmii-txid";
ethernet = <&switch0port4>;
fixed-link {

View File

@ -17,7 +17,10 @@ netgear,dgnd3700-v2)
sercomm,h500-s-lowi |\
sercomm,h500-s-vfes)
ucidef_set_bridge_device switch
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 wifi" "wan"
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
ucidef_set_interface "qtn" device "wifi" protocol "static" ipaddr "1.1.1.1" netmask "255.255.255.252"
uci add_list firewall.@zone[0].network='qtn'
;;
esac
board_config_flush

View File

@ -47,9 +47,7 @@ platform_do_upgrade() {
case "$(board_name)" in
comtrend,vr-3032u|\
huawei,hg253s-v2|\
netgear,dgnd3700-v2|\
sercomm,h500-s-lowi|\
sercomm,h500-s-vfes)
netgear,dgnd3700-v2)
cfe_jffs2_nand_upgrade "$1"
;;
*)

View File

@ -1,46 +0,0 @@
From 03e31e5197a041857299c70bbbc461131156d434 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
Date: Tue, 21 Mar 2023 19:11:58 +0100
Subject: [PATCH] net: dsa: b53: mmap: disable phy read/write ops
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
B53 MMAP switches have a MDIO Mux bus controller which should be used instead
of phy_read() and phy_write() ops.
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
drivers/net/dsa/b53/b53_mmap.c | 10 ++++++++++
1 file changed, 10 insertions(+)
--- a/drivers/net/dsa/b53/b53_mmap.c
+++ b/drivers/net/dsa/b53/b53_mmap.c
@@ -279,6 +279,7 @@ static int b53_mmap_probe(struct platfor
struct b53_platform_data *pdata = pdev->dev.platform_data;
struct b53_mmap_priv *priv;
struct b53_device *dev;
+ struct dsa_switch_ops *dso;
int ret;
if (!pdata && np) {
@@ -298,10 +299,19 @@ static int b53_mmap_probe(struct platfor
priv->regs = pdata->regs;
+ dso = devm_kzalloc(&pdev->dev, sizeof(*dso), GFP_KERNEL);
+ if (!dso)
+ return -ENOMEM;
+
dev = b53_switch_alloc(&pdev->dev, &b53_mmap_ops, priv);
if (!dev)
return -ENOMEM;
+ memcpy(dso, dev->ds->ops, sizeof(*dso));
+ dso->phy_read = NULL;
+ dso->phy_write = NULL;
+ dev->ds->ops = dso;
+
dev->pdata = pdata;
platform_set_drvdata(pdev, dev);

View File

@ -1,98 +0,0 @@
From 8ec46b847fc64a40da5c2c891e1732c863703bb5 Mon Sep 17 00:00:00 2001
From: Paul Geurts <paul.geurts@prodrive-technologies.com>
Date: Wed, 22 Mar 2023 20:17:04 +0100
Subject: [PATCH] net: dsa: b53: mdio: add support for BCM53134
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Add support for the BCM53134 Ethernet switch in the existing b53 dsa driver.
The BCM53134 is very familiar to the BCM58XX series.
Signed-off-by: Paul Geurts <paul.geurts@prodrive-technologies.com>
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
drivers/net/dsa/b53/b53_common.c | 15 +++++++++++++++
drivers/net/dsa/b53/b53_mdio.c | 5 ++++-
drivers/net/dsa/b53/b53_priv.h | 4 +++-
3 files changed, 22 insertions(+), 2 deletions(-)
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
@@ -2609,6 +2609,20 @@ static const struct b53_chip_data b53_sw
.jumbo_pm_reg = B53_JUMBO_PORT_MASK,
.jumbo_size_reg = B53_JUMBO_MAX_SIZE,
},
+ {
+ .chip_id = BCM53134_DEVICE_ID,
+ .dev_name = "BCM53134",
+ .vlans = 4096,
+ .enabled_ports = 0x12f,
+ .imp_port = 8,
+ .cpu_port = B53_CPU_PORT,
+ .vta_regs = B53_VTA_REGS,
+ .arl_bins = 4,
+ .arl_buckets = 1024,
+ .duplex_reg = B53_DUPLEX_STAT_GE,
+ .jumbo_pm_reg = B53_JUMBO_PORT_MASK,
+ .jumbo_size_reg = B53_JUMBO_MAX_SIZE,
+ },
};
static int b53_switch_init(struct b53_device *dev)
@@ -2785,6 +2799,7 @@ int b53_switch_detect(struct b53_device
case BCM53012_DEVICE_ID:
case BCM53018_DEVICE_ID:
case BCM53019_DEVICE_ID:
+ case BCM53134_DEVICE_ID:
dev->chip_id = id32;
break;
default:
--- a/drivers/net/dsa/b53/b53_mdio.c
+++ b/drivers/net/dsa/b53/b53_mdio.c
@@ -286,6 +286,7 @@ static const struct b53_io_ops b53_mdio_
#define B53_BRCM_OUI_2 0x03625c00
#define B53_BRCM_OUI_3 0x00406000
#define B53_BRCM_OUI_4 0x01410c00
+#define B53_BRCM_OUI_5 0xae025000
static int b53_mdio_probe(struct mdio_device *mdiodev)
{
@@ -313,7 +314,8 @@ static int b53_mdio_probe(struct mdio_de
if ((phy_id & 0xfffffc00) != B53_BRCM_OUI_1 &&
(phy_id & 0xfffffc00) != B53_BRCM_OUI_2 &&
(phy_id & 0xfffffc00) != B53_BRCM_OUI_3 &&
- (phy_id & 0xfffffc00) != B53_BRCM_OUI_4) {
+ (phy_id & 0xfffffc00) != B53_BRCM_OUI_4 &&
+ (phy_id & 0xfffffc00) != B53_BRCM_OUI_5) {
dev_err(&mdiodev->dev, "Unsupported device: 0x%08x\n", phy_id);
return -ENODEV;
}
@@ -377,6 +379,7 @@ static const struct of_device_id b53_of_
{ .compatible = "brcm,bcm53115" },
{ .compatible = "brcm,bcm53125" },
{ .compatible = "brcm,bcm53128" },
+ { .compatible = "brcm,bcm53134" },
{ .compatible = "brcm,bcm5365" },
{ .compatible = "brcm,bcm5389" },
{ .compatible = "brcm,bcm5395" },
--- a/drivers/net/dsa/b53/b53_priv.h
+++ b/drivers/net/dsa/b53/b53_priv.h
@@ -85,6 +85,7 @@ enum {
BCM583XX_DEVICE_ID = 0x58300,
BCM7445_DEVICE_ID = 0x7445,
BCM7278_DEVICE_ID = 0x7278,
+ BCM53134_DEVICE_ID = 0x5075,
};
#define B53_N_PORTS 9
@@ -210,7 +211,8 @@ static inline int is58xx(struct b53_devi
return dev->chip_id == BCM58XX_DEVICE_ID ||
dev->chip_id == BCM583XX_DEVICE_ID ||
dev->chip_id == BCM7445_DEVICE_ID ||
- dev->chip_id == BCM7278_DEVICE_ID;
+ dev->chip_id == BCM7278_DEVICE_ID ||
+ dev->chip_id == BCM53134_DEVICE_ID;
}
#define B53_63XX_RGMII0 4

View File

@ -30,7 +30,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -354,6 +354,7 @@ struct napi_struct {
@@ -356,6 +356,7 @@ struct napi_struct {
struct list_head dev_list;
struct hlist_node napi_hash_node;
unsigned int napi_id;
@ -38,7 +38,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
enum {
@@ -364,6 +365,7 @@ enum {
@@ -366,6 +367,7 @@ enum {
NAPI_STATE_LISTED, /* NAPI added to system lists */
NAPI_STATE_NO_BUSY_POLL,/* Do not add in napi_hash, no busy polling */
NAPI_STATE_IN_BUSY_POLL,/* sk_busy_loop() owns this NAPI */
@ -46,7 +46,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
enum {
@@ -374,6 +376,7 @@ enum {
@@ -376,6 +378,7 @@ enum {
NAPIF_STATE_LISTED = BIT(NAPI_STATE_LISTED),
NAPIF_STATE_NO_BUSY_POLL = BIT(NAPI_STATE_NO_BUSY_POLL),
NAPIF_STATE_IN_BUSY_POLL = BIT(NAPI_STATE_IN_BUSY_POLL),
@ -54,7 +54,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
enum gro_result {
@@ -504,20 +507,7 @@ static inline bool napi_complete(struct
@@ -506,20 +509,7 @@ static inline bool napi_complete(struct
*/
void napi_disable(struct napi_struct *n);
@ -76,7 +76,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
/**
* napi_synchronize - wait until NAPI is not running
@@ -1863,6 +1853,8 @@ enum netdev_ml_priv_type {
@@ -1865,6 +1855,8 @@ enum netdev_ml_priv_type {
*
* @wol_enabled: Wake-on-LAN is enabled
*
@ -85,7 +85,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
* @net_notifier_list: List of per-net netdev notifier block
* that follow this device when it is moved
* to another network namespace.
@@ -2182,6 +2174,7 @@ struct net_device {
@@ -2184,6 +2176,7 @@ struct net_device {
struct lock_class_key *qdisc_running_key;
bool proto_down;
unsigned wol_enabled:1;

View File

@ -46,7 +46,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
+ == ==================================
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -498,6 +498,8 @@ static inline bool napi_complete(struct
@@ -500,6 +500,8 @@ static inline bool napi_complete(struct
return napi_complete_done(n, 0);
}

View File

@ -27,7 +27,7 @@ Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -366,6 +366,7 @@ enum {
@@ -368,6 +368,7 @@ enum {
NAPI_STATE_NO_BUSY_POLL,/* Do not add in napi_hash, no busy polling */
NAPI_STATE_IN_BUSY_POLL,/* sk_busy_loop() owns this NAPI */
NAPI_STATE_THREADED, /* The poll is performed inside its own thread*/
@ -35,7 +35,7 @@ Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
};
enum {
@@ -377,6 +378,7 @@ enum {
@@ -379,6 +380,7 @@ enum {
NAPIF_STATE_NO_BUSY_POLL = BIT(NAPI_STATE_NO_BUSY_POLL),
NAPIF_STATE_IN_BUSY_POLL = BIT(NAPI_STATE_IN_BUSY_POLL),
NAPIF_STATE_THREADED = BIT(NAPI_STATE_THREADED),

View File

@ -58,7 +58,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -848,6 +848,27 @@ typedef u16 (*select_queue_fallback_t)(s
@@ -850,6 +850,27 @@ typedef u16 (*select_queue_fallback_t)(s
struct sk_buff *skb,
struct net_device *sb_dev);
@ -86,7 +86,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
enum tc_setup_type {
TC_SETUP_QDISC_MQPRIO,
TC_SETUP_CLSU32,
@@ -1294,6 +1315,8 @@ struct netdev_net_notifier {
@@ -1296,6 +1317,8 @@ struct netdev_net_notifier {
* struct net_device *(*ndo_get_peer_dev)(struct net_device *dev);
* If a device is paired with a peer device, return the peer instance.
* The caller must be under RCU read context.
@ -95,7 +95,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
*/
struct net_device_ops {
int (*ndo_init)(struct net_device *dev);
@@ -1502,6 +1525,8 @@ struct net_device_ops {
@@ -1504,6 +1527,8 @@ struct net_device_ops {
int (*ndo_tunnel_ctl)(struct net_device *dev,
struct ip_tunnel_parm *p, int cmd);
struct net_device * (*ndo_get_peer_dev)(struct net_device *dev);
@ -104,7 +104,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
};
/**
@@ -2849,6 +2874,8 @@ void dev_remove_offload(struct packet_of
@@ -2851,6 +2876,8 @@ void dev_remove_offload(struct packet_of
int dev_get_iflink(const struct net_device *dev);
int dev_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb);

View File

@ -28,7 +28,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -850,11 +850,18 @@ typedef u16 (*select_queue_fallback_t)(s
@@ -852,11 +852,18 @@ typedef u16 (*select_queue_fallback_t)(s
enum net_device_path_type {
DEV_PATH_ETHERNET = 0,

View File

@ -9,7 +9,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -851,6 +851,7 @@ typedef u16 (*select_queue_fallback_t)(s
@@ -853,6 +853,7 @@ typedef u16 (*select_queue_fallback_t)(s
enum net_device_path_type {
DEV_PATH_ETHERNET = 0,
DEV_PATH_VLAN,

View File

@ -15,7 +15,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -862,10 +862,20 @@ struct net_device_path {
@@ -864,10 +864,20 @@ struct net_device_path {
u16 id;
__be16 proto;
} encap;
@ -36,7 +36,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct net_device_path_stack {
int num_paths;
@@ -875,6 +885,12 @@ struct net_device_path_stack {
@@ -877,6 +887,12 @@ struct net_device_path_stack {
struct net_device_path_ctx {
const struct net_device *dev;
const u8 *daddr;

View File

@ -83,7 +83,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
static int pppoe_recvmsg(struct socket *sock, struct msghdr *m,
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -852,6 +852,7 @@ enum net_device_path_type {
@@ -854,6 +854,7 @@ enum net_device_path_type {
DEV_PATH_ETHERNET = 0,
DEV_PATH_VLAN,
DEV_PATH_BRIDGE,
@ -91,7 +91,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
};
struct net_device_path {
@@ -861,6 +862,7 @@ struct net_device_path {
@@ -863,6 +864,7 @@ struct net_device_path {
struct {
u16 id;
__be16 proto;

View File

@ -10,7 +10,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -853,6 +853,7 @@ enum net_device_path_type {
@@ -855,6 +855,7 @@ enum net_device_path_type {
DEV_PATH_VLAN,
DEV_PATH_BRIDGE,
DEV_PATH_PPPOE,
@ -18,7 +18,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
};
struct net_device_path {
@@ -873,6 +874,10 @@ struct net_device_path {
@@ -875,6 +876,10 @@ struct net_device_path {
u16 vlan_id;
__be16 vlan_proto;
} bridge;

View File

@ -12,7 +12,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -870,6 +870,7 @@ struct net_device_path {
@@ -872,6 +872,7 @@ struct net_device_path {
DEV_PATH_BR_VLAN_KEEP,
DEV_PATH_BR_VLAN_TAG,
DEV_PATH_BR_VLAN_UNTAG,

View File

@ -18,7 +18,7 @@ Link: https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -1129,10 +1129,8 @@ void fib_add_ifaddr(struct in_ifaddr *if
@@ -1132,10 +1132,8 @@ void fib_add_ifaddr(struct in_ifaddr *if
prefix, ifa->ifa_prefixlen, prim,
ifa->ifa_rt_priority);

View File

@ -581,7 +581,7 @@ Change-Id: I71de7cd15b8dfa6f9fdd838023474693c4fee0a7
extern struct list_head cgroup_roots;
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -2364,7 +2364,8 @@ static void __split_huge_page_tail(struc
@@ -2366,7 +2366,8 @@ static void __split_huge_page_tail(struc
#ifdef CONFIG_64BIT
(1L << PG_arch_2) |
#endif

View File

@ -1,95 +0,0 @@
From 598ada195606eb0e577db0487dd59a2536f206ce Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Sun, 31 Jul 2022 18:38:27 -0700
Subject: [PATCH 1/5] tools build: Add feature test for init_disassemble_info
API changes
binutils changed the signature of init_disassemble_info(), which now causes
compilation failures for tools/{perf,bpf}, e.g. on debian unstable.
Relevant binutils commit:
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
This commit adds a feature test to detect the new signature. Subsequent
commits will use it to fix the build failures.
Signed-off-by: Andres Freund <andres@anarazel.de>
Acked-by: Quentin Monnet <quentin@isovalent.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Ben Hutchings <benh@debian.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Quentin Monnet <quentin@isovalent.com>
Cc: Sedat Dilek <sedat.dilek@gmail.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de
Link: https://lore.kernel.org/r/20220801013834.156015-2-andres@anarazel.de
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
(cherry picked from commit cfd59ca91467056bb2c36907b2fa67b8e1af9952)
---
tools/build/Makefile.feature | 1 +
tools/build/feature/Makefile | 4 ++++
tools/build/feature/test-all.c | 4 ++++
tools/build/feature/test-disassembler-init-styled.c | 13 +++++++++++++
4 files changed, 22 insertions(+)
create mode 100644 tools/build/feature/test-disassembler-init-styled.c
--- a/tools/build/Makefile.feature
+++ b/tools/build/Makefile.feature
@@ -69,6 +69,7 @@ FEATURE_TESTS_BASIC :=
libaio \
libzstd \
disassembler-four-args \
+ disassembler-init-styled \
file-handle
# FEATURE_TESTS_BASIC + FEATURE_TESTS_EXTRA is the complete list
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -18,6 +18,7 @@ FILES=
test-libbfd.bin \
test-libbfd-buildid.bin \
test-disassembler-four-args.bin \
+ test-disassembler-init-styled.bin \
test-reallocarray.bin \
test-libbfd-liberty.bin \
test-libbfd-liberty-z.bin \
@@ -239,6 +240,9 @@ $(OUTPUT)test-libbfd-buildid.bin:
$(OUTPUT)test-disassembler-four-args.bin:
$(BUILD) -DPACKAGE='"perf"' -lbfd -lopcodes
+$(OUTPUT)test-disassembler-init-styled.bin:
+ $(BUILD) -DPACKAGE='"perf"' -lbfd -lopcodes
+
$(OUTPUT)test-reallocarray.bin:
$(BUILD)
--- a/tools/build/feature/test-all.c
+++ b/tools/build/feature/test-all.c
@@ -166,6 +166,10 @@
# include "test-disassembler-four-args.c"
#undef main
+#define main main_test_disassembler_init_styled
+# include "test-disassembler-init-styled.c"
+#undef main
+
#define main main_test_libzstd
# include "test-libzstd.c"
#undef main
--- /dev/null
+++ b/tools/build/feature/test-disassembler-init-styled.c
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <stdio.h>
+#include <dis-asm.h>
+
+int main(void)
+{
+ struct disassemble_info info;
+
+ init_disassemble_info(&info, stdout,
+ NULL, NULL);
+
+ return 0;
+}

View File

@ -1,96 +0,0 @@
From 08ec5766e5cf7b24fdebefb83b6f760bceeddf40 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Sun, 31 Jul 2022 18:38:29 -0700
Subject: [PATCH 2/5] tools include: add dis-asm-compat.h to handle version
differences
binutils changed the signature of init_disassemble_info(), which now causes
compilation failures for tools/{perf,bpf}, e.g. on debian unstable.
Relevant binutils commit:
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
This commit introduces a wrapper for init_disassemble_info(), to avoid
spreading #ifdef DISASM_INIT_STYLED to a bunch of places. Subsequent
commits will use it to fix the build failures.
It likely is worth adding a wrapper for disassember(), to avoid the already
existing DISASM_FOUR_ARGS_SIGNATURE ifdefery.
Signed-off-by: Andres Freund <andres@anarazel.de>
Signed-off-by: Ben Hutchings <benh@debian.org>
Acked-by: Quentin Monnet <quentin@isovalent.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Ben Hutchings <benh@debian.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Quentin Monnet <quentin@isovalent.com>
Cc: Sedat Dilek <sedat.dilek@gmail.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de
Link: https://lore.kernel.org/r/20220801013834.156015-4-andres@anarazel.de
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
(cherry picked from commit a45b3d6926231c3d024ea0de4f7bd967f83709ee)
---
tools/include/tools/dis-asm-compat.h | 55 ++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644 tools/include/tools/dis-asm-compat.h
--- /dev/null
+++ b/tools/include/tools/dis-asm-compat.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause */
+#ifndef _TOOLS_DIS_ASM_COMPAT_H
+#define _TOOLS_DIS_ASM_COMPAT_H
+
+#include <stdio.h>
+#include <dis-asm.h>
+
+/* define types for older binutils version, to centralize ifdef'ery a bit */
+#ifndef DISASM_INIT_STYLED
+enum disassembler_style {DISASSEMBLER_STYLE_NOT_EMPTY};
+typedef int (*fprintf_styled_ftype) (void *, enum disassembler_style, const char*, ...);
+#endif
+
+/*
+ * Trivial fprintf wrapper to be used as the fprintf_styled_func argument to
+ * init_disassemble_info_compat() when normal fprintf suffices.
+ */
+static inline int fprintf_styled(void *out,
+ enum disassembler_style style,
+ const char *fmt, ...)
+{
+ va_list args;
+ int r;
+
+ (void)style;
+
+ va_start(args, fmt);
+ r = vfprintf(out, fmt, args);
+ va_end(args);
+
+ return r;
+}
+
+/*
+ * Wrapper for init_disassemble_info() that hides version
+ * differences. Depending on binutils version and architecture either
+ * fprintf_func or fprintf_styled_func will be called.
+ */
+static inline void init_disassemble_info_compat(struct disassemble_info *info,
+ void *stream,
+ fprintf_ftype unstyled_func,
+ fprintf_styled_ftype styled_func)
+{
+#ifdef DISASM_INIT_STYLED
+ init_disassemble_info(info, stream,
+ unstyled_func,
+ styled_func);
+#else
+ (void)styled_func;
+ init_disassemble_info(info, stream,
+ unstyled_func);
+#endif
+}
+
+#endif /* _TOOLS_DIS_ASM_COMPAT_H */

View File

@ -1,111 +0,0 @@
From 3bc373152a3a00742750dbbe974d541af78231e6 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Sun, 31 Jul 2022 18:38:30 -0700
Subject: [PATCH 3/5] tools perf: Fix compilation error with new binutils
binutils changed the signature of init_disassemble_info(), which now causes
compilation failures for tools/perf/util/annotate.c, e.g. on debian
unstable.
Relevant binutils commit:
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
Wire up the feature test and switch to init_disassemble_info_compat(),
which were introduced in prior commits, fixing the compilation failure.
I verified that perf can still disassemble bpf programs by using bpftrace
under load, recording a perf trace, and then annotating the bpf "function"
with and without the changes. With old binutils there's no change in output
before/after this patch. When comparing the output from old binutils (2.35)
to new bintuils with the patch (upstream snapshot) there are a few output
differences, but they are unrelated to this patch. An example hunk is:
1.15 : 55:mov %rbp,%rdx
0.00 : 58:add $0xfffffffffffffff8,%rdx
0.00 : 5c:xor %ecx,%ecx
- 1.03 : 5e:callq 0xffffffffe12aca3c
+ 1.03 : 5e:call 0xffffffffe12aca3c
0.00 : 63:xor %eax,%eax
- 2.18 : 65:leaveq
- 2.82 : 66:retq
+ 2.18 : 65:leave
+ 2.82 : 66:ret
Signed-off-by: Andres Freund <andres@anarazel.de>
Acked-by: Quentin Monnet <quentin@isovalent.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Ben Hutchings <benh@debian.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Sedat Dilek <sedat.dilek@gmail.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de
Link: https://lore.kernel.org/r/20220801013834.156015-5-andres@anarazel.de
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
(cherry picked from commit 83aa0120487e8bc3f231e72c460add783f71f17c)
---
tools/perf/Makefile.config | 8 ++++++++
tools/perf/util/annotate.c | 7 ++++---
2 files changed, 12 insertions(+), 3 deletions(-)
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -296,6 +296,7 @@ FEATURE_CHECK_LDFLAGS-libpython := $(PYT
FEATURE_CHECK_LDFLAGS-libaio = -lrt
FEATURE_CHECK_LDFLAGS-disassembler-four-args = -lbfd -lopcodes -ldl
+FEATURE_CHECK_LDFLAGS-disassembler-init-styled = -lbfd -lopcodes -ldl
CORE_CFLAGS += -fno-omit-frame-pointer
CORE_CFLAGS += -ggdb3
@@ -872,13 +873,16 @@ ifndef NO_LIBBFD
ifeq ($(feature-libbfd-liberty), 1)
EXTLIBS += -lbfd -lopcodes -liberty
FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -ldl
+ FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -ldl
else
ifeq ($(feature-libbfd-liberty-z), 1)
EXTLIBS += -lbfd -lopcodes -liberty -lz
FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -lz -ldl
+ FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -lz -ldl
endif
endif
$(call feature_check,disassembler-four-args)
+ $(call feature_check,disassembler-init-styled)
endif
ifeq ($(feature-libbfd-buildid), 1)
@@ -992,6 +996,10 @@ ifeq ($(feature-disassembler-four-args),
CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
endif
+ifeq ($(feature-disassembler-init-styled), 1)
+ CFLAGS += -DDISASM_INIT_STYLED
+endif
+
ifeq (${IS_64_BIT}, 1)
ifndef NO_PERF_READ_VDSO32
$(call feature_check,compile-32)
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1694,6 +1694,7 @@ fallback:
#include <bpf/btf.h>
#include <bpf/libbpf.h>
#include <linux/btf.h>
+#include <tools/dis-asm-compat.h>
static int symbol__disassemble_bpf(struct symbol *sym,
struct annotate_args *args)
@@ -1736,9 +1737,9 @@ static int symbol__disassemble_bpf(struc
ret = errno;
goto out;
}
- init_disassemble_info(&info, s,
- (fprintf_ftype) fprintf);
-
+ init_disassemble_info_compat(&info, s,
+ (fprintf_ftype) fprintf,
+ fprintf_styled);
info.arch = bfd_get_arch(bfdf);
info.mach = bfd_get_mach(bfdf);

View File

@ -1,102 +0,0 @@
From 042e7f11769adac0736d77d76262912b90724d7d Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Sun, 31 Jul 2022 18:38:31 -0700
Subject: [PATCH 4/5] tools bpf_jit_disasm: Fix compilation error with new
binutils
binutils changed the signature of init_disassemble_info(), which now causes
compilation to fail for tools/bpf/bpf_jit_disasm.c, e.g. on debian
unstable.
Relevant binutils commit:
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
Wire up the feature test and switch to init_disassemble_info_compat(),
which were introduced in prior commits, fixing the compilation failure.
I verified that bpf_jit_disasm can still disassemble bpf programs, both
with the old and new dis-asm.h API. With old binutils there's no change in
output before/after this patch. When comparing the output from old
binutils (2.35) to new bintuils with the patch (upstream snapshot) there
are a few output differences, but they are unrelated to this patch. An
example hunk is:
f4: mov %r14,%rsi
f7: mov %r15,%rdx
fa: mov $0x2a,%ecx
- ff: callq 0xffffffffea8c4988
+ ff: call 0xffffffffea8c4988
104: test %rax,%rax
107: jge 0x0000000000000110
109: xor %eax,%eax
- 10b: jmpq 0x0000000000000073
+ 10b: jmp 0x0000000000000073
110: cmp $0x16,%rax
However, I had to use an older kernel to generate the bpf_jit_enabled =
2 output, as that has been broken since 5.18 / 1022a5498f6f745c ("bpf,
x86_64: Use bpf_jit_binary_pack_alloc").
https://lore.kernel.org/20220703030210.pmjft7qc2eajzi6c@alap3.anarazel.de
Signed-off-by: Andres Freund <andres@anarazel.de>
Acked-by: Quentin Monnet <quentin@isovalent.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Ben Hutchings <benh@debian.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Quentin Monnet <quentin@isovalent.com>
Cc: Sedat Dilek <sedat.dilek@gmail.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de
Link: https://lore.kernel.org/r/20220801013834.156015-6-andres@anarazel.de
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
(cherry picked from commit 96ed066054abf11c7d3e106e3011a51f3f1227a3)
---
tools/bpf/Makefile | 5 ++++-
tools/bpf/bpf_jit_disasm.c | 5 ++++-
2 files changed, 8 insertions(+), 2 deletions(-)
--- a/tools/bpf/Makefile
+++ b/tools/bpf/Makefile
@@ -34,7 +34,7 @@ else
endif
FEATURE_USER = .bpf
-FEATURE_TESTS = libbfd disassembler-four-args
+FEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled
FEATURE_DISPLAY = libbfd disassembler-four-args
check_feat := 1
@@ -56,6 +56,9 @@ endif
ifeq ($(feature-disassembler-four-args), 1)
CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
endif
+ifeq ($(feature-disassembler-init-styled), 1)
+CFLAGS += -DDISASM_INIT_STYLED
+endif
$(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y
$(QUIET_BISON)$(YACC) -o $@ -d $<
--- a/tools/bpf/bpf_jit_disasm.c
+++ b/tools/bpf/bpf_jit_disasm.c
@@ -28,6 +28,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <limits.h>
+#include <tools/dis-asm-compat.h>
#define CMD_ACTION_SIZE_BUFFER 10
#define CMD_ACTION_READ_ALL 3
@@ -64,7 +65,9 @@ static void get_asm_insns(uint8_t *image
assert(bfdf);
assert(bfd_check_format(bfdf, bfd_object));
- init_disassemble_info(&info, stdout, (fprintf_ftype) fprintf);
+ init_disassemble_info_compat(&info, stdout,
+ (fprintf_ftype) fprintf,
+ fprintf_styled);
info.arch = bfd_get_arch(bfdf);
info.mach = bfd_get_mach(bfdf);
info.buffer = image;

View File

@ -1,146 +0,0 @@
From a82db18ab34ba7f9d38319e8cc01ffe382e3e55e Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Sun, 31 Jul 2022 18:38:33 -0700
Subject: [PATCH 5/5] tools bpftool: Fix compilation error with new binutils
binutils changed the signature of init_disassemble_info(), which now causes
compilation to fail for tools/bpf/bpftool/jit_disasm.c, e.g. on debian
unstable.
Relevant binutils commit:
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
Wire up the feature test and switch to init_disassemble_info_compat(),
which were introduced in prior commits, fixing the compilation failure.
I verified that bpftool can still disassemble bpf programs, both with an
old and new dis-asm.h API. There are no output changes for plain and json
formats. When comparing the output from old binutils (2.35)
to new bintuils with the patch (upstream snapshot) there are a few output
differences, but they are unrelated to this patch. An example hunk is:
2f: pop %r14
31: pop %r13
33: pop %rbx
- 34: leaveq
- 35: retq
+ 34: leave
+ 35: ret
Signed-off-by: Andres Freund <andres@anarazel.de>
Acked-by: Quentin Monnet <quentin@isovalent.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Ben Hutchings <benh@debian.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Quentin Monnet <quentin@isovalent.com>
Cc: Sedat Dilek <sedat.dilek@gmail.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de
Link: https://lore.kernel.org/r/20220801013834.156015-8-andres@anarazel.de
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
(cherry picked from commit 600b7b26c07a070d0153daa76b3806c1e52c9e00)
---
tools/bpf/bpftool/Makefile | 5 +++-
tools/bpf/bpftool/jit_disasm.c | 42 +++++++++++++++++++++++++++-------
2 files changed, 38 insertions(+), 9 deletions(-)
--- a/tools/bpf/bpftool/Makefile
+++ b/tools/bpf/bpftool/Makefile
@@ -76,7 +76,7 @@ INSTALL ?= install
RM ?= rm -f
FEATURE_USER = .bpftool
-FEATURE_TESTS = libbfd disassembler-four-args reallocarray zlib libcap \
+FEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled reallocarray zlib libcap \
clang-bpf-co-re
FEATURE_DISPLAY = libbfd disassembler-four-args zlib libcap \
clang-bpf-co-re
@@ -100,6 +100,9 @@ endif
ifeq ($(feature-disassembler-four-args), 1)
CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
endif
+ifeq ($(feature-disassembler-init-styled), 1)
+ CFLAGS += -DDISASM_INIT_STYLED
+endif
ifeq ($(feature-reallocarray), 0)
CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
--- a/tools/bpf/bpftool/jit_disasm.c
+++ b/tools/bpf/bpftool/jit_disasm.c
@@ -24,6 +24,7 @@
#include <sys/stat.h>
#include <limits.h>
#include <bpf/libbpf.h>
+#include <tools/dis-asm-compat.h>
#include "json_writer.h"
#include "main.h"
@@ -39,15 +40,12 @@ static void get_exec_path(char *tpath, s
}
static int oper_count;
-static int fprintf_json(void *out, const char *fmt, ...)
+static int printf_json(void *out, const char *fmt, va_list ap)
{
- va_list ap;
char *s;
int err;
- va_start(ap, fmt);
err = vasprintf(&s, fmt, ap);
- va_end(ap);
if (err < 0)
return -1;
@@ -73,6 +71,32 @@ static int fprintf_json(void *out, const
return 0;
}
+static int fprintf_json(void *out, const char *fmt, ...)
+{
+ va_list ap;
+ int r;
+
+ va_start(ap, fmt);
+ r = printf_json(out, fmt, ap);
+ va_end(ap);
+
+ return r;
+}
+
+static int fprintf_json_styled(void *out,
+ enum disassembler_style style __maybe_unused,
+ const char *fmt, ...)
+{
+ va_list ap;
+ int r;
+
+ va_start(ap, fmt);
+ r = printf_json(out, fmt, ap);
+ va_end(ap);
+
+ return r;
+}
+
void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes,
const char *arch, const char *disassembler_options,
const struct btf *btf,
@@ -99,11 +123,13 @@ void disasm_print_insn(unsigned char *im
assert(bfd_check_format(bfdf, bfd_object));
if (json_output)
- init_disassemble_info(&info, stdout,
- (fprintf_ftype) fprintf_json);
+ init_disassemble_info_compat(&info, stdout,
+ (fprintf_ftype) fprintf_json,
+ fprintf_json_styled);
else
- init_disassemble_info(&info, stdout,
- (fprintf_ftype) fprintf);
+ init_disassemble_info_compat(&info, stdout,
+ (fprintf_ftype) fprintf,
+ fprintf_styled);
/* Update architecture info for offload. */
if (arch) {

View File

@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#include <linux/mfd/syscon.h>
#include <linux/regmap.h>
#include <linux/clk.h>
@@ -839,7 +840,7 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -840,7 +841,7 @@ static int mtk_init_fq_dma(struct mtk_et
dma_addr_t dma_addr;
int i;
@ -29,7 +29,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
cnt * sizeof(struct mtk_tx_dma),
&eth->phy_scratch_ring,
GFP_ATOMIC);
@@ -851,10 +852,10 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -852,10 +853,10 @@ static int mtk_init_fq_dma(struct mtk_et
if (unlikely(!eth->scratch_head))
return -ENOMEM;
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return -ENOMEM;
phy_ring_tail = eth->phy_scratch_ring +
@@ -908,26 +909,26 @@ static void mtk_tx_unmap(struct mtk_eth
@@ -909,26 +910,26 @@ static void mtk_tx_unmap(struct mtk_eth
{
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
if (tx_buf->flags & MTK_TX_FLAGS_SINGLE0) {
@ -73,7 +73,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
dma_unmap_addr(tx_buf, dma_addr1),
dma_unmap_len(tx_buf, dma_len1),
DMA_TO_DEVICE);
@@ -1005,9 +1006,9 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1006,9 +1007,9 @@ static int mtk_tx_map(struct sk_buff *sk
if (skb_vlan_tag_present(skb))
txd4 |= TX_DMA_INS_VLAN | skb_vlan_tag_get(skb);
@ -85,7 +85,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return -ENOMEM;
WRITE_ONCE(itxd->txd1, mapped_addr);
@@ -1046,10 +1047,10 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1047,10 +1048,10 @@ static int mtk_tx_map(struct sk_buff *sk
frag_map_size = min(frag_size, MTK_TX_DMA_BUF_LEN);
@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
goto err_dma;
if (i == nr_frags - 1 &&
@@ -1330,18 +1331,18 @@ static int mtk_poll_rx(struct napi_struc
@@ -1331,18 +1332,18 @@ static int mtk_poll_rx(struct napi_struc
netdev->stats.rx_dropped++;
goto release_desc;
}
@ -120,7 +120,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ring->buf_size, DMA_FROM_DEVICE);
/* receive data */
@@ -1614,7 +1615,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1615,7 +1616,7 @@ static int mtk_tx_alloc(struct mtk_eth *
if (!ring->buf)
goto no_tx_mem;
@ -129,7 +129,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
&ring->phys, GFP_ATOMIC);
if (!ring->dma)
goto no_tx_mem;
@@ -1632,7 +1633,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1633,7 +1634,7 @@ static int mtk_tx_alloc(struct mtk_eth *
* descriptors in ring->dma_pdma.
*/
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
@ -138,7 +138,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
&ring->phys_pdma,
GFP_ATOMIC);
if (!ring->dma_pdma)
@@ -1691,7 +1692,7 @@ static void mtk_tx_clean(struct mtk_eth
@@ -1692,7 +1693,7 @@ static void mtk_tx_clean(struct mtk_eth
}
if (ring->dma) {
@ -147,7 +147,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
MTK_DMA_SIZE * sizeof(*ring->dma),
ring->dma,
ring->phys);
@@ -1699,7 +1700,7 @@ static void mtk_tx_clean(struct mtk_eth
@@ -1700,7 +1701,7 @@ static void mtk_tx_clean(struct mtk_eth
}
if (ring->dma_pdma) {
@ -156,7 +156,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
MTK_DMA_SIZE * sizeof(*ring->dma_pdma),
ring->dma_pdma,
ring->phys_pdma);
@@ -1747,18 +1748,18 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1748,18 +1749,18 @@ static int mtk_rx_alloc(struct mtk_eth *
return -ENOMEM;
}
@ -178,7 +178,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return -ENOMEM;
ring->dma[i].rxd1 = (unsigned int)dma_addr;
@@ -1794,7 +1795,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1795,7 +1796,7 @@ static void mtk_rx_clean(struct mtk_eth
continue;
if (!ring->dma[i].rxd1)
continue;
@ -187,7 +187,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ring->dma[i].rxd1,
ring->buf_size,
DMA_FROM_DEVICE);
@@ -1805,7 +1806,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1806,7 +1807,7 @@ static void mtk_rx_clean(struct mtk_eth
}
if (ring->dma) {
@ -196,7 +196,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ring->dma_size * sizeof(*ring->dma),
ring->dma,
ring->phys);
@@ -2161,7 +2162,7 @@ static void mtk_dma_free(struct mtk_eth
@@ -2162,7 +2163,7 @@ static void mtk_dma_free(struct mtk_eth
if (eth->netdev[i])
netdev_reset_queue(eth->netdev[i]);
if (eth->scratch_ring) {
@ -205,7 +205,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
MTK_DMA_SIZE * sizeof(struct mtk_tx_dma),
eth->scratch_ring,
eth->phy_scratch_ring);
@@ -2513,6 +2514,8 @@ static void mtk_dim_tx(struct work_struc
@@ -2514,6 +2515,8 @@ static void mtk_dim_tx(struct work_struc
static int mtk_hw_init(struct mtk_eth *eth)
{
@ -214,7 +214,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
int i, val, ret;
if (test_and_set_bit(MTK_HW_INIT, &eth->state))
@@ -2525,6 +2528,10 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -2526,6 +2529,10 @@ static int mtk_hw_init(struct mtk_eth *e
if (ret)
goto err_disable_pm;
@ -225,7 +225,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
ret = device_reset(eth->dev);
if (ret) {
@@ -3078,6 +3085,35 @@ free_netdev:
@@ -3079,6 +3086,35 @@ free_netdev:
return err;
}
@ -261,7 +261,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int mtk_probe(struct platform_device *pdev)
{
struct device_node *mac_np;
@@ -3091,6 +3127,7 @@ static int mtk_probe(struct platform_dev
@@ -3092,6 +3128,7 @@ static int mtk_probe(struct platform_dev
eth->soc = of_device_get_match_data(&pdev->dev);
eth->dev = &pdev->dev;
@ -269,7 +269,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
eth->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(eth->base))
return PTR_ERR(eth->base);
@@ -3139,6 +3176,16 @@ static int mtk_probe(struct platform_dev
@@ -3140,6 +3177,16 @@ static int mtk_probe(struct platform_dev
}
}
@ -288,7 +288,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
GFP_KERNEL);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -462,6 +462,12 @@
@@ -463,6 +463,12 @@
#define RSTCTRL_FE BIT(6)
#define RSTCTRL_PPE BIT(31)
@ -301,7 +301,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/* SGMII subsystem config registers */
/* Register to auto-negotiation restart */
#define SGMSYS_PCS_CONTROL_1 0x0
@@ -879,6 +885,7 @@ struct mtk_sgmii {
@@ -880,6 +886,7 @@ struct mtk_sgmii {
/* struct mtk_eth - This is the main datasructure for holding the state
* of the driver
* @dev: The device pointer
@ -309,7 +309,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
* @base: The mapped register i/o base
* @page_lock: Make sure that register operations are atomic
* @tx_irq__lock: Make sure that IRQ register operations are atomic
@@ -922,6 +929,7 @@ struct mtk_sgmii {
@@ -923,6 +930,7 @@ struct mtk_sgmii {
struct mtk_eth {
struct device *dev;
@ -317,7 +317,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
void __iomem *base;
spinlock_t page_lock;
spinlock_t tx_irq_lock;
@@ -1020,6 +1028,7 @@ int mtk_gmac_rgmii_path_setup(struct mtk
@@ -1021,6 +1029,7 @@ int mtk_gmac_rgmii_path_setup(struct mtk
int mtk_eth_offload_init(struct mtk_eth *eth);
int mtk_eth_setup_tc(struct net_device *dev, enum tc_setup_type type,
void *type_data);

View File

@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int mtk_msg_level = -1;
module_param_named(msg_level, mtk_msg_level, int, 0);
@@ -3208,6 +3209,22 @@ static int mtk_probe(struct platform_dev
@@ -3209,6 +3210,22 @@ static int mtk_probe(struct platform_dev
}
}

View File

@ -233,7 +233,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static inline void
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -870,6 +870,7 @@ enum net_device_path_type {
@@ -872,6 +872,7 @@ enum net_device_path_type {
DEV_PATH_BRIDGE,
DEV_PATH_PPPOE,
DEV_PATH_DSA,
@ -241,7 +241,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
};
struct net_device_path {
@@ -895,6 +896,12 @@ struct net_device_path {
@@ -897,6 +898,12 @@ struct net_device_path {
int port;
u16 proto;
} dsa;

View File

@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2334,7 +2334,7 @@ static int mtk_open(struct net_device *d
@@ -2335,7 +2335,7 @@ static int mtk_open(struct net_device *d
return err;
}
@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
gdm_config = MTK_GDMA_TO_PPE;
mtk_gdm_config(eth, gdm_config);
@@ -2408,7 +2408,7 @@ static int mtk_stop(struct net_device *d
@@ -2409,7 +2409,7 @@ static int mtk_stop(struct net_device *d
mtk_dma_free(eth);
if (eth->soc->offload_version)
@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return 0;
}
@@ -3300,10 +3300,11 @@ static int mtk_probe(struct platform_dev
@@ -3301,10 +3301,11 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {
@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (err)
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -982,7 +982,7 @@ struct mtk_eth {
@@ -983,7 +983,7 @@ struct mtk_eth {
u32 rx_dma_l4_valid;
int ip_align;

View File

@ -33,7 +33,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#include <net/dsa.h>
#include "mtk_eth_soc.h"
@@ -1292,7 +1293,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1293,7 +1294,7 @@ static int mtk_poll_rx(struct napi_struc
struct net_device *netdev;
unsigned int pktlen;
dma_addr_t dma_addr;
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
int mac;
ring = mtk_get_rx_ring(eth);
@@ -1371,6 +1372,11 @@ static int mtk_poll_rx(struct napi_struc
@@ -1372,6 +1373,11 @@ static int mtk_poll_rx(struct napi_struc
skb_set_hash(skb, hash, PKT_HASH_TYPE_L4);
}
@ -54,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
(trxd.rxd2 & RX_DMA_VTAG))
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
@@ -3300,7 +3306,7 @@ static int mtk_probe(struct platform_dev
@@ -3301,7 +3307,7 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {

View File

@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mediatek,hifsys = <&hifsys>;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3187,7 +3187,7 @@ static int mtk_probe(struct platform_dev
@@ -3188,7 +3188,7 @@ static int mtk_probe(struct platform_dev
struct regmap *cci;
cci = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,

View File

@ -13,7 +13,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -845,7 +845,7 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -846,7 +846,7 @@ static int mtk_init_fq_dma(struct mtk_et
eth->scratch_ring = dma_alloc_coherent(eth->dma_dev,
cnt * sizeof(struct mtk_tx_dma),
&eth->phy_scratch_ring,
@ -22,7 +22,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (unlikely(!eth->scratch_ring))
return -ENOMEM;
@@ -1623,7 +1623,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1624,7 +1624,7 @@ static int mtk_tx_alloc(struct mtk_eth *
goto no_tx_mem;
ring->dma = dma_alloc_coherent(eth->dma_dev, MTK_DMA_SIZE * sz,
@ -31,7 +31,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (!ring->dma)
goto no_tx_mem;
@@ -1641,8 +1641,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1642,8 +1642,7 @@ static int mtk_tx_alloc(struct mtk_eth *
*/
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
ring->dma_pdma = dma_alloc_coherent(eth->dma_dev, MTK_DMA_SIZE * sz,
@ -41,7 +41,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (!ring->dma_pdma)
goto no_tx_mem;
@@ -1757,7 +1756,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1758,7 +1757,7 @@ static int mtk_rx_alloc(struct mtk_eth *
ring->dma = dma_alloc_coherent(eth->dma_dev,
rx_dma_size * sizeof(*ring->dma),

View File

@ -14,7 +14,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -971,18 +971,51 @@ static void setup_tx_buf(struct mtk_eth
@@ -972,18 +972,51 @@ static void setup_tx_buf(struct mtk_eth
}
}
@ -69,7 +69,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int k = 0;
itxd = ring->next_free;
@@ -990,49 +1023,32 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -991,49 +1024,32 @@ static int mtk_tx_map(struct sk_buff *sk
if (itxd == ring->last_free)
return -ENOMEM;
@ -126,7 +126,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
bool new_desc = true;
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA) ||
@@ -1047,23 +1063,17 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1048,23 +1064,17 @@ static int mtk_tx_map(struct sk_buff *sk
new_desc = false;
}
@ -159,7 +159,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
tx_buf = mtk_desc_to_tx_buf(ring, txd);
if (new_desc)
@@ -1073,20 +1083,17 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1074,20 +1084,17 @@ static int mtk_tx_map(struct sk_buff *sk
tx_buf->flags |= (!mac->id) ? MTK_TX_FLAGS_FPORT0 :
MTK_TX_FLAGS_FPORT1;
@ -186,7 +186,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
txd_pdma->txd2 |= TX_DMA_LS0;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -842,6 +842,17 @@ enum mkt_eth_capabilities {
@@ -843,6 +843,17 @@ enum mkt_eth_capabilities {
MTK_MUX_U3_GMAC2_TO_QPHY | \
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA)

View File

@ -14,7 +14,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -837,20 +837,20 @@ static void *mtk_max_lro_buf_alloc(gfp_t
@@ -838,20 +838,20 @@ static void *mtk_max_lro_buf_alloc(gfp_t
/* the qdma core needs scratch memory to be setup */
static int mtk_init_fq_dma(struct mtk_eth *eth)
{
@ -38,7 +38,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (unlikely(!eth->scratch_head))
return -ENOMEM;
@@ -860,16 +860,19 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -861,16 +861,19 @@ static int mtk_init_fq_dma(struct mtk_et
if (unlikely(dma_mapping_error(eth->dma_dev, dma_addr)))
return -ENOMEM;
@ -65,7 +65,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
mtk_w32(eth, eth->phy_scratch_ring, MTK_QDMA_FQ_HEAD);
@@ -2169,6 +2172,7 @@ static int mtk_dma_init(struct mtk_eth *
@@ -2170,6 +2173,7 @@ static int mtk_dma_init(struct mtk_eth *
static void mtk_dma_free(struct mtk_eth *eth)
{
@ -73,7 +73,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int i;
for (i = 0; i < MTK_MAC_COUNT; i++)
@@ -2176,9 +2180,8 @@ static void mtk_dma_free(struct mtk_eth
@@ -2177,9 +2181,8 @@ static void mtk_dma_free(struct mtk_eth
netdev_reset_queue(eth->netdev[i]);
if (eth->scratch_ring) {
dma_free_coherent(eth->dma_dev,
@ -85,7 +85,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
eth->scratch_ring = NULL;
eth->phy_scratch_ring = 0;
}
@@ -3390,6 +3393,9 @@ static const struct mtk_soc_data mt2701_
@@ -3391,6 +3394,9 @@ static const struct mtk_soc_data mt2701_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7623_CLKS_BITMAP,
.required_pctl = true,
@ -95,7 +95,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const struct mtk_soc_data mt7621_data = {
@@ -3398,6 +3404,9 @@ static const struct mtk_soc_data mt7621_
@@ -3399,6 +3405,9 @@ static const struct mtk_soc_data mt7621_
.required_clks = MT7621_CLKS_BITMAP,
.required_pctl = false,
.offload_version = 2,
@ -105,7 +105,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const struct mtk_soc_data mt7622_data = {
@@ -3407,6 +3416,9 @@ static const struct mtk_soc_data mt7622_
@@ -3408,6 +3417,9 @@ static const struct mtk_soc_data mt7622_
.required_clks = MT7622_CLKS_BITMAP,
.required_pctl = false,
.offload_version = 2,
@ -115,7 +115,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const struct mtk_soc_data mt7623_data = {
@@ -3415,6 +3427,9 @@ static const struct mtk_soc_data mt7623_
@@ -3416,6 +3428,9 @@ static const struct mtk_soc_data mt7623_
.required_clks = MT7623_CLKS_BITMAP,
.required_pctl = true,
.offload_version = 2,
@ -125,7 +125,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const struct mtk_soc_data mt7629_data = {
@@ -3423,6 +3438,9 @@ static const struct mtk_soc_data mt7629_
@@ -3424,6 +3439,9 @@ static const struct mtk_soc_data mt7629_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7629_CLKS_BITMAP,
.required_pctl = false,
@ -135,7 +135,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const struct mtk_soc_data rt5350_data = {
@@ -3430,6 +3448,9 @@ static const struct mtk_soc_data rt5350_
@@ -3431,6 +3449,9 @@ static const struct mtk_soc_data rt5350_
.hw_features = MTK_HW_FEATURES_MT7628,
.required_clks = MT7628_CLKS_BITMAP,
.required_pctl = false,
@ -147,7 +147,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
const struct of_device_id of_mtk_match[] = {
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -863,6 +863,7 @@ struct mtk_tx_dma_desc_info {
@@ -864,6 +864,7 @@ struct mtk_tx_dma_desc_info {
* the target SoC
* @required_pctl A bool value to show whether the SoC requires
* the extra setup for those pins used by GMAC.
@ -155,7 +155,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
*/
struct mtk_soc_data {
u32 ana_rgc3;
@@ -871,6 +872,9 @@ struct mtk_soc_data {
@@ -872,6 +873,9 @@ struct mtk_soc_data {
bool required_pctl;
u8 offload_version;
netdev_features_t hw_features;

View File

@ -12,7 +12,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1624,8 +1624,10 @@ static int mtk_napi_rx(struct napi_struc
@@ -1625,8 +1625,10 @@ static int mtk_napi_rx(struct napi_struc
static int mtk_tx_alloc(struct mtk_eth *eth)
{
@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->buf = kcalloc(MTK_DMA_SIZE, sizeof(*ring->buf),
GFP_KERNEL);
@@ -1641,8 +1643,10 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1642,8 +1644,10 @@ static int mtk_tx_alloc(struct mtk_eth *
int next = (i + 1) % MTK_DMA_SIZE;
u32 next_ptr = ring->phys + next * sz;
@ -37,7 +37,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
/* On MT7688 (PDMA only) this driver uses the ring->dma structs
@@ -1664,7 +1668,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1665,7 +1669,7 @@ static int mtk_tx_alloc(struct mtk_eth *
ring->dma_size = MTK_DMA_SIZE;
atomic_set(&ring->free_count, MTK_DMA_SIZE - 2);
ring->next_free = &ring->dma[0];
@ -46,7 +46,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->last_free_ptr = (u32)(ring->phys + ((MTK_DMA_SIZE - 1) * sz));
ring->thresh = MAX_SKB_FRAGS;
@@ -1697,6 +1701,7 @@ no_tx_mem:
@@ -1698,6 +1702,7 @@ no_tx_mem:
static void mtk_tx_clean(struct mtk_eth *eth)
{
@ -54,7 +54,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_tx_ring *ring = &eth->tx_ring;
int i;
@@ -1709,17 +1714,15 @@ static void mtk_tx_clean(struct mtk_eth
@@ -1710,17 +1715,15 @@ static void mtk_tx_clean(struct mtk_eth
if (ring->dma) {
dma_free_coherent(eth->dma_dev,

View File

@ -12,7 +12,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -890,10 +890,11 @@ static inline void *mtk_qdma_phys_to_vir
@@ -891,10 +891,11 @@ static inline void *mtk_qdma_phys_to_vir
return ret + (desc - ring->phys);
}
@ -27,7 +27,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return &ring->buf[idx];
}
@@ -1015,6 +1016,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1016,6 +1017,7 @@ static int mtk_tx_map(struct sk_buff *sk
};
struct mtk_mac *mac = netdev_priv(dev);
struct mtk_eth *eth = mac->hw;
@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_tx_dma *itxd, *txd;
struct mtk_tx_dma *itxd_pdma, *txd_pdma;
struct mtk_tx_buf *itx_buf, *tx_buf;
@@ -1026,7 +1028,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1027,7 +1029,7 @@ static int mtk_tx_map(struct sk_buff *sk
if (itxd == ring->last_free)
return -ENOMEM;
@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
memset(itx_buf, 0, sizeof(*itx_buf));
txd_info.addr = dma_map_single(eth->dma_dev, skb->data, txd_info.size,
@@ -1054,7 +1056,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1055,7 +1057,7 @@ static int mtk_tx_map(struct sk_buff *sk
while (frag_size) {
bool new_desc = true;
@ -53,7 +53,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
(i & 0x1)) {
txd = mtk_qdma_phys_to_virt(ring, txd->txd2);
txd_pdma = qdma_to_pdma(ring, txd);
@@ -1078,7 +1080,8 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1079,7 +1081,8 @@ static int mtk_tx_map(struct sk_buff *sk
mtk_tx_set_dma_desc(dev, txd, &txd_info);
@ -63,7 +63,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (new_desc)
memset(tx_buf, 0, sizeof(*tx_buf));
tx_buf->skb = (struct sk_buff *)MTK_DMA_DUMMY_DESC;
@@ -1097,7 +1100,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1098,7 +1101,7 @@ static int mtk_tx_map(struct sk_buff *sk
/* store skb to cleanup */
itx_buf->skb = skb;
@ -72,7 +72,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (k & 0x1)
txd_pdma->txd2 |= TX_DMA_LS0;
else
@@ -1115,7 +1118,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1116,7 +1119,7 @@ static int mtk_tx_map(struct sk_buff *sk
*/
wmb();
@ -81,7 +81,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) ||
!netdev_xmit_more())
mtk_w32(eth, txd->txd2, MTK_QTX_CTX_PTR);
@@ -1129,13 +1132,13 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1130,13 +1133,13 @@ static int mtk_tx_map(struct sk_buff *sk
err_dma:
do {
@ -97,7 +97,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
itxd_pdma->txd2 = TX_DMA_DESP2_DEF;
itxd = mtk_qdma_phys_to_virt(ring, itxd->txd2);
@@ -1449,7 +1452,8 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -1450,7 +1453,8 @@ static int mtk_poll_tx_qdma(struct mtk_e
if ((desc->txd3 & TX_DMA_OWNER_CPU) == 0)
break;

View File

@ -11,7 +11,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -905,9 +905,10 @@ static struct mtk_tx_dma *qdma_to_pdma(s
@@ -906,9 +906,10 @@ static struct mtk_tx_dma *qdma_to_pdma(s
return ring->dma_pdma - ring->dma + dma;
}
@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
static void mtk_tx_unmap(struct mtk_eth *eth, struct mtk_tx_buf *tx_buf,
@@ -1123,8 +1124,10 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1124,8 +1125,10 @@ static int mtk_tx_map(struct sk_buff *sk
!netdev_xmit_more())
mtk_w32(eth, txd->txd2, MTK_QTX_CTX_PTR);
} else {

View File

@ -13,7 +13,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1775,7 +1775,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1776,7 +1776,7 @@ static int mtk_rx_alloc(struct mtk_eth *
}
ring->dma = dma_alloc_coherent(eth->dma_dev,
@ -22,7 +22,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
&ring->phys, GFP_KERNEL);
if (!ring->dma)
return -ENOMEM;
@@ -1833,9 +1833,8 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1834,9 +1834,8 @@ static void mtk_rx_clean(struct mtk_eth
if (ring->dma) {
dma_free_coherent(eth->dma_dev,
@ -34,7 +34,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->dma = NULL;
}
}
@@ -3405,6 +3404,7 @@ static const struct mtk_soc_data mt2701_
@@ -3406,6 +3405,7 @@ static const struct mtk_soc_data mt2701_
.required_pctl = true,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@ -42,7 +42,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3416,6 +3416,7 @@ static const struct mtk_soc_data mt7621_
@@ -3417,6 +3417,7 @@ static const struct mtk_soc_data mt7621_
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@ -50,7 +50,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3428,6 +3429,7 @@ static const struct mtk_soc_data mt7622_
@@ -3429,6 +3430,7 @@ static const struct mtk_soc_data mt7622_
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@ -58,7 +58,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3439,6 +3441,7 @@ static const struct mtk_soc_data mt7623_
@@ -3440,6 +3442,7 @@ static const struct mtk_soc_data mt7623_
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@ -66,7 +66,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3450,6 +3453,7 @@ static const struct mtk_soc_data mt7629_
@@ -3451,6 +3454,7 @@ static const struct mtk_soc_data mt7629_
.required_pctl = false,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@ -74,7 +74,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3460,6 +3464,7 @@ static const struct mtk_soc_data rt5350_
@@ -3461,6 +3465,7 @@ static const struct mtk_soc_data rt5350_
.required_pctl = false,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@ -84,7 +84,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -864,6 +864,7 @@ struct mtk_tx_dma_desc_info {
@@ -865,6 +865,7 @@ struct mtk_tx_dma_desc_info {
* @required_pctl A bool value to show whether the SoC requires
* the extra setup for those pins used by GMAC.
* @txd_size Tx DMA descriptor size.
@ -92,7 +92,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
*/
struct mtk_soc_data {
u32 ana_rgc3;
@@ -874,6 +875,7 @@ struct mtk_soc_data {
@@ -875,6 +876,7 @@ struct mtk_soc_data {
netdev_features_t hw_features;
struct {
u32 txd_size;

View File

@ -12,7 +12,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1264,9 +1264,12 @@ static struct mtk_rx_ring *mtk_get_rx_ri
@@ -1265,9 +1265,12 @@ static struct mtk_rx_ring *mtk_get_rx_ri
return &eth->rx_ring[0];
for (i = 0; i < MTK_MAX_RX_RING_NUM; i++) {
@ -26,7 +26,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->calc_idx_update = true;
return ring;
}
@@ -1317,7 +1320,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1318,7 +1321,7 @@ static int mtk_poll_rx(struct napi_struc
goto rx_done;
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
data = ring->data[idx];
if (!mtk_rx_get_desc(&trxd, rxd))
@@ -1509,7 +1512,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
@@ -1510,7 +1513,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
mtk_tx_unmap(eth, tx_buf, true);

View File

@ -14,7 +14,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1784,18 +1784,25 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1785,18 +1785,25 @@ static int mtk_rx_alloc(struct mtk_eth *
return -ENOMEM;
for (i = 0; i < rx_dma_size; i++) {
@ -43,7 +43,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
ring->dma_size = rx_dma_size;
ring->calc_idx_update = false;
@@ -1820,14 +1827,17 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1821,14 +1828,17 @@ static void mtk_rx_clean(struct mtk_eth
if (ring->data && ring->dma) {
for (i = 0; i < ring->dma_size; i++) {

View File

@ -73,7 +73,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
/* strings used by ethtool */
static const struct mtk_ethtool_stats {
char str[ETH_GSTRING_LEN];
@@ -618,8 +671,8 @@ static inline void mtk_tx_irq_disable(st
@@ -619,8 +672,8 @@ static inline void mtk_tx_irq_disable(st
u32 val;
spin_lock_irqsave(&eth->tx_irq_lock, flags);
@ -84,7 +84,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_irqrestore(&eth->tx_irq_lock, flags);
}
@@ -629,8 +682,8 @@ static inline void mtk_tx_irq_enable(str
@@ -630,8 +683,8 @@ static inline void mtk_tx_irq_enable(str
u32 val;
spin_lock_irqsave(&eth->tx_irq_lock, flags);
@ -95,7 +95,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_irqrestore(&eth->tx_irq_lock, flags);
}
@@ -640,8 +693,8 @@ static inline void mtk_rx_irq_disable(st
@@ -641,8 +694,8 @@ static inline void mtk_rx_irq_disable(st
u32 val;
spin_lock_irqsave(&eth->rx_irq_lock, flags);
@ -106,7 +106,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_irqrestore(&eth->rx_irq_lock, flags);
}
@@ -651,8 +704,8 @@ static inline void mtk_rx_irq_enable(str
@@ -652,8 +705,8 @@ static inline void mtk_rx_irq_enable(str
u32 val;
spin_lock_irqsave(&eth->rx_irq_lock, flags);
@ -117,7 +117,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_irqrestore(&eth->rx_irq_lock, flags);
}
@@ -703,39 +756,39 @@ void mtk_stats_update_mac(struct mtk_mac
@@ -704,39 +757,39 @@ void mtk_stats_update_mac(struct mtk_mac
hw_stats->rx_checksum_errors +=
mtk_r32(mac->hw, MT7628_SDM_CS_ERR);
} else {
@ -172,7 +172,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
u64_stats_update_end(&hw_stats->syncp);
@@ -875,10 +928,10 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -876,10 +929,10 @@ static int mtk_init_fq_dma(struct mtk_et
txd->txd4 = 0;
}
@ -187,7 +187,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return 0;
}
@@ -1122,7 +1175,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1123,7 +1176,7 @@ static int mtk_tx_map(struct sk_buff *sk
if (MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) ||
!netdev_xmit_more())
@ -196,7 +196,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
} else {
int next_idx;
@@ -1439,6 +1492,7 @@ rx_done:
@@ -1440,6 +1493,7 @@ rx_done:
static int mtk_poll_tx_qdma(struct mtk_eth *eth, int budget,
unsigned int *done, unsigned int *bytes)
{
@ -204,7 +204,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_tx_ring *ring = &eth->tx_ring;
struct mtk_tx_dma *desc;
struct sk_buff *skb;
@@ -1446,7 +1500,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -1447,7 +1501,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
u32 cpu, dma;
cpu = ring->last_free_ptr;
@ -213,7 +213,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
desc = mtk_qdma_phys_to_virt(ring, cpu);
@@ -1481,7 +1535,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -1482,7 +1536,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
}
ring->last_free_ptr = cpu;
@ -222,7 +222,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return budget;
}
@@ -1574,24 +1628,25 @@ static void mtk_handle_status_irq(struct
@@ -1575,24 +1629,25 @@ static void mtk_handle_status_irq(struct
static int mtk_napi_tx(struct napi_struct *napi, int budget)
{
struct mtk_eth *eth = container_of(napi, struct mtk_eth, tx_napi);
@ -252,7 +252,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return budget;
if (napi_complete_done(napi, tx_done))
@@ -1603,6 +1658,7 @@ static int mtk_napi_tx(struct napi_struc
@@ -1604,6 +1659,7 @@ static int mtk_napi_tx(struct napi_struc
static int mtk_napi_rx(struct napi_struct *napi, int budget)
{
struct mtk_eth *eth = container_of(napi, struct mtk_eth, rx_napi);
@ -260,7 +260,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int rx_done_total = 0;
mtk_handle_status_irq(eth);
@@ -1610,21 +1666,21 @@ static int mtk_napi_rx(struct napi_struc
@@ -1611,21 +1667,21 @@ static int mtk_napi_rx(struct napi_struc
do {
int rx_done;
@ -286,7 +286,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (napi_complete_done(napi, rx_done_total))
mtk_rx_irq_enable(eth, MTK_RX_DONE_INT);
@@ -1687,20 +1743,20 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1688,20 +1744,20 @@ static int mtk_tx_alloc(struct mtk_eth *
*/
wmb();
@ -314,7 +314,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
return 0;
@@ -1739,6 +1795,7 @@ static void mtk_tx_clean(struct mtk_eth
@@ -1740,6 +1796,7 @@ static void mtk_tx_clean(struct mtk_eth
static int mtk_rx_alloc(struct mtk_eth *eth, int ring_no, int rx_flag)
{
@ -322,7 +322,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_rx_ring *ring;
int rx_data_len, rx_dma_size;
int i;
@@ -1807,16 +1864,18 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1808,16 +1865,18 @@ static int mtk_rx_alloc(struct mtk_eth *
ring->dma_size = rx_dma_size;
ring->calc_idx_update = false;
ring->calc_idx = rx_dma_size - 1;
@ -345,7 +345,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return 0;
}
@@ -2125,9 +2184,9 @@ static int mtk_dma_busy_wait(struct mtk_
@@ -2126,9 +2185,9 @@ static int mtk_dma_busy_wait(struct mtk_
u32 val;
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
@ -357,7 +357,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ret = readx_poll_timeout_atomic(__raw_readl, eth->base + reg, val,
!(val & (MTK_RX_DMA_BUSY | MTK_TX_DMA_BUSY)),
@@ -2185,8 +2244,8 @@ static int mtk_dma_init(struct mtk_eth *
@@ -2186,8 +2245,8 @@ static int mtk_dma_init(struct mtk_eth *
* automatically
*/
mtk_w32(eth, FC_THRES_DROP_MODE | FC_THRES_DROP_EN |
@ -368,7 +368,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
return 0;
@@ -2260,13 +2319,14 @@ static irqreturn_t mtk_handle_irq_tx(int
@@ -2261,13 +2320,14 @@ static irqreturn_t mtk_handle_irq_tx(int
static irqreturn_t mtk_handle_irq(int irq, void *_eth)
{
struct mtk_eth *eth = _eth;
@ -387,7 +387,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_handle_irq_tx(irq, _eth);
}
@@ -2290,6 +2350,7 @@ static void mtk_poll_controller(struct n
@@ -2291,6 +2351,7 @@ static void mtk_poll_controller(struct n
static int mtk_start_dma(struct mtk_eth *eth)
{
u32 rx_2b_offset = (NET_IP_ALIGN == 2) ? MTK_RX_2B_OFFSET : 0;
@ -395,7 +395,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int err;
err = mtk_dma_init(eth);
@@ -2304,16 +2365,15 @@ static int mtk_start_dma(struct mtk_eth
@@ -2305,16 +2366,15 @@ static int mtk_start_dma(struct mtk_eth
MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
MTK_RX_DMA_EN | MTK_RX_2B_OFFSET |
MTK_RX_BT_32DWORDS,
@ -415,7 +415,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
return 0;
@@ -2439,8 +2499,8 @@ static int mtk_stop(struct net_device *d
@@ -2440,8 +2500,8 @@ static int mtk_stop(struct net_device *d
cancel_work_sync(&eth->tx_dim.work);
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
@ -426,7 +426,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_dma_free(eth);
@@ -2494,6 +2554,7 @@ static void mtk_dim_rx(struct work_struc
@@ -2495,6 +2555,7 @@ static void mtk_dim_rx(struct work_struc
{
struct dim *dim = container_of(work, struct dim, work);
struct mtk_eth *eth = container_of(dim, struct mtk_eth, rx_dim);
@ -434,7 +434,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct dim_cq_moder cur_profile;
u32 val, cur;
@@ -2501,7 +2562,7 @@ static void mtk_dim_rx(struct work_struc
@@ -2502,7 +2563,7 @@ static void mtk_dim_rx(struct work_struc
dim->profile_ix);
spin_lock_bh(&eth->dim_lock);
@ -443,7 +443,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
val &= MTK_PDMA_DELAY_TX_MASK;
val |= MTK_PDMA_DELAY_RX_EN;
@@ -2511,9 +2572,9 @@ static void mtk_dim_rx(struct work_struc
@@ -2512,9 +2573,9 @@ static void mtk_dim_rx(struct work_struc
cur = min_t(u32, cur_profile.pkts, MTK_PDMA_DELAY_PINT_MASK);
val |= cur << MTK_PDMA_DELAY_RX_PINT_SHIFT;
@ -455,7 +455,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_bh(&eth->dim_lock);
@@ -2524,6 +2585,7 @@ static void mtk_dim_tx(struct work_struc
@@ -2525,6 +2586,7 @@ static void mtk_dim_tx(struct work_struc
{
struct dim *dim = container_of(work, struct dim, work);
struct mtk_eth *eth = container_of(dim, struct mtk_eth, tx_dim);
@ -463,7 +463,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct dim_cq_moder cur_profile;
u32 val, cur;
@@ -2531,7 +2593,7 @@ static void mtk_dim_tx(struct work_struc
@@ -2532,7 +2594,7 @@ static void mtk_dim_tx(struct work_struc
dim->profile_ix);
spin_lock_bh(&eth->dim_lock);
@ -472,7 +472,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
val &= MTK_PDMA_DELAY_RX_MASK;
val |= MTK_PDMA_DELAY_TX_EN;
@@ -2541,9 +2603,9 @@ static void mtk_dim_tx(struct work_struc
@@ -2542,9 +2604,9 @@ static void mtk_dim_tx(struct work_struc
cur = min_t(u32, cur_profile.pkts, MTK_PDMA_DELAY_PINT_MASK);
val |= cur << MTK_PDMA_DELAY_TX_PINT_SHIFT;
@ -484,7 +484,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_bh(&eth->dim_lock);
@@ -2554,6 +2616,7 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -2555,6 +2617,7 @@ static int mtk_hw_init(struct mtk_eth *e
{
u32 dma_mask = ETHSYS_DMA_AG_MAP_PDMA | ETHSYS_DMA_AG_MAP_QDMA |
ETHSYS_DMA_AG_MAP_PPE;
@ -492,7 +492,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int i, val, ret;
if (test_and_set_bit(MTK_HW_INIT, &eth->state))
@@ -2628,10 +2691,10 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -2629,10 +2692,10 @@ static int mtk_hw_init(struct mtk_eth *e
mtk_rx_irq_disable(eth, ~0);
/* FE int grouping */
@ -507,7 +507,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
return 0;
@@ -3170,14 +3233,6 @@ static int mtk_probe(struct platform_dev
@@ -3171,14 +3234,6 @@ static int mtk_probe(struct platform_dev
if (IS_ERR(eth->base))
return PTR_ERR(eth->base);
@ -522,7 +522,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
eth->rx_dma_l4_valid = RX_DMA_L4_VALID_PDMA;
eth->ip_align = NET_IP_ALIGN;
@@ -3411,6 +3466,7 @@ static int mtk_remove(struct platform_de
@@ -3412,6 +3467,7 @@ static int mtk_remove(struct platform_de
}
static const struct mtk_soc_data mt2701_data = {
@ -530,7 +530,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.caps = MT7623_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7623_CLKS_BITMAP,
@@ -3422,6 +3478,7 @@ static const struct mtk_soc_data mt2701_
@@ -3423,6 +3479,7 @@ static const struct mtk_soc_data mt2701_
};
static const struct mtk_soc_data mt7621_data = {
@ -538,7 +538,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.caps = MT7621_CAPS,
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7621_CLKS_BITMAP,
@@ -3434,6 +3491,7 @@ static const struct mtk_soc_data mt7621_
@@ -3435,6 +3492,7 @@ static const struct mtk_soc_data mt7621_
};
static const struct mtk_soc_data mt7622_data = {
@ -546,7 +546,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.ana_rgc3 = 0x2028,
.caps = MT7622_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
@@ -3447,6 +3505,7 @@ static const struct mtk_soc_data mt7622_
@@ -3448,6 +3506,7 @@ static const struct mtk_soc_data mt7622_
};
static const struct mtk_soc_data mt7623_data = {
@ -554,7 +554,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.caps = MT7623_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7623_CLKS_BITMAP,
@@ -3459,6 +3518,7 @@ static const struct mtk_soc_data mt7623_
@@ -3460,6 +3519,7 @@ static const struct mtk_soc_data mt7623_
};
static const struct mtk_soc_data mt7629_data = {
@ -562,7 +562,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.ana_rgc3 = 0x128,
.caps = MT7629_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
@@ -3471,6 +3531,7 @@ static const struct mtk_soc_data mt7629_
@@ -3472,6 +3532,7 @@ static const struct mtk_soc_data mt7629_
};
static const struct mtk_soc_data rt5350_data = {
@ -748,7 +748,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
#define MTK_STAT_OFFSET 0x40
#define MTK_WDMA0_BASE 0x2800
@@ -853,8 +762,46 @@ struct mtk_tx_dma_desc_info {
@@ -854,8 +763,46 @@ struct mtk_tx_dma_desc_info {
u8 last:1;
};
@ -795,7 +795,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
* @ana_rgc3: The offset for register ANA_RGC3 related to
* sgmiisys syscon
* @caps Flags shown the extra capability for the SoC
@@ -867,6 +814,7 @@ struct mtk_tx_dma_desc_info {
@@ -868,6 +815,7 @@ struct mtk_tx_dma_desc_info {
* @rxd_size Rx DMA descriptor size.
*/
struct mtk_soc_data {
@ -803,7 +803,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
u32 ana_rgc3;
u32 caps;
u32 required_clks;
@@ -994,8 +942,6 @@ struct mtk_eth {
@@ -995,8 +943,6 @@ struct mtk_eth {
u32 tx_bytes;
struct dim tx_dim;

View File

@ -13,7 +13,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -862,8 +862,8 @@ static inline int mtk_max_buf_size(int f
@@ -863,8 +863,8 @@ static inline int mtk_max_buf_size(int f
return buf_size;
}
@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
{
rxd->rxd2 = READ_ONCE(dma_rxd->rxd2);
if (!(rxd->rxd2 & RX_DMA_DONE))
@@ -872,6 +872,10 @@ static inline bool mtk_rx_get_desc(struc
@@ -873,6 +873,10 @@ static inline bool mtk_rx_get_desc(struc
rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return true;
}
@@ -916,7 +920,7 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -917,7 +921,7 @@ static int mtk_init_fq_dma(struct mtk_et
phy_ring_tail = eth->phy_scratch_ring + soc->txrx.txd_size * (cnt - 1);
for (i = 0; i < cnt; i++) {
@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
txd = (void *)eth->scratch_ring + i * soc->txrx.txd_size;
txd->txd1 = dma_addr + i * MTK_QDMA_PAGE_SIZE;
@@ -926,6 +930,12 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -927,6 +931,12 @@ static int mtk_init_fq_dma(struct mtk_et
txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
txd->txd4 = 0;
@ -57,7 +57,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
mtk_w32(eth, eth->phy_scratch_ring, soc->reg_map->qdma.fq_head);
@@ -1029,10 +1039,12 @@ static void setup_tx_buf(struct mtk_eth
@@ -1030,10 +1040,12 @@ static void setup_tx_buf(struct mtk_eth
}
}
@ -72,7 +72,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
u32 data;
WRITE_ONCE(desc->txd1, info->addr);
@@ -1056,6 +1068,59 @@ static void mtk_tx_set_dma_desc(struct n
@@ -1057,6 +1069,59 @@ static void mtk_tx_set_dma_desc(struct n
WRITE_ONCE(desc->txd4, data);
}
@ -132,7 +132,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static int mtk_tx_map(struct sk_buff *skb, struct net_device *dev,
int tx_num, struct mtk_tx_ring *ring, bool gso)
{
@@ -1064,6 +1129,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1065,6 +1130,7 @@ static int mtk_tx_map(struct sk_buff *sk
.gso = gso,
.csum = skb->ip_summed == CHECKSUM_PARTIAL,
.vlan = skb_vlan_tag_present(skb),
@ -140,7 +140,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.vlan_tci = skb_vlan_tag_get(skb),
.first = true,
.last = !skb_is_nonlinear(skb),
@@ -1123,7 +1189,9 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1124,7 +1190,9 @@ static int mtk_tx_map(struct sk_buff *sk
}
memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
@ -151,7 +151,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
txd_info.last = i == skb_shinfo(skb)->nr_frags - 1 &&
!(frag_size - txd_info.size);
txd_info.addr = skb_frag_dma_map(eth->dma_dev, frag,
@@ -1204,17 +1272,16 @@ err_dma:
@@ -1205,17 +1273,16 @@ err_dma:
return -ENOMEM;
}
@ -172,7 +172,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
} else {
nfrags += skb_shinfo(skb)->nr_frags;
@@ -1266,7 +1333,7 @@ static netdev_tx_t mtk_start_xmit(struct
@@ -1267,7 +1334,7 @@ static netdev_tx_t mtk_start_xmit(struct
if (unlikely(test_bit(MTK_RESETTING, &eth->state)))
goto drop;
@ -181,7 +181,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (unlikely(atomic_read(&ring->free_count) <= tx_num)) {
netif_stop_queue(dev);
netif_err(eth, tx_queued, dev,
@@ -1358,7 +1425,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1359,7 +1426,7 @@ static int mtk_poll_rx(struct napi_struc
int idx;
struct sk_buff *skb;
u8 *data, *new_data;
@ -190,7 +190,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int done = 0, bytes = 0;
while (done < budget) {
@@ -1366,7 +1433,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1367,7 +1434,7 @@ static int mtk_poll_rx(struct napi_struc
unsigned int pktlen;
dma_addr_t dma_addr;
u32 hash, reason;
@ -199,7 +199,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring = mtk_get_rx_ring(eth);
if (unlikely(!ring))
@@ -1376,16 +1443,15 @@ static int mtk_poll_rx(struct napi_struc
@@ -1377,16 +1444,15 @@ static int mtk_poll_rx(struct napi_struc
rxd = (void *)ring->dma + idx * eth->soc->txrx.rxd_size;
data = ring->data[idx];
@ -222,7 +222,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
!eth->netdev[mac]))
@@ -1431,7 +1497,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1432,7 +1498,7 @@ static int mtk_poll_rx(struct napi_struc
pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
skb->dev = netdev;
skb_put(skb, pktlen);
@ -231,7 +231,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
skb->ip_summed = CHECKSUM_UNNECESSARY;
else
skb_checksum_none_assert(skb);
@@ -1449,10 +1515,25 @@ static int mtk_poll_rx(struct napi_struc
@@ -1450,10 +1516,25 @@ static int mtk_poll_rx(struct napi_struc
mtk_ppe_check_skb(eth->ppe, skb,
trxd.rxd4 & MTK_RXD4_FOE_ENTRY);
@ -261,7 +261,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
skb_record_rx_queue(skb, 0);
napi_gro_receive(napi, skb);
@@ -1464,7 +1545,7 @@ release_desc:
@@ -1465,7 +1546,7 @@ release_desc:
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
rxd->rxd2 = RX_DMA_LSO;
else
@ -270,7 +270,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->calc_idx = idx;
@@ -1666,7 +1747,8 @@ static int mtk_napi_rx(struct napi_struc
@@ -1667,7 +1748,8 @@ static int mtk_napi_rx(struct napi_struc
do {
int rx_done;
@ -280,7 +280,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
rx_done = mtk_poll_rx(napi, budget - rx_done_total, eth);
rx_done_total += rx_done;
@@ -1680,10 +1762,11 @@ static int mtk_napi_rx(struct napi_struc
@@ -1681,10 +1763,11 @@ static int mtk_napi_rx(struct napi_struc
if (rx_done_total == budget)
return budget;
@ -294,7 +294,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return rx_done_total;
}
@@ -1693,7 +1776,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1694,7 +1777,7 @@ static int mtk_tx_alloc(struct mtk_eth *
const struct mtk_soc_data *soc = eth->soc;
struct mtk_tx_ring *ring = &eth->tx_ring;
int i, sz = soc->txrx.txd_size;
@ -303,7 +303,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->buf = kcalloc(MTK_DMA_SIZE, sizeof(*ring->buf),
GFP_KERNEL);
@@ -1713,13 +1796,19 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1714,13 +1797,19 @@ static int mtk_tx_alloc(struct mtk_eth *
txd->txd2 = next_ptr;
txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
txd->txd4 = 0;
@ -324,7 +324,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->dma_pdma = dma_alloc_coherent(eth->dma_dev, MTK_DMA_SIZE * sz,
&ring->phys_pdma, GFP_KERNEL);
if (!ring->dma_pdma)
@@ -1799,13 +1888,11 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1800,13 +1889,11 @@ static int mtk_rx_alloc(struct mtk_eth *
struct mtk_rx_ring *ring;
int rx_data_len, rx_dma_size;
int i;
@ -338,7 +338,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
} else {
ring = &eth->rx_ring[ring_no];
}
@@ -1841,7 +1928,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1842,7 +1929,7 @@ static int mtk_rx_alloc(struct mtk_eth *
return -ENOMEM;
for (i = 0; i < rx_dma_size; i++) {
@ -347,7 +347,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
dma_addr_t dma_addr = dma_map_single(eth->dma_dev,
ring->data[i] + NET_SKB_PAD + eth->ip_align,
@@ -1856,26 +1943,47 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1857,26 +1944,47 @@ static int mtk_rx_alloc(struct mtk_eth *
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
rxd->rxd2 = RX_DMA_LSO;
else
@ -403,7 +403,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return 0;
}
@@ -2297,7 +2405,7 @@ static irqreturn_t mtk_handle_irq_rx(int
@@ -2298,7 +2406,7 @@ static irqreturn_t mtk_handle_irq_rx(int
eth->rx_events++;
if (likely(napi_schedule_prep(&eth->rx_napi))) {
__napi_schedule(&eth->rx_napi);
@ -412,7 +412,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
return IRQ_HANDLED;
@@ -2321,8 +2429,10 @@ static irqreturn_t mtk_handle_irq(int ir
@@ -2322,8 +2430,10 @@ static irqreturn_t mtk_handle_irq(int ir
struct mtk_eth *eth = _eth;
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
@ -425,7 +425,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_handle_irq_rx(irq, _eth);
}
if (mtk_r32(eth, reg_map->tx_irq_mask) & MTK_TX_DONE_INT) {
@@ -2340,16 +2450,16 @@ static void mtk_poll_controller(struct n
@@ -2341,16 +2451,16 @@ static void mtk_poll_controller(struct n
struct mtk_eth *eth = mac->hw;
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
@ -445,7 +445,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
int err;
@@ -2360,12 +2470,19 @@ static int mtk_start_dma(struct mtk_eth
@@ -2361,12 +2471,19 @@ static int mtk_start_dma(struct mtk_eth
}
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
@ -471,7 +471,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_w32(eth,
MTK_RX_DMA_EN | rx_2b_offset |
MTK_RX_BT_32DWORDS | MTK_MULTI_EN,
@@ -2439,7 +2556,7 @@ static int mtk_open(struct net_device *d
@@ -2440,7 +2557,7 @@ static int mtk_open(struct net_device *d
napi_enable(&eth->tx_napi);
napi_enable(&eth->rx_napi);
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
@ -480,7 +480,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
refcount_set(&eth->dma_refcnt, 1);
}
else
@@ -2491,7 +2608,7 @@ static int mtk_stop(struct net_device *d
@@ -2492,7 +2609,7 @@ static int mtk_stop(struct net_device *d
mtk_gdm_config(eth, MTK_GDMA_DROP_ALL);
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
@ -489,7 +489,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
napi_disable(&eth->tx_napi);
napi_disable(&eth->rx_napi);
@@ -2651,9 +2768,25 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -2652,9 +2769,25 @@ static int mtk_hw_init(struct mtk_eth *e
return 0;
}
@ -518,7 +518,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (eth->pctl) {
/* Set GE2 driving and slew rate */
@@ -2692,11 +2825,47 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -2693,11 +2826,47 @@ static int mtk_hw_init(struct mtk_eth *e
/* FE int grouping */
mtk_w32(eth, MTK_TX_DONE_INT, reg_map->pdma.int_grp);
@ -568,7 +568,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return 0;
err_disable_pm:
@@ -3233,12 +3402,8 @@ static int mtk_probe(struct platform_dev
@@ -3234,12 +3403,8 @@ static int mtk_probe(struct platform_dev
if (IS_ERR(eth->base))
return PTR_ERR(eth->base);
@ -582,7 +582,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_lock_init(&eth->page_lock);
spin_lock_init(&eth->tx_irq_lock);
@@ -3474,6 +3639,10 @@ static const struct mtk_soc_data mt2701_
@@ -3475,6 +3640,10 @@ static const struct mtk_soc_data mt2701_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@ -593,7 +593,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3487,6 +3656,10 @@ static const struct mtk_soc_data mt7621_
@@ -3488,6 +3657,10 @@ static const struct mtk_soc_data mt7621_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@ -604,7 +604,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3501,6 +3674,10 @@ static const struct mtk_soc_data mt7622_
@@ -3502,6 +3675,10 @@ static const struct mtk_soc_data mt7622_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@ -615,7 +615,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3514,6 +3691,10 @@ static const struct mtk_soc_data mt7623_
@@ -3515,6 +3692,10 @@ static const struct mtk_soc_data mt7623_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@ -626,7 +626,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3527,6 +3708,10 @@ static const struct mtk_soc_data mt7629_
@@ -3528,6 +3709,10 @@ static const struct mtk_soc_data mt7629_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@ -637,7 +637,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3539,6 +3724,10 @@ static const struct mtk_soc_data rt5350_
@@ -3540,6 +3725,10 @@ static const struct mtk_soc_data rt5350_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@ -804,7 +804,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
/* PHY Indirect Access Control registers */
#define MTK_PHY_IAC 0x10004
#define PHY_IAC_ACCESS BIT(31)
@@ -370,6 +434,16 @@
@@ -371,6 +435,16 @@
#define ETHSYS_TRGMII_MT7621_DDR_PLL BIT(5)
/* ethernet reset control register */
@ -821,7 +821,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
#define ETHSYS_RSTCTRL 0x34
#define RSTCTRL_FE BIT(6)
#define RSTCTRL_PPE BIT(31)
@@ -453,6 +527,17 @@ struct mtk_rx_dma {
@@ -454,6 +528,17 @@ struct mtk_rx_dma {
unsigned int rxd4;
} __packed __aligned(4);
@ -839,7 +839,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_tx_dma {
unsigned int txd1;
unsigned int txd2;
@@ -460,6 +545,17 @@ struct mtk_tx_dma {
@@ -461,6 +546,17 @@ struct mtk_tx_dma {
unsigned int txd4;
} __packed __aligned(4);
@ -857,7 +857,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_eth;
struct mtk_mac;
@@ -646,7 +742,9 @@ enum mkt_eth_capabilities {
@@ -647,7 +743,9 @@ enum mkt_eth_capabilities {
MTK_SHARED_INT_BIT,
MTK_TRGMII_MT7621_CLK_BIT,
MTK_QDMA_BIT,
@ -867,7 +867,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
/* MUX BITS*/
MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT,
@@ -678,7 +776,9 @@ enum mkt_eth_capabilities {
@@ -679,7 +777,9 @@ enum mkt_eth_capabilities {
#define MTK_SHARED_INT BIT(MTK_SHARED_INT_BIT)
#define MTK_TRGMII_MT7621_CLK BIT(MTK_TRGMII_MT7621_CLK_BIT)
#define MTK_QDMA BIT(MTK_QDMA_BIT)
@ -877,7 +877,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
#define MTK_ETH_MUX_GDM1_TO_GMAC1_ESW \
BIT(MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT)
@@ -755,6 +855,7 @@ struct mtk_tx_dma_desc_info {
@@ -756,6 +856,7 @@ struct mtk_tx_dma_desc_info {
dma_addr_t addr;
u32 size;
u16 vlan_tci;
@ -885,7 +885,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
u8 gso:1;
u8 csum:1;
u8 vlan:1;
@@ -812,6 +913,10 @@ struct mtk_reg_map {
@@ -813,6 +914,10 @@ struct mtk_reg_map {
* the extra setup for those pins used by GMAC.
* @txd_size Tx DMA descriptor size.
* @rxd_size Rx DMA descriptor size.
@ -896,7 +896,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
*/
struct mtk_soc_data {
const struct mtk_reg_map *reg_map;
@@ -824,6 +929,10 @@ struct mtk_soc_data {
@@ -825,6 +930,10 @@ struct mtk_soc_data {
struct {
u32 txd_size;
u32 rxd_size;
@ -907,7 +907,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
} txrx;
};
@@ -942,7 +1051,6 @@ struct mtk_eth {
@@ -943,7 +1052,6 @@ struct mtk_eth {
u32 tx_bytes;
struct dim tx_dim;

View File

@ -10,7 +10,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -946,18 +946,15 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -947,18 +947,15 @@ static int mtk_init_fq_dma(struct mtk_et
return 0;
}
@ -33,7 +33,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return &ring->buf[idx];
}
@@ -965,13 +962,12 @@ static struct mtk_tx_buf *mtk_desc_to_tx
@@ -966,13 +963,12 @@ static struct mtk_tx_buf *mtk_desc_to_tx
static struct mtk_tx_dma *qdma_to_pdma(struct mtk_tx_ring *ring,
struct mtk_tx_dma *dma)
{
@ -50,7 +50,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
static void mtk_tx_unmap(struct mtk_eth *eth, struct mtk_tx_buf *tx_buf,
@@ -1388,7 +1384,7 @@ static struct mtk_rx_ring *mtk_get_rx_ri
@@ -1389,7 +1385,7 @@ static struct mtk_rx_ring *mtk_get_rx_ri
ring = &eth->rx_ring[i];
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
@ -59,7 +59,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (rxd->rxd2 & RX_DMA_DONE) {
ring->calc_idx_update = true;
return ring;
@@ -1440,7 +1436,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1441,7 +1437,7 @@ static int mtk_poll_rx(struct napi_struc
goto rx_done;
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
@ -68,7 +68,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
data = ring->data[idx];
if (!mtk_rx_get_desc(eth, &trxd, rxd))
@@ -1647,7 +1643,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
@@ -1648,7 +1644,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
mtk_tx_unmap(eth, tx_buf, true);
@ -77,7 +77,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->last_free = desc;
atomic_inc(&ring->free_count);
@@ -1792,7 +1788,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1793,7 +1789,7 @@ static int mtk_tx_alloc(struct mtk_eth *
int next = (i + 1) % MTK_DMA_SIZE;
u32 next_ptr = ring->phys + next * sz;
@ -86,7 +86,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
txd->txd2 = next_ptr;
txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
txd->txd4 = 0;
@@ -1822,7 +1818,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1823,7 +1819,7 @@ static int mtk_tx_alloc(struct mtk_eth *
ring->dma_size = MTK_DMA_SIZE;
atomic_set(&ring->free_count, MTK_DMA_SIZE - 2);
@ -95,7 +95,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->last_free = (void *)txd;
ring->last_free_ptr = (u32)(ring->phys + ((MTK_DMA_SIZE - 1) * sz));
ring->thresh = MAX_SKB_FRAGS;
@@ -1937,7 +1933,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1938,7 +1934,7 @@ static int mtk_rx_alloc(struct mtk_eth *
if (unlikely(dma_mapping_error(eth->dma_dev, dma_addr)))
return -ENOMEM;
@ -104,7 +104,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
rxd->rxd1 = (unsigned int)dma_addr;
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
@@ -1999,7 +1995,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -2000,7 +1996,7 @@ static void mtk_rx_clean(struct mtk_eth
if (!ring->data[i])
continue;
@ -115,7 +115,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -688,7 +688,7 @@ struct mtk_tx_buf {
@@ -689,7 +689,7 @@ struct mtk_tx_buf {
* are present
*/
struct mtk_tx_ring {
@ -124,7 +124,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_tx_buf *buf;
dma_addr_t phys;
struct mtk_tx_dma *next_free;
@@ -718,7 +718,7 @@ enum mtk_rx_flags {
@@ -719,7 +719,7 @@ enum mtk_rx_flags {
* @calc_idx: The current head of ring
*/
struct mtk_rx_ring {

View File

@ -11,7 +11,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -922,7 +922,7 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -923,7 +923,7 @@ static int mtk_init_fq_dma(struct mtk_et
for (i = 0; i < cnt; i++) {
struct mtk_tx_dma_v2 *txd;
@ -22,7 +22,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
txd->txd2 = eth->phy_scratch_ring +
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -1028,7 +1028,7 @@ struct mtk_eth {
@@ -1029,7 +1029,7 @@ struct mtk_eth {
struct mtk_rx_ring rx_ring_qdma;
struct napi_struct tx_napi;
struct napi_struct rx_napi;

View File

@ -65,7 +65,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
@@ -3711,6 +3748,21 @@ static const struct mtk_soc_data mt7629_
@@ -3712,6 +3749,21 @@ static const struct mtk_soc_data mt7629_
},
};
@ -87,7 +87,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static const struct mtk_soc_data rt5350_data = {
.reg_map = &mt7628_reg_map,
.caps = MT7628_CAPS,
@@ -3733,6 +3785,7 @@ const struct of_device_id of_mtk_match[]
@@ -3734,6 +3786,7 @@ const struct of_device_id of_mtk_match[]
{ .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
{ .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
{ .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
@ -97,7 +97,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -623,6 +623,10 @@ enum mtk_clks_map {
@@ -624,6 +624,10 @@ enum mtk_clks_map {
MTK_CLK_SGMII2_CDR_FB,
MTK_CLK_SGMII_CK,
MTK_CLK_ETH2PLL,
@ -108,7 +108,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
MTK_CLK_MAX
};
@@ -653,6 +657,16 @@ enum mtk_clks_map {
@@ -654,6 +658,16 @@ enum mtk_clks_map {
BIT(MTK_CLK_SGMII2_CDR_FB) | \
BIT(MTK_CLK_SGMII_CK) | \
BIT(MTK_CLK_ETH2PLL) | BIT(MTK_CLK_SGMIITOP))
@ -125,7 +125,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
enum mtk_dev_state {
MTK_HW_INIT,
@@ -851,6 +865,10 @@ enum mkt_eth_capabilities {
@@ -852,6 +866,10 @@ enum mkt_eth_capabilities {
MTK_MUX_U3_GMAC2_TO_QPHY | \
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA)

View File

@ -12,7 +12,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1462,8 +1462,8 @@ static int mtk_poll_rx(struct napi_struc
@@ -1463,8 +1463,8 @@ static int mtk_poll_rx(struct napi_struc
int done = 0, bytes = 0;
while (done < budget) {
@ -22,7 +22,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
dma_addr_t dma_addr;
u32 hash, reason;
int mac = 0;
@@ -1530,7 +1530,13 @@ static int mtk_poll_rx(struct napi_struc
@@ -1531,7 +1531,13 @@ static int mtk_poll_rx(struct napi_struc
pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
skb->dev = netdev;
skb_put(skb, pktlen);
@ -37,7 +37,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
skb->ip_summed = CHECKSUM_UNNECESSARY;
else
skb_checksum_none_assert(skb);
@@ -3758,6 +3764,7 @@ static const struct mtk_soc_data mt7986_
@@ -3759,6 +3765,7 @@ static const struct mtk_soc_data mt7986_
.txd_size = sizeof(struct mtk_tx_dma_v2),
.rxd_size = sizeof(struct mtk_rx_dma_v2),
.rx_irq_done_mask = MTK_RX_DONE_INT_V2,

View File

@ -14,7 +14,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3354,6 +3354,26 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -3355,6 +3355,26 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = &eth->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;

View File

@ -16,7 +16,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -567,24 +567,8 @@ static void mtk_validate(struct phylink_
@@ -568,24 +568,8 @@ static void mtk_validate(struct phylink_
unsigned long *supported,
struct phylink_link_state *state)
{
@ -41,7 +41,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
phylink_set_port_modes(mask);
phylink_set(mask, Autoneg);
@@ -611,7 +595,6 @@ static void mtk_validate(struct phylink_
@@ -612,7 +596,6 @@ static void mtk_validate(struct phylink_
case PHY_INTERFACE_MODE_MII:
case PHY_INTERFACE_MODE_RMII:
case PHY_INTERFACE_MODE_REVMII:
@ -49,7 +49,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
default:
phylink_set(mask, 10baseT_Half);
phylink_set(mask, 10baseT_Full);
@@ -620,23 +603,6 @@ static void mtk_validate(struct phylink_
@@ -621,23 +604,6 @@ static void mtk_validate(struct phylink_
break;
}

View File

@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -577,8 +577,9 @@ static void mtk_validate(struct phylink_
@@ -578,8 +578,9 @@ static void mtk_validate(struct phylink_
phylink_set(mask, 1000baseT_Full);
break;
case PHY_INTERFACE_MODE_1000BASEX:
@ -28,7 +28,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
phylink_set(mask, 2500baseX_Full);
break;
case PHY_INTERFACE_MODE_GMII:
@@ -608,11 +609,6 @@ static void mtk_validate(struct phylink_
@@ -609,11 +610,6 @@ static void mtk_validate(struct phylink_
linkmode_and(supported, supported, mask);
linkmode_and(state->advertising, state->advertising, mask);

View File

@ -14,7 +14,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -563,56 +563,8 @@ static void mtk_mac_link_up(struct phyli
@@ -564,56 +564,8 @@ static void mtk_mac_link_up(struct phyli
mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
}
@ -72,7 +72,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.mac_pcs_get_state = mtk_mac_pcs_get_state,
.mac_an_restart = mtk_mac_an_restart,
.mac_config = mtk_mac_config,
@@ -3316,6 +3268,9 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -3317,6 +3269,9 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = &eth->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;

View File

@ -16,7 +16,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3268,6 +3268,10 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -3269,6 +3269,10 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = &eth->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;

View File

@ -16,7 +16,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3567,9 +3567,9 @@ static int mtk_probe(struct platform_dev
@@ -3568,9 +3568,9 @@ static int mtk_probe(struct platform_dev
*/
init_dummy_netdev(&eth->dummy_dev);
netif_napi_add(&eth->dummy_dev, &eth->tx_napi, mtk_napi_tx,

View File

@ -15,7 +15,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3263,7 +3263,6 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -3264,7 +3264,6 @@ static int mtk_add_mac(struct mtk_eth *e
/* mac config is not set */
mac->interface = PHY_INTERFACE_MODE_NA;
@ -25,7 +25,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mac->phylink_config.dev = &eth->netdev[id]->dev;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -1085,7 +1085,6 @@ struct mtk_eth {
@@ -1086,7 +1086,6 @@ struct mtk_eth {
struct mtk_mac {
int id;
phy_interface_t interface;

View File

@ -14,7 +14,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -956,23 +956,15 @@ struct mtk_soc_data {
@@ -957,23 +957,15 @@ struct mtk_soc_data {
/* currently no SoC has more than 2 macs */
#define MTK_MAX_DEVS 2

View File

@ -24,7 +24,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
#include "mtk_ppe.h"
#define MTK_QDMA_PAGE_SIZE 2048
@@ -473,9 +474,10 @@
@@ -474,9 +475,10 @@
#define SGMSYS_SGMII_MODE 0x20
#define SGMII_IF_MODE_BIT0 BIT(0)
#define SGMII_SPEED_DUPLEX_AN BIT(1)

View File

@ -18,7 +18,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -532,8 +532,18 @@ static void mtk_mac_link_up(struct phyli
@@ -533,8 +533,18 @@ static void mtk_mac_link_up(struct phyli
{
struct mtk_mac *mac = container_of(config, struct mtk_mac,
phylink_config);
@ -38,7 +38,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mcr &= ~(MAC_MCR_SPEED_100 | MAC_MCR_SPEED_1000 |
MAC_MCR_FORCE_DPX | MAC_MCR_FORCE_TX_FC |
MAC_MCR_FORCE_RX_FC);
@@ -3267,9 +3277,7 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -3268,9 +3278,7 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = &eth->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;
@ -51,7 +51,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
MAC_10 | MAC_100 | MAC_1000 | MAC_2500FD;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -1103,6 +1103,7 @@ int mtk_sgmii_init(struct mtk_sgmii *ss,
@@ -1104,6 +1104,7 @@ int mtk_sgmii_init(struct mtk_sgmii *ss,
int mtk_sgmii_setup_mode_an(struct mtk_sgmii *ss, int id);
int mtk_sgmii_setup_mode_force(struct mtk_sgmii *ss, int id,
const struct phylink_link_state *state);

View File

@ -29,7 +29,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -1102,7 +1102,7 @@ int mtk_sgmii_init(struct mtk_sgmii *ss,
@@ -1103,7 +1103,7 @@ int mtk_sgmii_init(struct mtk_sgmii *ss,
u32 ana_rgc3);
int mtk_sgmii_setup_mode_an(struct mtk_sgmii *ss, int id);
int mtk_sgmii_setup_mode_force(struct mtk_sgmii *ss, int id,

View File

@ -32,7 +32,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -1100,9 +1100,8 @@ u32 mtk_r32(struct mtk_eth *eth, unsigne
@@ -1101,9 +1101,8 @@ u32 mtk_r32(struct mtk_eth *eth, unsigne
int mtk_sgmii_init(struct mtk_sgmii *ss, struct device_node *np,
u32 ana_rgc3);

View File

@ -25,27 +25,22 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
/* MT76x8 has no hardware settings between for the MAC */
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
@@ -455,16 +455,6 @@ static void mtk_mac_config(struct phylin
@@ -455,6 +455,25 @@ static void mtk_mac_config(struct phylin
return;
}
- /* Setup gmac */
- mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
- mcr_new = mcr_cur;
- mcr_new |= MAC_MCR_IPG_CFG | MAC_MCR_FORCE_MODE |
- MAC_MCR_BACKOFF_EN | MAC_MCR_BACKPR_EN | MAC_MCR_FORCE_LINK;
-
- /* Only update control register when needed! */
- if (mcr_new != mcr_cur)
- mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
-
return;
err_phy:
@@ -477,6 +467,26 @@ init_err:
mac->id, phy_modes(state->interface), err);
}
+ return;
+
+err_phy:
+ dev_err(eth->dev, "%s: GMAC%d mode %s not supported!\n", __func__,
+ mac->id, phy_modes(state->interface));
+ return;
+
+init_err:
+ dev_err(eth->dev, "%s: GMAC%d mode %s err: %d!\n", __func__,
+ mac->id, phy_modes(state->interface), err);
+}
+
+static int mtk_mac_finish(struct phylink_config *config, unsigned int mode,
+ phy_interface_t interface)
+{
@ -53,23 +48,28 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+ phylink_config);
+ u32 mcr_cur, mcr_new;
+
+ /* Setup gmac */
+ mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
+ mcr_new = mcr_cur;
+ mcr_new |= MAC_MCR_IPG_CFG | MAC_MCR_FORCE_MODE |
+ MAC_MCR_BACKOFF_EN | MAC_MCR_BACKPR_EN | MAC_MCR_FORCE_LINK;
+
+ /* Only update control register when needed! */
+ if (mcr_new != mcr_cur)
+ mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
+
/* Setup gmac */
mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
mcr_new = mcr_cur;
@@ -466,16 +485,7 @@ static void mtk_mac_config(struct phylin
if (mcr_new != mcr_cur)
mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
- return;
-
-err_phy:
- dev_err(eth->dev, "%s: GMAC%d mode %s not supported!\n", __func__,
- mac->id, phy_modes(state->interface));
- return;
-
-init_err:
- dev_err(eth->dev, "%s: GMAC%d mode %s err: %d!\n", __func__,
- mac->id, phy_modes(state->interface), err);
+ return 0;
+}
+
}
static void mtk_mac_pcs_get_state(struct phylink_config *config,
struct phylink_link_state *state)
{
@@ -581,6 +591,7 @@ static const struct phylink_mac_ops mtk_
@@ -582,6 +592,7 @@ static const struct phylink_mac_ops mtk_
.mac_pcs_get_state = mtk_mac_pcs_get_state,
.mac_an_restart = mtk_mac_an_restart,
.mac_config = mtk_mac_config,

View File

@ -47,7 +47,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mcr_new = mcr_cur;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -1087,6 +1087,7 @@ struct mtk_mac {
@@ -1088,6 +1088,7 @@ struct mtk_mac {
struct mtk_hw_stats *hw_stats;
__be32 hwlro_ip[MTK_MAX_LRO_IP_CNT];
int hwlro_ip_cnt;

View File

@ -18,7 +18,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -958,16 +958,23 @@ struct mtk_soc_data {
@@ -959,16 +959,23 @@ struct mtk_soc_data {
/* currently no SoC has more than 2 macs */
#define MTK_MAX_DEVS 2

View File

@ -69,7 +69,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
/* Save the syscfg0 value for mac_finish */
mac->syscfg0 = val;
} else if (phylink_autoneg_inband(mode)) {
@@ -526,14 +536,6 @@ static void mtk_mac_pcs_get_state(struct
@@ -527,14 +537,6 @@ static void mtk_mac_pcs_get_state(struct
state->pause |= MLO_PAUSE_TX;
}
@ -84,7 +84,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
static void mtk_mac_link_down(struct phylink_config *config, unsigned int mode,
phy_interface_t interface)
{
@@ -554,15 +556,6 @@ static void mtk_mac_link_up(struct phyli
@@ -555,15 +557,6 @@ static void mtk_mac_link_up(struct phyli
phylink_config);
u32 mcr;
@ -100,7 +100,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mcr = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
mcr &= ~(MAC_MCR_SPEED_100 | MAC_MCR_SPEED_1000 |
MAC_MCR_FORCE_DPX | MAC_MCR_FORCE_TX_FC |
@@ -595,8 +588,8 @@ static void mtk_mac_link_up(struct phyli
@@ -596,8 +589,8 @@ static void mtk_mac_link_up(struct phyli
static const struct phylink_mac_ops mtk_phylink_ops = {
.validate = phylink_generic_validate,
@ -112,7 +112,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.mac_link_down = mtk_mac_link_down,
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -963,10 +963,12 @@ struct mtk_soc_data {
@@ -964,10 +964,12 @@ struct mtk_soc_data {
* @regmap: The register map pointing at the range used to setup
* SGMII modes
* @ana_rgc3: The offset refers to register ANA_RGC3 related to regmap
@ -125,7 +125,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
};
/* struct mtk_sgmii - This is the structure holding sgmii regmap and its
@@ -1106,12 +1108,9 @@ void mtk_stats_update_mac(struct mtk_mac
@@ -1107,12 +1109,9 @@ void mtk_stats_update_mac(struct mtk_mac
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg);
u32 mtk_r32(struct mtk_eth *eth, unsigned reg);

View File

@ -21,7 +21,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -1191,27 +1191,31 @@ static int
@@ -1194,27 +1194,31 @@ static int
mt7530_port_bridge_join(struct dsa_switch *ds, int port,
struct net_device *bridge)
{
@ -65,7 +65,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
}
/* Add the all other ports to this port matrix. */
@@ -1316,24 +1320,28 @@ static void
@@ -1319,24 +1323,28 @@ static void
mt7530_port_bridge_leave(struct dsa_switch *ds, int port,
struct net_device *bridge)
{

View File

@ -23,7 +23,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2402,6 +2402,32 @@ mt7531_setup(struct dsa_switch *ds)
@@ -2407,6 +2407,32 @@ mt7531_setup(struct dsa_switch *ds)
return 0;
}
@ -56,7 +56,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static bool
mt7530_phy_mode_supported(struct dsa_switch *ds, int port,
const struct phylink_link_state *state)
@@ -2438,6 +2464,37 @@ static bool mt7531_is_rgmii_port(struct
@@ -2443,6 +2469,37 @@ static bool mt7531_is_rgmii_port(struct
return (port == 5) && (priv->p5_intf_sel != P5_INTF_SEL_GMAC5_SGMII);
}
@ -94,7 +94,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static bool
mt7531_phy_mode_supported(struct dsa_switch *ds, int port,
const struct phylink_link_state *state)
@@ -2914,6 +2971,18 @@ mt7531_cpu_port_config(struct dsa_switch
@@ -2919,6 +2976,18 @@ mt7531_cpu_port_config(struct dsa_switch
return 0;
}
@ -113,7 +113,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static void
mt7530_mac_port_validate(struct dsa_switch *ds, int port,
unsigned long *supported)
@@ -3149,6 +3218,7 @@ static const struct dsa_switch_ops mt753
@@ -3154,6 +3223,7 @@ static const struct dsa_switch_ops mt753
.port_vlan_del = mt7530_port_vlan_del,
.port_mirror_add = mt753x_port_mirror_add,
.port_mirror_del = mt753x_port_mirror_del,
@ -121,7 +121,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.phylink_validate = mt753x_phylink_validate,
.phylink_mac_link_state = mt753x_phylink_mac_link_state,
.phylink_mac_config = mt753x_phylink_mac_config,
@@ -3166,6 +3236,7 @@ static const struct mt753x_info mt753x_t
@@ -3171,6 +3241,7 @@ static const struct mt753x_info mt753x_t
.phy_read = mt7530_phy_read,
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
@ -129,7 +129,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.phy_mode_supported = mt7530_phy_mode_supported,
.mac_port_validate = mt7530_mac_port_validate,
.mac_port_get_state = mt7530_phylink_mac_link_state,
@@ -3177,6 +3248,7 @@ static const struct mt753x_info mt753x_t
@@ -3182,6 +3253,7 @@ static const struct mt753x_info mt753x_t
.phy_read = mt7530_phy_read,
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
@ -137,7 +137,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.phy_mode_supported = mt7530_phy_mode_supported,
.mac_port_validate = mt7530_mac_port_validate,
.mac_port_get_state = mt7530_phylink_mac_link_state,
@@ -3189,6 +3261,7 @@ static const struct mt753x_info mt753x_t
@@ -3194,6 +3266,7 @@ static const struct mt753x_info mt753x_t
.phy_write = mt7531_ind_phy_write,
.pad_setup = mt7531_pad_setup,
.cpu_port_config = mt7531_cpu_port_config,
@ -145,7 +145,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.phy_mode_supported = mt7531_phy_mode_supported,
.mac_port_validate = mt7531_mac_port_validate,
.mac_port_get_state = mt7531_phylink_mac_link_state,
@@ -3251,6 +3324,7 @@ mt7530_probe(struct mdio_device *mdiodev
@@ -3256,6 +3329,7 @@ mt7530_probe(struct mdio_device *mdiodev
*/
if (!priv->info->sw_setup || !priv->info->pad_setup ||
!priv->info->phy_read || !priv->info->phy_write ||

View File

@ -21,7 +21,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2428,37 +2428,6 @@ static void mt7530_mac_port_get_caps(str
@@ -2433,37 +2433,6 @@ static void mt7530_mac_port_get_caps(str
}
}
@ -59,7 +59,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static bool mt7531_is_rgmii_port(struct mt7530_priv *priv, u32 port)
{
return (port == 5) && (priv->p5_intf_sel != P5_INTF_SEL_GMAC5_SGMII);
@@ -2495,44 +2464,6 @@ static void mt7531_mac_port_get_caps(str
@@ -2500,44 +2469,6 @@ static void mt7531_mac_port_get_caps(str
}
}
@ -104,7 +104,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static int
mt753x_pad_setup(struct dsa_switch *ds, const struct phylink_link_state *state)
{
@@ -2787,9 +2718,6 @@ mt753x_phylink_mac_config(struct dsa_swi
@@ -2792,9 +2723,6 @@ mt753x_phylink_mac_config(struct dsa_swi
struct mt7530_priv *priv = ds->priv;
u32 mcr_cur, mcr_new;
@ -114,7 +114,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
switch (port) {
case 0 ... 4: /* Internal phy */
if (state->interface != PHY_INTERFACE_MODE_GMII)
@@ -3005,12 +2933,6 @@ mt753x_phylink_validate(struct dsa_switc
@@ -3010,12 +2938,6 @@ mt753x_phylink_validate(struct dsa_switc
__ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
struct mt7530_priv *priv = ds->priv;
@ -127,7 +127,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
phylink_set_port_modes(mask);
if (state->interface != PHY_INTERFACE_MODE_TRGMII &&
@@ -3237,7 +3159,6 @@ static const struct mt753x_info mt753x_t
@@ -3242,7 +3164,6 @@ static const struct mt753x_info mt753x_t
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
.mac_port_get_caps = mt7530_mac_port_get_caps,
@ -135,7 +135,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_validate = mt7530_mac_port_validate,
.mac_port_get_state = mt7530_phylink_mac_link_state,
.mac_port_config = mt7530_mac_config,
@@ -3249,7 +3170,6 @@ static const struct mt753x_info mt753x_t
@@ -3254,7 +3175,6 @@ static const struct mt753x_info mt753x_t
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
.mac_port_get_caps = mt7530_mac_port_get_caps,
@ -143,7 +143,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_validate = mt7530_mac_port_validate,
.mac_port_get_state = mt7530_phylink_mac_link_state,
.mac_port_config = mt7530_mac_config,
@@ -3262,7 +3182,6 @@ static const struct mt753x_info mt753x_t
@@ -3267,7 +3187,6 @@ static const struct mt753x_info mt753x_t
.pad_setup = mt7531_pad_setup,
.cpu_port_config = mt7531_cpu_port_config,
.mac_port_get_caps = mt7531_mac_port_get_caps,
@ -151,7 +151,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_validate = mt7531_mac_port_validate,
.mac_port_get_state = mt7531_phylink_mac_link_state,
.mac_port_config = mt7531_mac_config,
@@ -3325,7 +3244,6 @@ mt7530_probe(struct mdio_device *mdiodev
@@ -3330,7 +3249,6 @@ mt7530_probe(struct mdio_device *mdiodev
if (!priv->info->sw_setup || !priv->info->pad_setup ||
!priv->info->phy_read || !priv->info->phy_write ||
!priv->info->mac_port_get_caps ||

View File

@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2957,11 +2957,6 @@ mt753x_phylink_validate(struct dsa_switc
@@ -2962,11 +2962,6 @@ mt753x_phylink_validate(struct dsa_switc
linkmode_and(supported, supported, mask);
linkmode_and(state->advertising, state->advertising, mask);

View File

@ -23,7 +23,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2535,12 +2535,13 @@ static int mt7531_rgmii_setup(struct mt7
@@ -2540,12 +2540,13 @@ static int mt7531_rgmii_setup(struct mt7
}
static void mt7531_sgmii_validate(struct mt7530_priv *priv, int port,
@ -38,7 +38,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
phylink_set(supported, 2500baseX_Full);
phylink_set(supported, 2500baseT_Full);
}
@@ -2913,16 +2914,18 @@ static void mt753x_phylink_get_caps(stru
@@ -2918,16 +2919,18 @@ static void mt753x_phylink_get_caps(stru
static void
mt7530_mac_port_validate(struct dsa_switch *ds, int port,
@ -58,7 +58,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
}
static void
@@ -2945,12 +2948,13 @@ mt753x_phylink_validate(struct dsa_switc
@@ -2950,12 +2953,13 @@ mt753x_phylink_validate(struct dsa_switc
}
/* This switch only supports 1G full-duplex. */

View File

@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2534,19 +2534,6 @@ static int mt7531_rgmii_setup(struct mt7
@@ -2539,19 +2539,6 @@ static int mt7531_rgmii_setup(struct mt7
return 0;
}
@ -40,7 +40,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static void
mt7531_sgmii_link_up_force(struct dsa_switch *ds, int port,
unsigned int mode, phy_interface_t interface,
@@ -2913,51 +2900,21 @@ static void mt753x_phylink_get_caps(stru
@@ -2918,51 +2905,21 @@ static void mt753x_phylink_get_caps(stru
}
static void
@ -97,7 +97,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
linkmode_and(supported, supported, mask);
linkmode_and(state->advertising, state->advertising, mask);
@@ -3158,7 +3115,6 @@ static const struct mt753x_info mt753x_t
@@ -3163,7 +3120,6 @@ static const struct mt753x_info mt753x_t
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
.mac_port_get_caps = mt7530_mac_port_get_caps,
@ -105,7 +105,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_get_state = mt7530_phylink_mac_link_state,
.mac_port_config = mt7530_mac_config,
},
@@ -3169,7 +3125,6 @@ static const struct mt753x_info mt753x_t
@@ -3174,7 +3130,6 @@ static const struct mt753x_info mt753x_t
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
.mac_port_get_caps = mt7530_mac_port_get_caps,
@ -113,7 +113,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_get_state = mt7530_phylink_mac_link_state,
.mac_port_config = mt7530_mac_config,
},
@@ -3181,7 +3136,6 @@ static const struct mt753x_info mt753x_t
@@ -3186,7 +3141,6 @@ static const struct mt753x_info mt753x_t
.pad_setup = mt7531_pad_setup,
.cpu_port_config = mt7531_cpu_port_config,
.mac_port_get_caps = mt7531_mac_port_get_caps,
@ -121,7 +121,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_get_state = mt7531_phylink_mac_link_state,
.mac_port_config = mt7531_mac_config,
.mac_pcs_an_restart = mt7531_sgmii_restart_an,
@@ -3243,7 +3197,6 @@ mt7530_probe(struct mdio_device *mdiodev
@@ -3248,7 +3202,6 @@ mt7530_probe(struct mdio_device *mdiodev
if (!priv->info->sw_setup || !priv->info->pad_setup ||
!priv->info->phy_read || !priv->info->phy_write ||
!priv->info->mac_port_get_caps ||

View File

@ -33,7 +33,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
/* String, offset, and register size in bytes if different from 4 bytes */
static const struct mt7530_mib_desc mt7530_mib[] = {
MIB_DESC(1, 0x00, "TxDrop"),
@@ -2534,12 +2539,11 @@ static int mt7531_rgmii_setup(struct mt7
@@ -2539,12 +2544,11 @@ static int mt7531_rgmii_setup(struct mt7
return 0;
}
@ -50,7 +50,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
unsigned int val;
/* For adjusting speed and duplex of SGMII force mode. */
@@ -2565,6 +2569,9 @@ mt7531_sgmii_link_up_force(struct dsa_sw
@@ -2570,6 +2574,9 @@ mt7531_sgmii_link_up_force(struct dsa_sw
/* MT7531 SGMII 1G force mode can only work in full duplex mode,
* no matter MT7531_SGMII_FORCE_HALF_DUPLEX is set or not.
@ -60,7 +60,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
*/
if ((speed == SPEED_10 || speed == SPEED_100) &&
duplex != DUPLEX_FULL)
@@ -2640,9 +2647,10 @@ static int mt7531_sgmii_setup_mode_an(st
@@ -2645,9 +2652,10 @@ static int mt7531_sgmii_setup_mode_an(st
return 0;
}
@ -73,7 +73,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
u32 val;
/* Only restart AN when AN is enabled */
@@ -2699,6 +2707,24 @@ mt753x_mac_config(struct dsa_switch *ds,
@@ -2704,6 +2712,24 @@ mt753x_mac_config(struct dsa_switch *ds,
return priv->info->mac_port_config(ds, port, mode, state->interface);
}
@ -98,7 +98,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static void
mt753x_phylink_mac_config(struct dsa_switch *ds, int port, unsigned int mode,
const struct phylink_link_state *state)
@@ -2760,17 +2786,6 @@ unsupported:
@@ -2765,17 +2791,6 @@ unsupported:
mt7530_write(priv, MT7530_PMCR_P(port), mcr_new);
}
@ -116,7 +116,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static void mt753x_phylink_mac_link_down(struct dsa_switch *ds, int port,
unsigned int mode,
phy_interface_t interface)
@@ -2780,16 +2795,13 @@ static void mt753x_phylink_mac_link_down
@@ -2785,16 +2800,13 @@ static void mt753x_phylink_mac_link_down
mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK);
}
@ -139,7 +139,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
}
static void mt753x_phylink_mac_link_up(struct dsa_switch *ds, int port,
@@ -2802,8 +2814,6 @@ static void mt753x_phylink_mac_link_up(s
@@ -2807,8 +2819,6 @@ static void mt753x_phylink_mac_link_up(s
struct mt7530_priv *priv = ds->priv;
u32 mcr;
@ -148,7 +148,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
mcr = PMCR_RX_EN | PMCR_TX_EN | PMCR_FORCE_LNK;
/* MT753x MAC works in 1G full duplex mode for all up-clocked
@@ -2881,6 +2891,8 @@ mt7531_cpu_port_config(struct dsa_switch
@@ -2886,6 +2896,8 @@ mt7531_cpu_port_config(struct dsa_switch
return ret;
mt7530_write(priv, MT7530_PMCR_P(port),
PMCR_CPU_PORT_SETTING(priv->id));
@ -157,7 +157,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, interface, NULL,
speed, DUPLEX_FULL, true, true);
@@ -2920,16 +2932,13 @@ mt753x_phylink_validate(struct dsa_switc
@@ -2925,16 +2937,13 @@ mt753x_phylink_validate(struct dsa_switc
linkmode_and(state->advertising, state->advertising, mask);
}
@ -178,7 +178,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
pmsr = mt7530_read(priv, MT7530_PMSR_P(port));
state->link = (pmsr & PMSR_LINK);
@@ -2956,8 +2965,6 @@ mt7530_phylink_mac_link_state(struct dsa
@@ -2961,8 +2970,6 @@ mt7530_phylink_mac_link_state(struct dsa
state->pause |= MLO_PAUSE_RX;
if (pmsr & PMSR_TX_FC)
state->pause |= MLO_PAUSE_TX;
@ -187,7 +187,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
}
static int
@@ -2999,32 +3006,49 @@ mt7531_sgmii_pcs_get_state_an(struct mt7
@@ -3004,32 +3011,49 @@ mt7531_sgmii_pcs_get_state_an(struct mt7
return 0;
}
@ -249,7 +249,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
if (ret)
return ret;
@@ -3037,6 +3061,13 @@ mt753x_setup(struct dsa_switch *ds)
@@ -3042,6 +3066,13 @@ mt753x_setup(struct dsa_switch *ds)
if (ret && priv->irq)
mt7530_free_irq_common(priv);
@ -263,7 +263,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
return ret;
}
@@ -3098,9 +3129,8 @@ static const struct dsa_switch_ops mt753
@@ -3103,9 +3134,8 @@ static const struct dsa_switch_ops mt753
.port_mirror_del = mt753x_port_mirror_del,
.phylink_get_caps = mt753x_phylink_get_caps,
.phylink_validate = mt753x_phylink_validate,
@ -274,7 +274,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.phylink_mac_link_down = mt753x_phylink_mac_link_down,
.phylink_mac_link_up = mt753x_phylink_mac_link_up,
.get_mac_eee = mt753x_get_mac_eee,
@@ -3110,36 +3140,34 @@ static const struct dsa_switch_ops mt753
@@ -3115,36 +3145,34 @@ static const struct dsa_switch_ops mt753
static const struct mt753x_info mt753x_table[] = {
[ID_MT7621] = {
.id = ID_MT7621,
@ -314,7 +314,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
},
};
@@ -3197,7 +3225,7 @@ mt7530_probe(struct mdio_device *mdiodev
@@ -3202,7 +3230,7 @@ mt7530_probe(struct mdio_device *mdiodev
if (!priv->info->sw_setup || !priv->info->pad_setup ||
!priv->info->phy_read || !priv->info->phy_write ||
!priv->info->mac_port_get_caps ||

View File

@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2911,25 +2911,16 @@ static void mt753x_phylink_get_caps(stru
@@ -2916,25 +2916,16 @@ static void mt753x_phylink_get_caps(stru
priv->info->mac_port_get_caps(ds, port, config);
}
@ -55,7 +55,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
}
static void mt7530_pcs_get_state(struct phylink_pcs *pcs,
@@ -3031,12 +3022,14 @@ static void mt7530_pcs_an_restart(struct
@@ -3036,12 +3027,14 @@ static void mt7530_pcs_an_restart(struct
}
static const struct phylink_pcs_ops mt7530_pcs_ops = {
@ -70,7 +70,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.pcs_get_state = mt7531_pcs_get_state,
.pcs_config = mt753x_pcs_config,
.pcs_an_restart = mt7531_pcs_an_restart,
@@ -3128,7 +3121,6 @@ static const struct dsa_switch_ops mt753
@@ -3133,7 +3126,6 @@ static const struct dsa_switch_ops mt753
.port_mirror_add = mt753x_port_mirror_add,
.port_mirror_del = mt753x_port_mirror_del,
.phylink_get_caps = mt753x_phylink_get_caps,

View File

@ -19,7 +19,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2908,6 +2908,12 @@ static void mt753x_phylink_get_caps(stru
@@ -2913,6 +2913,12 @@ static void mt753x_phylink_get_caps(stru
config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
MAC_10 | MAC_100 | MAC_1000FD;

View File

@ -81,7 +81,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -3046,9 +3046,16 @@ static int
@@ -3051,9 +3051,16 @@ static int
mt753x_setup(struct dsa_switch *ds)
{
struct mt7530_priv *priv = ds->priv;
@ -100,7 +100,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
if (ret)
return ret;
@@ -3060,13 +3067,6 @@ mt753x_setup(struct dsa_switch *ds)
@@ -3065,13 +3072,6 @@ mt753x_setup(struct dsa_switch *ds)
if (ret && priv->irq)
mt7530_free_irq_common(priv);

View File

@ -26,7 +26,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -1537,11 +1537,11 @@ static void
@@ -1540,11 +1540,11 @@ static void
mt7530_hw_vlan_add(struct mt7530_priv *priv,
struct mt7530_hw_vlan_entry *entry)
{
@ -40,7 +40,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
/* Validate the entry with independent learning, create egress tag per
* VLAN and joining the port as one of the port members.
@@ -1552,22 +1552,20 @@ mt7530_hw_vlan_add(struct mt7530_priv *p
@@ -1555,22 +1555,20 @@ mt7530_hw_vlan_add(struct mt7530_priv *p
/* Decide whether adding tag or not for those outgoing packets from the
* port inside the VLAN.
@ -72,7 +72,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
}
static void
@@ -1586,11 +1584,7 @@ mt7530_hw_vlan_del(struct mt7530_priv *p
@@ -1589,11 +1587,7 @@ mt7530_hw_vlan_del(struct mt7530_priv *p
return;
}

View File

@ -16,7 +16,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2102,11 +2102,12 @@ static int
@@ -2105,11 +2105,12 @@ static int
mt7530_setup(struct dsa_switch *ds)
{
struct mt7530_priv *priv = ds->priv;
@ -30,7 +30,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
u32 id, val;
int ret, i;
@@ -2114,7 +2115,19 @@ mt7530_setup(struct dsa_switch *ds)
@@ -2117,7 +2118,19 @@ mt7530_setup(struct dsa_switch *ds)
* controller also is the container for two GMACs nodes representing
* as two netdev instances.
*/
@ -51,7 +51,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
ds->assisted_learning_on_cpu_port = true;
ds->mtu_enforcement_ingress = true;
@@ -2276,6 +2289,7 @@ mt7531_setup(struct dsa_switch *ds)
@@ -2281,6 +2294,7 @@ mt7531_setup(struct dsa_switch *ds)
{
struct mt7530_priv *priv = ds->priv;
struct mt7530_dummy_poll p;
@ -59,7 +59,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
u32 val, id;
int ret, i;
@@ -2350,8 +2364,11 @@ mt7531_setup(struct dsa_switch *ds)
@@ -2355,8 +2369,11 @@ mt7531_setup(struct dsa_switch *ds)
CORE_PLL_GROUP4, val);
/* BPDU to CPU port */

View File

@ -21,7 +21,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -1041,6 +1041,7 @@ static int
@@ -1044,6 +1044,7 @@ static int
mt7530_port_enable(struct dsa_switch *ds, int port,
struct phy_device *phy)
{
@ -29,7 +29,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
struct mt7530_priv *priv = ds->priv;
mutex_lock(&priv->reg_mutex);
@@ -1049,7 +1050,11 @@ mt7530_port_enable(struct dsa_switch *ds
@@ -1052,7 +1053,11 @@ mt7530_port_enable(struct dsa_switch *ds
* restore the port matrix if the port is the member of a certain
* bridge.
*/
@ -42,7 +42,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
priv->ports[port].enable = true;
mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK,
priv->ports[port].pm);
@@ -1197,7 +1202,8 @@ mt7530_port_bridge_join(struct dsa_switc
@@ -1200,7 +1205,8 @@ mt7530_port_bridge_join(struct dsa_switc
struct net_device *bridge)
{
struct dsa_port *dp = dsa_to_port(ds, port), *other_dp;
@ -52,7 +52,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
struct mt7530_priv *priv = ds->priv;
mutex_lock(&priv->reg_mutex);
@@ -1274,9 +1280,12 @@ mt7530_port_set_vlan_unaware(struct dsa_
@@ -1277,9 +1283,12 @@ mt7530_port_set_vlan_unaware(struct dsa_
* the CPU port get out of VLAN filtering mode.
*/
if (all_user_ports_removed) {
@ -67,7 +67,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
| PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
}
}
@@ -1326,6 +1335,7 @@ mt7530_port_bridge_leave(struct dsa_swit
@@ -1329,6 +1338,7 @@ mt7530_port_bridge_leave(struct dsa_swit
struct net_device *bridge)
{
struct dsa_port *dp = dsa_to_port(ds, port), *other_dp;
@ -75,7 +75,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
struct mt7530_priv *priv = ds->priv;
mutex_lock(&priv->reg_mutex);
@@ -1354,8 +1364,8 @@ mt7530_port_bridge_leave(struct dsa_swit
@@ -1357,8 +1367,8 @@ mt7530_port_bridge_leave(struct dsa_swit
*/
if (priv->ports[port].enable)
mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK,
@ -86,7 +86,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
/* When a port is removed from the bridge, the port would be set up
* back to the default as is at initial boot which is a VLAN-unaware
@@ -1518,6 +1528,9 @@ static int
@@ -1521,6 +1531,9 @@ static int
mt7530_port_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
struct netlink_ext_ack *extack)
{
@ -96,7 +96,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
if (vlan_filtering) {
/* The port is being kept as VLAN-unaware port when bridge is
* set up with vlan_filtering not being set, Otherwise, the
@@ -1525,7 +1538,7 @@ mt7530_port_vlan_filtering(struct dsa_sw
@@ -1528,7 +1541,7 @@ mt7530_port_vlan_filtering(struct dsa_sw
* for becoming a VLAN-aware port.
*/
mt7530_port_set_vlan_aware(ds, port);

View File

@ -27,7 +27,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
MediaTek SoC family.
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1388,6 +1388,68 @@ static void mtk_update_rx_cpu_idx(struct
@@ -1389,6 +1389,68 @@ static void mtk_update_rx_cpu_idx(struct
}
}
@ -96,7 +96,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static int mtk_poll_rx(struct napi_struct *napi, int budget,
struct mtk_eth *eth)
{
@@ -1401,9 +1463,9 @@ static int mtk_poll_rx(struct napi_struc
@@ -1402,9 +1464,9 @@ static int mtk_poll_rx(struct napi_struc
while (done < budget) {
unsigned int pktlen, *rxdcsum;
@ -107,7 +107,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int mac = 0;
ring = mtk_get_rx_ring(eth);
@@ -1434,36 +1496,54 @@ static int mtk_poll_rx(struct napi_struc
@@ -1435,36 +1497,54 @@ static int mtk_poll_rx(struct napi_struc
goto release_desc;
/* alloc new buffer */
@ -184,7 +184,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
skb->dev = netdev;
@@ -1517,7 +1597,6 @@ static int mtk_poll_rx(struct napi_struc
@@ -1518,7 +1598,6 @@ static int mtk_poll_rx(struct napi_struc
skip_rx:
ring->data[idx] = new_data;
rxd->rxd1 = (unsigned int)dma_addr;
@ -192,7 +192,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
release_desc:
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
rxd->rxd2 = RX_DMA_LSO;
@@ -1525,7 +1604,6 @@ release_desc:
@@ -1526,7 +1605,6 @@ release_desc:
rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size);
ring->calc_idx = idx;
@ -200,7 +200,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
done++;
}
@@ -1889,13 +1967,15 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1890,13 +1968,15 @@ static int mtk_rx_alloc(struct mtk_eth *
if (!ring->data)
return -ENOMEM;
@ -223,7 +223,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
ring->dma = dma_alloc_coherent(eth->dma_dev,
@@ -1906,16 +1986,33 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1907,16 +1987,33 @@ static int mtk_rx_alloc(struct mtk_eth *
for (i = 0; i < rx_dma_size; i++) {
struct mtk_rx_dma_v2 *rxd;
@ -264,7 +264,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
rxd->rxd2 = RX_DMA_LSO;
@@ -1931,6 +2028,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1932,6 +2029,7 @@ static int mtk_rx_alloc(struct mtk_eth *
rxd->rxd8 = 0;
}
}
@ -272,7 +272,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->dma_size = rx_dma_size;
ring->calc_idx_update = false;
ring->calc_idx = rx_dma_size - 1;
@@ -1982,7 +2080,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1983,7 +2081,7 @@ static void mtk_rx_clean(struct mtk_eth
dma_unmap_single(eth->dma_dev, rxd->rxd1,
ring->buf_size, DMA_FROM_DEVICE);
@ -281,7 +281,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
kfree(ring->data);
ring->data = NULL;
@@ -1994,6 +2092,13 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1995,6 +2093,13 @@ static void mtk_rx_clean(struct mtk_eth
ring->dma, ring->phys);
ring->dma = NULL;
}
@ -318,7 +318,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
#define MTK_QRX_OFFSET 0x10
#define MTK_MAX_RX_RING_NUM 4
@@ -742,6 +749,9 @@ struct mtk_rx_ring {
@@ -743,6 +750,9 @@ struct mtk_rx_ring {
bool calc_idx_update;
u16 calc_idx;
u32 crx_idx_reg;

View File

@ -18,7 +18,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1388,6 +1388,11 @@ static void mtk_update_rx_cpu_idx(struct
@@ -1389,6 +1389,11 @@ static void mtk_update_rx_cpu_idx(struct
}
}
@ -30,7 +30,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static struct page_pool *mtk_create_page_pool(struct mtk_eth *eth,
struct xdp_rxq_info *xdp_q,
int id, int size)
@@ -1450,11 +1455,52 @@ static void mtk_rx_put_buff(struct mtk_r
@@ -1451,11 +1456,52 @@ static void mtk_rx_put_buff(struct mtk_r
skb_free_frag(data);
}
@ -83,7 +83,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int idx;
struct sk_buff *skb;
u8 *data, *new_data;
@@ -1463,9 +1509,9 @@ static int mtk_poll_rx(struct napi_struc
@@ -1464,9 +1510,9 @@ static int mtk_poll_rx(struct napi_struc
while (done < budget) {
unsigned int pktlen, *rxdcsum;
@ -94,7 +94,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int mac = 0;
ring = mtk_get_rx_ring(eth);
@@ -1495,8 +1541,14 @@ static int mtk_poll_rx(struct napi_struc
@@ -1496,8 +1542,14 @@ static int mtk_poll_rx(struct napi_struc
if (unlikely(test_bit(MTK_RESETTING, &eth->state)))
goto release_desc;
@ -109,7 +109,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
new_data = mtk_page_pool_get_buff(ring->page_pool,
&dma_addr,
GFP_ATOMIC);
@@ -1504,6 +1556,34 @@ static int mtk_poll_rx(struct napi_struc
@@ -1505,6 +1557,34 @@ static int mtk_poll_rx(struct napi_struc
netdev->stats.rx_dropped++;
goto release_desc;
}
@ -144,7 +144,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
} else {
if (ring->frag_size <= PAGE_SIZE)
new_data = napi_alloc_frag(ring->frag_size);
@@ -1527,27 +1607,20 @@ static int mtk_poll_rx(struct napi_struc
@@ -1528,27 +1608,20 @@ static int mtk_poll_rx(struct napi_struc
dma_unmap_single(eth->dma_dev, trxd.rxd1,
ring->buf_size, DMA_FROM_DEVICE);
@ -181,7 +181,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
rxdcsum = &trxd.rxd3;
@@ -1559,7 +1632,6 @@ static int mtk_poll_rx(struct napi_struc
@@ -1560,7 +1633,6 @@ static int mtk_poll_rx(struct napi_struc
else
skb_checksum_none_assert(skb);
skb->protocol = eth_type_trans(skb, netdev);
@ -189,7 +189,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
if (hash != MTK_RXD4_FOE_ENTRY) {
@@ -1622,6 +1694,9 @@ rx_done:
@@ -1623,6 +1695,9 @@ rx_done:
&dim_sample);
net_dim(&eth->rx_dim, dim_sample);
@ -199,7 +199,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return done;
}
@@ -1967,7 +2042,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1968,7 +2043,7 @@ static int mtk_rx_alloc(struct mtk_eth *
if (!ring->data)
return -ENOMEM;
@ -208,7 +208,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct page_pool *pp;
pp = mtk_create_page_pool(eth, &ring->xdp_q, ring_no,
@@ -2709,6 +2784,48 @@ static int mtk_stop(struct net_device *d
@@ -2710,6 +2785,48 @@ static int mtk_stop(struct net_device *d
return 0;
}
@ -257,7 +257,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static void ethsys_reset(struct mtk_eth *eth, u32 reset_bits)
{
regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL,
@@ -3004,6 +3121,12 @@ static int mtk_change_mtu(struct net_dev
@@ -3005,6 +3122,12 @@ static int mtk_change_mtu(struct net_dev
struct mtk_eth *eth = mac->hw;
u32 mcr_cur, mcr_new;
@ -270,7 +270,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
mcr_new = mcr_cur & ~MAC_MCR_MAX_RX_MASK;
@@ -3331,6 +3454,7 @@ static const struct net_device_ops mtk_n
@@ -3332,6 +3455,7 @@ static const struct net_device_ops mtk_n
.ndo_poll_controller = mtk_poll_controller,
#endif
.ndo_setup_tc = mtk_eth_setup_tc,
@ -280,7 +280,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -1085,6 +1085,8 @@ struct mtk_eth {
@@ -1086,6 +1086,8 @@ struct mtk_eth {
struct mtk_ppe *ppe;
struct rhashtable flow_table;

View File

@ -39,7 +39,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const char * const mtk_clks_source_name[] = {
@@ -1458,6 +1469,9 @@ static void mtk_rx_put_buff(struct mtk_r
@@ -1459,6 +1470,9 @@ static void mtk_rx_put_buff(struct mtk_r
static u32 mtk_xdp_run(struct mtk_eth *eth, struct mtk_rx_ring *ring,
struct xdp_buff *xdp, struct net_device *dev)
{
@ -49,7 +49,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct bpf_prog *prog;
u32 act = XDP_PASS;
@@ -1470,13 +1484,16 @@ static u32 mtk_xdp_run(struct mtk_eth *e
@@ -1471,13 +1485,16 @@ static u32 mtk_xdp_run(struct mtk_eth *e
act = bpf_prog_run_xdp(prog, xdp);
switch (act) {
case XDP_PASS:
@ -68,7 +68,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
default:
bpf_warn_invalid_xdp_action(act);
fallthrough;
@@ -1489,6 +1506,11 @@ static u32 mtk_xdp_run(struct mtk_eth *e
@@ -1490,6 +1507,11 @@ static u32 mtk_xdp_run(struct mtk_eth *e
page_pool_put_full_page(ring->page_pool,
virt_to_head_page(xdp->data), true);
@ -82,7 +82,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -567,6 +567,16 @@ struct mtk_tx_dma_v2 {
@@ -568,6 +568,16 @@ struct mtk_tx_dma_v2 {
struct mtk_eth;
struct mtk_mac;
@ -99,7 +99,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
/* struct mtk_hw_stats - the structure that holds the traffic statistics.
* @stats_lock: make sure that stats operations are atomic
* @reg_offset: the status register offset of the SoC
@@ -590,6 +600,8 @@ struct mtk_hw_stats {
@@ -591,6 +601,8 @@ struct mtk_hw_stats {
u64 rx_checksum_errors;
u64 rx_flow_control_packets;

View File

@ -15,7 +15,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -987,15 +987,26 @@ static void mtk_tx_unmap(struct mtk_eth
@@ -988,15 +988,26 @@ static void mtk_tx_unmap(struct mtk_eth
}
}
@ -49,7 +49,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
static void setup_tx_buf(struct mtk_eth *eth, struct mtk_tx_buf *tx_buf,
@@ -1012,7 +1023,7 @@ static void setup_tx_buf(struct mtk_eth
@@ -1013,7 +1024,7 @@ static void setup_tx_buf(struct mtk_eth
dma_unmap_addr_set(tx_buf, dma_addr1, mapped_addr);
dma_unmap_len_set(tx_buf, dma_len1, size);
} else {
@ -58,7 +58,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
txd->txd1 = mapped_addr;
txd->txd2 = TX_DMA_PLEN0(size);
dma_unmap_addr_set(tx_buf, dma_addr0, mapped_addr);
@@ -1188,7 +1199,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1189,7 +1200,7 @@ static int mtk_tx_map(struct sk_buff *sk
soc->txrx.txd_size);
if (new_desc)
memset(tx_buf, 0, sizeof(*tx_buf));
@ -67,7 +67,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
tx_buf->flags |= MTK_TX_FLAGS_PAGE0;
tx_buf->flags |= (!mac->id) ? MTK_TX_FLAGS_FPORT0 :
MTK_TX_FLAGS_FPORT1;
@@ -1202,7 +1213,8 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1203,7 +1214,8 @@ static int mtk_tx_map(struct sk_buff *sk
}
/* store skb to cleanup */
@ -77,7 +77,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
if (k & 0x1)
@@ -1414,13 +1426,14 @@ static struct page_pool *mtk_create_page
@@ -1415,13 +1427,14 @@ static struct page_pool *mtk_create_page
.pool_size = size,
.nid = NUMA_NO_NODE,
.dev = eth->dma_dev,
@ -93,7 +93,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
pp = page_pool_create(&pp_params);
if (IS_ERR(pp))
return pp;
@@ -1466,6 +1479,122 @@ static void mtk_rx_put_buff(struct mtk_r
@@ -1467,6 +1480,122 @@ static void mtk_rx_put_buff(struct mtk_r
skb_free_frag(data);
}
@ -216,7 +216,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static u32 mtk_xdp_run(struct mtk_eth *eth, struct mtk_rx_ring *ring,
struct xdp_buff *xdp, struct net_device *dev)
{
@@ -1494,6 +1623,18 @@ static u32 mtk_xdp_run(struct mtk_eth *e
@@ -1495,6 +1624,18 @@ static u32 mtk_xdp_run(struct mtk_eth *e
count = &hw_stats->xdp_stats.rx_xdp_redirect;
goto update_stats;
@ -235,7 +235,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
default:
bpf_warn_invalid_xdp_action(act);
fallthrough;
@@ -1727,9 +1868,8 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -1728,9 +1869,8 @@ static int mtk_poll_tx_qdma(struct mtk_e
{
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
struct mtk_tx_ring *ring = &eth->tx_ring;
@ -246,7 +246,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
u32 cpu, dma;
cpu = ring->last_free_ptr;
@@ -1750,15 +1890,21 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -1751,15 +1891,21 @@ static int mtk_poll_tx_qdma(struct mtk_e
if (tx_buf->flags & MTK_TX_FLAGS_FPORT1)
mac = 1;
@ -271,7 +271,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_tx_unmap(eth, tx_buf, true);
ring->last_free = desc;
@@ -1777,9 +1923,8 @@ static int mtk_poll_tx_pdma(struct mtk_e
@@ -1778,9 +1924,8 @@ static int mtk_poll_tx_pdma(struct mtk_e
unsigned int *done, unsigned int *bytes)
{
struct mtk_tx_ring *ring = &eth->tx_ring;
@ -282,7 +282,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
u32 cpu, dma;
cpu = ring->cpu_idx;
@@ -1787,14 +1932,18 @@ static int mtk_poll_tx_pdma(struct mtk_e
@@ -1788,14 +1933,18 @@ static int mtk_poll_tx_pdma(struct mtk_e
while ((cpu != dma) && budget) {
tx_buf = &ring->buf[cpu];
@ -304,7 +304,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
mtk_tx_unmap(eth, tx_buf, true);
@@ -3477,6 +3626,7 @@ static const struct net_device_ops mtk_n
@@ -3478,6 +3627,7 @@ static const struct net_device_ops mtk_n
#endif
.ndo_setup_tc = mtk_eth_setup_tc,
.ndo_bpf = mtk_xdp,
@ -314,7 +314,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -693,6 +693,12 @@ enum mtk_dev_state {
@@ -694,6 +694,12 @@ enum mtk_dev_state {
MTK_RESETTING
};
@ -327,7 +327,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
/* struct mtk_tx_buf - This struct holds the pointers to the memory pointed at
* by the TX descriptor s
* @skb: The SKB pointer of the packet being sent
@@ -702,7 +708,9 @@ enum mtk_dev_state {
@@ -703,7 +709,9 @@ enum mtk_dev_state {
* @dma_len1: The length of the second segment
*/
struct mtk_tx_buf {

View File

@ -26,7 +26,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
MediaTek SoC family.
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3487,11 +3487,18 @@ static void mtk_get_strings(struct net_d
@@ -3488,11 +3488,18 @@ static void mtk_get_strings(struct net_d
int i;
switch (stringset) {
@ -46,7 +46,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
break;
}
}
@@ -3499,13 +3506,35 @@ static void mtk_get_strings(struct net_d
@@ -3500,13 +3507,35 @@ static void mtk_get_strings(struct net_d
static int mtk_get_sset_count(struct net_device *dev, int sset)
{
switch (sset) {
@ -84,7 +84,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static void mtk_get_ethtool_stats(struct net_device *dev,
struct ethtool_stats *stats, u64 *data)
{
@@ -3533,6 +3562,8 @@ static void mtk_get_ethtool_stats(struct
@@ -3534,6 +3563,8 @@ static void mtk_get_ethtool_stats(struct
for (i = 0; i < ARRAY_SIZE(mtk_ethtool_stats); i++)
*data_dst++ = *(data_src + mtk_ethtool_stats[i].offset);

View File

@ -15,7 +15,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1479,6 +1479,41 @@ static void mtk_rx_put_buff(struct mtk_r
@@ -1480,6 +1480,41 @@ static void mtk_rx_put_buff(struct mtk_r
skb_free_frag(data);
}
@ -57,7 +57,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static int mtk_xdp_submit_frame(struct mtk_eth *eth, struct xdp_frame *xdpf,
struct net_device *dev, bool dma_map)
{
@@ -1489,9 +1524,8 @@ static int mtk_xdp_submit_frame(struct m
@@ -1490,9 +1525,8 @@ static int mtk_xdp_submit_frame(struct m
.first = true,
.last = true,
};
@ -68,7 +68,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_tx_buf *tx_buf;
if (unlikely(test_bit(MTK_RESETTING, &eth->state)))
@@ -1511,36 +1545,18 @@ static int mtk_xdp_submit_frame(struct m
@@ -1512,36 +1546,18 @@ static int mtk_xdp_submit_frame(struct m
tx_buf = mtk_desc_to_tx_buf(ring, txd, soc->txrx.txd_size);
memset(tx_buf, 0, sizeof(*tx_buf));

View File

@ -14,7 +14,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -987,23 +987,22 @@ static void mtk_tx_unmap(struct mtk_eth
@@ -988,23 +988,22 @@ static void mtk_tx_unmap(struct mtk_eth
}
}
@ -47,7 +47,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
tx_buf->flags = 0;
tx_buf->data = NULL;
@@ -1506,6 +1505,8 @@ static int mtk_xdp_frame_map(struct mtk_
@@ -1507,6 +1506,8 @@ static int mtk_xdp_frame_map(struct mtk_
mtk_tx_set_dma_desc(dev, txd, txd_info);
tx_buf->flags |= !mac->id ? MTK_TX_FLAGS_FPORT0 : MTK_TX_FLAGS_FPORT1;
@ -56,7 +56,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
txd_pdma = qdma_to_pdma(ring, txd);
setup_tx_buf(eth, tx_buf, txd_pdma, txd_info->addr, txd_info->size,
@@ -1517,43 +1518,69 @@ static int mtk_xdp_frame_map(struct mtk_
@@ -1518,43 +1519,69 @@ static int mtk_xdp_frame_map(struct mtk_
static int mtk_xdp_submit_frame(struct mtk_eth *eth, struct xdp_frame *xdpf,
struct net_device *dev, bool dma_map)
{
@ -140,7 +140,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
txd_pdma = qdma_to_pdma(ring, txd);
@@ -1580,7 +1607,24 @@ static int mtk_xdp_submit_frame(struct m
@@ -1581,7 +1608,24 @@ static int mtk_xdp_submit_frame(struct m
mtk_w32(eth, NEXT_DESP_IDX(idx, ring->dma_size),
MT7628_TX_CTX_IDX0);
}
@ -166,7 +166,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock(&eth->page_lock);
return err;
@@ -1909,18 +1953,15 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -1910,18 +1954,15 @@ static int mtk_poll_tx_qdma(struct mtk_e
if (!tx_buf->data)
break;
@ -191,7 +191,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_tx_unmap(eth, tx_buf, true);
ring->last_free = desc;
@@ -1951,17 +1992,15 @@ static int mtk_poll_tx_pdma(struct mtk_e
@@ -1952,17 +1993,15 @@ static int mtk_poll_tx_pdma(struct mtk_e
if (!tx_buf->data)
break;

View File

@ -18,7 +18,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1845,10 +1845,19 @@ static int mtk_poll_rx(struct napi_struc
@@ -1846,10 +1846,19 @@ static int mtk_poll_rx(struct napi_struc
skb->dev = netdev;
bytes += skb->len;
@ -40,7 +40,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
if (*rxdcsum & eth->soc->txrx.rx_dma_l4_valid)
skb->ip_summed = CHECKSUM_UNNECESSARY;
@@ -1856,16 +1865,9 @@ static int mtk_poll_rx(struct napi_struc
@@ -1857,16 +1866,9 @@ static int mtk_poll_rx(struct napi_struc
skb_checksum_none_assert(skb);
skb->protocol = eth_type_trans(skb, netdev);

View File

@ -24,7 +24,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1412,7 +1412,7 @@ static void mtk_update_rx_cpu_idx(struct
@@ -1413,7 +1413,7 @@ static void mtk_update_rx_cpu_idx(struct
static bool mtk_page_pool_enabled(struct mtk_eth *eth)
{

View File

@ -57,7 +57,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
};
/* strings used by ethtool */
@@ -2924,6 +2928,7 @@ static int mtk_open(struct net_device *d
@@ -2925,6 +2929,7 @@ static int mtk_open(struct net_device *d
/* we run 2 netdevs on the same dma ring so we only bring it up once */
if (!refcount_read(&eth->dma_refcnt)) {
@ -65,7 +65,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
u32 gdm_config = MTK_GDMA_TO_PDMA;
int err;
@@ -2933,15 +2938,15 @@ static int mtk_open(struct net_device *d
@@ -2934,15 +2939,15 @@ static int mtk_open(struct net_device *d
return err;
}
@ -84,7 +84,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
refcount_set(&eth->dma_refcnt, 1);
}
else
@@ -4047,7 +4052,9 @@ static int mtk_probe(struct platform_dev
@@ -4048,7 +4053,9 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {
@ -105,7 +105,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
#define MTK_GDMA_DROP_ALL 0x7777
/* Unicast Filter MAC Address Register - Low */
@@ -952,6 +951,8 @@ struct mtk_reg_map {
@@ -953,6 +952,8 @@ struct mtk_reg_map {
u32 fq_blen; /* fq free page buffer length */
} qdma;
u32 gdm1_cnt;

View File

@ -44,7 +44,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -4150,6 +4150,7 @@ static const struct mtk_soc_data mt7621_
@@ -4151,6 +4151,7 @@ static const struct mtk_soc_data mt7621_
.required_clks = MT7621_CLKS_BITMAP,
.required_pctl = false,
.offload_version = 2,
@ -52,7 +52,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@@ -4168,6 +4169,7 @@ static const struct mtk_soc_data mt7622_
@@ -4169,6 +4170,7 @@ static const struct mtk_soc_data mt7622_
.required_clks = MT7622_CLKS_BITMAP,
.required_pctl = false,
.offload_version = 2,
@ -60,7 +60,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@@ -4185,6 +4187,7 @@ static const struct mtk_soc_data mt7623_
@@ -4186,6 +4188,7 @@ static const struct mtk_soc_data mt7623_
.required_clks = MT7623_CLKS_BITMAP,
.required_pctl = true,
.offload_version = 2,
@ -68,7 +68,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@@ -4218,6 +4221,7 @@ static const struct mtk_soc_data mt7986_
@@ -4219,6 +4222,7 @@ static const struct mtk_soc_data mt7986_
.caps = MT7986_CAPS,
.required_clks = MT7986_CLKS_BITMAP,
.required_pctl = false,
@ -78,7 +78,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
.rxd_size = sizeof(struct mtk_rx_dma_v2),
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -966,6 +966,7 @@ struct mtk_reg_map {
@@ -967,6 +967,7 @@ struct mtk_reg_map {
* the target SoC
* @required_pctl A bool value to show whether the SoC requires
* the extra setup for those pins used by GMAC.
@ -86,7 +86,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
* @txd_size Tx DMA descriptor size.
* @rxd_size Rx DMA descriptor size.
* @rx_irq_done_mask Rx irq done register mask.
@@ -980,6 +981,7 @@ struct mtk_soc_data {
@@ -981,6 +982,7 @@ struct mtk_soc_data {
u32 required_clks;
bool required_pctl;
u8 offload_version;

View File

@ -48,7 +48,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1871,7 +1871,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1872,7 +1872,7 @@ static int mtk_poll_rx(struct napi_struc
reason = FIELD_GET(MTK_RXD4_PPE_CPU_REASON, trxd.rxd4);
if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
@ -57,7 +57,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
@@ -2929,7 +2929,8 @@ static int mtk_open(struct net_device *d
@@ -2930,7 +2930,8 @@ static int mtk_open(struct net_device *d
/* we run 2 netdevs on the same dma ring so we only bring it up once */
if (!refcount_read(&eth->dma_refcnt)) {
const struct mtk_soc_data *soc = eth->soc;
@ -67,7 +67,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
int err;
err = mtk_start_dma(eth);
@@ -2938,8 +2939,11 @@ static int mtk_open(struct net_device *d
@@ -2939,8 +2940,11 @@ static int mtk_open(struct net_device *d
return err;
}
@ -81,7 +81,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
mtk_gdm_config(eth, gdm_config);
@@ -2984,6 +2988,7 @@ static int mtk_stop(struct net_device *d
@@ -2985,6 +2989,7 @@ static int mtk_stop(struct net_device *d
{
struct mtk_mac *mac = netdev_priv(dev);
struct mtk_eth *eth = mac->hw;
@ -89,7 +89,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
phylink_stop(mac->phylink);
@@ -3011,8 +3016,8 @@ static int mtk_stop(struct net_device *d
@@ -3012,8 +3017,8 @@ static int mtk_stop(struct net_device *d
mtk_dma_free(eth);
@ -100,7 +100,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
return 0;
}
@@ -4052,12 +4057,19 @@ static int mtk_probe(struct platform_dev
@@ -4053,12 +4058,19 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {
@ -127,7 +127,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
err = mtk_eth_offload_init(eth);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -1111,7 +1111,7 @@ struct mtk_eth {
@@ -1112,7 +1112,7 @@ struct mtk_eth {
int ip_align;

View File

@ -39,7 +39,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
};
/* strings used by ethtool */
@@ -3969,16 +3977,12 @@ static int mtk_probe(struct platform_dev
@@ -3970,16 +3978,12 @@ static int mtk_probe(struct platform_dev
for (i = 0;; i++) {
struct device_node *np = of_parse_phandle(pdev->dev.of_node,
"mediatek,wed", i);
@ -70,7 +70,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
/* QDMA descriptor txd4 */
#define TX_DMA_CHKSUM (0x7 << 29)
#define TX_DMA_TSO BIT(28)
@@ -953,6 +950,7 @@ struct mtk_reg_map {
@@ -954,6 +951,7 @@ struct mtk_reg_map {
u32 gdm1_cnt;
u32 gdma_to_ppe0;
u32 ppe_base;

Some files were not shown because too many files have changed in this diff Show More