Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
c25b909304
@ -6,9 +6,9 @@ PKG_RELEASE:=1
|
|||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware/qca-wireless.git
|
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware/qca-wireless.git
|
||||||
PKG_SOURCE_DATE:=2025-04-08
|
PKG_SOURCE_DATE:=2025-04-15
|
||||||
PKG_SOURCE_VERSION:=9591c9b7578af3548c35bb80cd6c37978669f7c9
|
PKG_SOURCE_VERSION:=38a18dc26c9b150f06f56b9c5972d789eb5bc0c4
|
||||||
PKG_MIRROR_HASH:=b5c0024a0c0ebeb61ad6bc037f897685d161f1578aca5a1366dd33603661338b
|
PKG_MIRROR_HASH:=a10a9b524ecd91854265b04819303410ae77e1f5a093f9cc8eb43e25e99c1bae
|
||||||
PKG_FLAGS:=nonshared
|
PKG_FLAGS:=nonshared
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
--- a/net/ipv4/tcp_offload.c
|
--- a/net/ipv4/tcp_offload.c
|
||||||
+++ b/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;
|
flush |= p->decrypted ^ skb->decrypted;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -28,6 +28,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
+ flush |= (__force int)(flags ^ tcp_flag_word(th2));
|
+ flush |= (__force int)(flags ^ tcp_flag_word(th2));
|
||||||
+ flush |= skb->ip_summed != p->ip_summed;
|
+ flush |= skb->ip_summed != p->ip_summed;
|
||||||
+ flush |= skb->csum_level != p->csum_level;
|
+ flush |= skb->csum_level != p->csum_level;
|
||||||
|
+ flush |= !pskb_may_pull(skb, skb_gro_offset(skb));
|
||||||
+ flush |= NAPI_GRO_CB(p)->count >= 64;
|
+ flush |= NAPI_GRO_CB(p)->count >= 64;
|
||||||
+
|
+
|
||||||
+ if (flush || skb_gro_receive_list(p, skb))
|
+ if (flush || skb_gro_receive_list(p, skb))
|
||||||
@ -39,7 +40,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
if (flush || skb_gro_receive(p, skb)) {
|
if (flush || skb_gro_receive(p, skb)) {
|
||||||
mss = 1;
|
mss = 1;
|
||||||
goto out_check_final;
|
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);
|
const struct iphdr *iph = ip_hdr(skb);
|
||||||
struct tcphdr *th = tcp_hdr(skb);
|
struct tcphdr *th = tcp_hdr(skb);
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
len = skb_gro_len(skb);
|
len = skb_gro_len(skb);
|
||||||
flags = tcp_flag_word(th);
|
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))
|
if (p && (!NAPI_GRO_CB(skb)->same_flow || flush))
|
||||||
pp = p;
|
pp = p;
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
NAPI_GRO_CB(skb)->flush |= (flush != 0);
|
NAPI_GRO_CB(skb)->flush |= (flush != 0);
|
||||||
|
|
||||||
return pp;
|
return pp;
|
||||||
@@ -411,15 +416,23 @@ EXPORT_SYMBOL(tcp_gro_complete);
|
@@ -412,15 +417,23 @@ EXPORT_SYMBOL(tcp_gro_complete);
|
||||||
INDIRECT_CALLABLE_SCOPE
|
INDIRECT_CALLABLE_SCOPE
|
||||||
struct sk_buff *tcp4_gro_receive(struct list_head *head, struct sk_buff *skb)
|
struct sk_buff *tcp4_gro_receive(struct list_head *head, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
|
@ -35,7 +35,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
--- a/net/ipv4/tcp_offload.c
|
--- a/net/ipv4/tcp_offload.c
|
||||||
+++ b/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);
|
EXPORT_SYMBOL(tcp_gro_complete);
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
INDIRECT_CALLABLE_SCOPE
|
INDIRECT_CALLABLE_SCOPE
|
||||||
struct sk_buff *tcp4_gro_receive(struct list_head *head, struct sk_buff *skb)
|
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)
|
if (!th)
|
||||||
goto flush;
|
goto flush;
|
||||||
|
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
From 0805d67bc0ef95411228e802f31975cfb7555056 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daniel Golle <daniel@makrotopia.org>
|
|
||||||
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 <pepe.schlehofer@gmail.com>
|
|
||||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|
||||||
[ rebased on top of net-next ]
|
|
||||||
Signed-off-by: Marek Behún <kabel@kernel.org>
|
|
||||||
Link: https://lore.kernel.org/r/20240423090025.29231-1-kabel@kernel.org
|
|
||||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
||||||
---
|
|
||||||
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),
|
|
@ -86,7 +86,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void sfp_fixup_rollball_cc(struct sfp *sfp)
|
static void sfp_fixup_rollball_cc(struct sfp *sfp)
|
||||||
{
|
{
|
||||||
sfp_fixup_rollball(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;
|
mask |= SFP_F_RS1;
|
||||||
|
|
||||||
sfp->module_t_start_up = T_START_UP;
|
sfp->module_t_start_up = T_START_UP;
|
||||||
@ -95,7 +95,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
sfp->state_ignore_mask = 0;
|
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
|
/* We need to check the TX_FAULT state, which is not defined
|
||||||
* while TX_DISABLE is asserted. The earliest we want to do
|
* while TX_DISABLE is asserted. The earliest we want to do
|
||||||
@ -108,7 +108,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SFP_S_WAIT:
|
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.
|
* deasserting.
|
||||||
*/
|
*/
|
||||||
timeout = sfp->module_t_start_up;
|
timeout = sfp->module_t_start_up;
|
||||||
@ -119,7 +119,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
else
|
else
|
||||||
timeout = 1;
|
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);
|
ret = sfp_sm_probe_for_phy(sfp);
|
||||||
if (ret == -ENODEV) {
|
if (ret == -ENODEV) {
|
||||||
if (--sfp->sm_phy_retries) {
|
if (--sfp->sm_phy_retries) {
|
||||||
|
@ -51,7 +51,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void sfp_fixup_halny_gsfp(struct sfp *sfp)
|
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;
|
mask |= SFP_F_RS1;
|
||||||
|
|
||||||
sfp->module_t_start_up = T_START_UP;
|
sfp->module_t_start_up = T_START_UP;
|
||||||
@ -59,7 +59,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
sfp->phy_t_retry = T_PHY_RETRY;
|
sfp->phy_t_retry = T_PHY_RETRY;
|
||||||
|
|
||||||
sfp->state_ignore_mask = 0;
|
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
|
/* We need to check the TX_FAULT state, which is not defined
|
||||||
* while TX_DISABLE is asserted. The earliest we want to do
|
* while TX_DISABLE is asserted. The earliest we want to do
|
||||||
@ -72,7 +72,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SFP_S_WAIT:
|
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.
|
* deasserting.
|
||||||
*/
|
*/
|
||||||
timeout = sfp->module_t_start_up;
|
timeout = sfp->module_t_start_up;
|
||||||
|
@ -0,0 +1,79 @@
|
|||||||
|
From cf3d39cfd29ab7bcbd6aa79d4a2f132817969e3d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
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 <ansuelsmth@gmail.com>
|
||||||
|
---
|
||||||
|
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
|
@ -10,7 +10,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
|
|||||||
|
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/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);
|
struct sfp *sfp = container_of(work, struct sfp, hwmon_probe.work);
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
|
|||||||
/* hwmon interface needs to access 16bit registers in atomic way to
|
/* hwmon interface needs to access 16bit registers in atomic way to
|
||||||
* guarantee coherency of the diagnostic monitoring data. If it is not
|
* guarantee coherency of the diagnostic monitoring data. If it is not
|
||||||
* possible to guarantee coherency because EEPROM is broken in such way
|
* 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
|
|||||||
|
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/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;
|
return ret == ARRAY_SIZE(msgs) ? len : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
|
|||||||
|
|
||||||
sfp->i2c = i2c;
|
sfp->i2c = i2c;
|
||||||
sfp->read = sfp_i2c_read;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
|
|||||||
static void sfp_i2c_mdiobus_destroy(struct sfp *sfp)
|
static void sfp_i2c_mdiobus_destroy(struct sfp *sfp)
|
||||||
{
|
{
|
||||||
mdiobus_unregister(sfp->i2c_mii);
|
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)
|
static int sfp_sm_add_mdio_bus(struct sfp *sfp)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user