From 40452223d6a8c184db9836cea9f32e7f7f24ebe9 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Mon, 29 Jul 2024 18:31:53 -0700 Subject: [PATCH 1/9] ramips: ethernet: use devm for request_irq Allows removing free_irq. Simpler. Oddly enough the other switch code already does this. Signed-off-by: Rosen Penev Link: https://github.com/openwrt/openwrt/pull/16050 Signed-off-by: Robert Marko --- .../linux/ramips/files/drivers/net/ethernet/ralink/gsw_mt7620.c | 2 +- .../ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/gsw_mt7620.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/gsw_mt7620.c index dcaff04db1..5853df70c5 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ralink/gsw_mt7620.c +++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/gsw_mt7620.c @@ -245,7 +245,7 @@ int mtk_gsw_init(struct fe_priv *priv) mt7620_ephy_init(gsw); if (gsw->irq) { - ret = request_irq(gsw->irq, gsw_interrupt_mt7620, 0, + ret = devm_request_irq(&pdev->dev, gsw->irq, gsw_interrupt_mt7620, 0, "gsw", priv); if (ret) { dev_err(&pdev->dev, "Failed to request irq"); diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c index e794f8d5cb..e261d90924 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c +++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c @@ -1414,7 +1414,6 @@ static void fe_uninit(struct net_device *dev) fe_mdio_cleanup(priv); fe_reg_w32(0, FE_REG_FE_INT_ENABLE); - free_irq(dev->irq, dev); } static int fe_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) From 7abc89dabee21fc269017224900aca23a71930da Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Tue, 6 Aug 2024 15:05:13 -0700 Subject: [PATCH 2/9] mpc85xx: panda: use DSA B53 driver It's upstream and a replacement for the swconfig driver. Signed-off-by: Rosen Penev Link: https://github.com/openwrt/openwrt/pull/16124 Signed-off-by: Robert Marko --- .../mpc85xx/base-files/etc/board.d/02_network | 4 +--- .../files/arch/powerpc/boot/dts/panda.dts | 5 +++-- target/linux/mpc85xx/image/p1020.mk | 2 ++ target/linux/mpc85xx/p1020/config-default | 19 ++++++++++++------- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/target/linux/mpc85xx/base-files/etc/board.d/02_network b/target/linux/mpc85xx/base-files/etc/board.d/02_network index 2574ebc9b9..e5afcf7df6 100644 --- a/target/linux/mpc85xx/base-files/etc/board.d/02_network +++ b/target/linux/mpc85xx/base-files/etc/board.d/02_network @@ -24,9 +24,7 @@ hpe,msm460) ucidef_set_interface_lan "eth0" ;; ocedo,panda) - ucidef_set_interface_wan "eth1" - ucidef_add_switch "switch0" \ - "0:lan" "1:lan" "2:lan" "3:lan" "4:lan" "5:lan" "6:lan" "7:lan" "8u@eth0" + ucidef_set_interface_lan_wan "lan1 lan2 lan3 lan4 lan5 lan6 lan7 lan8" "eth1" ;; tplink,tl-wdr4900-v1) ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan" diff --git a/target/linux/mpc85xx/files/arch/powerpc/boot/dts/panda.dts b/target/linux/mpc85xx/files/arch/powerpc/boot/dts/panda.dts index 4b3b52d35b..c4125052ec 100644 --- a/target/linux/mpc85xx/files/arch/powerpc/boot/dts/panda.dts +++ b/target/linux/mpc85xx/files/arch/powerpc/boot/dts/panda.dts @@ -87,6 +87,7 @@ }; switch0: ethernet-phy@0 { + compatible = "brcm,bcm53128"; reg = <0x0>; ports { @@ -135,7 +136,8 @@ port@8 { reg = <8>; - label = "cpu"; + phy-mode = "rgmii-id"; + ethernet = <&enet0>; fixed-link { speed = <1000>; @@ -160,7 +162,6 @@ enet0: ethernet@b0000 { phy-connection-type = "rgmii-id"; - phy-handle = <&switch0>; fixed-link { speed = <1000>; diff --git a/target/linux/mpc85xx/image/p1020.mk b/target/linux/mpc85xx/image/p1020.mk index e3902d23d6..c310b26c87 100644 --- a/target/linux/mpc85xx/image/p1020.mk +++ b/target/linux/mpc85xx/image/p1020.mk @@ -120,5 +120,7 @@ define Device/ocedo_panda IMAGES := fdt.bin sysupgrade.bin IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata IMAGE/fdt.bin := append-dtb + DEVICE_COMPAT_VERSION := 1.1 + DEVICE_COMPAT_MESSAGE := Config cannot be migrated from swconfig to DSA endef TARGET_DEVICES += ocedo_panda diff --git a/target/linux/mpc85xx/p1020/config-default b/target/linux/mpc85xx/p1020/config-default index d1c0532582..36ace8015f 100644 --- a/target/linux/mpc85xx/p1020/config-default +++ b/target/linux/mpc85xx/p1020/config-default @@ -1,5 +1,8 @@ CONFIG_ARCH_HAS_TICK_BROADCAST=y CONFIG_AT803X_PHY=y +CONFIG_B53=y +CONFIG_B53_MDIO_DRIVER=y +CONFIG_BCM_NET_PHYLIB=y CONFIG_BROADCOM_PHY=y CONFIG_CMDLINE_OVERRIDE=y CONFIG_CPU_RMAP=y @@ -8,6 +11,7 @@ CONFIG_EEPROM_LEGACY=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_GENERIC_TBSYNC=y CONFIG_GPIO_74X164=y +CONFIG_GRO_CELLS=y # CONFIG_GPIO_MAX77620 is not set CONFIG_HAVE_RCU_TABLE_FREE=y CONFIG_HIVEAP_330=y @@ -32,7 +36,15 @@ CONFIG_MTD_UBI_BEB_LIMIT=20 CONFIG_MTD_UBI_BLOCK=y CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_NET_DEVLINK=y +CONFIG_NET_DSA=y +CONFIG_NET_DSA_TAG_BRCM=y +CONFIG_NET_DSA_TAG_BRCM_COMMON=y +CONFIG_NET_DSA_TAG_BRCM_LEGACY=y +CONFIG_NET_DSA_TAG_BRCM_PREPEND=y +CONFIG_NET_DSA_TAG_NONE=y CONFIG_NET_FLOW_LIMIT=y +CONFIG_NET_SWITCHDEV=y CONFIG_NR_CPUS=2 CONFIG_PADATA=y CONFIG_REGMAP_IRQ=y @@ -43,13 +55,6 @@ CONFIG_RPS=y CONFIG_RWSEM_SPIN_ON_OWNER=y CONFIG_SMP=y CONFIG_SPI_GPIO=y -CONFIG_SWCONFIG=y -CONFIG_SWCONFIG_B53=y -# CONFIG_SWCONFIG_B53_MMAP_DRIVER is not set -CONFIG_SWCONFIG_B53_PHY_DRIVER=y -# CONFIG_SWCONFIG_B53_PHY_FIXUP is not set -# CONFIG_SWCONFIG_B53_SPI_DRIVER is not set -# CONFIG_SWCONFIG_B53_SRAB_DRIVER is not set CONFIG_TREE_RCU=y CONFIG_UBIFS_FS=y CONFIG_WS_AP3710I=y From 88186c85f9d4f73ebb9570101cd3e9e5382dbd99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sylvain=20Monn=C3=A9?= Date: Mon, 5 Aug 2024 15:40:12 +0200 Subject: [PATCH 3/9] uhttpd: restart daemon if certificate has changed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #16075 When the SSL certificate used by uhttpd has been changed, calling `/etc/init.d/uhttpd reload` will now have the effect of restarting the daemon to make the change effective. Signed-off-by: Sylvain Monné Link: https://github.com/openwrt/openwrt/pull/16076 Signed-off-by: Robert Marko --- package/network/services/uhttpd/files/uhttpd.init | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package/network/services/uhttpd/files/uhttpd.init b/package/network/services/uhttpd/files/uhttpd.init index 6929fef421..c6e0b210c5 100755 --- a/package/network/services/uhttpd/files/uhttpd.init +++ b/package/network/services/uhttpd/files/uhttpd.init @@ -204,6 +204,9 @@ start_instance() append_arg "$cfg" cert "-C" append_arg "$cfg" key "-K" + procd_append_param file "$UHTTPD_CERT" + procd_append_param file "$UHTTPD_KEY" + for listen in $https; do procd_append_param command -s "$listen" done From 60951f0515e0301619de6757de5e6b76dad645c4 Mon Sep 17 00:00:00 2001 From: Matt Eaton Date: Thu, 1 Aug 2024 11:57:54 -0400 Subject: [PATCH 4/9] xfrm: remove requirement for underlying device Since kernel 5.3, phydev (dev) is no longer required torvalds/linux@22d6552 Signed-off-by: Matt Eaton Link: https://github.com/openwrt/openwrt/pull/16046 Signed-off-by: Robert Marko --- package/network/config/xfrm/Makefile | 2 +- package/network/config/xfrm/files/xfrm.sh | 13 ++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/package/network/config/xfrm/Makefile b/package/network/config/xfrm/Makefile index 777f20c77c..68f81df65b 100644 --- a/package/network/config/xfrm/Makefile +++ b/package/network/config/xfrm/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=xfrm -PKG_RELEASE:=4 +PKG_RELEASE:=5 PKG_LICENSE:=GPL-2.0 include $(INCLUDE_DIR)/package.mk diff --git a/package/network/config/xfrm/files/xfrm.sh b/package/network/config/xfrm/files/xfrm.sh index bdebd4b9c3..5fa33bffb0 100755 --- a/package/network/config/xfrm/files/xfrm.sh +++ b/package/network/config/xfrm/files/xfrm.sh @@ -14,27 +14,22 @@ proto_xfrm_setup() { local tunlink ifid mtu zone multicast json_get_vars tunlink ifid mtu zone multicast - [ -z "$tunlink" ] && { - proto_notify_error "$cfg" NO_TUNLINK - proto_block_restart "$cfg" - exit - } - [ -z "$ifid" ] && { proto_notify_error "$cfg" NO_IFID proto_block_restart "$cfg" exit } - ( proto_add_host_dependency "$cfg" '' "$tunlink" ) - proto_init_update "$cfg" 1 proto_add_tunnel json_add_string mode "$mode" json_add_int mtu "${mtu:-1280}" - json_add_string link "$tunlink" + [ -n "$tunlink" ] && { + ( proto_add_host_dependency "$cfg" '' "$tunlink" ) + json_add_string link "$tunlink" + } json_add_boolean multicast "${multicast:-1}" From 1310e4f1aecef6c2c1b68227216ba7cc04006002 Mon Sep 17 00:00:00 2001 From: Mark Mentovai Date: Mon, 6 Jun 2022 14:53:31 -0400 Subject: [PATCH 5/9] failsafe: fix console failsafe shell When running a failsafe shell on a console, job control was unavailable, and ^C did not function correctly. This change invokes console failsafe shells via `setsid`, making them session leaders and allowing them to claim controlling terminals, which makes job control function properly. To support this, the busybox `setsid` utility is enabled. This has a minimal 149-byte size impact on a test x86_64 squashfs rootfs image. ^C was ignored in subprocesses of failsafe shells: it was not possible to ^C out of a program that would not exit on its own, such as many typical `ping` invocations. As job control was unavailable, it was not possible to suspend these subprocesses either, causing a hung program to tie up a console indefinitely, unless another means to signal the program was available. This was caused by SIGINT being placed at disposition SIG_IGN by the shell running preinit, which it did because the console shell was executed asynchronously with &. That disposition was inherited by the console shell and its subprocesses, generally causing ^C to have no effect. As there is no way in busybox `ash` to reset the disposition of a signal already ignored at shell entry, and no apparent way to avoid SIGINT being placed at SIG_IGN when & is used in preinit, an alternative construct is needed. Now, `start-stop-daemon` is used to start (-S) the console failsafe shell in the background (-b). This approach does not alter SIGINT, allowing the console shell to be started with that signal's handling intact, and normal ^C processing to occur. busybox `ash` has some behaviors conditional on SHLVL, and while the console shells ought to run at SHLVL=1, they were not by virtue of being started by the shell-based preinit system. Additionally, a variety of detritus was present in the console shell's environment, carried over from preinit. These conditions are corrected by running the console shell via `env -i` to clear the environment and establish a minimum and correct set of environment variables for operation, in the same manner as `login`. HOME is not explicitly set, because it's addressed in /etc/profile. For non-failsafe console shells when system.@system[0].ttylogin = 0, `login -f root` achieves a similar effect. (`login` already started non-failsafe console shells when ttylogin = 1 and behaved correctly. This brings the ttylogin = 0 case to parity.) Note that even `login -f` is somewhat undesirable for failsafe shells because it requires a viable /etc/passwd, hence the `env -i` construct in that case. The TERM environment variable from the preinit environment, with value "linux", would rarely be correct for serial consoles. Now, the preinit TERM value is preserved (or set to "linux" if unset) only when the console is /dev/console or /dev/tty[0-9]*. Otherwise, it will be set to a safe default appropriate for serial consoles, "vt102", as used for serial consoles by busybox init. This "linux"/"vt102" TERM setting is also duplicated for non-failsafe console shells. This also indicates failsafe mode by showing "- failsafe -" on all consoles (not just the last-defined one). It sets a hostname of "OpenWrt-failsafe" in failsafe mode which is rendered in the shell's prompt as a reminder of the mode during interactive failsafe use. Previously, no hostname was set, which resulted in the kernel-default hostname, "(none)", appearing in failsafe shell prompts. Signed-off-by: Mark Mentovai Link: https://github.com/openwrt/openwrt/pull/16113 Signed-off-by: Robert Marko --- .../files/lib/preinit/10_indicate_failsafe | 7 ++++++- .../files/lib/preinit/30_failsafe_wait | 5 ++++- .../files/lib/preinit/99_10_failsafe_login | 18 +++++++++++++----- package/base-files/files/usr/libexec/login.sh | 14 +++++++++++++- package/utils/busybox/Config-defaults.in | 2 +- 5 files changed, 37 insertions(+), 9 deletions(-) diff --git a/package/base-files/files/lib/preinit/10_indicate_failsafe b/package/base-files/files/lib/preinit/10_indicate_failsafe index 7bf5e029e4..8c950bff74 100644 --- a/package/base-files/files/lib/preinit/10_indicate_failsafe +++ b/package/base-files/files/lib/preinit/10_indicate_failsafe @@ -9,9 +9,14 @@ indicate_failsafe_led () { indicate_failsafe() { [ "$pi_preinit_no_failsafe" = "y" ] && return - echo "- failsafe -" + local consoles="$(cat /sys/class/tty/console/active)" + [ -n "$consoles" ] || consoles=console + for console in $consoles; do + [ -c "/dev/$console" ] && echo "- failsafe -" >"/dev/$console" + done preinit_net_echo "Entering Failsafe!\n" indicate_failsafe_led + echo OpenWrt-failsafe > /proc/sys/kernel/hostname } boot_hook_add failsafe indicate_failsafe diff --git a/package/base-files/files/lib/preinit/30_failsafe_wait b/package/base-files/files/lib/preinit/30_failsafe_wait index 9ab2e8bd4d..c792089ece 100644 --- a/package/base-files/files/lib/preinit/30_failsafe_wait +++ b/package/base-files/files/lib/preinit/30_failsafe_wait @@ -40,7 +40,7 @@ fs_wait_for_key () { rm -f $keypress_wait } & - local consoles="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | sed -e 's/^console=//' -e 's/,.*//')" + local consoles="$(cat /sys/class/tty/console/active)" [ -n "$consoles" ] || consoles=console for console in $consoles; do [ -c "/dev/$console" ] || continue @@ -78,6 +78,9 @@ fs_wait_for_key () { keypressed=1 [ "$(cat $keypress_true)" = "true" ] && keypressed=0 + trap - INT + trap - USR1 + rm -f $keypress_true rm -f $keypress_wait rm -f $keypress_sec diff --git a/package/base-files/files/lib/preinit/99_10_failsafe_login b/package/base-files/files/lib/preinit/99_10_failsafe_login index 6f4af3f28b..f72a35ed53 100644 --- a/package/base-files/files/lib/preinit/99_10_failsafe_login +++ b/package/base-files/files/lib/preinit/99_10_failsafe_login @@ -2,14 +2,22 @@ # Copyright (C) 2010 Vertical Communications failsafe_shell() { - local consoles="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | sed -e 's/^console=//' -e 's/,.*//')" + local consoles="$(cat /sys/class/tty/console/active)" [ -n "$consoles" ] || consoles=console for console in $consoles; do - [ -c "/dev/$console" ] && while true; do - ash --login <"/dev/$console" >"/dev/$console" 2>"/dev/$console" - sleep 1 - done & + case "$console" in + console|tty[0-9]*) + term=${TERM:-linux} + ;; + *) + term=vt102 + ;; + esac + # Running asynchronously via the shell's & would ignore SIGINT, + # breaking ^C. Use start-stop-daemon instead. + [ -c "/dev/$console" ] && start-stop-daemon -Sb -p /dev/null -- env -i ash -c "while true; do setsid -c env -i USER=root LOGNAME=root SHELL=/bin/ash TERM="$term" ash --login <\"/dev/$console\" >\"/dev/$console\" 2>\"/dev/$console\"; sleep 1; done" done + } boot_hook_add failsafe failsafe_shell diff --git a/package/base-files/files/usr/libexec/login.sh b/package/base-files/files/usr/libexec/login.sh index 1fff39c6a0..e2f898e850 100755 --- a/package/base-files/files/usr/libexec/login.sh +++ b/package/base-files/files/usr/libexec/login.sh @@ -1,5 +1,17 @@ #!/bin/sh -[ "$(uci -q get system.@system[0].ttylogin)" = 1 ] || exec /bin/ash --login +[ -t 0 ] && { + tty_dev=$(readlink /proc/self/fd/0) + case "$tty_dev" in + /dev/console|/dev/tty[0-9]*) + export TERM=${TERM:-linux} + ;; + /dev/*) + export TERM=vt102 + ;; + esac +} + +[ "$(uci -q get system.@system[0].ttylogin)" = 1 ] || exec /bin/login -f root exec /bin/login diff --git a/package/utils/busybox/Config-defaults.in b/package/utils/busybox/Config-defaults.in index 515bea3d1d..f88f395e2c 100644 --- a/package/utils/busybox/Config-defaults.in +++ b/package/utils/busybox/Config-defaults.in @@ -1801,7 +1801,7 @@ config BUSYBOX_DEFAULT_FEATURE_SETPRIV_CAPABILITY_NAMES default n config BUSYBOX_DEFAULT_SETSID bool - default n + default y config BUSYBOX_DEFAULT_SWAPON bool default y From 5eec1df01e2dd9d6279781534068214c72df116a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Mon, 19 Aug 2024 18:30:59 +0200 Subject: [PATCH 6/9] generic: 6.6: backport realtek phy patches from v6.11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add support for rtl8224 2.5Gbps PHY - add support for PHY LEDs on RTL8211F Signed-off-by: Álvaro Fernández Rojas --- ...-add-support-for-rtl8224-2.5Gbps-PHY.patch | 33 ++++ ...Add-support-for-PHY-LEDs-on-RTL8211F.patch | 151 ++++++++++++++++++ ...-use-genphy_soft_reset-for-2.5G-PHYs.patch | 16 +- ...sable-SGMII-in-band-AN-for-2-5G-PHYs.patch | 4 +- ...make-sure-paged-read-is-protected-by.patch | 2 +- ...use-inline-functions-for-10GbE-adver.patch | 2 +- ...check-validity-of-10GbE-link-partner.patch | 2 +- ...-phy-realtek-introduce-rtl822x_probe.patch | 16 +- ...ealtek-support-interrupt-of-RTL8221B.patch | 10 +- 9 files changed, 210 insertions(+), 26 deletions(-) create mode 100644 target/linux/generic/backport-6.6/781-10-v6.11-net-phy-realtek-add-support-for-rtl8224-2.5Gbps-PHY.patch create mode 100644 target/linux/generic/backport-6.6/781-11-v6.11-net-phy-realtek-Add-support-for-PHY-LEDs-on-RTL8211F.patch diff --git a/target/linux/generic/backport-6.6/781-10-v6.11-net-phy-realtek-add-support-for-rtl8224-2.5Gbps-PHY.patch b/target/linux/generic/backport-6.6/781-10-v6.11-net-phy-realtek-add-support-for-rtl8224-2.5Gbps-PHY.patch new file mode 100644 index 0000000000..13e1d883a3 --- /dev/null +++ b/target/linux/generic/backport-6.6/781-10-v6.11-net-phy-realtek-add-support-for-rtl8224-2.5Gbps-PHY.patch @@ -0,0 +1,33 @@ +From 9e42a2ea7f6703e2092c39171c2bf1fd7eec0bd3 Mon Sep 17 00:00:00 2001 +From: Chris Packham +Date: Tue, 11 Jun 2024 17:34:14 +1200 +Subject: [PATCH] net: phy: realtek: add support for rtl8224 2.5Gbps PHY + +The Realtek RTL8224 PHY is a 2.5Gbps capable PHY. It only uses the +clause 45 MDIO interface and can leverage the support that has already +been added for the other 822x PHYs. + +Signed-off-by: Chris Packham +Link: https://lore.kernel.org/r/20240611053415.2111723-1-chris.packham@alliedtelesis.co.nz +Signed-off-by: Jakub Kicinski +--- + drivers/net/phy/realtek.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/net/phy/realtek.c ++++ b/drivers/net/phy/realtek.c +@@ -1318,6 +1318,14 @@ static struct phy_driver realtek_drvs[] + .read_page = rtl821x_read_page, + .write_page = rtl821x_write_page, + }, { ++ PHY_ID_MATCH_EXACT(0x001ccad0), ++ .name = "RTL8224 2.5Gbps PHY", ++ .get_features = rtl822x_c45_get_features, ++ .config_aneg = rtl822x_c45_config_aneg, ++ .read_status = rtl822x_c45_read_status, ++ .suspend = genphy_c45_pma_suspend, ++ .resume = rtlgen_c45_resume, ++ }, { + PHY_ID_MATCH_EXACT(0x001cc961), + .name = "RTL8366RB Gigabit Ethernet", + .config_init = &rtl8366rb_config_init, diff --git a/target/linux/generic/backport-6.6/781-11-v6.11-net-phy-realtek-Add-support-for-PHY-LEDs-on-RTL8211F.patch b/target/linux/generic/backport-6.6/781-11-v6.11-net-phy-realtek-Add-support-for-PHY-LEDs-on-RTL8211F.patch new file mode 100644 index 0000000000..12c8ae66b5 --- /dev/null +++ b/target/linux/generic/backport-6.6/781-11-v6.11-net-phy-realtek-Add-support-for-PHY-LEDs-on-RTL8211F.patch @@ -0,0 +1,151 @@ +From 17784801d888238571a0c4101b9ac4401fffeaa0 Mon Sep 17 00:00:00 2001 +From: Marek Vasut +Date: Tue, 25 Jun 2024 22:42:17 +0200 +Subject: [PATCH] net: phy: realtek: Add support for PHY LEDs on RTL8211F + +Realtek RTL8211F Ethernet PHY supports 3 LED pins which are used to +indicate link status and activity. Add minimal LED controller driver +supporting the most common uses with the 'netdev' trigger. + +Signed-off-by: Marek Vasut +Signed-off-by: David S. Miller +--- + drivers/net/phy/realtek.c | 106 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 106 insertions(+) + +--- a/drivers/net/phy/realtek.c ++++ b/drivers/net/phy/realtek.c +@@ -32,6 +32,15 @@ + #define RTL8211F_PHYCR2 0x19 + #define RTL8211F_INSR 0x1d + ++#define RTL8211F_LEDCR 0x10 ++#define RTL8211F_LEDCR_MODE BIT(15) ++#define RTL8211F_LEDCR_ACT_TXRX BIT(4) ++#define RTL8211F_LEDCR_LINK_1000 BIT(3) ++#define RTL8211F_LEDCR_LINK_100 BIT(1) ++#define RTL8211F_LEDCR_LINK_10 BIT(0) ++#define RTL8211F_LEDCR_MASK GENMASK(4, 0) ++#define RTL8211F_LEDCR_SHIFT 5 ++ + #define RTL8211F_TX_DELAY BIT(8) + #define RTL8211F_RX_DELAY BIT(3) + +@@ -87,6 +96,8 @@ + #define RTL_8221B_VN_CG 0x001cc84a + #define RTL_8251B 0x001cc862 + ++#define RTL8211F_LED_COUNT 3 ++ + MODULE_DESCRIPTION("Realtek PHY driver"); + MODULE_AUTHOR("Johnson Leung"); + MODULE_LICENSE("GPL"); +@@ -476,6 +487,98 @@ static int rtl821x_resume(struct phy_dev + return 0; + } + ++static int rtl8211f_led_hw_is_supported(struct phy_device *phydev, u8 index, ++ unsigned long rules) ++{ ++ const unsigned long mask = BIT(TRIGGER_NETDEV_LINK_10) | ++ BIT(TRIGGER_NETDEV_LINK_100) | ++ BIT(TRIGGER_NETDEV_LINK_1000) | ++ BIT(TRIGGER_NETDEV_RX) | ++ BIT(TRIGGER_NETDEV_TX); ++ ++ /* The RTL8211F PHY supports these LED settings on up to three LEDs: ++ * - Link: Configurable subset of 10/100/1000 link rates ++ * - Active: Blink on activity, RX or TX is not differentiated ++ * The Active option has two modes, A and B: ++ * - A: Link and Active indication at configurable, but matching, ++ * subset of 10/100/1000 link rates ++ * - B: Link indication at configurable subset of 10/100/1000 link ++ * rates and Active indication always at all three 10+100+1000 ++ * link rates. ++ * This code currently uses mode B only. ++ */ ++ ++ if (index >= RTL8211F_LED_COUNT) ++ return -EINVAL; ++ ++ /* Filter out any other unsupported triggers. */ ++ if (rules & ~mask) ++ return -EOPNOTSUPP; ++ ++ /* RX and TX are not differentiated, either both are set or not set. */ ++ if (!(rules & BIT(TRIGGER_NETDEV_RX)) ^ !(rules & BIT(TRIGGER_NETDEV_TX))) ++ return -EOPNOTSUPP; ++ ++ return 0; ++} ++ ++static int rtl8211f_led_hw_control_get(struct phy_device *phydev, u8 index, ++ unsigned long *rules) ++{ ++ int val; ++ ++ val = phy_read_paged(phydev, 0xd04, RTL8211F_LEDCR); ++ if (val < 0) ++ return val; ++ ++ val >>= RTL8211F_LEDCR_SHIFT * index; ++ val &= RTL8211F_LEDCR_MASK; ++ ++ if (val & RTL8211F_LEDCR_LINK_10) ++ set_bit(TRIGGER_NETDEV_LINK_10, rules); ++ ++ if (val & RTL8211F_LEDCR_LINK_100) ++ set_bit(TRIGGER_NETDEV_LINK_100, rules); ++ ++ if (val & RTL8211F_LEDCR_LINK_1000) ++ set_bit(TRIGGER_NETDEV_LINK_1000, rules); ++ ++ if (val & RTL8211F_LEDCR_ACT_TXRX) { ++ set_bit(TRIGGER_NETDEV_RX, rules); ++ set_bit(TRIGGER_NETDEV_TX, rules); ++ } ++ ++ return 0; ++} ++ ++static int rtl8211f_led_hw_control_set(struct phy_device *phydev, u8 index, ++ unsigned long rules) ++{ ++ const u16 mask = RTL8211F_LEDCR_MASK << (RTL8211F_LEDCR_SHIFT * index); ++ u16 reg = RTL8211F_LEDCR_MODE; /* Mode B */ ++ ++ if (index >= RTL8211F_LED_COUNT) ++ return -EINVAL; ++ ++ if (test_bit(TRIGGER_NETDEV_LINK_10, &rules)) ++ reg |= RTL8211F_LEDCR_LINK_10; ++ ++ if (test_bit(TRIGGER_NETDEV_LINK_100, &rules)) ++ reg |= RTL8211F_LEDCR_LINK_100; ++ ++ if (test_bit(TRIGGER_NETDEV_LINK_1000, &rules)) ++ reg |= RTL8211F_LEDCR_LINK_1000; ++ ++ if (test_bit(TRIGGER_NETDEV_RX, &rules) || ++ test_bit(TRIGGER_NETDEV_TX, &rules)) { ++ reg |= RTL8211F_LEDCR_ACT_TXRX; ++ } ++ ++ reg <<= RTL8211F_LEDCR_SHIFT * index; ++ ++ return phy_modify_paged(phydev, 0xd04, RTL8211F_LEDCR, mask, reg); ++} ++ + static int rtl8211e_config_init(struct phy_device *phydev) + { + int ret = 0, oldpage; +@@ -1192,6 +1295,9 @@ static struct phy_driver realtek_drvs[] + .read_page = rtl821x_read_page, + .write_page = rtl821x_write_page, + .flags = PHY_ALWAYS_CALL_SUSPEND, ++ .led_hw_is_supported = rtl8211f_led_hw_is_supported, ++ .led_hw_control_get = rtl8211f_led_hw_control_get, ++ .led_hw_control_set = rtl8211f_led_hw_control_set, + }, { + PHY_ID_MATCH_EXACT(RTL_8211FVD_PHYID), + .name = "RTL8211F-VD Gigabit Ethernet", diff --git a/target/linux/generic/pending-6.6/724-net-phy-realtek-use-genphy_soft_reset-for-2.5G-PHYs.patch b/target/linux/generic/pending-6.6/724-net-phy-realtek-use-genphy_soft_reset-for-2.5G-PHYs.patch index 3ea7871d45..51cf9580f1 100644 --- a/target/linux/generic/pending-6.6/724-net-phy-realtek-use-genphy_soft_reset-for-2.5G-PHYs.patch +++ b/target/linux/generic/pending-6.6/724-net-phy-realtek-use-genphy_soft_reset-for-2.5G-PHYs.patch @@ -15,7 +15,7 @@ Signed-off-by: Daniel Golle --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c -@@ -1218,6 +1218,7 @@ static struct phy_driver realtek_drvs[] +@@ -1324,6 +1324,7 @@ static struct phy_driver realtek_drvs[] }, { .name = "RTL8226 2.5Gbps PHY", .match_phy_device = rtl8226_match_phy_device, @@ -23,7 +23,7 @@ Signed-off-by: Daniel Golle .get_features = rtl822x_get_features, .config_aneg = rtl822x_config_aneg, .read_status = rtl822x_read_status, -@@ -1230,6 +1231,7 @@ static struct phy_driver realtek_drvs[] +@@ -1336,6 +1337,7 @@ static struct phy_driver realtek_drvs[] }, { PHY_ID_MATCH_EXACT(0x001cc840), .name = "RTL8226B_RTL8221B 2.5Gbps PHY", @@ -31,7 +31,7 @@ Signed-off-by: Daniel Golle .get_features = rtl822x_get_features, .config_aneg = rtl822x_config_aneg, .config_init = rtl822xb_config_init, -@@ -1244,6 +1246,7 @@ static struct phy_driver realtek_drvs[] +@@ -1350,6 +1352,7 @@ static struct phy_driver realtek_drvs[] }, { PHY_ID_MATCH_EXACT(0x001cc838), .name = "RTL8226-CG 2.5Gbps PHY", @@ -39,7 +39,7 @@ Signed-off-by: Daniel Golle .get_features = rtl822x_get_features, .config_aneg = rtl822x_config_aneg, .read_status = rtl822x_read_status, -@@ -1254,6 +1257,7 @@ static struct phy_driver realtek_drvs[] +@@ -1360,6 +1363,7 @@ static struct phy_driver realtek_drvs[] }, { PHY_ID_MATCH_EXACT(0x001cc848), .name = "RTL8226B-CG_RTL8221B-CG 2.5Gbps PHY", @@ -47,7 +47,7 @@ Signed-off-by: Daniel Golle .get_features = rtl822x_get_features, .config_aneg = rtl822x_config_aneg, .config_init = rtl822xb_config_init, -@@ -1266,6 +1270,7 @@ static struct phy_driver realtek_drvs[] +@@ -1372,6 +1376,7 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vb_cg_c22_match_phy_device, .name = "RTL8221B-VB-CG 2.5Gbps PHY (C22)", @@ -55,7 +55,7 @@ Signed-off-by: Daniel Golle .get_features = rtl822x_get_features, .config_aneg = rtl822x_config_aneg, .config_init = rtl822xb_config_init, -@@ -1278,6 +1283,7 @@ static struct phy_driver realtek_drvs[] +@@ -1384,6 +1389,7 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vb_cg_c45_match_phy_device, .name = "RTL8221B-VB-CG 2.5Gbps PHY (C45)", @@ -63,7 +63,7 @@ Signed-off-by: Daniel Golle .config_init = rtl822xb_config_init, .get_rate_matching = rtl822xb_get_rate_matching, .get_features = rtl822x_c45_get_features, -@@ -1288,6 +1294,7 @@ static struct phy_driver realtek_drvs[] +@@ -1394,6 +1400,7 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vn_cg_c22_match_phy_device, .name = "RTL8221B-VM-CG 2.5Gbps PHY (C22)", @@ -71,7 +71,7 @@ Signed-off-by: Daniel Golle .get_features = rtl822x_get_features, .config_aneg = rtl822x_config_aneg, .config_init = rtl822xb_config_init, -@@ -1300,6 +1307,7 @@ static struct phy_driver realtek_drvs[] +@@ -1406,6 +1413,7 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vn_cg_c45_match_phy_device, .name = "RTL8221B-VN-CG 2.5Gbps PHY (C45)", diff --git a/target/linux/generic/pending-6.6/725-net-phy-realtek-disable-SGMII-in-band-AN-for-2-5G-PHYs.patch b/target/linux/generic/pending-6.6/725-net-phy-realtek-disable-SGMII-in-band-AN-for-2-5G-PHYs.patch index 310c43e15f..a7f7fbf47a 100644 --- a/target/linux/generic/pending-6.6/725-net-phy-realtek-disable-SGMII-in-band-AN-for-2-5G-PHYs.patch +++ b/target/linux/generic/pending-6.6/725-net-phy-realtek-disable-SGMII-in-band-AN-for-2-5G-PHYs.patch @@ -20,7 +20,7 @@ Signed-off-by: Daniel Golle --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c -@@ -682,8 +682,8 @@ static int rtl822x_write_mmd(struct phy_ +@@ -785,8 +785,8 @@ static int rtl822x_write_mmd(struct phy_ static int rtl822xb_config_init(struct phy_device *phydev) { bool has_2500, has_sgmii; @@ -30,7 +30,7 @@ Signed-off-by: Daniel Golle has_2500 = test_bit(PHY_INTERFACE_MODE_2500BASEX, phydev->host_interfaces) || -@@ -733,7 +733,29 @@ static int rtl822xb_config_init(struct p +@@ -836,7 +836,29 @@ static int rtl822xb_config_init(struct p if (ret < 0) return ret; diff --git a/target/linux/generic/pending-6.6/726-net-phy-realtek-make-sure-paged-read-is-protected-by.patch b/target/linux/generic/pending-6.6/726-net-phy-realtek-make-sure-paged-read-is-protected-by.patch index 5c76dac940..d944b6aa5c 100644 --- a/target/linux/generic/pending-6.6/726-net-phy-realtek-make-sure-paged-read-is-protected-by.patch +++ b/target/linux/generic/pending-6.6/726-net-phy-realtek-make-sure-paged-read-is-protected-by.patch @@ -18,7 +18,7 @@ Signed-off-by: Daniel Golle --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c -@@ -948,9 +948,11 @@ static bool rtlgen_supports_2_5gbps(stru +@@ -1051,9 +1051,11 @@ static bool rtlgen_supports_2_5gbps(stru { int val; diff --git a/target/linux/generic/pending-6.6/727-net-phy-realtek-use-inline-functions-for-10GbE-adver.patch b/target/linux/generic/pending-6.6/727-net-phy-realtek-use-inline-functions-for-10GbE-adver.patch index 004ee43aa3..bf833a2b7a 100644 --- a/target/linux/generic/pending-6.6/727-net-phy-realtek-use-inline-functions-for-10GbE-adver.patch +++ b/target/linux/generic/pending-6.6/727-net-phy-realtek-use-inline-functions-for-10GbE-adver.patch @@ -14,7 +14,7 @@ Signed-off-by: Daniel Golle --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c -@@ -806,7 +806,8 @@ static int rtl822x_config_aneg(struct ph +@@ -909,7 +909,8 @@ static int rtl822x_config_aneg(struct ph ret = phy_modify_paged_changed(phydev, 0xa5d, 0x12, MDIO_AN_10GBT_CTRL_ADV2_5G | diff --git a/target/linux/generic/pending-6.6/728-net-phy-realtek-check-validity-of-10GbE-link-partner.patch b/target/linux/generic/pending-6.6/728-net-phy-realtek-check-validity-of-10GbE-link-partner.patch index 7cc9d95234..5ae6dcd7a8 100644 --- a/target/linux/generic/pending-6.6/728-net-phy-realtek-check-validity-of-10GbE-link-partner.patch +++ b/target/linux/generic/pending-6.6/728-net-phy-realtek-check-validity-of-10GbE-link-partner.patch @@ -15,7 +15,7 @@ Signed-off-by: Daniel Golle --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c -@@ -846,6 +846,10 @@ static int rtl822x_read_status(struct ph +@@ -949,6 +949,10 @@ static int rtl822x_read_status(struct ph if (lpadv < 0) return lpadv; diff --git a/target/linux/generic/pending-6.6/729-net-phy-realtek-introduce-rtl822x_probe.patch b/target/linux/generic/pending-6.6/729-net-phy-realtek-introduce-rtl822x_probe.patch index 672ee4254c..f81d7bf395 100644 --- a/target/linux/generic/pending-6.6/729-net-phy-realtek-introduce-rtl822x_probe.patch +++ b/target/linux/generic/pending-6.6/729-net-phy-realtek-introduce-rtl822x_probe.patch @@ -13,7 +13,7 @@ Signed-off-by: Daniel Golle --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c -@@ -73,6 +73,10 @@ +@@ -82,6 +82,10 @@ #define RTL822X_VND2_PHYSR 0xa434 @@ -24,7 +24,7 @@ Signed-off-by: Daniel Golle #define RTL8366RB_POWER_SAVE 0x15 #define RTL8366RB_POWER_SAVE_ON BIT(12) -@@ -1003,6 +1007,25 @@ static int rtl8221b_vn_cg_c45_match_phy_ +@@ -1106,6 +1110,25 @@ static int rtl8221b_vn_cg_c45_match_phy_ return rtlgen_is_c45_match(phydev, RTL_8221B_VN_CG, true); } @@ -50,7 +50,7 @@ Signed-off-by: Daniel Golle static int rtlgen_resume(struct phy_device *phydev) { int ret = genphy_resume(phydev); -@@ -1275,6 +1298,7 @@ static struct phy_driver realtek_drvs[] +@@ -1381,6 +1404,7 @@ static struct phy_driver realtek_drvs[] }, { PHY_ID_MATCH_EXACT(0x001cc838), .name = "RTL8226-CG 2.5Gbps PHY", @@ -58,7 +58,7 @@ Signed-off-by: Daniel Golle .soft_reset = genphy_soft_reset, .get_features = rtl822x_get_features, .config_aneg = rtl822x_config_aneg, -@@ -1286,6 +1310,7 @@ static struct phy_driver realtek_drvs[] +@@ -1392,6 +1416,7 @@ static struct phy_driver realtek_drvs[] }, { PHY_ID_MATCH_EXACT(0x001cc848), .name = "RTL8226B-CG_RTL8221B-CG 2.5Gbps PHY", @@ -66,7 +66,7 @@ Signed-off-by: Daniel Golle .soft_reset = genphy_soft_reset, .get_features = rtl822x_get_features, .config_aneg = rtl822x_config_aneg, -@@ -1299,6 +1324,7 @@ static struct phy_driver realtek_drvs[] +@@ -1405,6 +1430,7 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vb_cg_c22_match_phy_device, .name = "RTL8221B-VB-CG 2.5Gbps PHY (C22)", @@ -74,7 +74,7 @@ Signed-off-by: Daniel Golle .soft_reset = genphy_soft_reset, .get_features = rtl822x_get_features, .config_aneg = rtl822x_config_aneg, -@@ -1312,6 +1338,7 @@ static struct phy_driver realtek_drvs[] +@@ -1418,6 +1444,7 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vb_cg_c45_match_phy_device, .name = "RTL8221B-VB-CG 2.5Gbps PHY (C45)", @@ -82,7 +82,7 @@ Signed-off-by: Daniel Golle .soft_reset = genphy_soft_reset, .config_init = rtl822xb_config_init, .get_rate_matching = rtl822xb_get_rate_matching, -@@ -1323,6 +1350,7 @@ static struct phy_driver realtek_drvs[] +@@ -1429,6 +1456,7 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vn_cg_c22_match_phy_device, .name = "RTL8221B-VM-CG 2.5Gbps PHY (C22)", @@ -90,7 +90,7 @@ Signed-off-by: Daniel Golle .soft_reset = genphy_soft_reset, .get_features = rtl822x_get_features, .config_aneg = rtl822x_config_aneg, -@@ -1336,6 +1364,7 @@ static struct phy_driver realtek_drvs[] +@@ -1442,6 +1470,7 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vn_cg_c45_match_phy_device, .name = "RTL8221B-VN-CG 2.5Gbps PHY (C45)", diff --git a/target/linux/generic/pending-6.6/741-net-phy-realtek-support-interrupt-of-RTL8221B.patch b/target/linux/generic/pending-6.6/741-net-phy-realtek-support-interrupt-of-RTL8221B.patch index c74faade33..b0728b6db9 100644 --- a/target/linux/generic/pending-6.6/741-net-phy-realtek-support-interrupt-of-RTL8221B.patch +++ b/target/linux/generic/pending-6.6/741-net-phy-realtek-support-interrupt-of-RTL8221B.patch @@ -12,7 +12,7 @@ Signed-off-by: Jianhui Zhao --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c -@@ -1161,6 +1161,51 @@ static irqreturn_t rtl9000a_handle_inter +@@ -1264,6 +1264,51 @@ static irqreturn_t rtl9000a_handle_inter return IRQ_HANDLED; } @@ -64,7 +64,7 @@ Signed-off-by: Jianhui Zhao static struct phy_driver realtek_drvs[] = { { PHY_ID_MATCH_EXACT(0x00008201), -@@ -1324,6 +1369,8 @@ static struct phy_driver realtek_drvs[] +@@ -1430,6 +1475,8 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vb_cg_c22_match_phy_device, .name = "RTL8221B-VB-CG 2.5Gbps PHY (C22)", @@ -73,7 +73,7 @@ Signed-off-by: Jianhui Zhao .probe = rtl822x_probe, .soft_reset = genphy_soft_reset, .get_features = rtl822x_get_features, -@@ -1338,6 +1385,8 @@ static struct phy_driver realtek_drvs[] +@@ -1444,6 +1491,8 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vb_cg_c45_match_phy_device, .name = "RTL8221B-VB-CG 2.5Gbps PHY (C45)", @@ -82,7 +82,7 @@ Signed-off-by: Jianhui Zhao .probe = rtl822x_probe, .soft_reset = genphy_soft_reset, .config_init = rtl822xb_config_init, -@@ -1350,6 +1399,8 @@ static struct phy_driver realtek_drvs[] +@@ -1456,6 +1505,8 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vn_cg_c22_match_phy_device, .name = "RTL8221B-VM-CG 2.5Gbps PHY (C22)", @@ -91,7 +91,7 @@ Signed-off-by: Jianhui Zhao .probe = rtl822x_probe, .soft_reset = genphy_soft_reset, .get_features = rtl822x_get_features, -@@ -1364,6 +1415,8 @@ static struct phy_driver realtek_drvs[] +@@ -1470,6 +1521,8 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vn_cg_c45_match_phy_device, .name = "RTL8221B-VN-CG 2.5Gbps PHY (C45)", From 052732bddb4bbe2f7c3c47700f825d8f1e7b9858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Mon, 19 Aug 2024 18:52:37 +0200 Subject: [PATCH 7/9] generic: 6.6: fix early RTL8221B detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes the issue of RTL8221B-VB-CG not being detected correctly after ca44690. Fixes: ca4469045f6a ("generic: 6.6: backport upstream RealTek PHY patches") Signed-off-by: Álvaro Fernández Rojas Signed-off-by: Mieczyslaw Nalewaj Signed-off-by: Daniel Golle --- ...tek-detect-early-version-of-RTL8221B.patch | 52 +++++++++++++++++++ ...ealtek-support-interrupt-of-RTL8221B.patch | 10 ++-- 2 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 target/linux/generic/pending-6.6/730-net-phy-realtek-detect-early-version-of-RTL8221B.patch diff --git a/target/linux/generic/pending-6.6/730-net-phy-realtek-detect-early-version-of-RTL8221B.patch b/target/linux/generic/pending-6.6/730-net-phy-realtek-detect-early-version-of-RTL8221B.patch new file mode 100644 index 0000000000..698b54473f --- /dev/null +++ b/target/linux/generic/pending-6.6/730-net-phy-realtek-detect-early-version-of-RTL8221B.patch @@ -0,0 +1,52 @@ +From 0de82310d2b32e78ff79d42c08b1122a6ede3778 Mon Sep 17 00:00:00 2001 +From: Daniel Golle +Date: Sun, 30 Apr 2023 00:15:41 +0100 +Subject: [PATCH] net: phy: realtek: detect early version of RTL8221B + +Early versions (?) of the RTL8221B PHY cannot be identified in a regular +Clause-45 bus scan as the PHY doesn't report the implemented MMDs +correctly but returns 0 instead. +Implement custom identify function using the PKGID instead of iterating +over the implemented MMDs. + +Signed-off-by: Daniel Golle +[forward-port by @namiltd] +Signed-off-by: Mieczyslaw Nalewaj +--- a/drivers/net/phy/realtek.c ++++ b/drivers/net/phy/realtek.c +@@ -1084,10 +1084,32 @@ static int rtl8226_match_phy_device(stru + static int rtlgen_is_c45_match(struct phy_device *phydev, unsigned int id, + bool is_c45) + { +- if (phydev->is_c45) +- return is_c45 && (id == phydev->c45_ids.device_ids[1]); +- else ++ if (phydev->is_c45) { ++ u32 rid; ++ ++ if (!is_c45) ++ return 0; ++ ++ rid = phydev->c45_ids.device_ids[1]; ++ if ((rid == 0xffffffff) && phydev->mdio.bus->read_c45) { ++ int val; ++ ++ val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PKGID1); ++ if (val < 0) ++ return 0; ++ ++ rid = val << 16; ++ val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PKGID2); ++ if (val < 0) ++ return 0; ++ ++ rid |= val; ++ } ++ ++ return (id == rid); ++ } else { + return !is_c45 && (id == phydev->phy_id); ++ } + } + + static int rtl8221b_vb_cg_c22_match_phy_device(struct phy_device *phydev) diff --git a/target/linux/generic/pending-6.6/741-net-phy-realtek-support-interrupt-of-RTL8221B.patch b/target/linux/generic/pending-6.6/741-net-phy-realtek-support-interrupt-of-RTL8221B.patch index b0728b6db9..f75dbc9e85 100644 --- a/target/linux/generic/pending-6.6/741-net-phy-realtek-support-interrupt-of-RTL8221B.patch +++ b/target/linux/generic/pending-6.6/741-net-phy-realtek-support-interrupt-of-RTL8221B.patch @@ -12,7 +12,7 @@ Signed-off-by: Jianhui Zhao --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c -@@ -1264,6 +1264,51 @@ static irqreturn_t rtl9000a_handle_inter +@@ -1286,6 +1286,51 @@ static irqreturn_t rtl9000a_handle_inter return IRQ_HANDLED; } @@ -64,7 +64,7 @@ Signed-off-by: Jianhui Zhao static struct phy_driver realtek_drvs[] = { { PHY_ID_MATCH_EXACT(0x00008201), -@@ -1430,6 +1475,8 @@ static struct phy_driver realtek_drvs[] +@@ -1452,6 +1497,8 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vb_cg_c22_match_phy_device, .name = "RTL8221B-VB-CG 2.5Gbps PHY (C22)", @@ -73,7 +73,7 @@ Signed-off-by: Jianhui Zhao .probe = rtl822x_probe, .soft_reset = genphy_soft_reset, .get_features = rtl822x_get_features, -@@ -1444,6 +1491,8 @@ static struct phy_driver realtek_drvs[] +@@ -1466,6 +1513,8 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vb_cg_c45_match_phy_device, .name = "RTL8221B-VB-CG 2.5Gbps PHY (C45)", @@ -82,7 +82,7 @@ Signed-off-by: Jianhui Zhao .probe = rtl822x_probe, .soft_reset = genphy_soft_reset, .config_init = rtl822xb_config_init, -@@ -1456,6 +1505,8 @@ static struct phy_driver realtek_drvs[] +@@ -1478,6 +1527,8 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vn_cg_c22_match_phy_device, .name = "RTL8221B-VM-CG 2.5Gbps PHY (C22)", @@ -91,7 +91,7 @@ Signed-off-by: Jianhui Zhao .probe = rtl822x_probe, .soft_reset = genphy_soft_reset, .get_features = rtl822x_get_features, -@@ -1470,6 +1521,8 @@ static struct phy_driver realtek_drvs[] +@@ -1492,6 +1543,8 @@ static struct phy_driver realtek_drvs[] }, { .match_phy_device = rtl8221b_vn_cg_c45_match_phy_device, .name = "RTL8221B-VN-CG 2.5Gbps PHY (C45)", From 400acae2b9cc33c91094dcc7fe663c19780be1ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Mon, 19 Aug 2024 20:36:51 +0200 Subject: [PATCH 8/9] bcm53xx: refresh 6.6 kernel patches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refresh bcm53xx kernel patches after 17f07040e7808a0c9cba2afc0e0b22e5589da133. Fixes: 17f07040e780 ("kernel: prevent tunnel drivers from mangling fraglist GSO packets") Signed-off-by: Álvaro Fernández Rojas --- .../bcm53xx/patches-6.6/600-net-disable-GRO-by-default.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/linux/bcm53xx/patches-6.6/600-net-disable-GRO-by-default.patch b/target/linux/bcm53xx/patches-6.6/600-net-disable-GRO-by-default.patch index 9fa41a4b7e..fd41824383 100644 --- a/target/linux/bcm53xx/patches-6.6/600-net-disable-GRO-by-default.patch +++ b/target/linux/bcm53xx/patches-6.6/600-net-disable-GRO-by-default.patch @@ -21,7 +21,7 @@ Signed-off-by: Rafał Miłecki --- a/include/linux/netdev_features.h +++ b/include/linux/netdev_features.h -@@ -242,10 +242,10 @@ static inline int find_next_netdev_featu +@@ -243,10 +243,10 @@ static inline int find_next_netdev_featu #define NETIF_F_UPPER_DISABLES NETIF_F_LRO /* changeable features with no special hardware requirements */ From 27b816d5451f1885e80918a2bb687c8aa1258cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Mon, 19 Aug 2024 17:55:00 +0200 Subject: [PATCH 9/9] generic: 6.6: backport upstream r8169 patches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - improve RTL8411b phy-down fixup - remove not needed check in rtl_fw_write_firmware - remove multicast filter limit - improve handling task scheduling - simplify EEE handling - simplify code by using core-provided pcpu stats allocation - add generic rtl_set_eee_txidle_timer function - support setting the EEE tx idle timer on RTL8168h - add support for returning tx_lpi_timer in ethtool get_eee - annotate writes on dev->mtu from ndo_change_mtu() - disable interrupt source RxOverflow - remove detection of chip version 11 (early RTL8168b) Signed-off-by: Álvaro Fernández Rojas --- ...8169-improve-RTL8411b-phy-down-fixup.patch | 173 ++++++++++++++++++ ...-needed-check-in-rtl_fw_write_firmwa.patch | 27 +++ ...-r8169-remove-multicast-filter-limit.patch | 47 +++++ ...169-improve-handling-task-scheduling.patch | 41 +++++ ...upport-for-LED-s-on-RTL8168-RTL8101.patch} | 10 +- ...x-building-with-CONFIG_LEDS_CLASS-m.patch} | 2 +- ...-07-v6.9-r8169-simplify-EEE-handling.patch | 96 ++++++++++ ...v6.9-r8169-add-support-for-RTL8126A.patch} | 54 +++--- ...mprove-checking-for-valid-LED-modes.patch} | 0 ...ode-by-using-core-provided-pcpu-stat.patch | 39 ++++ ...add-LED-support-for-RTL8125-RTL8126.patch} | 6 +- ...ic-rtl_set_eee_txidle_timer-function.patch | 91 +++++++++ ...tting-the-EEE-tx-idle-timer-on-RTL81.patch | 30 +++ ...t-for-returning-tx_lpi_timer-in-etht.patch | 55 ++++++ ...-MODULE_FIRMWARE-entry-for-RTL8126A.patch} | 2 +- ...-related-deadlock-on-module-removal.patch} | 6 +- ...-conditional-compiling-for-call-to-.patch} | 2 +- ...6.10-r8169-add-support-for-RTL8168M.patch} | 2 +- ...rites-on-dev-mtu-from-ndo_change_mtu.patch | 60 ++++++ ...-disable-interrupt-source-RxOverflow.patch | 34 ++++ ...ection-of-chip-version-11-early-RTL8.patch | 32 ++++ 21 files changed, 767 insertions(+), 42 deletions(-) create mode 100644 target/linux/generic/backport-6.6/780-01-v6.8-r8169-improve-RTL8411b-phy-down-fixup.patch create mode 100644 target/linux/generic/backport-6.6/780-02-v6.8-r8169-remove-not-needed-check-in-rtl_fw_write_firmwa.patch create mode 100644 target/linux/generic/backport-6.6/780-03-v6.8-r8169-remove-multicast-filter-limit.patch create mode 100644 target/linux/generic/backport-6.6/780-04-v6.8-r8169-improve-handling-task-scheduling.patch rename target/linux/generic/backport-6.6/{780-01-v6.8-r8169-add-support-for-LED-s-on-RTL8168-RTL8101.patch => 780-05-v6.8-r8169-add-support-for-LED-s-on-RTL8168-RTL8101.patch} (97%) rename target/linux/generic/backport-6.6/{780-02-v6.8-r8169-fix-building-with-CONFIG_LEDS_CLASS-m.patch => 780-06-v6.8-r8169-fix-building-with-CONFIG_LEDS_CLASS-m.patch} (97%) create mode 100644 target/linux/generic/backport-6.6/780-07-v6.9-r8169-simplify-EEE-handling.patch rename target/linux/generic/backport-6.6/{780-03-v6.9-r8169-add-support-for-RTL8126A.patch => 780-08-v6.9-r8169-add-support-for-RTL8126A.patch} (85%) rename target/linux/generic/backport-6.6/{780-04-v6.9-r8169-improve-checking-for-valid-LED-modes.patch => 780-09-v6.9-r8169-improve-checking-for-valid-LED-modes.patch} (100%) create mode 100644 target/linux/generic/backport-6.6/780-10-v6.9-r8169-simplify-code-by-using-core-provided-pcpu-stat.patch rename target/linux/generic/backport-6.6/{780-05-v6.9-r8169-add-LED-support-for-RTL8125-RTL8126.patch => 780-11-v6.9-r8169-add-LED-support-for-RTL8125-RTL8126.patch} (97%) create mode 100644 target/linux/generic/backport-6.6/780-12-v6.9-r8169-add-generic-rtl_set_eee_txidle_timer-function.patch create mode 100644 target/linux/generic/backport-6.6/780-13-v6.9-r8169-support-setting-the-EEE-tx-idle-timer-on-RTL81.patch create mode 100644 target/linux/generic/backport-6.6/780-14-v6.9-r8169-add-support-for-returning-tx_lpi_timer-in-etht.patch rename target/linux/generic/backport-6.6/{780-06-v6.9-r8169-add-MODULE_FIRMWARE-entry-for-RTL8126A.patch => 780-15-v6.9-r8169-add-MODULE_FIRMWARE-entry-for-RTL8126A.patch} (94%) rename target/linux/generic/backport-6.6/{780-08-v6.10-r8169-fix-LED-related-deadlock-on-module-removal.patch => 780-16-v6.9-r8169-fix-LED-related-deadlock-on-module-removal.patch} (96%) rename target/linux/generic/backport-6.6/{780-09-v6.10-r8169-add-missing-conditional-compiling-for-call-to-.patch => 780-17-v6.9-r8169-add-missing-conditional-compiling-for-call-to-.patch} (94%) rename target/linux/generic/backport-6.6/{780-07-v6.10-r8169-add-support-for-RTL8168M.patch => 780-18-v6.10-r8169-add-support-for-RTL8168M.patch} (94%) create mode 100644 target/linux/generic/backport-6.6/780-19-v6.10-net-annotate-writes-on-dev-mtu-from-ndo_change_mtu.patch create mode 100644 target/linux/generic/backport-6.6/780-20-v6.11-r8169-disable-interrupt-source-RxOverflow.patch create mode 100644 target/linux/generic/backport-6.6/780-21-v6.11-r8169-remove-detection-of-chip-version-11-early-RTL8.patch diff --git a/target/linux/generic/backport-6.6/780-01-v6.8-r8169-improve-RTL8411b-phy-down-fixup.patch b/target/linux/generic/backport-6.6/780-01-v6.8-r8169-improve-RTL8411b-phy-down-fixup.patch new file mode 100644 index 0000000000..9a17fe4f78 --- /dev/null +++ b/target/linux/generic/backport-6.6/780-01-v6.8-r8169-improve-RTL8411b-phy-down-fixup.patch @@ -0,0 +1,173 @@ +From 055dd7511f675d26fa283b35bb3dadfc7f77ed97 Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Mon, 13 Nov 2023 20:13:26 +0100 +Subject: [PATCH] r8169: improve RTL8411b phy-down fixup + +Mirsad proposed a patch to reduce the number of spinlock lock/unlock +operations and the function code size. This can be further improved +because the function sets a consecutive register block. + +Suggested-by: Mirsad Todorovac +Signed-off-by: Heiner Kallweit +Reviewed-by: Simon Horman +Reviewed-by: Mirsad Todorovac +Signed-off-by: David S. Miller +--- + drivers/net/ethernet/realtek/r8169_main.c | 139 +++++----------------- + 1 file changed, 28 insertions(+), 111 deletions(-) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -3129,6 +3129,33 @@ static void rtl_hw_start_8168g_2(struct + rtl_ephy_init(tp, e_info_8168g_2); + } + ++static void rtl8411b_fix_phy_down(struct rtl8169_private *tp) ++{ ++ static const u16 fix_data[] = { ++/* 0xf800 */ 0xe008, 0xe00a, 0xe00c, 0xe00e, 0xe027, 0xe04f, 0xe05e, 0xe065, ++/* 0xf810 */ 0xc602, 0xbe00, 0x0000, 0xc502, 0xbd00, 0x074c, 0xc302, 0xbb00, ++/* 0xf820 */ 0x080a, 0x6420, 0x48c2, 0x8c20, 0xc516, 0x64a4, 0x49c0, 0xf009, ++/* 0xf830 */ 0x74a2, 0x8ca5, 0x74a0, 0xc50e, 0x9ca2, 0x1c11, 0x9ca0, 0xe006, ++/* 0xf840 */ 0x74f8, 0x48c4, 0x8cf8, 0xc404, 0xbc00, 0xc403, 0xbc00, 0x0bf2, ++/* 0xf850 */ 0x0c0a, 0xe434, 0xd3c0, 0x49d9, 0xf01f, 0xc526, 0x64a5, 0x1400, ++/* 0xf860 */ 0xf007, 0x0c01, 0x8ca5, 0x1c15, 0xc51b, 0x9ca0, 0xe013, 0xc519, ++/* 0xf870 */ 0x74a0, 0x48c4, 0x8ca0, 0xc516, 0x74a4, 0x48c8, 0x48ca, 0x9ca4, ++/* 0xf880 */ 0xc512, 0x1b00, 0x9ba0, 0x1b1c, 0x483f, 0x9ba2, 0x1b04, 0xc508, ++/* 0xf890 */ 0x9ba0, 0xc505, 0xbd00, 0xc502, 0xbd00, 0x0300, 0x051e, 0xe434, ++/* 0xf8a0 */ 0xe018, 0xe092, 0xde20, 0xd3c0, 0xc50f, 0x76a4, 0x49e3, 0xf007, ++/* 0xf8b0 */ 0x49c0, 0xf103, 0xc607, 0xbe00, 0xc606, 0xbe00, 0xc602, 0xbe00, ++/* 0xf8c0 */ 0x0c4c, 0x0c28, 0x0c2c, 0xdc00, 0xc707, 0x1d00, 0x8de2, 0x48c1, ++/* 0xf8d0 */ 0xc502, 0xbd00, 0x00aa, 0xe0c0, 0xc502, 0xbd00, 0x0132 ++ }; ++ unsigned long flags; ++ int i; ++ ++ raw_spin_lock_irqsave(&tp->mac_ocp_lock, flags); ++ for (i = 0; i < ARRAY_SIZE(fix_data); i++) ++ __r8168_mac_ocp_write(tp, 0xf800 + 2 * i, fix_data[i]); ++ raw_spin_unlock_irqrestore(&tp->mac_ocp_lock, flags); ++} ++ + static void rtl_hw_start_8411_2(struct rtl8169_private *tp) + { + static const struct ephy_info e_info_8411_2[] = { +@@ -3162,117 +3189,7 @@ static void rtl_hw_start_8411_2(struct r + mdelay(3); + r8168_mac_ocp_write(tp, 0xFC26, 0x0000); + +- r8168_mac_ocp_write(tp, 0xF800, 0xE008); +- r8168_mac_ocp_write(tp, 0xF802, 0xE00A); +- r8168_mac_ocp_write(tp, 0xF804, 0xE00C); +- r8168_mac_ocp_write(tp, 0xF806, 0xE00E); +- r8168_mac_ocp_write(tp, 0xF808, 0xE027); +- r8168_mac_ocp_write(tp, 0xF80A, 0xE04F); +- r8168_mac_ocp_write(tp, 0xF80C, 0xE05E); +- r8168_mac_ocp_write(tp, 0xF80E, 0xE065); +- r8168_mac_ocp_write(tp, 0xF810, 0xC602); +- r8168_mac_ocp_write(tp, 0xF812, 0xBE00); +- r8168_mac_ocp_write(tp, 0xF814, 0x0000); +- r8168_mac_ocp_write(tp, 0xF816, 0xC502); +- r8168_mac_ocp_write(tp, 0xF818, 0xBD00); +- r8168_mac_ocp_write(tp, 0xF81A, 0x074C); +- r8168_mac_ocp_write(tp, 0xF81C, 0xC302); +- r8168_mac_ocp_write(tp, 0xF81E, 0xBB00); +- r8168_mac_ocp_write(tp, 0xF820, 0x080A); +- r8168_mac_ocp_write(tp, 0xF822, 0x6420); +- r8168_mac_ocp_write(tp, 0xF824, 0x48C2); +- r8168_mac_ocp_write(tp, 0xF826, 0x8C20); +- r8168_mac_ocp_write(tp, 0xF828, 0xC516); +- r8168_mac_ocp_write(tp, 0xF82A, 0x64A4); +- r8168_mac_ocp_write(tp, 0xF82C, 0x49C0); +- r8168_mac_ocp_write(tp, 0xF82E, 0xF009); +- r8168_mac_ocp_write(tp, 0xF830, 0x74A2); +- r8168_mac_ocp_write(tp, 0xF832, 0x8CA5); +- r8168_mac_ocp_write(tp, 0xF834, 0x74A0); +- r8168_mac_ocp_write(tp, 0xF836, 0xC50E); +- r8168_mac_ocp_write(tp, 0xF838, 0x9CA2); +- r8168_mac_ocp_write(tp, 0xF83A, 0x1C11); +- r8168_mac_ocp_write(tp, 0xF83C, 0x9CA0); +- r8168_mac_ocp_write(tp, 0xF83E, 0xE006); +- r8168_mac_ocp_write(tp, 0xF840, 0x74F8); +- r8168_mac_ocp_write(tp, 0xF842, 0x48C4); +- r8168_mac_ocp_write(tp, 0xF844, 0x8CF8); +- r8168_mac_ocp_write(tp, 0xF846, 0xC404); +- r8168_mac_ocp_write(tp, 0xF848, 0xBC00); +- r8168_mac_ocp_write(tp, 0xF84A, 0xC403); +- r8168_mac_ocp_write(tp, 0xF84C, 0xBC00); +- r8168_mac_ocp_write(tp, 0xF84E, 0x0BF2); +- r8168_mac_ocp_write(tp, 0xF850, 0x0C0A); +- r8168_mac_ocp_write(tp, 0xF852, 0xE434); +- r8168_mac_ocp_write(tp, 0xF854, 0xD3C0); +- r8168_mac_ocp_write(tp, 0xF856, 0x49D9); +- r8168_mac_ocp_write(tp, 0xF858, 0xF01F); +- r8168_mac_ocp_write(tp, 0xF85A, 0xC526); +- r8168_mac_ocp_write(tp, 0xF85C, 0x64A5); +- r8168_mac_ocp_write(tp, 0xF85E, 0x1400); +- r8168_mac_ocp_write(tp, 0xF860, 0xF007); +- r8168_mac_ocp_write(tp, 0xF862, 0x0C01); +- r8168_mac_ocp_write(tp, 0xF864, 0x8CA5); +- r8168_mac_ocp_write(tp, 0xF866, 0x1C15); +- r8168_mac_ocp_write(tp, 0xF868, 0xC51B); +- r8168_mac_ocp_write(tp, 0xF86A, 0x9CA0); +- r8168_mac_ocp_write(tp, 0xF86C, 0xE013); +- r8168_mac_ocp_write(tp, 0xF86E, 0xC519); +- r8168_mac_ocp_write(tp, 0xF870, 0x74A0); +- r8168_mac_ocp_write(tp, 0xF872, 0x48C4); +- r8168_mac_ocp_write(tp, 0xF874, 0x8CA0); +- r8168_mac_ocp_write(tp, 0xF876, 0xC516); +- r8168_mac_ocp_write(tp, 0xF878, 0x74A4); +- r8168_mac_ocp_write(tp, 0xF87A, 0x48C8); +- r8168_mac_ocp_write(tp, 0xF87C, 0x48CA); +- r8168_mac_ocp_write(tp, 0xF87E, 0x9CA4); +- r8168_mac_ocp_write(tp, 0xF880, 0xC512); +- r8168_mac_ocp_write(tp, 0xF882, 0x1B00); +- r8168_mac_ocp_write(tp, 0xF884, 0x9BA0); +- r8168_mac_ocp_write(tp, 0xF886, 0x1B1C); +- r8168_mac_ocp_write(tp, 0xF888, 0x483F); +- r8168_mac_ocp_write(tp, 0xF88A, 0x9BA2); +- r8168_mac_ocp_write(tp, 0xF88C, 0x1B04); +- r8168_mac_ocp_write(tp, 0xF88E, 0xC508); +- r8168_mac_ocp_write(tp, 0xF890, 0x9BA0); +- r8168_mac_ocp_write(tp, 0xF892, 0xC505); +- r8168_mac_ocp_write(tp, 0xF894, 0xBD00); +- r8168_mac_ocp_write(tp, 0xF896, 0xC502); +- r8168_mac_ocp_write(tp, 0xF898, 0xBD00); +- r8168_mac_ocp_write(tp, 0xF89A, 0x0300); +- r8168_mac_ocp_write(tp, 0xF89C, 0x051E); +- r8168_mac_ocp_write(tp, 0xF89E, 0xE434); +- r8168_mac_ocp_write(tp, 0xF8A0, 0xE018); +- r8168_mac_ocp_write(tp, 0xF8A2, 0xE092); +- r8168_mac_ocp_write(tp, 0xF8A4, 0xDE20); +- r8168_mac_ocp_write(tp, 0xF8A6, 0xD3C0); +- r8168_mac_ocp_write(tp, 0xF8A8, 0xC50F); +- r8168_mac_ocp_write(tp, 0xF8AA, 0x76A4); +- r8168_mac_ocp_write(tp, 0xF8AC, 0x49E3); +- r8168_mac_ocp_write(tp, 0xF8AE, 0xF007); +- r8168_mac_ocp_write(tp, 0xF8B0, 0x49C0); +- r8168_mac_ocp_write(tp, 0xF8B2, 0xF103); +- r8168_mac_ocp_write(tp, 0xF8B4, 0xC607); +- r8168_mac_ocp_write(tp, 0xF8B6, 0xBE00); +- r8168_mac_ocp_write(tp, 0xF8B8, 0xC606); +- r8168_mac_ocp_write(tp, 0xF8BA, 0xBE00); +- r8168_mac_ocp_write(tp, 0xF8BC, 0xC602); +- r8168_mac_ocp_write(tp, 0xF8BE, 0xBE00); +- r8168_mac_ocp_write(tp, 0xF8C0, 0x0C4C); +- r8168_mac_ocp_write(tp, 0xF8C2, 0x0C28); +- r8168_mac_ocp_write(tp, 0xF8C4, 0x0C2C); +- r8168_mac_ocp_write(tp, 0xF8C6, 0xDC00); +- r8168_mac_ocp_write(tp, 0xF8C8, 0xC707); +- r8168_mac_ocp_write(tp, 0xF8CA, 0x1D00); +- r8168_mac_ocp_write(tp, 0xF8CC, 0x8DE2); +- r8168_mac_ocp_write(tp, 0xF8CE, 0x48C1); +- r8168_mac_ocp_write(tp, 0xF8D0, 0xC502); +- r8168_mac_ocp_write(tp, 0xF8D2, 0xBD00); +- r8168_mac_ocp_write(tp, 0xF8D4, 0x00AA); +- r8168_mac_ocp_write(tp, 0xF8D6, 0xE0C0); +- r8168_mac_ocp_write(tp, 0xF8D8, 0xC502); +- r8168_mac_ocp_write(tp, 0xF8DA, 0xBD00); +- r8168_mac_ocp_write(tp, 0xF8DC, 0x0132); ++ rtl8411b_fix_phy_down(tp); + + r8168_mac_ocp_write(tp, 0xFC26, 0x8000); + diff --git a/target/linux/generic/backport-6.6/780-02-v6.8-r8169-remove-not-needed-check-in-rtl_fw_write_firmwa.patch b/target/linux/generic/backport-6.6/780-02-v6.8-r8169-remove-not-needed-check-in-rtl_fw_write_firmwa.patch new file mode 100644 index 0000000000..de10d30e83 --- /dev/null +++ b/target/linux/generic/backport-6.6/780-02-v6.8-r8169-remove-not-needed-check-in-rtl_fw_write_firmwa.patch @@ -0,0 +1,27 @@ +From 3a767b482cacd9bfeac786837fcac419af315995 Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Thu, 23 Nov 2023 10:53:26 +0100 +Subject: [PATCH] r8169: remove not needed check in rtl_fw_write_firmware + +This check can never be true for a firmware file with a correct format. +Existing checks in rtl_fw_data_ok() are sufficient, no problems with +invalid firmware files are known. + +Signed-off-by: Heiner Kallweit +Signed-off-by: David S. Miller +--- + drivers/net/ethernet/realtek/r8169_firmware.c | 3 --- + 1 file changed, 3 deletions(-) + +--- a/drivers/net/ethernet/realtek/r8169_firmware.c ++++ b/drivers/net/ethernet/realtek/r8169_firmware.c +@@ -151,9 +151,6 @@ void rtl_fw_write_firmware(struct rtl816 + u32 regno = (action & 0x0fff0000) >> 16; + enum rtl_fw_opcode opcode = action >> 28; + +- if (!action) +- break; +- + switch (opcode) { + case PHY_READ: + predata = fw_read(tp, regno); diff --git a/target/linux/generic/backport-6.6/780-03-v6.8-r8169-remove-multicast-filter-limit.patch b/target/linux/generic/backport-6.6/780-03-v6.8-r8169-remove-multicast-filter-limit.patch new file mode 100644 index 0000000000..4186e14e17 --- /dev/null +++ b/target/linux/generic/backport-6.6/780-03-v6.8-r8169-remove-multicast-filter-limit.patch @@ -0,0 +1,47 @@ +From cd04b44bf055c4cd6bcee2ebfa6932fb20ef369d Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Mon, 27 Nov 2023 21:16:10 +0100 +Subject: [PATCH] r8169: remove multicast filter limit + +Once upon a time, when r8169 was new, the multicast filter limit code +was copied from RTL8139 driver. There the filter limit is even +user-configurable. +The filtering is hash-based and we don't have perfect filtering. +Actually the mc filtering on RTL8125 still seems to be the same +as used on 8390/NE2000. So it's not clear to me which benefit it +should bring when switching to all-multi mode once a certain number +of filter bits is set. More the opposite: Filtering out at least +some unwanted mc traffic is better than no filtering. +Also the available chip documentation doesn't mention any restriction. +Therefore remove the filter limit. + +Signed-off-by: Heiner Kallweit +Link: https://lore.kernel.org/r/57076c05-3730-40d1-ab9a-5334b263e41a@gmail.com +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/realtek/r8169_main.c | 7 +------ + 1 file changed, 1 insertion(+), 6 deletions(-) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -56,10 +56,6 @@ + #define FIRMWARE_8125A_3 "rtl_nic/rtl8125a-3.fw" + #define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw" + +-/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast). +- The RTL chips use a 64 element hash table based on the Ethernet CRC. */ +-#define MC_FILTER_LIMIT 32 +- + #define TX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */ + #define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */ + +@@ -2626,8 +2622,7 @@ static void rtl_set_rx_mode(struct net_d + rx_mode |= AcceptAllPhys; + } else if (!(dev->flags & IFF_MULTICAST)) { + rx_mode &= ~AcceptMulticast; +- } else if (netdev_mc_count(dev) > MC_FILTER_LIMIT || +- dev->flags & IFF_ALLMULTI || ++ } else if (dev->flags & IFF_ALLMULTI || + tp->mac_version == RTL_GIGA_MAC_VER_35) { + /* accept all multicasts */ + } else if (netdev_mc_empty(dev)) { diff --git a/target/linux/generic/backport-6.6/780-04-v6.8-r8169-improve-handling-task-scheduling.patch b/target/linux/generic/backport-6.6/780-04-v6.8-r8169-improve-handling-task-scheduling.patch new file mode 100644 index 0000000000..a809e8213a --- /dev/null +++ b/target/linux/generic/backport-6.6/780-04-v6.8-r8169-improve-handling-task-scheduling.patch @@ -0,0 +1,41 @@ +From 127532cd0f060ebc3c4cbca81b6438728ad5896e Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Mon, 27 Nov 2023 18:20:11 +0100 +Subject: [PATCH] r8169: improve handling task scheduling + +If we know that the task is going to be a no-op, don't even schedule it. +And remove the check for netif_running() in the worker function, the +check for flag RTL_FLAG_TASK_ENABLED is sufficient. Note that we can't +remove the check for flag RTL_FLAG_TASK_ENABLED in the worker function +because we have no guarantee when it will be executed. + +Signed-off-by: Heiner Kallweit +Reviewed-by: Przemek Kitszel +Link: https://lore.kernel.org/r/c65873a3-7394-4107-99a7-83f20030779c@gmail.com +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/realtek/r8169_main.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -2252,6 +2252,9 @@ u16 rtl8168h_2_get_adc_bias_ioffset(stru + + static void rtl_schedule_task(struct rtl8169_private *tp, enum rtl_flag flag) + { ++ if (!test_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags)) ++ return; ++ + set_bit(flag, tp->wk.flags); + schedule_work(&tp->wk.work); + } +@@ -4491,8 +4494,7 @@ static void rtl_task(struct work_struct + + rtnl_lock(); + +- if (!netif_running(tp->dev) || +- !test_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags)) ++ if (!test_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags)) + goto out_unlock; + + if (test_and_clear_bit(RTL_FLAG_TASK_TX_TIMEOUT, tp->wk.flags)) { diff --git a/target/linux/generic/backport-6.6/780-01-v6.8-r8169-add-support-for-LED-s-on-RTL8168-RTL8101.patch b/target/linux/generic/backport-6.6/780-05-v6.8-r8169-add-support-for-LED-s-on-RTL8168-RTL8101.patch similarity index 97% rename from target/linux/generic/backport-6.6/780-01-v6.8-r8169-add-support-for-LED-s-on-RTL8168-RTL8101.patch rename to target/linux/generic/backport-6.6/780-05-v6.8-r8169-add-support-for-LED-s-on-RTL8168-RTL8101.patch index fe75a4e3f8..7a5d5a66a1 100644 --- a/target/linux/generic/backport-6.6/780-01-v6.8-r8169-add-support-for-LED-s-on-RTL8168-RTL8101.patch +++ b/target/linux/generic/backport-6.6/780-05-v6.8-r8169-add-support-for-LED-s-on-RTL8168-RTL8101.patch @@ -217,7 +217,7 @@ Signed-off-by: David S. Miller +} --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c -@@ -289,6 +289,7 @@ enum rtl8168_8101_registers { +@@ -285,6 +285,7 @@ enum rtl8168_8101_registers { }; enum rtl8168_registers { @@ -225,7 +225,7 @@ Signed-off-by: David S. Miller LED_FREQ = 0x1a, EEE_LED = 0x1b, ERIDR = 0x70, -@@ -620,6 +621,7 @@ struct rtl8169_private { +@@ -616,6 +617,7 @@ struct rtl8169_private { raw_spinlock_t config25_lock; raw_spinlock_t mac_ocp_lock; @@ -233,7 +233,7 @@ Signed-off-by: David S. Miller raw_spinlock_t cfg9346_usage_lock; int cfg9346_usage_count; -@@ -792,6 +794,62 @@ static const struct rtl_cond name = { +@@ -788,6 +790,62 @@ static const struct rtl_cond name = { \ static bool name ## _check(struct rtl8169_private *tp) @@ -296,7 +296,7 @@ Signed-off-by: David S. Miller static void r8168fp_adjust_ocp_cmd(struct rtl8169_private *tp, u32 *cmd, int type) { /* based on RTL8168FP_OOBMAC_BASE in vendor driver */ -@@ -5254,6 +5312,7 @@ static int rtl_init_one(struct pci_dev * +@@ -5168,6 +5226,7 @@ static int rtl_init_one(struct pci_dev * raw_spin_lock_init(&tp->cfg9346_usage_lock); raw_spin_lock_init(&tp->config25_lock); raw_spin_lock_init(&tp->mac_ocp_lock); @@ -304,7 +304,7 @@ Signed-off-by: David S. Miller dev->tstats = devm_netdev_alloc_pcpu_stats(&pdev->dev, struct pcpu_sw_netstats); -@@ -5410,6 +5469,12 @@ static int rtl_init_one(struct pci_dev * +@@ -5324,6 +5383,12 @@ static int rtl_init_one(struct pci_dev * if (rc) return rc; diff --git a/target/linux/generic/backport-6.6/780-02-v6.8-r8169-fix-building-with-CONFIG_LEDS_CLASS-m.patch b/target/linux/generic/backport-6.6/780-06-v6.8-r8169-fix-building-with-CONFIG_LEDS_CLASS-m.patch similarity index 97% rename from target/linux/generic/backport-6.6/780-02-v6.8-r8169-fix-building-with-CONFIG_LEDS_CLASS-m.patch rename to target/linux/generic/backport-6.6/780-06-v6.8-r8169-fix-building-with-CONFIG_LEDS_CLASS-m.patch index 1b83cf4cda..67f215cadf 100644 --- a/target/linux/generic/backport-6.6/780-02-v6.8-r8169-fix-building-with-CONFIG_LEDS_CLASS-m.patch +++ b/target/linux/generic/backport-6.6/780-06-v6.8-r8169-fix-building-with-CONFIG_LEDS_CLASS-m.patch @@ -59,7 +59,7 @@ Signed-off-by: Jakub Kicinski obj-$(CONFIG_R8169) += r8169.o --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c -@@ -5469,11 +5469,10 @@ static int rtl_init_one(struct pci_dev * +@@ -5383,11 +5383,10 @@ static int rtl_init_one(struct pci_dev * if (rc) return rc; diff --git a/target/linux/generic/backport-6.6/780-07-v6.9-r8169-simplify-EEE-handling.patch b/target/linux/generic/backport-6.6/780-07-v6.9-r8169-simplify-EEE-handling.patch new file mode 100644 index 0000000000..bdd3330580 --- /dev/null +++ b/target/linux/generic/backport-6.6/780-07-v6.9-r8169-simplify-EEE-handling.patch @@ -0,0 +1,96 @@ +From f5d59230ec26aa5e8b59e9f4a4d288703a737479 Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Wed, 31 Jan 2024 21:31:01 +0100 +Subject: [PATCH] r8169: simplify EEE handling + +We don't have to store the EEE modes to be advertised in the driver, +phylib does this for us and stores it in phydev->advertising_eee. +phylib also takes care of properly handling the EEE advertisement. + +Signed-off-by: Heiner Kallweit +Link: https://lore.kernel.org/r/27c336a8-ea47-483d-815b-02c45ae41da2@gmail.com +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/realtek/r8169_main.c | 32 +++-------------------- + 1 file changed, 4 insertions(+), 28 deletions(-) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -629,7 +629,6 @@ struct rtl8169_private { + struct rtl8169_counters *counters; + struct rtl8169_tc_offsets tc_offset; + u32 saved_wolopts; +- int eee_adv; + + const char *fw_name; + struct rtl_fw *rtl_fw; +@@ -2010,17 +2009,11 @@ static int rtl8169_get_eee(struct net_de + static int rtl8169_set_eee(struct net_device *dev, struct ethtool_eee *data) + { + struct rtl8169_private *tp = netdev_priv(dev); +- int ret; + + if (!rtl_supports_eee(tp)) + return -EOPNOTSUPP; + +- ret = phy_ethtool_set_eee(tp->phydev, data); +- +- if (!ret) +- tp->eee_adv = phy_read_mmd(dev->phydev, MDIO_MMD_AN, +- MDIO_AN_EEE_ADV); +- return ret; ++ return phy_ethtool_set_eee(tp->phydev, data); + } + + static void rtl8169_get_ringparam(struct net_device *dev, +@@ -2085,21 +2078,6 @@ static const struct ethtool_ops rtl8169_ + .set_pauseparam = rtl8169_set_pauseparam, + }; + +-static void rtl_enable_eee(struct rtl8169_private *tp) +-{ +- struct phy_device *phydev = tp->phydev; +- int adv; +- +- /* respect EEE advertisement the user may have set */ +- if (tp->eee_adv >= 0) +- adv = tp->eee_adv; +- else +- adv = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); +- +- if (adv >= 0) +- phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, adv); +-} +- + static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii) + { + /* +@@ -2336,9 +2314,6 @@ static void rtl8169_init_phy(struct rtl8 + /* We may have called phy_speed_down before */ + phy_speed_up(tp->phydev); + +- if (rtl_supports_eee(tp)) +- rtl_enable_eee(tp); +- + genphy_soft_reset(tp->phydev); + } + +@@ -5085,7 +5060,9 @@ static int r8169_mdio_register(struct rt + } + + tp->phydev->mac_managed_pm = true; +- ++ if (rtl_supports_eee(tp)) ++ linkmode_copy(tp->phydev->advertising_eee, ++ tp->phydev->supported_eee); + phy_support_asym_pause(tp->phydev); + + /* PHY will be woken up in rtl_open() */ +@@ -5220,7 +5197,6 @@ static int rtl_init_one(struct pci_dev * + tp->dev = dev; + tp->pci_dev = pdev; + tp->supports_gmii = ent->driver_data == RTL_CFG_NO_GBIT ? 0 : 1; +- tp->eee_adv = -1; + tp->ocp_base = OCP_STD_PHY_BASE; + + raw_spin_lock_init(&tp->cfg9346_usage_lock); diff --git a/target/linux/generic/backport-6.6/780-03-v6.9-r8169-add-support-for-RTL8126A.patch b/target/linux/generic/backport-6.6/780-08-v6.9-r8169-add-support-for-RTL8126A.patch similarity index 85% rename from target/linux/generic/backport-6.6/780-03-v6.9-r8169-add-support-for-RTL8126A.patch rename to target/linux/generic/backport-6.6/780-08-v6.9-r8169-add-support-for-RTL8126A.patch index ab38b0cfb9..65aa5449ec 100644 --- a/target/linux/generic/backport-6.6/780-03-v6.9-r8169-add-support-for-RTL8126A.patch +++ b/target/linux/generic/backport-6.6/780-08-v6.9-r8169-add-support-for-RTL8126A.patch @@ -34,9 +34,9 @@ Signed-off-by: David S. Miller #define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw" +#define FIRMWARE_8126A_2 "rtl_nic/rtl8126a-2.fw" - /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast). - The RTL chips use a 64 element hash table based on the Ethernet CRC. */ -@@ -140,6 +141,7 @@ static const struct { + #define TX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */ + #define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */ +@@ -136,6 +137,7 @@ static const struct { [RTL_GIGA_MAC_VER_61] = {"RTL8125A", FIRMWARE_8125A_3}, /* reserve 62 for CFG_METHOD_4 in the vendor driver */ [RTL_GIGA_MAC_VER_63] = {"RTL8125B", FIRMWARE_8125B_2}, @@ -44,7 +44,7 @@ Signed-off-by: David S. Miller }; static const struct pci_device_id rtl8169_pci_tbl[] = { -@@ -162,6 +164,7 @@ static const struct pci_device_id rtl816 +@@ -158,6 +160,7 @@ static const struct pci_device_id rtl816 { PCI_VENDOR_ID_LINKSYS, 0x1032, PCI_ANY_ID, 0x0024 }, { 0x0001, 0x8168, PCI_ANY_ID, 0x2410 }, { PCI_VDEVICE(REALTEK, 0x8125) }, @@ -52,7 +52,7 @@ Signed-off-by: David S. Miller { PCI_VDEVICE(REALTEK, 0x3000) }, {} }; -@@ -331,8 +334,12 @@ enum rtl8168_registers { +@@ -327,8 +330,12 @@ enum rtl8168_registers { }; enum rtl8125_registers { @@ -65,7 +65,7 @@ Signed-off-by: David S. Miller TxPoll_8125 = 0x90, MAC0_BKP = 0x19e0, EEE_TXIDLE_TIMER_8125 = 0x6048, -@@ -1144,7 +1151,7 @@ static void rtl_writephy(struct rtl8169_ +@@ -1139,7 +1146,7 @@ static void rtl_writephy(struct rtl8169_ case RTL_GIGA_MAC_VER_31: r8168dp_2_mdio_write(tp, location, val); break; @@ -74,7 +74,7 @@ Signed-off-by: David S. Miller r8168g_mdio_write(tp, location, val); break; default: -@@ -1159,7 +1166,7 @@ static int rtl_readphy(struct rtl8169_pr +@@ -1154,7 +1161,7 @@ static int rtl_readphy(struct rtl8169_pr case RTL_GIGA_MAC_VER_28: case RTL_GIGA_MAC_VER_31: return r8168dp_2_mdio_read(tp, location); @@ -83,7 +83,7 @@ Signed-off-by: David S. Miller return r8168g_mdio_read(tp, location); default: return r8169_mdio_read(tp, location); -@@ -1368,7 +1375,7 @@ static void rtl_set_d3_pll_down(struct r +@@ -1363,7 +1370,7 @@ static void rtl_set_d3_pll_down(struct r case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_26: case RTL_GIGA_MAC_VER_29 ... RTL_GIGA_MAC_VER_30: case RTL_GIGA_MAC_VER_32 ... RTL_GIGA_MAC_VER_37: @@ -92,7 +92,7 @@ Signed-off-by: David S. Miller if (enable) RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) & ~D3_NO_PLL_DOWN); else -@@ -1535,7 +1542,7 @@ static void __rtl8169_set_wol(struct rtl +@@ -1530,7 +1537,7 @@ static void __rtl8169_set_wol(struct rtl break; case RTL_GIGA_MAC_VER_34: case RTL_GIGA_MAC_VER_37: @@ -101,7 +101,7 @@ Signed-off-by: David S. Miller if (wolopts) rtl_mod_config2(tp, 0, PME_SIGNAL); else -@@ -2122,6 +2129,9 @@ static enum mac_version rtl8169_get_mac_ +@@ -2096,6 +2103,9 @@ static enum mac_version rtl8169_get_mac_ u16 val; enum mac_version ver; } mac_info[] = { @@ -111,7 +111,7 @@ Signed-off-by: David S. Miller /* 8125B family. */ { 0x7cf, 0x641, RTL_GIGA_MAC_VER_63 }, -@@ -2392,6 +2402,7 @@ static void rtl_init_rxcfg(struct rtl816 +@@ -2366,6 +2376,7 @@ static void rtl_init_rxcfg(struct rtl816 RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST); break; case RTL_GIGA_MAC_VER_63: @@ -119,7 +119,7 @@ Signed-off-by: David S. Miller RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST | RX_PAUSE_SLOT_ON); break; -@@ -2578,7 +2589,7 @@ static void rtl_wait_txrx_fifo_empty(str +@@ -2552,7 +2563,7 @@ static void rtl_wait_txrx_fifo_empty(str case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_61: rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42); break; @@ -128,7 +128,7 @@ Signed-off-by: David S. Miller RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq); rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42); rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond_2, 100, 42); -@@ -2822,7 +2833,7 @@ static void rtl_enable_exit_l1(struct rt +@@ -2795,7 +2806,7 @@ static void rtl_enable_exit_l1(struct rt case RTL_GIGA_MAC_VER_37 ... RTL_GIGA_MAC_VER_38: rtl_eri_set_bits(tp, 0xd4, 0x0c00); break; @@ -137,7 +137,7 @@ Signed-off-by: David S. Miller r8168_mac_ocp_modify(tp, 0xc0ac, 0, 0x1f80); break; default: -@@ -2836,7 +2847,7 @@ static void rtl_disable_exit_l1(struct r +@@ -2809,7 +2820,7 @@ static void rtl_disable_exit_l1(struct r case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38: rtl_eri_clear_bits(tp, 0xd4, 0x1f00); break; @@ -146,7 +146,7 @@ Signed-off-by: David S. Miller r8168_mac_ocp_modify(tp, 0xc0ac, 0x1f80, 0); break; default: -@@ -2846,6 +2857,8 @@ static void rtl_disable_exit_l1(struct r +@@ -2819,6 +2830,8 @@ static void rtl_disable_exit_l1(struct r static void rtl_hw_aspm_clkreq_enable(struct rtl8169_private *tp, bool enable) { @@ -155,7 +155,7 @@ Signed-off-by: David S. Miller if (tp->mac_version < RTL_GIGA_MAC_VER_32) return; -@@ -2859,11 +2872,19 @@ static void rtl_hw_aspm_clkreq_enable(st +@@ -2832,11 +2845,19 @@ static void rtl_hw_aspm_clkreq_enable(st return; rtl_mod_config5(tp, 0, ASPM_en); @@ -177,7 +177,7 @@ Signed-off-by: David S. Miller /* reset ephy tx/rx disable timer */ r8168_mac_ocp_modify(tp, 0xe094, 0xff00, 0); /* chip can trigger L1.2 */ -@@ -2875,14 +2896,22 @@ static void rtl_hw_aspm_clkreq_enable(st +@@ -2848,14 +2869,22 @@ static void rtl_hw_aspm_clkreq_enable(st } else { switch (tp->mac_version) { case RTL_GIGA_MAC_VER_46 ... RTL_GIGA_MAC_VER_48: @@ -202,7 +202,7 @@ Signed-off-by: David S. Miller rtl_mod_config5(tp, ASPM_en, 0); } } -@@ -3678,10 +3707,15 @@ static void rtl_hw_start_8125_common(str +@@ -3568,10 +3597,15 @@ static void rtl_hw_start_8125_common(str /* disable new tx descriptor format */ r8168_mac_ocp_modify(tp, 0xeb58, 0x0001, 0x0000); @@ -220,7 +220,7 @@ Signed-off-by: David S. Miller if (tp->mac_version == RTL_GIGA_MAC_VER_63) r8168_mac_ocp_modify(tp, 0xe63e, 0x0c30, 0x0000); -@@ -3694,6 +3728,10 @@ static void rtl_hw_start_8125_common(str +@@ -3584,6 +3618,10 @@ static void rtl_hw_start_8125_common(str r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0030); r8168_mac_ocp_modify(tp, 0xe040, 0x1000, 0x0000); r8168_mac_ocp_modify(tp, 0xea1c, 0x0003, 0x0001); @@ -231,7 +231,7 @@ Signed-off-by: David S. Miller r8168_mac_ocp_modify(tp, 0xe0c0, 0x4f0f, 0x4403); r8168_mac_ocp_modify(tp, 0xe052, 0x0080, 0x0068); r8168_mac_ocp_modify(tp, 0xd430, 0x0fff, 0x047f); -@@ -3708,10 +3746,10 @@ static void rtl_hw_start_8125_common(str +@@ -3598,10 +3636,10 @@ static void rtl_hw_start_8125_common(str rtl_loop_wait_low(tp, &rtl_mac_ocp_e00e_cond, 1000, 10); @@ -245,7 +245,7 @@ Signed-off-by: David S. Miller rtl_disable_rxdvgate(tp); } -@@ -3755,6 +3793,12 @@ static void rtl_hw_start_8125b(struct rt +@@ -3645,6 +3683,12 @@ static void rtl_hw_start_8125b(struct rt rtl_hw_start_8125_common(tp); } @@ -258,7 +258,7 @@ Signed-off-by: David S. Miller static void rtl_hw_config(struct rtl8169_private *tp) { static const rtl_generic_fct hw_configs[] = { -@@ -3797,6 +3841,7 @@ static void rtl_hw_config(struct rtl8169 +@@ -3687,6 +3731,7 @@ static void rtl_hw_config(struct rtl8169 [RTL_GIGA_MAC_VER_53] = rtl_hw_start_8117, [RTL_GIGA_MAC_VER_61] = rtl_hw_start_8125a_2, [RTL_GIGA_MAC_VER_63] = rtl_hw_start_8125b, @@ -266,7 +266,7 @@ Signed-off-by: David S. Miller }; if (hw_configs[tp->mac_version]) -@@ -3807,9 +3852,23 @@ static void rtl_hw_start_8125(struct rtl +@@ -3697,9 +3742,23 @@ static void rtl_hw_start_8125(struct rtl { int i; @@ -292,7 +292,7 @@ Signed-off-by: David S. Miller rtl_hw_config(tp); } -@@ -3887,8 +3946,7 @@ static int rtl8169_change_mtu(struct net +@@ -3777,8 +3836,7 @@ static int rtl8169_change_mtu(struct net rtl_jumbo_config(tp); switch (tp->mac_version) { @@ -302,7 +302,7 @@ Signed-off-by: David S. Miller rtl8125_set_eee_txidle_timer(tp); break; default: -@@ -4037,7 +4095,7 @@ static void rtl8169_cleanup(struct rtl81 +@@ -3927,7 +3985,7 @@ static void rtl8169_cleanup(struct rtl81 RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq); rtl_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 666); break; @@ -311,7 +311,7 @@ Signed-off-by: David S. Miller rtl_enable_rxdvgate(tp); fsleep(2000); break; -@@ -4188,8 +4246,7 @@ static unsigned int rtl_quirk_packet_pad +@@ -4078,8 +4136,7 @@ static unsigned int rtl_quirk_packet_pad switch (tp->mac_version) { case RTL_GIGA_MAC_VER_34: @@ -321,7 +321,7 @@ Signed-off-by: David S. Miller padto = max_t(unsigned int, padto, ETH_ZLEN); break; default: -@@ -5221,7 +5278,7 @@ static void rtl_hw_initialize(struct rtl +@@ -5112,7 +5169,7 @@ static void rtl_hw_initialize(struct rtl case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_48: rtl_hw_init_8168g(tp); break; diff --git a/target/linux/generic/backport-6.6/780-04-v6.9-r8169-improve-checking-for-valid-LED-modes.patch b/target/linux/generic/backport-6.6/780-09-v6.9-r8169-improve-checking-for-valid-LED-modes.patch similarity index 100% rename from target/linux/generic/backport-6.6/780-04-v6.9-r8169-improve-checking-for-valid-LED-modes.patch rename to target/linux/generic/backport-6.6/780-09-v6.9-r8169-improve-checking-for-valid-LED-modes.patch diff --git a/target/linux/generic/backport-6.6/780-10-v6.9-r8169-simplify-code-by-using-core-provided-pcpu-stat.patch b/target/linux/generic/backport-6.6/780-10-v6.9-r8169-simplify-code-by-using-core-provided-pcpu-stat.patch new file mode 100644 index 0000000000..510123767a --- /dev/null +++ b/target/linux/generic/backport-6.6/780-10-v6.9-r8169-simplify-code-by-using-core-provided-pcpu-stat.patch @@ -0,0 +1,39 @@ +From 400909df6e6543cb5cce3db9bbcd413d59125327 Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Sat, 10 Feb 2024 17:58:29 +0100 +Subject: [PATCH] r8169: simplify code by using core-provided pcpu stats + allocation + +Use core-provided pcpu stats allocation instead of open-coding it in +the driver. + +Signed-off-by: Heiner Kallweit +Link: https://lore.kernel.org/r/03f5bb3b-d7f4-48be-ae8a-54862ec4566c@gmail.com +Signed-off-by: Paolo Abeni +--- + drivers/net/ethernet/realtek/r8169_main.c | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -5261,11 +5261,6 @@ static int rtl_init_one(struct pci_dev * + raw_spin_lock_init(&tp->mac_ocp_lock); + mutex_init(&tp->led_lock); + +- dev->tstats = devm_netdev_alloc_pcpu_stats(&pdev->dev, +- struct pcpu_sw_netstats); +- if (!dev->tstats) +- return -ENOMEM; +- + /* Get the *optional* external "ether_clk" used on some boards */ + tp->clk = devm_clk_get_optional_enabled(&pdev->dev, "ether_clk"); + if (IS_ERR(tp->clk)) +@@ -5380,6 +5375,8 @@ static int rtl_init_one(struct pci_dev * + dev->hw_features |= NETIF_F_RXALL; + dev->hw_features |= NETIF_F_RXFCS; + ++ dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS; ++ + netdev_sw_irq_coalesce_default_on(dev); + + /* configure chip for default features */ diff --git a/target/linux/generic/backport-6.6/780-05-v6.9-r8169-add-LED-support-for-RTL8125-RTL8126.patch b/target/linux/generic/backport-6.6/780-11-v6.9-r8169-add-LED-support-for-RTL8125-RTL8126.patch similarity index 97% rename from target/linux/generic/backport-6.6/780-05-v6.9-r8169-add-LED-support-for-RTL8125-RTL8126.patch rename to target/linux/generic/backport-6.6/780-11-v6.9-r8169-add-LED-support-for-RTL8125-RTL8126.patch index b897e04de9..2059551b50 100644 --- a/target/linux/generic/backport-6.6/780-05-v6.9-r8169-add-LED-support-for-RTL8125-RTL8126.patch +++ b/target/linux/generic/backport-6.6/780-11-v6.9-r8169-add-LED-support-for-RTL8125-RTL8126.patch @@ -149,7 +149,7 @@ Signed-off-by: Jakub Kicinski +} --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c -@@ -334,17 +334,23 @@ enum rtl8168_registers { +@@ -330,17 +330,23 @@ enum rtl8168_registers { }; enum rtl8125_registers { @@ -173,7 +173,7 @@ Signed-off-by: Jakub Kicinski #define RX_VLAN_INNER_8125 BIT(22) #define RX_VLAN_OUTER_8125 BIT(23) #define RX_VLAN_8125 (RX_VLAN_INNER_8125 | RX_VLAN_OUTER_8125) -@@ -835,6 +841,51 @@ int rtl8168_get_led_mode(struct rtl8169_ +@@ -830,6 +836,51 @@ int rtl8168_get_led_mode(struct rtl8169_ return ret; } @@ -225,7 +225,7 @@ Signed-off-by: Jakub Kicinski void r8169_get_led_name(struct rtl8169_private *tp, int idx, char *buf, int buf_len) { -@@ -5526,10 +5577,12 @@ static int rtl_init_one(struct pci_dev * +@@ -5413,10 +5464,12 @@ static int rtl_init_one(struct pci_dev * if (rc) return rc; diff --git a/target/linux/generic/backport-6.6/780-12-v6.9-r8169-add-generic-rtl_set_eee_txidle_timer-function.patch b/target/linux/generic/backport-6.6/780-12-v6.9-r8169-add-generic-rtl_set_eee_txidle_timer-function.patch new file mode 100644 index 0000000000..1a7eed191f --- /dev/null +++ b/target/linux/generic/backport-6.6/780-12-v6.9-r8169-add-generic-rtl_set_eee_txidle_timer-function.patch @@ -0,0 +1,91 @@ +From 2ce30993831041b9dcd31eb12896be6611e8b7e2 Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Mon, 12 Feb 2024 19:57:46 +0100 +Subject: [PATCH] r8169: add generic rtl_set_eee_txidle_timer function + +Add a generic setter for the EEE tx idle timer and use it with all +RTL8125/RTL8126 chip versions, in line with the vendor driver. +This prepares for adding EEE tx idle timer support for additional +chip versions. + +Signed-off-by: Heiner Kallweit +Reviewed-by: Andrew Lunn +Link: https://lore.kernel.org/r/39beed72-0dc4-4c45-8899-b72c43ab62a7@gmail.com +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/realtek/r8169_main.c | 34 +++++++++++++---------- + 1 file changed, 20 insertions(+), 14 deletions(-) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -619,6 +619,7 @@ struct rtl8169_private { + struct page *Rx_databuff[NUM_RX_DESC]; /* Rx data buffers */ + struct ring_info tx_skb[NUM_TX_DESC]; /* Tx data buffers */ + u16 cp_cmd; ++ u16 tx_lpi_timer; + u32 irq_mask; + int irq; + struct clk *clk; +@@ -2054,6 +2055,22 @@ static int rtl_set_coalesce(struct net_d + return 0; + } + ++static void rtl_set_eee_txidle_timer(struct rtl8169_private *tp) ++{ ++ unsigned int timer_val = READ_ONCE(tp->dev->mtu) + ETH_HLEN + 0x20; ++ ++ switch (tp->mac_version) { ++ case RTL_GIGA_MAC_VER_61: ++ case RTL_GIGA_MAC_VER_63: ++ case RTL_GIGA_MAC_VER_65: ++ tp->tx_lpi_timer = timer_val; ++ RTL_W16(tp, EEE_TXIDLE_TIMER_8125, timer_val); ++ break; ++ default: ++ break; ++ } ++} ++ + static int rtl8169_get_eee(struct net_device *dev, struct ethtool_eee *data) + { + struct rtl8169_private *tp = netdev_priv(dev); +@@ -2312,14 +2329,8 @@ static void rtl8125a_config_eee_mac(stru + r8168_mac_ocp_modify(tp, 0xeb62, 0, BIT(2) | BIT(1)); + } + +-static void rtl8125_set_eee_txidle_timer(struct rtl8169_private *tp) +-{ +- RTL_W16(tp, EEE_TXIDLE_TIMER_8125, tp->dev->mtu + ETH_HLEN + 0x20); +-} +- + static void rtl8125b_config_eee_mac(struct rtl8169_private *tp) + { +- rtl8125_set_eee_txidle_timer(tp); + r8168_mac_ocp_modify(tp, 0xe040, 0, BIT(1) | BIT(0)); + } + +@@ -3852,6 +3863,8 @@ static void rtl_hw_start(struct rtl8169 + rtl_hw_aspm_clkreq_enable(tp, false); + RTL_W16(tp, CPlusCmd, tp->cp_cmd); + ++ rtl_set_eee_txidle_timer(tp); ++ + if (tp->mac_version <= RTL_GIGA_MAC_VER_06) + rtl_hw_start_8169(tp); + else if (rtl_is_8125(tp)) +@@ -3885,14 +3898,7 @@ static int rtl8169_change_mtu(struct net + dev->mtu = new_mtu; + netdev_update_features(dev); + rtl_jumbo_config(tp); +- +- switch (tp->mac_version) { +- case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_65: +- rtl8125_set_eee_txidle_timer(tp); +- break; +- default: +- break; +- } ++ rtl_set_eee_txidle_timer(tp); + + return 0; + } diff --git a/target/linux/generic/backport-6.6/780-13-v6.9-r8169-support-setting-the-EEE-tx-idle-timer-on-RTL81.patch b/target/linux/generic/backport-6.6/780-13-v6.9-r8169-support-setting-the-EEE-tx-idle-timer-on-RTL81.patch new file mode 100644 index 0000000000..917c7c194f --- /dev/null +++ b/target/linux/generic/backport-6.6/780-13-v6.9-r8169-support-setting-the-EEE-tx-idle-timer-on-RTL81.patch @@ -0,0 +1,30 @@ +From 57d2d2c8f132c830565058a5cdd8138350e068ec Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Mon, 12 Feb 2024 19:58:47 +0100 +Subject: [PATCH] r8169: support setting the EEE tx idle timer on + RTL8168h + +Support setting the EEE tx idle timer also on RTL8168h. + +Signed-off-by: Heiner Kallweit +Reviewed-by: Andrew Lunn +Link: https://lore.kernel.org/r/cfb69ec9-24c4-4aad-9909-fdae3088add4@gmail.com +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/realtek/r8169_main.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -2060,6 +2060,11 @@ static void rtl_set_eee_txidle_timer(str + unsigned int timer_val = READ_ONCE(tp->dev->mtu) + ETH_HLEN + 0x20; + + switch (tp->mac_version) { ++ case RTL_GIGA_MAC_VER_46: ++ case RTL_GIGA_MAC_VER_48: ++ tp->tx_lpi_timer = timer_val; ++ r8168_mac_ocp_write(tp, 0xe048, timer_val); ++ break; + case RTL_GIGA_MAC_VER_61: + case RTL_GIGA_MAC_VER_63: + case RTL_GIGA_MAC_VER_65: diff --git a/target/linux/generic/backport-6.6/780-14-v6.9-r8169-add-support-for-returning-tx_lpi_timer-in-etht.patch b/target/linux/generic/backport-6.6/780-14-v6.9-r8169-add-support-for-returning-tx_lpi_timer-in-etht.patch new file mode 100644 index 0000000000..51477d0142 --- /dev/null +++ b/target/linux/generic/backport-6.6/780-14-v6.9-r8169-add-support-for-returning-tx_lpi_timer-in-etht.patch @@ -0,0 +1,55 @@ +From 9c50139727265c088f936e496777bf588850e9f1 Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Mon, 12 Feb 2024 19:59:26 +0100 +Subject: [PATCH] r8169: add support for returning tx_lpi_timer in + ethtool get_eee + +Add support for returning the tx_lpi_timer value to userspace. +This is supported by few chip versions only: RTL8168h/RTL8125/RTL8126 + +Signed-off-by: Heiner Kallweit +Reviewed-by: Andrew Lunn +Link: https://lore.kernel.org/r/4eee9c34-c5d6-4c96-9b05-455896dea59a@gmail.com +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/realtek/r8169_main.c | 22 +++++++++++++++++++++- + 1 file changed, 21 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -2076,14 +2076,34 @@ static void rtl_set_eee_txidle_timer(str + } + } + ++static unsigned int r8169_get_tx_lpi_timer_us(struct rtl8169_private *tp) ++{ ++ unsigned int speed = tp->phydev->speed; ++ unsigned int timer = tp->tx_lpi_timer; ++ ++ if (!timer || speed == SPEED_UNKNOWN) ++ return 0; ++ ++ /* tx_lpi_timer value is in bytes */ ++ return DIV_ROUND_CLOSEST(timer * BITS_PER_BYTE, speed); ++} ++ + static int rtl8169_get_eee(struct net_device *dev, struct ethtool_eee *data) + { + struct rtl8169_private *tp = netdev_priv(dev); ++ int ret; + + if (!rtl_supports_eee(tp)) + return -EOPNOTSUPP; + +- return phy_ethtool_get_eee(tp->phydev, data); ++ ret = phy_ethtool_get_eee(tp->phydev, data); ++ if (ret) ++ return ret; ++ ++ data->tx_lpi_timer = r8169_get_tx_lpi_timer_us(tp); ++ data->tx_lpi_enabled = data->tx_lpi_timer ? data->eee_enabled : false; ++ ++ return 0; + } + + static int rtl8169_set_eee(struct net_device *dev, struct ethtool_eee *data) diff --git a/target/linux/generic/backport-6.6/780-06-v6.9-r8169-add-MODULE_FIRMWARE-entry-for-RTL8126A.patch b/target/linux/generic/backport-6.6/780-15-v6.9-r8169-add-MODULE_FIRMWARE-entry-for-RTL8126A.patch similarity index 94% rename from target/linux/generic/backport-6.6/780-06-v6.9-r8169-add-MODULE_FIRMWARE-entry-for-RTL8126A.patch rename to target/linux/generic/backport-6.6/780-15-v6.9-r8169-add-MODULE_FIRMWARE-entry-for-RTL8126A.patch index a6175c824e..6a7ebc885b 100644 --- a/target/linux/generic/backport-6.6/780-06-v6.9-r8169-add-MODULE_FIRMWARE-entry-for-RTL8126A.patch +++ b/target/linux/generic/backport-6.6/780-15-v6.9-r8169-add-MODULE_FIRMWARE-entry-for-RTL8126A.patch @@ -15,7 +15,7 @@ Signed-off-by: Jakub Kicinski --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c -@@ -680,6 +680,7 @@ MODULE_FIRMWARE(FIRMWARE_8168FP_3); +@@ -676,6 +676,7 @@ MODULE_FIRMWARE(FIRMWARE_8168FP_3); MODULE_FIRMWARE(FIRMWARE_8107E_2); MODULE_FIRMWARE(FIRMWARE_8125A_3); MODULE_FIRMWARE(FIRMWARE_8125B_2); diff --git a/target/linux/generic/backport-6.6/780-08-v6.10-r8169-fix-LED-related-deadlock-on-module-removal.patch b/target/linux/generic/backport-6.6/780-16-v6.9-r8169-fix-LED-related-deadlock-on-module-removal.patch similarity index 96% rename from target/linux/generic/backport-6.6/780-08-v6.10-r8169-fix-LED-related-deadlock-on-module-removal.patch rename to target/linux/generic/backport-6.6/780-16-v6.9-r8169-fix-LED-related-deadlock-on-module-removal.patch index c179a37252..d8e4a4f6ff 100644 --- a/target/linux/generic/backport-6.6/780-08-v6.10-r8169-fix-LED-related-deadlock-on-module-removal.patch +++ b/target/linux/generic/backport-6.6/780-16-v6.9-r8169-fix-LED-related-deadlock-on-module-removal.patch @@ -115,7 +115,7 @@ Signed-off-by: David S. Miller } --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c -@@ -651,6 +651,8 @@ struct rtl8169_private { +@@ -647,6 +647,8 @@ struct rtl8169_private { const char *fw_name; struct rtl_fw *rtl_fw; @@ -124,7 +124,7 @@ Signed-off-by: David S. Miller u32 ocp_base; }; -@@ -5122,6 +5124,8 @@ static void rtl_remove_one(struct pci_de +@@ -5040,6 +5042,8 @@ static void rtl_remove_one(struct pci_de cancel_work_sync(&tp->wk.work); @@ -133,7 +133,7 @@ Signed-off-by: David S. Miller unregister_netdev(tp->dev); if (tp->dash_type != RTL_DASH_NONE) -@@ -5582,9 +5586,9 @@ static int rtl_init_one(struct pci_dev * +@@ -5498,9 +5502,9 @@ static int rtl_init_one(struct pci_dev * if (IS_ENABLED(CONFIG_R8169_LEDS)) { if (rtl_is_8125(tp)) diff --git a/target/linux/generic/backport-6.6/780-09-v6.10-r8169-add-missing-conditional-compiling-for-call-to-.patch b/target/linux/generic/backport-6.6/780-17-v6.9-r8169-add-missing-conditional-compiling-for-call-to-.patch similarity index 94% rename from target/linux/generic/backport-6.6/780-09-v6.10-r8169-add-missing-conditional-compiling-for-call-to-.patch rename to target/linux/generic/backport-6.6/780-17-v6.9-r8169-add-missing-conditional-compiling-for-call-to-.patch index abd7d1c36c..366ae803f9 100644 --- a/target/linux/generic/backport-6.6/780-09-v6.10-r8169-add-missing-conditional-compiling-for-call-to-.patch +++ b/target/linux/generic/backport-6.6/780-17-v6.9-r8169-add-missing-conditional-compiling-for-call-to-.patch @@ -19,7 +19,7 @@ Signed-off-by: Jakub Kicinski --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c -@@ -5124,7 +5124,8 @@ static void rtl_remove_one(struct pci_de +@@ -5042,7 +5042,8 @@ static void rtl_remove_one(struct pci_de cancel_work_sync(&tp->wk.work); diff --git a/target/linux/generic/backport-6.6/780-07-v6.10-r8169-add-support-for-RTL8168M.patch b/target/linux/generic/backport-6.6/780-18-v6.10-r8169-add-support-for-RTL8168M.patch similarity index 94% rename from target/linux/generic/backport-6.6/780-07-v6.10-r8169-add-support-for-RTL8168M.patch rename to target/linux/generic/backport-6.6/780-18-v6.10-r8169-add-support-for-RTL8168M.patch index 557b8b1491..2abbe2ccf1 100644 --- a/target/linux/generic/backport-6.6/780-07-v6.10-r8169-add-support-for-RTL8168M.patch +++ b/target/linux/generic/backport-6.6/780-18-v6.10-r8169-add-support-for-RTL8168M.patch @@ -19,7 +19,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c -@@ -2212,6 +2212,8 @@ static enum mac_version rtl8169_get_mac_ +@@ -2230,6 +2230,8 @@ static enum mac_version rtl8169_get_mac_ * the wild. Let's disable detection. * { 0x7cf, 0x540, RTL_GIGA_MAC_VER_45 }, */ diff --git a/target/linux/generic/backport-6.6/780-19-v6.10-net-annotate-writes-on-dev-mtu-from-ndo_change_mtu.patch b/target/linux/generic/backport-6.6/780-19-v6.10-net-annotate-writes-on-dev-mtu-from-ndo_change_mtu.patch new file mode 100644 index 0000000000..cad1210e4d --- /dev/null +++ b/target/linux/generic/backport-6.6/780-19-v6.10-net-annotate-writes-on-dev-mtu-from-ndo_change_mtu.patch @@ -0,0 +1,60 @@ +From 1eb2cded45b35816085c1f962933c187d970f9dc Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Mon, 6 May 2024 10:28:12 +0000 +Subject: [PATCH] net: annotate writes on dev->mtu from ndo_change_mtu() + +Simon reported that ndo_change_mtu() methods were never +updated to use WRITE_ONCE(dev->mtu, new_mtu) as hinted +in commit 501a90c94510 ("inet: protect against too small +mtu values.") + +We read dev->mtu without holding RTNL in many places, +with READ_ONCE() annotations. + +It is time to take care of ndo_change_mtu() methods +to use corresponding WRITE_ONCE() + +Signed-off-by: Eric Dumazet +Reported-by: Simon Horman +Closes: https://lore.kernel.org/netdev/20240505144608.GB67882@kernel.org/ +Reviewed-by: Jacob Keller +Reviewed-by: Sabrina Dubroca +Reviewed-by: Simon Horman +Acked-by: Shannon Nelson +Link: https://lore.kernel.org/r/20240506102812.3025432-1-edumazet@google.com +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/realtek/8139cp.c | 4 ++-- + drivers/net/ethernet/realtek/r8169_main.c | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/net/ethernet/realtek/8139cp.c ++++ b/drivers/net/ethernet/realtek/8139cp.c +@@ -1277,14 +1277,14 @@ static int cp_change_mtu(struct net_devi + + /* if network interface not up, no need for complexity */ + if (!netif_running(dev)) { +- dev->mtu = new_mtu; ++ WRITE_ONCE(dev->mtu, new_mtu); + cp_set_rxbufsize(cp); /* set new rx buf size */ + return 0; + } + + /* network IS up, close it, reset MTU, and come up again. */ + cp_close(dev); +- dev->mtu = new_mtu; ++ WRITE_ONCE(dev->mtu, new_mtu); + cp_set_rxbufsize(cp); + return cp_open(dev); + } +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -3925,7 +3925,7 @@ static int rtl8169_change_mtu(struct net + { + struct rtl8169_private *tp = netdev_priv(dev); + +- dev->mtu = new_mtu; ++ WRITE_ONCE(dev->mtu, new_mtu); + netdev_update_features(dev); + rtl_jumbo_config(tp); + rtl_set_eee_txidle_timer(tp); diff --git a/target/linux/generic/backport-6.6/780-20-v6.11-r8169-disable-interrupt-source-RxOverflow.patch b/target/linux/generic/backport-6.6/780-20-v6.11-r8169-disable-interrupt-source-RxOverflow.patch new file mode 100644 index 0000000000..cef5d95252 --- /dev/null +++ b/target/linux/generic/backport-6.6/780-20-v6.11-r8169-disable-interrupt-source-RxOverflow.patch @@ -0,0 +1,34 @@ +From 6994520a332887f1688464f250c9ec8002a89a8e Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Mon, 27 May 2024 21:16:56 +0200 +Subject: [PATCH] r8169: disable interrupt source RxOverflow + +Vendor driver calls this bit RxDescUnavail. All we do in the interrupt +handler in this case is scheduling NAPI. If we should be out of +RX descriptors, then NAPI is scheduled anyway. Therefore remove this +interrupt source. Tested on RTL8168h. + +Signed-off-by: Heiner Kallweit +Reviewed-by: Sunil Goutham +Link: https://lore.kernel.org/r/9b2054b2-0548-4f48-bf91-b646572093b4@gmail.com +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/realtek/r8169_main.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -5083,12 +5083,10 @@ static void rtl_set_irq_mask(struct rtl8 + tp->irq_mask = RxOK | RxErr | TxOK | TxErr | LinkChg; + + if (tp->mac_version <= RTL_GIGA_MAC_VER_06) +- tp->irq_mask |= SYSErr | RxOverflow | RxFIFOOver; ++ tp->irq_mask |= SYSErr | RxFIFOOver; + else if (tp->mac_version == RTL_GIGA_MAC_VER_11) + /* special workaround needed */ + tp->irq_mask |= RxFIFOOver; +- else +- tp->irq_mask |= RxOverflow; + } + + static int rtl_alloc_irq(struct rtl8169_private *tp) diff --git a/target/linux/generic/backport-6.6/780-21-v6.11-r8169-remove-detection-of-chip-version-11-early-RTL8.patch b/target/linux/generic/backport-6.6/780-21-v6.11-r8169-remove-detection-of-chip-version-11-early-RTL8.patch new file mode 100644 index 0000000000..7f0f23fccb --- /dev/null +++ b/target/linux/generic/backport-6.6/780-21-v6.11-r8169-remove-detection-of-chip-version-11-early-RTL8.patch @@ -0,0 +1,32 @@ +From 982300c115d229565d7af8e8b38aa1ee7bb1f5bd Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Mon, 27 May 2024 21:20:16 +0200 +Subject: [PATCH] r8169: remove detection of chip version 11 (early + RTL8168b) + +This early RTL8168b version was the first PCIe chip version, and it's +quite quirky. Last sign of life is from more than 15 yrs ago. +Let's remove detection of this chip version, we'll see whether anybody +complains. If not, support for this chip version can be removed a few +kernel versions later. + +Signed-off-by: Heiner Kallweit +Link: https://lore.kernel.org/r/875cdcf4-843c-420a-ad5d-417447b68572@gmail.com +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/realtek/r8169_main.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/realtek/r8169_main.c ++++ b/drivers/net/ethernet/realtek/r8169_main.c +@@ -2275,7 +2275,9 @@ static enum mac_version rtl8169_get_mac_ + + /* 8168B family. */ + { 0x7c8, 0x380, RTL_GIGA_MAC_VER_17 }, +- { 0x7c8, 0x300, RTL_GIGA_MAC_VER_11 }, ++ /* This one is very old and rare, let's see if anybody complains. ++ * { 0x7c8, 0x300, RTL_GIGA_MAC_VER_11 }, ++ */ + + /* 8101 family. */ + { 0x7c8, 0x448, RTL_GIGA_MAC_VER_39 },