diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile index bf7d553df3..72e3974438 100644 --- a/package/firmware/ipq-wifi/Makefile +++ b/package/firmware/ipq-wifi/Makefile @@ -6,9 +6,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware/qca-wireless.git -PKG_SOURCE_DATE:=2025-04-08 -PKG_SOURCE_VERSION:=9591c9b7578af3548c35bb80cd6c37978669f7c9 -PKG_MIRROR_HASH:=b5c0024a0c0ebeb61ad6bc037f897685d161f1578aca5a1366dd33603661338b +PKG_SOURCE_DATE:=2025-04-15 +PKG_SOURCE_VERSION:=38a18dc26c9b150f06f56b9c5972d789eb5bc0c4 +PKG_MIRROR_HASH:=a10a9b524ecd91854265b04819303410ae77e1f5a093f9cc8eb43e25e99c1bae PKG_FLAGS:=nonshared include $(INCLUDE_DIR)/package.mk diff --git a/target/linux/generic/backport-6.6/621-v6.10-03-net-add-code-for-TCP-fraglist-GRO.patch b/target/linux/generic/backport-6.6/621-v6.10-03-net-add-code-for-TCP-fraglist-GRO.patch index b76431e8ed..a51b2ed9c9 100644 --- a/target/linux/generic/backport-6.6/621-v6.10-03-net-add-code-for-TCP-fraglist-GRO.patch +++ b/target/linux/generic/backport-6.6/621-v6.10-03-net-add-code-for-TCP-fraglist-GRO.patch @@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni --- a/net/ipv4/tcp_offload.c +++ b/net/ipv4/tcp_offload.c -@@ -342,6 +342,18 @@ found: +@@ -342,6 +342,19 @@ found: flush |= p->decrypted ^ skb->decrypted; #endif @@ -28,6 +28,7 @@ Signed-off-by: Paolo Abeni + flush |= (__force int)(flags ^ tcp_flag_word(th2)); + flush |= skb->ip_summed != p->ip_summed; + flush |= skb->csum_level != p->csum_level; ++ flush |= !pskb_may_pull(skb, skb_gro_offset(skb)); + flush |= NAPI_GRO_CB(p)->count >= 64; + + if (flush || skb_gro_receive_list(p, skb)) @@ -39,7 +40,7 @@ Signed-off-by: Paolo Abeni if (flush || skb_gro_receive(p, skb)) { mss = 1; goto out_check_final; -@@ -406,6 +418,15 @@ INDIRECT_CALLABLE_SCOPE int tcp4_gro_com +@@ -406,6 +419,15 @@ INDIRECT_CALLABLE_SCOPE int tcp4_gro_com const struct iphdr *iph = ip_hdr(skb); struct tcphdr *th = tcp_hdr(skb); diff --git a/target/linux/generic/backport-6.6/621-v6.10-05-net-create-tcp_gro_header_pull-helper-function.patch b/target/linux/generic/backport-6.6/621-v6.10-05-net-create-tcp_gro_header_pull-helper-function.patch index 607f21a665..03f674dc2b 100644 --- a/target/linux/generic/backport-6.6/621-v6.10-05-net-create-tcp_gro_header_pull-helper-function.patch +++ b/target/linux/generic/backport-6.6/621-v6.10-05-net-create-tcp_gro_header_pull-helper-function.patch @@ -96,7 +96,7 @@ Signed-off-by: Paolo Abeni len = skb_gro_len(skb); flags = tcp_flag_word(th); -@@ -384,7 +390,6 @@ out_check_final: +@@ -385,7 +391,6 @@ out_check_final: if (p && (!NAPI_GRO_CB(skb)->same_flow || flush)) pp = p; @@ -104,7 +104,7 @@ Signed-off-by: Paolo Abeni NAPI_GRO_CB(skb)->flush |= (flush != 0); return pp; -@@ -411,15 +416,23 @@ EXPORT_SYMBOL(tcp_gro_complete); +@@ -412,15 +417,23 @@ EXPORT_SYMBOL(tcp_gro_complete); INDIRECT_CALLABLE_SCOPE struct sk_buff *tcp4_gro_receive(struct list_head *head, struct sk_buff *skb) { diff --git a/target/linux/generic/backport-6.6/621-v6.10-06-net-add-heuristic-for-enabling-TCP-fraglist-GRO.patch b/target/linux/generic/backport-6.6/621-v6.10-06-net-add-heuristic-for-enabling-TCP-fraglist-GRO.patch index c3462c2545..6ce1f89123 100644 --- a/target/linux/generic/backport-6.6/621-v6.10-06-net-add-heuristic-for-enabling-TCP-fraglist-GRO.patch +++ b/target/linux/generic/backport-6.6/621-v6.10-06-net-add-heuristic-for-enabling-TCP-fraglist-GRO.patch @@ -35,7 +35,7 @@ Signed-off-by: Paolo Abeni --- a/net/ipv4/tcp_offload.c +++ b/net/ipv4/tcp_offload.c -@@ -413,6 +413,36 @@ void tcp_gro_complete(struct sk_buff *sk +@@ -414,6 +414,36 @@ void tcp_gro_complete(struct sk_buff *sk } EXPORT_SYMBOL(tcp_gro_complete); @@ -72,7 +72,7 @@ Signed-off-by: Paolo Abeni INDIRECT_CALLABLE_SCOPE struct sk_buff *tcp4_gro_receive(struct list_head *head, struct sk_buff *skb) { -@@ -428,6 +458,8 @@ struct sk_buff *tcp4_gro_receive(struct +@@ -429,6 +459,8 @@ struct sk_buff *tcp4_gro_receive(struct if (!th) goto flush; diff --git a/target/linux/generic/backport-6.6/731-v6.10-net-sfp-add-quirk-for-ATS-SFP-GE-T-1000Base-TX-modul.patch b/target/linux/generic/backport-6.6/731-v6.10-net-sfp-add-quirk-for-ATS-SFP-GE-T-1000Base-TX-modul.patch deleted file mode 100644 index c006c8a045..0000000000 --- a/target/linux/generic/backport-6.6/731-v6.10-net-sfp-add-quirk-for-ATS-SFP-GE-T-1000Base-TX-modul.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0805d67bc0ef95411228e802f31975cfb7555056 Mon Sep 17 00:00:00 2001 -From: Daniel Golle -Date: Tue, 23 Apr 2024 11:00:25 +0200 -Subject: [PATCH] net: sfp: add quirk for ATS SFP-GE-T 1000Base-TX module -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Add quirk for ATS SFP-GE-T 1000Base-TX module. - -This copper module comes with broken TX_FAULT indicator which must be -ignored for it to work. - -Co-authored-by: Josef Schlehofer -Signed-off-by: Daniel Golle -[ rebased on top of net-next ] -Signed-off-by: Marek BehĂșn -Link: https://lore.kernel.org/r/20240423090025.29231-1-kabel@kernel.org -Signed-off-by: Jakub Kicinski ---- - drivers/net/phy/sfp.c | 3 +++ - 1 file changed, 3 insertions(+) - ---- a/drivers/net/phy/sfp.c -+++ b/drivers/net/phy/sfp.c -@@ -486,6 +486,9 @@ static const struct sfp_quirk sfp_quirks - // OEM SFP-GE-T is a 1000Base-T module with broken TX_FAULT indicator - SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault), - -+ // OEM SFP-GE-T is a 1000Base-T module with broken TX_FAULT indicator -+ SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault), -+ - SFP_QUIRK_F("OEM", "SFP-10G-T", sfp_fixup_rollball_cc), - SFP_QUIRK_M("OEM", "SFP-2.5G-T", sfp_quirk_oem_2_5g), - SFP_QUIRK_F("OEM", "RTSFP-10", sfp_fixup_rollball_cc), diff --git a/target/linux/generic/backport-6.6/785-01-v6.8-net-sfp-rework-the-RollBall-PHY-waiting-code.patch b/target/linux/generic/backport-6.6/785-01-v6.8-net-sfp-rework-the-RollBall-PHY-waiting-code.patch index 31b2c41d3a..f113014fa5 100644 --- a/target/linux/generic/backport-6.6/785-01-v6.8-net-sfp-rework-the-RollBall-PHY-waiting-code.patch +++ b/target/linux/generic/backport-6.6/785-01-v6.8-net-sfp-rework-the-RollBall-PHY-waiting-code.patch @@ -86,7 +86,7 @@ Signed-off-by: David S. Miller static void sfp_fixup_rollball_cc(struct sfp *sfp) { sfp_fixup_rollball(sfp); -@@ -2323,7 +2321,7 @@ static int sfp_sm_mod_probe(struct sfp * +@@ -2320,7 +2318,7 @@ static int sfp_sm_mod_probe(struct sfp * mask |= SFP_F_RS1; sfp->module_t_start_up = T_START_UP; @@ -95,7 +95,7 @@ Signed-off-by: David S. Miller sfp->state_ignore_mask = 0; -@@ -2559,10 +2557,9 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -2556,10 +2554,9 @@ static void sfp_sm_main(struct sfp *sfp, /* We need to check the TX_FAULT state, which is not defined * while TX_DISABLE is asserted. The earliest we want to do @@ -108,7 +108,7 @@ Signed-off-by: David S. Miller break; case SFP_S_WAIT: -@@ -2576,8 +2573,8 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -2573,8 +2570,8 @@ static void sfp_sm_main(struct sfp *sfp, * deasserting. */ timeout = sfp->module_t_start_up; @@ -119,7 +119,7 @@ Signed-off-by: David S. Miller else timeout = 1; -@@ -2620,7 +2617,11 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -2617,7 +2614,11 @@ static void sfp_sm_main(struct sfp *sfp, ret = sfp_sm_probe_for_phy(sfp); if (ret == -ENODEV) { if (--sfp->sm_phy_retries) { diff --git a/target/linux/generic/backport-6.6/785-02-v6.8-net-sfp-fix-PHY-discovery-for-FS-SFP-10G-T-module.patch b/target/linux/generic/backport-6.6/785-02-v6.8-net-sfp-fix-PHY-discovery-for-FS-SFP-10G-T-module.patch index 998579c462..5ba8d0fabc 100644 --- a/target/linux/generic/backport-6.6/785-02-v6.8-net-sfp-fix-PHY-discovery-for-FS-SFP-10G-T-module.patch +++ b/target/linux/generic/backport-6.6/785-02-v6.8-net-sfp-fix-PHY-discovery-for-FS-SFP-10G-T-module.patch @@ -51,7 +51,7 @@ Signed-off-by: David S. Miller } static void sfp_fixup_halny_gsfp(struct sfp *sfp) -@@ -2321,6 +2328,7 @@ static int sfp_sm_mod_probe(struct sfp * +@@ -2318,6 +2325,7 @@ static int sfp_sm_mod_probe(struct sfp * mask |= SFP_F_RS1; sfp->module_t_start_up = T_START_UP; @@ -59,7 +59,7 @@ Signed-off-by: David S. Miller sfp->phy_t_retry = T_PHY_RETRY; sfp->state_ignore_mask = 0; -@@ -2557,9 +2565,10 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -2554,9 +2562,10 @@ static void sfp_sm_main(struct sfp *sfp, /* We need to check the TX_FAULT state, which is not defined * while TX_DISABLE is asserted. The earliest we want to do @@ -72,7 +72,7 @@ Signed-off-by: David S. Miller break; case SFP_S_WAIT: -@@ -2573,8 +2582,8 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -2570,8 +2579,8 @@ static void sfp_sm_main(struct sfp *sfp, * deasserting. */ timeout = sfp->module_t_start_up; diff --git a/target/linux/generic/pending-6.6/200-ARM-9404-1-arm32-fix-boot-hang-with-HAVE_LD_DEAD_COD.patch b/target/linux/generic/pending-6.6/200-ARM-9404-1-arm32-fix-boot-hang-with-HAVE_LD_DEAD_COD.patch new file mode 100644 index 0000000000..2e5d1d9148 --- /dev/null +++ b/target/linux/generic/pending-6.6/200-ARM-9404-1-arm32-fix-boot-hang-with-HAVE_LD_DEAD_COD.patch @@ -0,0 +1,79 @@ +From cf3d39cfd29ab7bcbd6aa79d4a2f132817969e3d Mon Sep 17 00:00:00 2001 +From: Christian Marangi +Date: Tue, 15 Apr 2025 23:16:40 +0200 +Subject: [PATCH] ARM: 9404/1: arm32: fix boot hang with + HAVE_LD_DEAD_CODE_DATA_ELIMINATION + +It was reported that some SoC (mvebu based for example) hang on kernel +loading. A variant of the feature was present in OpenWrt from long ago +and adding the additional entry with KEEP, fix the problem. + +Fixes: ed0f94102251 ("ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION") +Signed-off-by: Christian Marangi +--- + arch/arm/include/asm/vmlinux.lds.h | 10 +++++----- + arch/arm/kernel/vmlinux.lds.S | 4 ++-- + 2 files changed, 7 insertions(+), 7 deletions(-) + +--- a/arch/arm/include/asm/vmlinux.lds.h ++++ b/arch/arm/include/asm/vmlinux.lds.h +@@ -48,7 +48,7 @@ + #define IDMAP_TEXT \ + ALIGN_FUNCTION(); \ + __idmap_text_start = .; \ +- *(.idmap.text) \ ++ KEEP(*(.idmap.text)) \ + __idmap_text_end = .; \ + + #define ARM_DISCARD \ +@@ -108,12 +108,12 @@ + . = ALIGN(8); \ + .ARM.unwind_idx : { \ + __start_unwind_idx = .; \ +- *(.ARM.exidx*) \ ++ KEEP(*(.ARM.exidx*)) \ + __stop_unwind_idx = .; \ + } \ + .ARM.unwind_tab : { \ + __start_unwind_tab = .; \ +- *(.ARM.extab*) \ ++ KEEP(*(.ARM.extab*)) \ + __stop_unwind_tab = .; \ + } + +@@ -125,7 +125,7 @@ + __vectors_lma = .; \ + OVERLAY 0xffff0000 : NOCROSSREFS AT(__vectors_lma) { \ + .vectors { \ +- *(.vectors) \ ++ KEEP(*(.vectors)) \ + } \ + .vectors.bhb.loop8 { \ + *(.vectors.bhb.loop8) \ +@@ -143,7 +143,7 @@ + \ + __stubs_lma = .; \ + .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_lma) { \ +- *(.stubs) \ ++ KEEP(*(.stubs)) \ + } \ + ARM_LMA(__stubs, .stubs); \ + . = __stubs_lma + SIZEOF(.stubs); \ +--- a/arch/arm/kernel/vmlinux.lds.S ++++ b/arch/arm/kernel/vmlinux.lds.S +@@ -104,13 +104,13 @@ SECTIONS + } + .init.tagtable : { + __tagtable_begin = .; +- *(.taglist.init) ++ KEEP(*(.taglist.init)) + __tagtable_end = .; + } + #ifdef CONFIG_SMP_ON_UP + .init.smpalt : { + __smpalt_begin = .; +- *(.alt.smp.init) ++ KEEP(*(.alt.smp.init)) + __smpalt_end = .; + } + #endif diff --git a/target/linux/realtek/patches-6.6/710-net-phy-sfp-re-probe-modules-on-DEV_UP-event.patch b/target/linux/realtek/patches-6.6/710-net-phy-sfp-re-probe-modules-on-DEV_UP-event.patch index 607b6921b0..cab2d6bf3c 100644 --- a/target/linux/realtek/patches-6.6/710-net-phy-sfp-re-probe-modules-on-DEV_UP-event.patch +++ b/target/linux/realtek/patches-6.6/710-net-phy-sfp-re-probe-modules-on-DEV_UP-event.patch @@ -10,7 +10,7 @@ Signed-off-by: Antoine Tenart --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -1571,6 +1571,10 @@ static void sfp_hwmon_probe(struct work_ +@@ -1568,6 +1568,10 @@ static void sfp_hwmon_probe(struct work_ struct sfp *sfp = container_of(work, struct sfp, hwmon_probe.work); int err; @@ -21,7 +21,7 @@ Signed-off-by: Antoine Tenart /* hwmon interface needs to access 16bit registers in atomic way to * guarantee coherency of the diagnostic monitoring data. If it is not * possible to guarantee coherency because EEPROM is broken in such way -@@ -2433,6 +2437,13 @@ static void sfp_sm_module(struct sfp *sf +@@ -2430,6 +2434,13 @@ static void sfp_sm_module(struct sfp *sf return; } diff --git a/target/linux/realtek/patches-6.6/714-net-phy-sfp-add-support-for-SMBus.patch b/target/linux/realtek/patches-6.6/714-net-phy-sfp-add-support-for-SMBus.patch index 857743d479..3b7a3b9db1 100644 --- a/target/linux/realtek/patches-6.6/714-net-phy-sfp-add-support-for-SMBus.patch +++ b/target/linux/realtek/patches-6.6/714-net-phy-sfp-add-support-for-SMBus.patch @@ -10,7 +10,7 @@ Signed-off-by: Antoine Tenart --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -676,10 +676,64 @@ static int sfp_i2c_write(struct sfp *sfp +@@ -673,10 +673,64 @@ static int sfp_i2c_write(struct sfp *sfp return ret == ARRAY_SIZE(msgs) ? len : 0; } @@ -77,7 +77,7 @@ Signed-off-by: Antoine Tenart sfp->i2c = i2c; sfp->read = sfp_i2c_read; -@@ -711,6 +765,29 @@ static int sfp_i2c_mdiobus_create(struct +@@ -708,6 +762,29 @@ static int sfp_i2c_mdiobus_create(struct return 0; } @@ -107,7 +107,7 @@ Signed-off-by: Antoine Tenart static void sfp_i2c_mdiobus_destroy(struct sfp *sfp) { mdiobus_unregister(sfp->i2c_mii); -@@ -1889,9 +1966,15 @@ static void sfp_sm_fault(struct sfp *sfp +@@ -1886,9 +1963,15 @@ static void sfp_sm_fault(struct sfp *sfp static int sfp_sm_add_mdio_bus(struct sfp *sfp) {