mirror of
https://github.com/openwrt/openwrt.git
synced 2025-02-12 13:45:32 +00:00
kernel: bump 5.15 to 5.15.103
Manually rebased: backport-5.15/704-15-v5.19-net-mtk_eth_soc-move-MAC_MCR-setting-to-mac_finish.patch Removed upstreamed: backport-5.15/060-v6.0-01-tools-build-Add-feature-test-for-init_disassemble_in.patch[1] backport-5.15/060-v6.0-02-tools-include-add-dis-asm-compat.h-to-handle-version.patch[2] backport-5.15/060-v6.0-03-tools-perf-Fix-compilation-error-with-new-binutils.patch[3] backport-5.15/060-v6.0-04-tools-bpf_jit_disasm-Fix-compilation-error-with-new-.patch[4] backport-5.15/060-v6.0-05-tools-bpftool-Fix-compilation-error-with-new-binutil.patch[5] pending-5.15/733-02-net-ethernet-mtk_eth_soc-fix-RX-data-corruption-issu.patch[6] bcm47xx/patches-5.15/170-bgmac-fix-initial-chip-reset-to-support-BCM5358.patch[7] All other patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.103&id=51b99dc38c1a053e2e732d7f9e2740e343ae7eae 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.103&id=451c9d7b16169645ed291ebb2ca9844caa088f2d 3. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.103&id=97f005c0bdbaf656a7808586d234965385a06c58 4. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.103&id=1c27fab243333821375e4d63128d60093fdbe149 5. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.103&id=4441a90091931fd81607567961dc122f24f735bb 6. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.103&id=2adc29350a5b4669544566f71f208d2abaec60ab 7. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.103&id=04bfc5bcdfc0fdb73587487c71b04d63807ae15a Build system: x86_64 Build-tested: bcm2711/RPi4B, ramips/tplink_archer-a6-v3, filogic/xiaomi_redmi-router-ax6000-ubootmod Run-tested: bcm2711/RPi4B, ramips/tplink_archer-a6-v3, filogic/xiaomi_redmi-router-ax6000-ubootmod Signed-off-by: John Audia <therealgraysky@proton.me>
This commit is contained in:
parent
95cae498b6
commit
d59d69f9e1
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-5.15 = .102
|
||||
LINUX_KERNEL_HASH-5.15.102 = 441cddfb970b97759eebdb9b142673662ce0770500e3ae8bcd4b90af369b01e6
|
||||
LINUX_VERSION-5.15 = .103
|
||||
LINUX_KERNEL_HASH-5.15.103 = 0876ba81631cca532f72a8d633f7031c3068669a0ecdd77d23b74e8dfc8dd705
|
||||
|
@ -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_;
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
@@ -220,12 +220,12 @@ static int lan87xx_read_status(struct ph
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
|
@ -18,7 +18,7 @@ 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
|
||||
@@ -210,6 +210,8 @@ static int lan87xx_read_status(struct ph
|
||||
int err = genphy_read_status(phydev);
|
||||
|
||||
if (!phydev->link && priv->energy_enable && phydev->irq == PHY_POLL) {
|
||||
@ -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
|
||||
@@ -225,7 +227,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
|
||||
@@ -235,10 +237,16 @@ static int lan87xx_read_status(struct ph
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
|
@ -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;
|
@ -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;
|
||||
+}
|
@ -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 */
|
@ -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);
|
||||
|
@ -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;
|
@ -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) {
|
@ -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),
|
||||
ð->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, ð->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);
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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,
|
||||
|
@ -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),
|
||||
ð->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),
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 = ð->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,
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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 ð->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);
|
||||
|
||||
|
@ -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++) {
|
||||
|
@ -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(ð->tx_irq_lock, flags);
|
||||
@ -84,7 +84,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
spin_unlock_irqrestore(ð->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(ð->tx_irq_lock, flags);
|
||||
@ -95,7 +95,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
spin_unlock_irqrestore(ð->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(ð->rx_irq_lock, flags);
|
||||
@ -106,7 +106,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
spin_unlock_irqrestore(ð->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(ð->rx_irq_lock, flags);
|
||||
@ -117,7 +117,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
spin_unlock_irqrestore(ð->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 = ð->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(ð->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(ð->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(ð->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(ð->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(ð->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, ð->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;
|
||||
|
||||
|
@ -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, ð->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 = ð->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 = ð->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(ð->rx_napi))) {
|
||||
__napi_schedule(ð->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(ð->tx_napi);
|
||||
napi_enable(ð->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(ð->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(ð->tx_napi);
|
||||
napi_disable(ð->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(ð->page_lock);
|
||||
spin_lock_init(ð->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;
|
||||
|
||||
|
@ -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 = ð->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 {
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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 = ð->netdev[id]->dev;
|
||||
mac->phylink_config.type = PHYLINK_NETDEV;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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 = ð->netdev[id]->dev;
|
||||
mac->phylink_config.type = PHYLINK_NETDEV;
|
||||
|
@ -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 = ð->netdev[id]->dev;
|
||||
mac->phylink_config.type = PHYLINK_NETDEV;
|
||||
|
@ -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(ð->dummy_dev);
|
||||
netif_napi_add(ð->dummy_dev, ð->tx_napi, mtk_napi_tx,
|
||||
|
@ -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 = ð->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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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 = ð->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);
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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 ||
|
||||
|
@ -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 ||
|
||||
|
@ -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);
|
||||
|
@ -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. */
|
||||
|
@ -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 ||
|
||||
|
@ -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 ||
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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, ð->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(ð->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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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 = ð->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 = ð->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 {
|
||||
|
@ -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);
|
||||
|
@ -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, ð->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));
|
||||
|
||||
|
@ -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(ð->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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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(ð->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(ð->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;
|
||||
|
@ -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;
|
||||
|
@ -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(ð->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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -21,7 +21,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
|
||||
@@ -4167,6 +4167,7 @@ static const struct mtk_soc_data mt7621_
|
||||
@@ -4168,6 +4168,7 @@ static const struct mtk_soc_data mt7621_
|
||||
.required_pctl = false,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
@ -29,7 +29,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4186,6 +4187,7 @@ static const struct mtk_soc_data mt7622_
|
||||
@@ -4187,6 +4188,7 @@ static const struct mtk_soc_data mt7622_
|
||||
.required_pctl = false,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
@ -37,7 +37,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4204,6 +4206,7 @@ static const struct mtk_soc_data mt7623_
|
||||
@@ -4205,6 +4207,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.required_pctl = true,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
@ -47,7 +47,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -965,6 +965,7 @@ struct mtk_reg_map {
|
||||
@@ -966,6 +966,7 @@ struct mtk_reg_map {
|
||||
* @required_pctl A bool value to show whether the SoC requires
|
||||
* the extra setup for those pins used by GMAC.
|
||||
* @hash_offset Flow table hash offset.
|
||||
@ -55,7 +55,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 {
|
||||
bool required_pctl;
|
||||
u8 offload_version;
|
||||
u8 hash_offset;
|
||||
@ -63,7 +63,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
netdev_features_t hw_features;
|
||||
struct {
|
||||
u32 txd_size;
|
||||
@@ -1140,6 +1142,14 @@ struct mtk_mac {
|
||||
@@ -1141,6 +1143,14 @@ struct mtk_mac {
|
||||
/* the struct describing the SoC. these are declared in the soc_xyz.c files */
|
||||
extern const struct of_device_id of_mtk_match[];
|
||||
|
||||
|
@ -26,7 +26,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
|
||||
@@ -3894,6 +3894,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
||||
@@ -3895,6 +3895,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
||||
|
||||
static int mtk_probe(struct platform_device *pdev)
|
||||
{
|
||||
@ -34,7 +34,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
struct device_node *mac_np;
|
||||
struct mtk_eth *eth;
|
||||
int err, i;
|
||||
@@ -3974,16 +3975,31 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -3975,16 +3976,31 @@ static int mtk_probe(struct platform_dev
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,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
|
||||
@@ -1858,12 +1858,14 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1859,12 +1859,14 @@ static int mtk_poll_rx(struct napi_struc
|
||||
bytes += skb->len;
|
||||
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
@ -41,7 +41,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
|
||||
if (hash != MTK_RXD4_FOE_ENTRY)
|
||||
skb_set_hash(skb, jhash_1word(hash, 0),
|
||||
@@ -1877,7 +1879,6 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1878,7 +1880,6 @@ static int mtk_poll_rx(struct napi_struc
|
||||
skb_checksum_none_assert(skb);
|
||||
skb->protocol = eth_type_trans(skb, netdev);
|
||||
|
||||
@ -49,7 +49,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
|
||||
mtk_ppe_check_skb(eth->ppe[0], skb, hash);
|
||||
|
||||
@@ -4183,7 +4184,7 @@ static const struct mtk_soc_data mt7621_
|
||||
@@ -4184,7 +4185,7 @@ static const struct mtk_soc_data mt7621_
|
||||
.required_pctl = false,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
@ -58,7 +58,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4203,7 +4204,7 @@ static const struct mtk_soc_data mt7622_
|
||||
@@ -4204,7 +4205,7 @@ static const struct mtk_soc_data mt7622_
|
||||
.required_pctl = false,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
@ -67,7 +67,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4222,7 +4223,7 @@ static const struct mtk_soc_data mt7623_
|
||||
@@ -4223,7 +4224,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.required_pctl = true,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
@ -76,7 +76,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4254,9 +4255,11 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -4255,9 +4256,11 @@ static const struct mtk_soc_data mt7986_
|
||||
.reg_map = &mt7986_reg_map,
|
||||
.ana_rgc3 = 0x128,
|
||||
.caps = MT7986_CAPS,
|
||||
@ -90,7 +90,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
|
||||
@@ -1150,6 +1150,78 @@ mtk_foe_get_entry(struct mtk_ppe *ppe, u
|
||||
@@ -1151,6 +1151,78 @@ mtk_foe_get_entry(struct mtk_ppe *ppe, u
|
||||
return ppe->foe_table + hash * soc->foe_entry_size;
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,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
|
||||
@@ -4258,6 +4258,7 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -4259,6 +4259,7 @@ static const struct mtk_soc_data mt7986_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7986_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
|
@ -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
|
||||
@@ -4010,19 +4010,23 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -4011,19 +4011,23 @@ static int mtk_probe(struct platform_dev
|
||||
eth->irq[i] = platform_get_irq(pdev, i);
|
||||
if (eth->irq[i] < 0) {
|
||||
dev_err(&pdev->dev, "no IRQ%d resource found\n", i);
|
||||
@ -45,7 +45,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
eth->clks[i] = NULL;
|
||||
}
|
||||
@@ -4033,7 +4037,7 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -4034,7 +4038,7 @@ static int mtk_probe(struct platform_dev
|
||||
|
||||
err = mtk_hw_init(eth);
|
||||
if (err)
|
||||
@ -54,7 +54,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
eth->hwlro = MTK_HAS_CAPS(eth->soc->caps, MTK_HWLRO);
|
||||
|
||||
@@ -4131,6 +4135,8 @@ err_free_dev:
|
||||
@@ -4132,6 +4136,8 @@ err_free_dev:
|
||||
mtk_free_dev(eth);
|
||||
err_deinit_hw:
|
||||
mtk_hw_deinit(eth);
|
||||
@ -63,7 +63,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -4150,6 +4156,7 @@ static int mtk_remove(struct platform_de
|
||||
@@ -4151,6 +4157,7 @@ static int mtk_remove(struct platform_de
|
||||
phylink_disconnect_phy(mac->phylink);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
@@ -3175,6 +3175,30 @@ static void mtk_dim_tx(struct work_struc
|
||||
@@ -3176,6 +3176,30 @@ static void mtk_dim_tx(struct work_struc
|
||||
dim->state = DIM_START_MEASURE;
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
static int mtk_hw_init(struct mtk_eth *eth)
|
||||
{
|
||||
u32 dma_mask = ETHSYS_DMA_AG_MAP_PDMA | ETHSYS_DMA_AG_MAP_QDMA |
|
||||
@@ -3249,8 +3273,16 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -3250,8 +3274,16 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
* up with the more appropriate value when mtk_mac_config call is being
|
||||
* invoked.
|
||||
*/
|
||||
@ -63,7 +63,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
/* Indicates CDM to parse the MTK special tag from CPU
|
||||
* which also is working out for untag packets.
|
||||
@@ -3366,7 +3398,6 @@ static int mtk_change_mtu(struct net_dev
|
||||
@@ -3367,7 +3399,6 @@ static int mtk_change_mtu(struct net_dev
|
||||
int length = new_mtu + MTK_RX_ETH_HLEN;
|
||||
struct mtk_mac *mac = netdev_priv(dev);
|
||||
struct mtk_eth *eth = mac->hw;
|
||||
@ -71,7 +71,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
if (rcu_access_pointer(eth->prog) &&
|
||||
length > MTK_PP_MAX_BUF_SIZE) {
|
||||
@@ -3374,23 +3405,7 @@ static int mtk_change_mtu(struct net_dev
|
||||
@@ -3375,23 +3406,7 @@ static int mtk_change_mtu(struct net_dev
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
@@ -3436,11 +3436,8 @@ static void mtk_pending_work(struct work
|
||||
@@ -3437,11 +3437,8 @@ static void mtk_pending_work(struct work
|
||||
rtnl_lock();
|
||||
|
||||
dev_dbg(eth->dev, "[%s][%d] reset\n", __func__, __LINE__);
|
||||
@ -25,7 +25,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/* stop all devices to make sure that dma is properly shut down */
|
||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
if (!eth->netdev[i])
|
||||
@@ -3474,7 +3471,7 @@ static void mtk_pending_work(struct work
|
||||
@@ -3475,7 +3472,7 @@ static void mtk_pending_work(struct work
|
||||
|
||||
dev_dbg(eth->dev, "[%s][%d] reset done\n", __func__, __LINE__);
|
||||
|
||||
|
@ -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
|
||||
@@ -3238,16 +3238,17 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -3239,16 +3239,17 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -39,7 +39,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -444,18 +444,14 @@
|
||||
@@ -445,18 +445,14 @@
|
||||
/* ethernet reset control register */
|
||||
#define ETHSYS_RSTCTRL 0x34
|
||||
#define RSTCTRL_FE BIT(6)
|
||||
|
@ -16,7 +16,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
|
||||
@@ -3199,6 +3199,27 @@ static void mtk_set_mcr_max_rx(struct mt
|
||||
@@ -3200,6 +3200,27 @@ static void mtk_set_mcr_max_rx(struct mt
|
||||
mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static int mtk_hw_init(struct mtk_eth *eth)
|
||||
{
|
||||
u32 dma_mask = ETHSYS_DMA_AG_MAP_PDMA | ETHSYS_DMA_AG_MAP_QDMA |
|
||||
@@ -3238,22 +3259,9 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -3239,22 +3260,9 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,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
|
||||
@@ -3220,7 +3220,54 @@ static void mtk_hw_reset(struct mtk_eth
|
||||
@@ -3221,7 +3221,54 @@ static void mtk_hw_reset(struct mtk_eth
|
||||
0x3ffffff);
|
||||
}
|
||||
|
||||
@ -73,7 +73,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
{
|
||||
u32 dma_mask = ETHSYS_DMA_AG_MAP_PDMA | ETHSYS_DMA_AG_MAP_QDMA |
|
||||
ETHSYS_DMA_AG_MAP_PPE;
|
||||
@@ -3259,7 +3306,12 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -3260,7 +3307,12 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -87,7 +87,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
/* Set FE to PDMAv2 if necessary */
|
||||
@@ -3464,7 +3516,7 @@ static void mtk_pending_work(struct work
|
||||
@@ -3465,7 +3517,7 @@ static void mtk_pending_work(struct work
|
||||
if (eth->dev->pins)
|
||||
pinctrl_select_state(eth->dev->pins->p,
|
||||
eth->dev->pins->default_state);
|
||||
@ -96,7 +96,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
/* restart DMA and enable IRQs */
|
||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
@@ -4056,7 +4108,7 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -4057,7 +4109,7 @@ static int mtk_probe(struct platform_dev
|
||||
eth->msg_enable = netif_msg_init(mtk_msg_level, MTK_DEFAULT_MSG_ENABLE);
|
||||
INIT_WORK(ð->pending_work, mtk_pending_work);
|
||||
|
||||
|
@ -16,7 +16,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
|
||||
@@ -2785,14 +2785,29 @@ static void mtk_dma_free(struct mtk_eth
|
||||
@@ -2786,14 +2786,29 @@ static void mtk_dma_free(struct mtk_eth
|
||||
kfree(eth->scratch_head);
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
schedule_work(ð->pending_work);
|
||||
}
|
||||
|
||||
@@ -3274,15 +3289,17 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -3275,15 +3290,17 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
||||
int i, val, ret;
|
||||
|
||||
@ -72,7 +72,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
if (eth->ethsys)
|
||||
regmap_update_bits(eth->ethsys, ETHSYS_DMA_AG_MAP, dma_mask,
|
||||
@@ -3408,8 +3425,10 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -3409,8 +3426,10 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
return 0;
|
||||
|
||||
err_disable_pm:
|
||||
@ -85,7 +85,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -3488,30 +3507,53 @@ static int mtk_do_ioctl(struct net_devic
|
||||
@@ -3489,30 +3508,53 @@ static int mtk_do_ioctl(struct net_devic
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
@ -148,7 +148,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
if (eth->dev->pins)
|
||||
pinctrl_select_state(eth->dev->pins->p,
|
||||
@@ -3522,15 +3564,19 @@ static void mtk_pending_work(struct work
|
||||
@@ -3523,15 +3565,19 @@ static void mtk_pending_work(struct work
|
||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
if (!test_bit(i, &restart))
|
||||
continue;
|
||||
|
@ -49,7 +49,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
};
|
||||
|
||||
/* strings used by ethtool */
|
||||
@@ -3282,6 +3288,102 @@ static void mtk_hw_warm_reset(struct mtk
|
||||
@@ -3283,6 +3289,102 @@ static void mtk_hw_warm_reset(struct mtk
|
||||
val, rst_mask);
|
||||
}
|
||||
|
||||
@ -152,7 +152,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static int mtk_hw_init(struct mtk_eth *eth, bool reset)
|
||||
{
|
||||
u32 dma_mask = ETHSYS_DMA_AG_MAP_PDMA | ETHSYS_DMA_AG_MAP_QDMA |
|
||||
@@ -3614,6 +3716,7 @@ static int mtk_cleanup(struct mtk_eth *e
|
||||
@@ -3615,6 +3717,7 @@ static int mtk_cleanup(struct mtk_eth *e
|
||||
mtk_unreg_dev(eth);
|
||||
mtk_free_dev(eth);
|
||||
cancel_work_sync(ð->pending_work);
|
||||
@ -160,7 +160,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -4041,6 +4144,7 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -4042,6 +4145,7 @@ static int mtk_probe(struct platform_dev
|
||||
|
||||
eth->rx_dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
|
||||
INIT_WORK(ð->rx_dim.work, mtk_dim_rx);
|
||||
@ -168,7 +168,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
eth->tx_dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
|
||||
INIT_WORK(ð->tx_dim.work, mtk_dim_tx);
|
||||
@@ -4245,6 +4349,8 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -4246,6 +4350,8 @@ static int mtk_probe(struct platform_dev
|
||||
NAPI_POLL_WEIGHT);
|
||||
|
||||
platform_set_drvdata(pdev, eth);
|
||||
@ -188,7 +188,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
/* QDMA Interrupt grouping registers */
|
||||
#define MTK_RLS_DONE_INT BIT(0)
|
||||
|
||||
@@ -537,6 +539,17 @@
|
||||
@@ -538,6 +540,17 @@
|
||||
#define MT7628_SDM_RBCNT (MT7628_SDM_OFFSET + 0x10c)
|
||||
#define MT7628_SDM_CS_ERR (MT7628_SDM_OFFSET + 0x110)
|
||||
|
||||
@ -206,7 +206,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
struct mtk_rx_dma {
|
||||
unsigned int rxd1;
|
||||
unsigned int rxd2;
|
||||
@@ -933,6 +946,7 @@ struct mtk_reg_map {
|
||||
@@ -934,6 +947,7 @@ struct mtk_reg_map {
|
||||
u32 delay_irq; /* delay interrupt */
|
||||
u32 irq_status; /* interrupt status */
|
||||
u32 irq_mask; /* interrupt mask */
|
||||
@ -214,7 +214,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
u32 int_grp;
|
||||
} pdma;
|
||||
struct {
|
||||
@@ -959,6 +973,8 @@ struct mtk_reg_map {
|
||||
@@ -960,6 +974,8 @@ struct mtk_reg_map {
|
||||
u32 gdma_to_ppe0;
|
||||
u32 ppe_base;
|
||||
u32 wdma_base[2];
|
||||
@ -223,7 +223,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
};
|
||||
|
||||
/* struct mtk_eth_data - This is the structure holding all differences
|
||||
@@ -1001,6 +1017,8 @@ struct mtk_soc_data {
|
||||
@@ -1002,6 +1018,8 @@ struct mtk_soc_data {
|
||||
} txrx;
|
||||
};
|
||||
|
||||
@ -232,7 +232,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
/* currently no SoC has more than 2 macs */
|
||||
#define MTK_MAX_DEVS 2
|
||||
|
||||
@@ -1123,6 +1141,14 @@ struct mtk_eth {
|
||||
@@ -1124,6 +1142,14 @@ struct mtk_eth {
|
||||
struct rhashtable flow_table;
|
||||
|
||||
struct bpf_prog __rcu *prog;
|
||||
|
@ -14,7 +14,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
|
||||
@@ -3645,6 +3645,11 @@ static void mtk_pending_work(struct work
|
||||
@@ -3646,6 +3646,11 @@ static void mtk_pending_work(struct work
|
||||
set_bit(MTK_RESETTING, ð->state);
|
||||
|
||||
mtk_prepare_for_reset(eth);
|
||||
@ -26,7 +26,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
/* stop all devices to make sure that dma is properly shut down */
|
||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
@@ -3682,6 +3687,8 @@ static void mtk_pending_work(struct work
|
||||
@@ -3683,6 +3688,8 @@ static void mtk_pending_work(struct work
|
||||
|
||||
clear_bit(MTK_RESETTING, ð->state);
|
||||
|
||||
|
@ -12,7 +12,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
|
||||
@@ -900,7 +900,7 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||
@@ -901,7 +901,7 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||
{
|
||||
const struct mtk_soc_data *soc = eth->soc;
|
||||
dma_addr_t phy_ring_tail;
|
||||
@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
dma_addr_t dma_addr;
|
||||
int i;
|
||||
|
||||
@@ -2154,19 +2154,25 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -2155,19 +2155,25 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
struct mtk_tx_ring *ring = ð->tx_ring;
|
||||
int i, sz = soc->txrx.txd_size;
|
||||
struct mtk_tx_dma_v2 *txd;
|
||||
@ -51,7 +51,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
u32 next_ptr = ring->phys + next * sz;
|
||||
|
||||
txd = ring->dma + i * sz;
|
||||
@@ -2186,22 +2192,22 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -2187,22 +2193,22 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
* descriptors in ring->dma_pdma.
|
||||
*/
|
||||
if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
|
||||
@ -79,7 +79,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ring->thresh = MAX_SKB_FRAGS;
|
||||
|
||||
/* make sure that all changes to the dma ring are flushed before we
|
||||
@@ -2213,14 +2219,14 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -2214,14 +2220,14 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
mtk_w32(eth, ring->phys, soc->reg_map->qdma.ctx_ptr);
|
||||
mtk_w32(eth, ring->phys, soc->reg_map->qdma.dtx_ptr);
|
||||
mtk_w32(eth,
|
||||
@ -96,7 +96,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
mtk_w32(eth, 0, MT7628_TX_CTX_IDX0);
|
||||
mtk_w32(eth, MT7628_PST_DTX_IDX0, soc->reg_map->pdma.rst_idx);
|
||||
}
|
||||
@@ -2238,7 +2244,7 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
@@ -2239,7 +2245,7 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
int i;
|
||||
|
||||
if (ring->buf) {
|
||||
@ -105,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
mtk_tx_unmap(eth, &ring->buf[i], false);
|
||||
kfree(ring->buf);
|
||||
ring->buf = NULL;
|
||||
@@ -2246,14 +2252,14 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
@@ -2247,14 +2253,14 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
|
||||
if (ring->dma) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
@ -122,7 +122,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ring->dma_pdma, ring->phys_pdma);
|
||||
ring->dma_pdma = NULL;
|
||||
}
|
||||
@@ -2773,7 +2779,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
@@ -2774,7 +2780,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
netdev_reset_queue(eth->netdev[i]);
|
||||
if (eth->scratch_ring) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
|
@ -12,7 +12,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
|
||||
@@ -4427,7 +4427,7 @@ static const struct mtk_soc_data mt7621_
|
||||
@@ -4428,7 +4428,7 @@ static const struct mtk_soc_data mt7621_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7621_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||
.txrx = {
|
||||
@@ -4466,7 +4466,7 @@ static const struct mtk_soc_data mt7623_
|
||||
@@ -4467,7 +4467,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7623_CLKS_BITMAP,
|
||||
.required_pctl = true,
|
||||
|
@ -54,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
},
|
||||
.gdm1_cnt = 0x1c00,
|
||||
.gdma_to_ppe0 = 0x3333,
|
||||
@@ -576,6 +580,75 @@ static void mtk_mac_link_down(struct phy
|
||||
@@ -577,6 +581,75 @@ static void mtk_mac_link_down(struct phy
|
||||
mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
|
||||
}
|
||||
|
||||
@ -130,7 +130,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static void mtk_mac_link_up(struct phylink_config *config,
|
||||
struct phy_device *phy,
|
||||
unsigned int mode, phy_interface_t interface,
|
||||
@@ -601,6 +674,8 @@ static void mtk_mac_link_up(struct phyli
|
||||
@@ -602,6 +675,8 @@ static void mtk_mac_link_up(struct phyli
|
||||
break;
|
||||
}
|
||||
|
||||
@ -139,7 +139,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/* Configure duplex */
|
||||
if (duplex == DUPLEX_FULL)
|
||||
mcr |= MAC_MCR_FORCE_DPX;
|
||||
@@ -1059,7 +1134,8 @@ static void mtk_tx_set_dma_desc_v1(struc
|
||||
@@ -1060,7 +1135,8 @@ static void mtk_tx_set_dma_desc_v1(struc
|
||||
|
||||
WRITE_ONCE(desc->txd1, info->addr);
|
||||
|
||||
@ -149,7 +149,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (info->last)
|
||||
data |= TX_DMA_LS0;
|
||||
WRITE_ONCE(desc->txd3, data);
|
||||
@@ -1093,9 +1169,6 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||
@@ -1094,9 +1170,6 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||
data |= TX_DMA_LS0;
|
||||
WRITE_ONCE(desc->txd3, data);
|
||||
|
||||
@ -159,7 +159,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
data = (mac->id + 1) << TX_DMA_FPORT_SHIFT_V2; /* forward port */
|
||||
data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
|
||||
WRITE_ONCE(desc->txd4, data);
|
||||
@@ -1139,11 +1212,12 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1140,11 +1213,12 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
.gso = gso,
|
||||
.csum = skb->ip_summed == CHECKSUM_PARTIAL,
|
||||
.vlan = skb_vlan_tag_present(skb),
|
||||
@ -173,7 +173,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct mtk_mac *mac = netdev_priv(dev);
|
||||
struct mtk_eth *eth = mac->hw;
|
||||
const struct mtk_soc_data *soc = eth->soc;
|
||||
@@ -1151,8 +1225,10 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1152,8 +1226,10 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
struct mtk_tx_dma *itxd_pdma, *txd_pdma;
|
||||
struct mtk_tx_buf *itx_buf, *tx_buf;
|
||||
int i, n_desc = 1;
|
||||
@ -184,7 +184,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
itxd = ring->next_free;
|
||||
itxd_pdma = qdma_to_pdma(ring, itxd);
|
||||
if (itxd == ring->last_free)
|
||||
@@ -1201,7 +1277,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1202,7 +1278,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
|
||||
txd_info.size = min_t(unsigned int, frag_size,
|
||||
soc->txrx.dma_max_len);
|
||||
@ -193,7 +193,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
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,
|
||||
@@ -1240,7 +1316,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1241,7 +1317,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
txd_pdma->txd2 |= TX_DMA_LS1;
|
||||
}
|
||||
|
||||
@ -202,7 +202,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
skb_tx_timestamp(skb);
|
||||
|
||||
ring->next_free = mtk_qdma_phys_to_virt(ring, txd->txd2);
|
||||
@@ -1252,8 +1328,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1253,8 +1329,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
wmb();
|
||||
|
||||
if (MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
|
||||
@ -212,7 +212,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
mtk_w32(eth, txd->txd2, soc->reg_map->qdma.ctx_ptr);
|
||||
} else {
|
||||
int next_idx;
|
||||
@@ -1322,7 +1397,7 @@ static void mtk_wake_queue(struct mtk_et
|
||||
@@ -1323,7 +1398,7 @@ static void mtk_wake_queue(struct mtk_et
|
||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
@ -221,7 +221,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1346,7 +1421,7 @@ static netdev_tx_t mtk_start_xmit(struct
|
||||
@@ -1347,7 +1422,7 @@ static netdev_tx_t mtk_start_xmit(struct
|
||||
|
||||
tx_num = mtk_cal_txd_req(eth, skb);
|
||||
if (unlikely(atomic_read(&ring->free_count) <= tx_num)) {
|
||||
@ -230,7 +230,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
netif_err(eth, tx_queued, dev,
|
||||
"Tx Ring full when queue awake!\n");
|
||||
spin_unlock(ð->page_lock);
|
||||
@@ -1372,7 +1447,7 @@ static netdev_tx_t mtk_start_xmit(struct
|
||||
@@ -1373,7 +1448,7 @@ static netdev_tx_t mtk_start_xmit(struct
|
||||
goto drop;
|
||||
|
||||
if (unlikely(atomic_read(&ring->free_count) <= ring->thresh))
|
||||
@ -239,7 +239,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
spin_unlock(ð->page_lock);
|
||||
|
||||
@@ -1539,10 +1614,12 @@ static int mtk_xdp_submit_frame(struct m
|
||||
@@ -1540,10 +1615,12 @@ static int mtk_xdp_submit_frame(struct m
|
||||
struct skb_shared_info *sinfo = xdp_get_shared_info_from_frame(xdpf);
|
||||
const struct mtk_soc_data *soc = eth->soc;
|
||||
struct mtk_tx_ring *ring = ð->tx_ring;
|
||||
@ -252,7 +252,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
};
|
||||
int err, index = 0, n_desc = 1, nr_frags;
|
||||
struct mtk_tx_dma *htxd, *txd, *txd_pdma;
|
||||
@@ -1593,6 +1670,7 @@ static int mtk_xdp_submit_frame(struct m
|
||||
@@ -1594,6 +1671,7 @@ static int mtk_xdp_submit_frame(struct m
|
||||
memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
|
||||
txd_info.size = skb_frag_size(&sinfo->frags[index]);
|
||||
txd_info.last = index + 1 == nr_frags;
|
||||
@ -260,7 +260,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
data = skb_frag_address(&sinfo->frags[index]);
|
||||
|
||||
index++;
|
||||
@@ -1944,8 +2022,46 @@ rx_done:
|
||||
@@ -1945,8 +2023,46 @@ rx_done:
|
||||
return done;
|
||||
}
|
||||
|
||||
@ -308,7 +308,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
{
|
||||
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
||||
struct mtk_tx_ring *ring = ð->tx_ring;
|
||||
@@ -1975,12 +2091,9 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
@@ -1976,12 +2092,9 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
break;
|
||||
|
||||
if (tx_buf->data != (void *)MTK_DMA_DUMMY_DESC) {
|
||||
@ -323,7 +323,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
budget--;
|
||||
}
|
||||
mtk_tx_unmap(eth, tx_buf, true);
|
||||
@@ -1998,7 +2111,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
@@ -1999,7 +2112,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
}
|
||||
|
||||
static int mtk_poll_tx_pdma(struct mtk_eth *eth, int budget,
|
||||
@ -332,7 +332,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
{
|
||||
struct mtk_tx_ring *ring = ð->tx_ring;
|
||||
struct mtk_tx_buf *tx_buf;
|
||||
@@ -2014,12 +2127,8 @@ static int mtk_poll_tx_pdma(struct mtk_e
|
||||
@@ -2015,12 +2128,8 @@ static int mtk_poll_tx_pdma(struct mtk_e
|
||||
break;
|
||||
|
||||
if (tx_buf->data != (void *)MTK_DMA_DUMMY_DESC) {
|
||||
@ -347,7 +347,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
budget--;
|
||||
}
|
||||
mtk_tx_unmap(eth, tx_buf, true);
|
||||
@@ -2040,26 +2149,15 @@ static int mtk_poll_tx(struct mtk_eth *e
|
||||
@@ -2041,26 +2150,15 @@ static int mtk_poll_tx(struct mtk_eth *e
|
||||
{
|
||||
struct mtk_tx_ring *ring = ð->tx_ring;
|
||||
struct dim_sample dim_sample = {};
|
||||
@ -379,7 +379,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
dim_update_sample(eth->tx_events, eth->tx_packets, eth->tx_bytes,
|
||||
&dim_sample);
|
||||
@@ -2069,7 +2167,7 @@ static int mtk_poll_tx(struct mtk_eth *e
|
||||
@@ -2070,7 +2168,7 @@ static int mtk_poll_tx(struct mtk_eth *e
|
||||
(atomic_read(&ring->free_count) > ring->thresh))
|
||||
mtk_wake_queue(eth);
|
||||
|
||||
@ -388,7 +388,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
static void mtk_handle_status_irq(struct mtk_eth *eth)
|
||||
@@ -2155,6 +2253,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -2156,6 +2254,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
int i, sz = soc->txrx.txd_size;
|
||||
struct mtk_tx_dma_v2 *txd;
|
||||
int ring_size;
|
||||
@ -396,7 +396,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (MTK_HAS_CAPS(soc->caps, MTK_QDMA))
|
||||
ring_size = MTK_QDMA_RING_SIZE;
|
||||
@@ -2222,8 +2321,25 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -2223,8 +2322,25 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
ring->phys + ((ring_size - 1) * sz),
|
||||
soc->reg_map->qdma.crx_ptr);
|
||||
mtk_w32(eth, ring->last_free_ptr, soc->reg_map->qdma.drx_ptr);
|
||||
@ -424,7 +424,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
} else {
|
||||
mtk_w32(eth, ring->phys_pdma, MT7628_TX_BASE_PTR0);
|
||||
mtk_w32(eth, ring_size, MT7628_TX_MAX_CNT0);
|
||||
@@ -2903,7 +3019,7 @@ static int mtk_start_dma(struct mtk_eth
|
||||
@@ -2904,7 +3020,7 @@ static int mtk_start_dma(struct mtk_eth
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
val |= MTK_MUTLI_CNT | MTK_RESV_BUF |
|
||||
MTK_WCOMP_EN | MTK_DMAD_WR_WDONE |
|
||||
@ -433,7 +433,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
else
|
||||
val |= MTK_RX_BT_32DWORDS;
|
||||
mtk_w32(eth, val, reg_map->qdma.glo_cfg);
|
||||
@@ -2949,6 +3065,45 @@ static void mtk_gdm_config(struct mtk_et
|
||||
@@ -2950,6 +3066,45 @@ static void mtk_gdm_config(struct mtk_et
|
||||
mtk_w32(eth, 0, MTK_RST_GL);
|
||||
}
|
||||
|
||||
@ -479,7 +479,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static int mtk_open(struct net_device *dev)
|
||||
{
|
||||
struct mtk_mac *mac = netdev_priv(dev);
|
||||
@@ -2993,7 +3148,8 @@ static int mtk_open(struct net_device *d
|
||||
@@ -2994,7 +3149,8 @@ static int mtk_open(struct net_device *d
|
||||
refcount_inc(ð->dma_refcnt);
|
||||
|
||||
phylink_start(mac->phylink);
|
||||
@ -489,7 +489,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3716,8 +3872,12 @@ static int mtk_unreg_dev(struct mtk_eth
|
||||
@@ -3717,8 +3873,12 @@ static int mtk_unreg_dev(struct mtk_eth
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
@ -502,7 +502,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
unregister_netdev(eth->netdev[i]);
|
||||
}
|
||||
|
||||
@@ -3934,6 +4094,23 @@ static int mtk_set_rxnfc(struct net_devi
|
||||
@@ -3935,6 +4095,23 @@ static int mtk_set_rxnfc(struct net_devi
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -526,7 +526,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static const struct ethtool_ops mtk_ethtool_ops = {
|
||||
.get_link_ksettings = mtk_get_link_ksettings,
|
||||
.set_link_ksettings = mtk_set_link_ksettings,
|
||||
@@ -3969,6 +4146,7 @@ static const struct net_device_ops mtk_n
|
||||
@@ -3970,6 +4147,7 @@ static const struct net_device_ops mtk_n
|
||||
.ndo_setup_tc = mtk_eth_setup_tc,
|
||||
.ndo_bpf = mtk_xdp,
|
||||
.ndo_xdp_xmit = mtk_xdp_xmit,
|
||||
@ -534,7 +534,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
};
|
||||
|
||||
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
||||
@@ -3978,6 +4156,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
@@ -3979,6 +4157,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
struct phylink *phylink;
|
||||
struct mtk_mac *mac;
|
||||
int id, err;
|
||||
@ -542,7 +542,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (!_id) {
|
||||
dev_err(eth->dev, "missing mac id\n");
|
||||
@@ -3995,7 +4174,10 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
@@ -3996,7 +4175,10 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -554,7 +554,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!eth->netdev[id]) {
|
||||
dev_err(eth->dev, "alloc_etherdev failed\n");
|
||||
return -ENOMEM;
|
||||
@@ -4092,6 +4274,11 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
@@ -4093,6 +4275,11 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
else
|
||||
eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH_2K - MTK_RX_ETH_HLEN;
|
||||
|
||||
@ -628,7 +628,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/* PDMA on MT7628 */
|
||||
#define TX_DMA_DONE BIT(31)
|
||||
@@ -952,6 +971,7 @@ struct mtk_reg_map {
|
||||
@@ -953,6 +972,7 @@ struct mtk_reg_map {
|
||||
} pdma;
|
||||
struct {
|
||||
u32 qtx_cfg; /* tx queue configuration */
|
||||
@ -636,7 +636,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
u32 rx_ptr; /* rx base pointer */
|
||||
u32 rx_cnt_cfg; /* rx max count configuration */
|
||||
u32 qcrx_ptr; /* rx cpu pointer */
|
||||
@@ -969,6 +989,7 @@ struct mtk_reg_map {
|
||||
@@ -970,6 +990,7 @@ struct mtk_reg_map {
|
||||
u32 fq_tail; /* fq tail pointer */
|
||||
u32 fq_count; /* fq free page count */
|
||||
u32 fq_blen; /* fq free page buffer length */
|
||||
@ -644,7 +644,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
} qdma;
|
||||
u32 gdm1_cnt;
|
||||
u32 gdma_to_ppe0;
|
||||
@@ -1172,6 +1193,7 @@ struct mtk_mac {
|
||||
@@ -1173,6 +1194,7 @@ struct mtk_mac {
|
||||
__be32 hwlro_ip[MTK_MAX_LRO_IP_CNT];
|
||||
int hwlro_ip_cnt;
|
||||
unsigned int syscfg0;
|
||||
|
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -916,7 +916,13 @@ enum mkt_eth_capabilities {
|
||||
@@ -917,7 +917,13 @@ enum mkt_eth_capabilities {
|
||||
#define MTK_MUX_GMAC12_TO_GEPHY_SGMII \
|
||||
(MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII | MTK_MUX)
|
||||
|
||||
|
@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
#include "mtk_eth_soc.h"
|
||||
#include "mtk_wed.h"
|
||||
@@ -1973,16 +1974,22 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1974,16 +1975,22 @@ static int mtk_poll_rx(struct napi_struc
|
||||
htons(RX_DMA_VPID(trxd.rxd4)),
|
||||
RX_DMA_VID(trxd.rxd4));
|
||||
} else if (trxd.rxd2 & RX_DMA_VTAG) {
|
||||
@ -52,7 +52,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
skb_record_rx_queue(skb, 0);
|
||||
@@ -2799,15 +2806,30 @@ static netdev_features_t mtk_fix_feature
|
||||
@@ -2800,15 +2807,30 @@ static netdev_features_t mtk_fix_feature
|
||||
|
||||
static int mtk_set_features(struct net_device *dev, netdev_features_t features)
|
||||
{
|
||||
@ -88,7 +88,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
/* wait for DMA to finish whatever it is doing before we start using it again */
|
||||
@@ -3104,11 +3126,45 @@ found:
|
||||
@@ -3105,11 +3127,45 @@ found:
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
@ -135,7 +135,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
|
||||
if (err) {
|
||||
@@ -3631,6 +3687,10 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -3632,6 +3688,10 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
*/
|
||||
val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
|
||||
mtk_w32(eth, val | MTK_CDMQ_STAG_EN, MTK_CDMQ_IG_CTRL);
|
||||
@ -146,7 +146,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/* Enable RX VLan Offloading */
|
||||
mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
|
||||
@@ -3864,6 +3924,12 @@ static int mtk_free_dev(struct mtk_eth *
|
||||
@@ -3865,6 +3925,12 @@ static int mtk_free_dev(struct mtk_eth *
|
||||
free_netdev(eth->netdev[i]);
|
||||
}
|
||||
|
||||
@ -181,7 +181,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/* CDMP Ingress Control Register */
|
||||
#define MTK_CDMP_IG_CTRL 0x400
|
||||
#define MTK_CDMP_STAG_EN BIT(0)
|
||||
@@ -1165,6 +1171,8 @@ struct mtk_eth {
|
||||
@@ -1166,6 +1172,8 @@ struct mtk_eth {
|
||||
|
||||
int ip_align;
|
||||
|
||||
|
@ -11,7 +11,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
|
||||
@@ -3711,9 +3711,12 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -3712,9 +3712,12 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
||||
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
|
@ -20,7 +20,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
|
||||
@@ -3142,7 +3142,8 @@ static int mtk_open(struct net_device *d
|
||||
@@ -3143,7 +3143,8 @@ static int mtk_open(struct net_device *d
|
||||
struct mtk_eth *eth = mac->hw;
|
||||
int i, err;
|
||||
|
||||
@ -30,7 +30,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
|
||||
struct metadata_dst *md_dst = eth->dsa_meta[i];
|
||||
|
||||
@@ -3159,7 +3160,8 @@ static int mtk_open(struct net_device *d
|
||||
@@ -3160,7 +3161,8 @@ static int mtk_open(struct net_device *d
|
||||
}
|
||||
} else {
|
||||
/* Hardware special tag parsing needs to be disabled if at least
|
||||
|
@ -23,7 +23,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
|
||||
@@ -3077,7 +3077,7 @@ static void mtk_gdm_config(struct mtk_et
|
||||
@@ -3078,7 +3078,7 @@ static void mtk_gdm_config(struct mtk_et
|
||||
|
||||
val |= config;
|
||||
|
||||
@ -32,7 +32,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
val |= MTK_GDMA_SPECIAL_TAG;
|
||||
|
||||
mtk_w32(eth, val, MTK_GDMA_FWD_CFG(i));
|
||||
@@ -3142,8 +3142,7 @@ static int mtk_open(struct net_device *d
|
||||
@@ -3143,8 +3143,7 @@ static int mtk_open(struct net_device *d
|
||||
struct mtk_eth *eth = mac->hw;
|
||||
int i, err;
|
||||
|
||||
@ -42,7 +42,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
|
||||
struct metadata_dst *md_dst = eth->dsa_meta[i];
|
||||
|
||||
@@ -3160,8 +3159,7 @@ static int mtk_open(struct net_device *d
|
||||
@@ -3161,8 +3160,7 @@ static int mtk_open(struct net_device *d
|
||||
}
|
||||
} else {
|
||||
/* Hardware special tag parsing needs to be disabled if at least
|
||||
|
@ -77,7 +77,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
|
||||
@@ -1829,7 +1829,9 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1830,7 +1830,9 @@ static int mtk_poll_rx(struct napi_struc
|
||||
|
||||
while (done < budget) {
|
||||
unsigned int pktlen, *rxdcsum;
|
||||
@ -87,7 +87,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
dma_addr_t dma_addr;
|
||||
u32 hash, reason;
|
||||
int mac = 0;
|
||||
@@ -1969,27 +1971,29 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1970,27 +1972,29 @@ static int mtk_poll_rx(struct napi_struc
|
||||
|
||||
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user