diff --git a/target/linux/airoha/patches-6.12/155-v7.2-net-airoha-Rename-get_src_port_id-callback-in-get_sp.patch b/target/linux/airoha/patches-6.12/155-v7.2-net-airoha-Rename-get_src_port_id-callback-in-get_sp.patch new file mode 100644 index 00000000000..425ee19eef9 --- /dev/null +++ b/target/linux/airoha/patches-6.12/155-v7.2-net-airoha-Rename-get_src_port_id-callback-in-get_sp.patch @@ -0,0 +1,75 @@ +From c06a2f2903f6fba0a3088ad05fc5cf61a66e5d89 Mon Sep 17 00:00:00 2001 +From: Lorenzo Bianconi +Date: Tue, 28 Apr 2026 07:23:38 +0200 +Subject: [PATCH] net: airoha: Rename get_src_port_id callback in get_sport + +For code consistency, rename get_src_port_id callback in get_sport. +Please note this patch does not introduce any logical change and it is +just a cosmetic patch. + +Signed-off-by: Lorenzo Bianconi +Link: https://patch.msgid.link/20260428-airoha-get_src_port_id-callback-v1-1-3f765c91c1e8@kernel.org +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/airoha/airoha_eth.c | 10 +++++----- + drivers/net/ethernet/airoha/airoha_eth.h | 2 +- + 2 files changed, 6 insertions(+), 6 deletions(-) + +--- a/drivers/net/ethernet/airoha/airoha_eth.c ++++ b/drivers/net/ethernet/airoha/airoha_eth.c +@@ -1823,7 +1823,7 @@ static int airoha_set_gdm2_loopback(stru + airoha_fe_clear(eth, REG_FE_VIP_PORT_EN, BIT(AIROHA_GDM2_IDX)); + airoha_fe_clear(eth, REG_FE_IFC_PORT_EN, BIT(AIROHA_GDM2_IDX)); + +- src_port = eth->soc->ops.get_src_port_id(port, port->nbq); ++ src_port = eth->soc->ops.get_sport(port, port->nbq); + if (src_port < 0) + return src_port; + +@@ -3199,7 +3199,7 @@ static const char * const en7581_xsi_rst + "xfp-mac", + }; + +-static int airoha_en7581_get_src_port_id(struct airoha_gdm_port *port, int nbq) ++static int airoha_en7581_get_sport(struct airoha_gdm_port *port, int nbq) + { + switch (port->id) { + case AIROHA_GDM3_IDX: +@@ -3252,7 +3252,7 @@ static const char * const an7583_xsi_rst + "xfp-mac", + }; + +-static int airoha_an7583_get_src_port_id(struct airoha_gdm_port *port, int nbq) ++static int airoha_an7583_get_sport(struct airoha_gdm_port *port, int nbq) + { + switch (port->id) { + case AIROHA_GDM3_IDX: +@@ -3300,7 +3300,7 @@ static const struct airoha_eth_soc_data + .num_xsi_rsts = ARRAY_SIZE(en7581_xsi_rsts_names), + .num_ppe = 2, + .ops = { +- .get_src_port_id = airoha_en7581_get_src_port_id, ++ .get_sport = airoha_en7581_get_sport, + .get_vip_port = airoha_en7581_get_vip_port, + }, + }; +@@ -3311,7 +3311,7 @@ static const struct airoha_eth_soc_data + .num_xsi_rsts = ARRAY_SIZE(an7583_xsi_rsts_names), + .num_ppe = 1, + .ops = { +- .get_src_port_id = airoha_an7583_get_src_port_id, ++ .get_sport = airoha_an7583_get_sport, + .get_vip_port = airoha_an7583_get_vip_port, + }, + }; +--- a/drivers/net/ethernet/airoha/airoha_eth.h ++++ b/drivers/net/ethernet/airoha/airoha_eth.h +@@ -578,7 +578,7 @@ struct airoha_eth_soc_data { + int num_xsi_rsts; + int num_ppe; + struct { +- int (*get_src_port_id)(struct airoha_gdm_port *port, int nbq); ++ int (*get_sport)(struct airoha_gdm_port *port, int nbq); + u32 (*get_vip_port)(struct airoha_gdm_port *port, int nbq); + } ops; + }; diff --git a/target/linux/airoha/patches-6.12/156-v7.2-net-airoha-Do-not-return-err-in-ndo_stop-callback.patch b/target/linux/airoha/patches-6.12/156-v7.2-net-airoha-Do-not-return-err-in-ndo_stop-callback.patch new file mode 100644 index 00000000000..a111990b22c --- /dev/null +++ b/target/linux/airoha/patches-6.12/156-v7.2-net-airoha-Do-not-return-err-in-ndo_stop-callback.patch @@ -0,0 +1,36 @@ +From 4ca01292ea2f2363660610a65ba0285d7c3309ed Mon Sep 17 00:00:00 2001 +From: Lorenzo Bianconi +Date: Tue, 28 Apr 2026 08:53:16 +0200 +Subject: [PATCH] net: airoha: Do not return err in ndo_stop() callback + +Always complete the airoha_dev_stop() routine regardless of the +airoha_set_vip_for_gdm_port() return value, since errors from +ndo_stop() are ignored by the networking stack and the interface is +always considered down after the call. + +Fixes: 23020f049327 ("net: airoha: Introduce ethernet support for EN7581 SoC") +Signed-off-by: Lorenzo Bianconi +Link: https://patch.msgid.link/20260428-airoha-ndo-stop-not-err-v1-1-674506d29a91@kernel.org +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/airoha/airoha_eth.c | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +--- a/drivers/net/ethernet/airoha/airoha_eth.c ++++ b/drivers/net/ethernet/airoha/airoha_eth.c +@@ -1747,13 +1747,10 @@ static int airoha_dev_stop(struct net_de + { + struct airoha_gdm_port *port = netdev_priv(dev); + struct airoha_qdma *qdma = port->qdma; +- int i, err; ++ int i; + + netif_tx_disable(dev); +- err = airoha_set_vip_for_gdm_port(port, false); +- if (err) +- return err; +- ++ airoha_set_vip_for_gdm_port(port, false); + for (i = 0; i < dev->num_tx_queues; i++) + netdev_tx_reset_subqueue(dev, i); + diff --git a/target/linux/airoha/patches-6.12/157-v7.2-net-airoha-Move-entries-to-queue-head-in-case-of-DMA.patch b/target/linux/airoha/patches-6.12/157-v7.2-net-airoha-Move-entries-to-queue-head-in-case-of-DMA.patch new file mode 100644 index 00000000000..45d1a1932be --- /dev/null +++ b/target/linux/airoha/patches-6.12/157-v7.2-net-airoha-Move-entries-to-queue-head-in-case-of-DMA.patch @@ -0,0 +1,38 @@ +From 75df490c9e8457990c8b227650f6491218ce018b Mon Sep 17 00:00:00 2001 +From: Lorenzo Bianconi +Date: Wed, 29 Apr 2026 14:02:31 +0200 +Subject: [PATCH] net: airoha: Move entries to queue head in case of DMA + mapping failure in airoha_dev_xmit() + +In order to respect the original descriptor order and avoid any +potential IOMMU fault or memory corruption, move pending queue entries +to the head of hw queue tx_list if the DMA mapping of current inflight +packet fails in airoha_dev_xmit routine. + +Fixes: 3f47e67dff1f7 ("net: airoha: Add the capability to consume out-of-order DMA tx descriptors") +Signed-off-by: Lorenzo Bianconi +Link: https://patch.msgid.link/20260429-airoha-xmit-unmap-error-path-v2-1-32e43b7c6d25@kernel.org +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/airoha/airoha_eth.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +--- a/drivers/net/ethernet/airoha/airoha_eth.c ++++ b/drivers/net/ethernet/airoha/airoha_eth.c +@@ -2120,14 +2120,12 @@ static netdev_tx_t airoha_dev_xmit(struc + return NETDEV_TX_OK; + + error_unmap: +- while (!list_empty(&tx_list)) { +- e = list_first_entry(&tx_list, struct airoha_queue_entry, +- list); ++ list_for_each_entry(e, &tx_list, list) { + dma_unmap_single(dev->dev.parent, e->dma_addr, e->dma_len, + DMA_TO_DEVICE); + e->dma_addr = 0; +- list_move_tail(&e->list, &q->tx_list); + } ++ list_splice(&tx_list, &q->tx_list); + + spin_unlock_bh(&q->lock); + error: diff --git a/target/linux/airoha/patches-6.12/158-v7.2-net-airoha-configure-QoS-channel-for-HW-accelerated-.patch b/target/linux/airoha/patches-6.12/158-v7.2-net-airoha-configure-QoS-channel-for-HW-accelerated-.patch new file mode 100644 index 00000000000..c9a6192110d --- /dev/null +++ b/target/linux/airoha/patches-6.12/158-v7.2-net-airoha-configure-QoS-channel-for-HW-accelerated-.patch @@ -0,0 +1,44 @@ +From 286efd34d1a1ef5d83f9441b5e59421a26738169 Mon Sep 17 00:00:00 2001 +From: Lorenzo Bianconi +Date: Thu, 30 Apr 2026 10:47:38 +0200 +Subject: [PATCH] net: airoha: configure QoS channel for HW accelerated + flowtable traffic + +As done for the SW path, configure the QoS channel for HW accelerated +traffic according to the user port index when forwarding to a DSA port, +or rely on the GDM port identifier otherwise. This allows HTB shaping +to be applied to HW accelerated traffic. + +Signed-off-by: Lorenzo Bianconi +Link: https://patch.msgid.link/20260430-airoha-ppe-qos-channel-v1-1-5ef9221e85c1@kernel.org +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/airoha/airoha_ppe.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/airoha/airoha_ppe.c ++++ b/drivers/net/ethernet/airoha/airoha_ppe.c +@@ -332,7 +332,7 @@ static int airoha_ppe_foe_entry_prepare( + info.wcid); + } else { + struct airoha_gdm_port *port = netdev_priv(dev); +- u8 pse_port; ++ u8 pse_port, channel; + + if (!airoha_is_valid_gdm_port(eth, port)) + return -EINVAL; +@@ -345,6 +345,14 @@ static int airoha_ppe_foe_entry_prepare( + * loopback + */ + ++ /* For traffic forwarded to DSA devices select QoS ++ * channel according to the DSA user port index, rely ++ * on port id otherwise. ++ */ ++ channel = dsa_port >= 0 ? dsa_port : port->id; ++ channel = channel % AIROHA_NUM_QOS_CHANNELS; ++ qdata |= FIELD_PREP(AIROHA_FOE_CHANNEL, channel); ++ + val |= FIELD_PREP(AIROHA_FOE_IB2_PSE_PORT, pse_port) | + AIROHA_FOE_IB2_PSE_QOS; + /* For downlink traffic consume SRAM memory for hw diff --git a/target/linux/airoha/patches-6.12/159-v7.2-net-airoha-Introduce-airoha_fe_get-airoha_qdma_get-r.patch b/target/linux/airoha/patches-6.12/159-v7.2-net-airoha-Introduce-airoha_fe_get-airoha_qdma_get-r.patch new file mode 100644 index 00000000000..ad5dcc97b99 --- /dev/null +++ b/target/linux/airoha/patches-6.12/159-v7.2-net-airoha-Introduce-airoha_fe_get-airoha_qdma_get-r.patch @@ -0,0 +1,95 @@ +From 98e490930de3af9afa0bbb2d1d79d6d5b5513012 Mon Sep 17 00:00:00 2001 +From: Lorenzo Bianconi +Date: Fri, 1 May 2026 09:49:11 +0200 +Subject: [PATCH] net: airoha: Introduce airoha_fe_get()/airoha_qdma_get() + register read helpers + +Add airoha_fe_get() and airoha_qdma_get() as utility routines for reading +a masked field from a specified register. +This is a non-functional refactor, no logical changes are introduced to +the existing codebase. + +Signed-off-by: Lorenzo Bianconi +Link: https://patch.msgid.link/20260501-airoha_fe_get-airoha_qdma_get-v3-1-126c6f647ccb@kernel.org +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/airoha/airoha_eth.c | 13 ++++--------- + drivers/net/ethernet/airoha/airoha_eth.h | 4 ++++ + drivers/net/ethernet/airoha/airoha_ppe.c | 5 ++--- + 3 files changed, 10 insertions(+), 12 deletions(-) + +--- a/drivers/net/ethernet/airoha/airoha_eth.c ++++ b/drivers/net/ethernet/airoha/airoha_eth.c +@@ -201,15 +201,13 @@ static void airoha_fe_vip_setup(struct a + static u32 airoha_fe_get_pse_queue_rsv_pages(struct airoha_eth *eth, + u32 port, u32 queue) + { +- u32 val; +- + airoha_fe_rmw(eth, REG_FE_PSE_QUEUE_CFG_WR, + PSE_CFG_PORT_ID_MASK | PSE_CFG_QUEUE_ID_MASK, + FIELD_PREP(PSE_CFG_PORT_ID_MASK, port) | + FIELD_PREP(PSE_CFG_QUEUE_ID_MASK, queue)); +- val = airoha_fe_rr(eth, REG_FE_PSE_QUEUE_CFG_VAL); + +- return FIELD_GET(PSE_CFG_OQ_RSV_MASK, val); ++ return airoha_fe_get(eth, REG_FE_PSE_QUEUE_CFG_VAL, ++ PSE_CFG_OQ_RSV_MASK); + } + + static void airoha_fe_set_pse_queue_rsv_pages(struct airoha_eth *eth, +@@ -227,9 +225,7 @@ static void airoha_fe_set_pse_queue_rsv_ + + static u32 airoha_fe_get_pse_all_rsv(struct airoha_eth *eth) + { +- u32 val = airoha_fe_rr(eth, REG_FE_PSE_BUF_SET); +- +- return FIELD_GET(PSE_ALLRSV_MASK, val); ++ return airoha_fe_get(eth, REG_FE_PSE_BUF_SET, PSE_ALLRSV_MASK); + } + + static int airoha_fe_set_pse_oq_rsv(struct airoha_eth *eth, +@@ -247,8 +243,7 @@ static int airoha_fe_set_pse_oq_rsv(stru + FIELD_PREP(PSE_ALLRSV_MASK, all_rsv)); + + /* modify hthd */ +- tmp = airoha_fe_rr(eth, PSE_FQ_CFG); +- fq_limit = FIELD_GET(PSE_FQ_LIMIT_MASK, tmp); ++ fq_limit = airoha_fe_get(eth, PSE_FQ_CFG, PSE_FQ_LIMIT_MASK); + tmp = fq_limit - all_rsv - 0x20; + airoha_fe_rmw(eth, REG_PSE_SHARE_USED_THD, + PSE_SHARE_USED_HTHD_MASK, +--- a/drivers/net/ethernet/airoha/airoha_eth.h ++++ b/drivers/net/ethernet/airoha/airoha_eth.h +@@ -619,6 +619,8 @@ u32 airoha_rmw(void __iomem *base, u32 o + airoha_rmw((eth)->fe_regs, (offset), 0, (val)) + #define airoha_fe_clear(eth, offset, val) \ + airoha_rmw((eth)->fe_regs, (offset), (val), 0) ++#define airoha_fe_get(eth, offset, mask) \ ++ FIELD_GET((mask), airoha_fe_rr((eth), (offset))) + + #define airoha_qdma_rr(qdma, offset) \ + airoha_rr((qdma)->regs, (offset)) +@@ -630,6 +632,8 @@ u32 airoha_rmw(void __iomem *base, u32 o + airoha_rmw((qdma)->regs, (offset), 0, (val)) + #define airoha_qdma_clear(qdma, offset, val) \ + airoha_rmw((qdma)->regs, (offset), (val), 0) ++#define airoha_qdma_get(qdma, offset, mask) \ ++ FIELD_GET((mask), airoha_qdma_rr((qdma), (offset))) + + static inline u16 airoha_qdma_get_txq(struct airoha_qdma *qdma, u16 qid) + { +--- a/drivers/net/ethernet/airoha/airoha_ppe.c ++++ b/drivers/net/ethernet/airoha/airoha_ppe.c +@@ -80,9 +80,8 @@ bool airoha_ppe_is_enabled(struct airoha + + static u32 airoha_ppe_get_timestamp(struct airoha_ppe *ppe) + { +- u16 timestamp = airoha_fe_rr(ppe->eth, REG_FE_FOE_TS); +- +- return FIELD_GET(AIROHA_FOE_IB1_BIND_TIMESTAMP, timestamp); ++ return airoha_fe_get(ppe->eth, REG_FE_FOE_TS, ++ AIROHA_FOE_IB1_BIND_TIMESTAMP); + } + + void airoha_ppe_set_cpu_port(struct airoha_gdm_port *port, u8 ppe_id, u8 fport) diff --git a/target/linux/airoha/patches-6.12/160-v7.2-net-airoha-Reserve-RX-headroom-to-avoid-skb-realloca.patch b/target/linux/airoha/patches-6.12/160-v7.2-net-airoha-Reserve-RX-headroom-to-avoid-skb-realloca.patch new file mode 100644 index 00000000000..06d64438515 --- /dev/null +++ b/target/linux/airoha/patches-6.12/160-v7.2-net-airoha-Reserve-RX-headroom-to-avoid-skb-realloca.patch @@ -0,0 +1,73 @@ +From bbfb1983944f2eaa8ee192e0f7b59ecc0fda9981 Mon Sep 17 00:00:00 2001 +From: Lorenzo Bianconi +Date: Wed, 13 May 2026 17:03:59 +0200 +Subject: [PATCH] net: airoha: Reserve RX headroom to avoid skb reallocation + +Reserve NET_SKB_PAD + NET_IP_ALIGN bytes of headroom for received packets +to avoid skb head reallocation when pushing protocol headers into the skb. + +Tested-by: Xuegang Lu +Signed-off-by: Lorenzo Bianconi +Link: https://patch.msgid.link/20260513-airoha-rx-headroom-v1-1-bd87798e422d@kernel.org +Signed-off-by: Jakub Kicinski +--- + drivers/net/ethernet/airoha/airoha_eth.c | 14 ++++++++------ + drivers/net/ethernet/airoha/airoha_eth.h | 2 ++ + 2 files changed, 10 insertions(+), 6 deletions(-) + +--- a/drivers/net/ethernet/airoha/airoha_eth.c ++++ b/drivers/net/ethernet/airoha/airoha_eth.c +@@ -543,9 +543,10 @@ static int airoha_qdma_fill_rx_queue(str + q->queued++; + nframes++; + ++ offset += AIROHA_RX_HEADROOM; + e->buf = page_address(page) + offset; + e->dma_addr = page_pool_get_dma_addr(page) + offset; +- e->dma_len = SKB_WITH_OVERHEAD(q->buf_size); ++ e->dma_len = SKB_WITH_OVERHEAD(AIROHA_RX_LEN(q->buf_size)); + + val = FIELD_PREP(QDMA_DESC_LEN_MASK, e->dma_len); + WRITE_ONCE(desc->ctrl, cpu_to_le32(val)); +@@ -611,13 +612,12 @@ static int airoha_qdma_rx_process(struct + q->tail = (q->tail + 1) % q->ndesc; + q->queued--; + +- dma_sync_single_for_cpu(eth->dev, e->dma_addr, +- SKB_WITH_OVERHEAD(q->buf_size), dir); ++ dma_sync_single_for_cpu(eth->dev, e->dma_addr, e->dma_len, ++ dir); + + page = virt_to_head_page(e->buf); + len = FIELD_GET(QDMA_DESC_LEN_MASK, desc_ctrl); +- data_len = q->skb ? q->buf_size +- : SKB_WITH_OVERHEAD(q->buf_size); ++ data_len = q->skb ? AIROHA_RX_LEN(q->buf_size) : e->dma_len; + if (!len || data_len < len) + goto free_frag; + +@@ -627,10 +627,12 @@ static int airoha_qdma_rx_process(struct + + port = eth->ports[p]; + if (!q->skb) { /* first buffer */ +- q->skb = napi_build_skb(e->buf, q->buf_size); ++ q->skb = napi_build_skb(e->buf - AIROHA_RX_HEADROOM, ++ q->buf_size); + if (!q->skb) + goto free_frag; + ++ skb_reserve(q->skb, AIROHA_RX_HEADROOM); + __skb_put(q->skb, len); + skb_mark_for_recycle(q->skb); + q->skb->dev = port->dev; +--- a/drivers/net/ethernet/airoha/airoha_eth.h ++++ b/drivers/net/ethernet/airoha/airoha_eth.h +@@ -32,6 +32,8 @@ + #define AIROHA_FE_MC_MAX_VLAN_TABLE 64 + #define AIROHA_FE_MC_MAX_VLAN_PORT 16 + #define AIROHA_NUM_TX_IRQ 2 ++#define AIROHA_RX_HEADROOM (NET_SKB_PAD + NET_IP_ALIGN) ++#define AIROHA_RX_LEN(_n) ((_n) - AIROHA_RX_HEADROOM) + #define HW_DSCP_NUM 2048 + #define IRQ_QUEUE_LEN(_n) ((_n) ? 1024 : 2048) + #define TX_DSCP_NUM 1024 diff --git a/target/linux/airoha/patches-6.12/310-02-net-airoha-deassert-XSI-line-on-hw-init.patch b/target/linux/airoha/patches-6.12/310-02-net-airoha-deassert-XSI-line-on-hw-init.patch index 2d9ee580d6c..a75e06f944a 100644 --- a/target/linux/airoha/patches-6.12/310-02-net-airoha-deassert-XSI-line-on-hw-init.patch +++ b/target/linux/airoha/patches-6.12/310-02-net-airoha-deassert-XSI-line-on-hw-init.patch @@ -13,7 +13,7 @@ Signed-off-by: Christian Marangi --- a/drivers/net/ethernet/airoha/airoha_eth.c +++ b/drivers/net/ethernet/airoha/airoha_eth.c -@@ -1490,6 +1490,10 @@ static int airoha_hw_init(struct platfor +@@ -1487,6 +1487,10 @@ static int airoha_hw_init(struct platfor if (err) return err; diff --git a/target/linux/airoha/patches-6.12/310-03-net-airoha-add-reference-for-SPORT-GDM4-in-qdma_get_.patch b/target/linux/airoha/patches-6.12/310-03-net-airoha-add-reference-for-SPORT-GDM4-in-qdma_get_.patch index 874b832c427..d5a2ba9d1ae 100644 --- a/target/linux/airoha/patches-6.12/310-03-net-airoha-add-reference-for-SPORT-GDM4-in-qdma_get_.patch +++ b/target/linux/airoha/patches-6.12/310-03-net-airoha-add-reference-for-SPORT-GDM4-in-qdma_get_.patch @@ -16,7 +16,7 @@ Signed-off-by: Christian Marangi --- a/drivers/net/ethernet/airoha/airoha_eth.c +++ b/drivers/net/ethernet/airoha/airoha_eth.c -@@ -578,8 +578,11 @@ static int airoha_qdma_get_gdm_port(stru +@@ -574,8 +574,11 @@ static int airoha_qdma_get_gdm_port(stru sport = FIELD_GET(QDMA_ETH_RXMSG_SPORT_MASK, msg1); switch (sport) { diff --git a/target/linux/airoha/patches-6.12/310-06-net-airoha-add-initial-fixup-for-GDM3-4-port-support.patch b/target/linux/airoha/patches-6.12/310-06-net-airoha-add-initial-fixup-for-GDM3-4-port-support.patch index 7dcdd745afd..cd774e11eac 100644 --- a/target/linux/airoha/patches-6.12/310-06-net-airoha-add-initial-fixup-for-GDM3-4-port-support.patch +++ b/target/linux/airoha/patches-6.12/310-06-net-airoha-add-initial-fixup-for-GDM3-4-port-support.patch @@ -15,7 +15,7 @@ Signed-off-by: Christian Marangi --- a/drivers/net/ethernet/airoha/airoha_eth.c +++ b/drivers/net/ethernet/airoha/airoha_eth.c -@@ -503,8 +503,10 @@ static int airoha_fe_init(struct airoha_ +@@ -498,8 +498,10 @@ static int airoha_fe_init(struct airoha_ FIELD_PREP(IP_ASSEMBLE_PORT_MASK, 0) | FIELD_PREP(IP_ASSEMBLE_NBQ_MASK, 22)); @@ -28,7 +28,7 @@ Signed-off-by: Christian Marangi airoha_fe_crsn_qsel_init(eth); -@@ -1722,7 +1724,8 @@ static int airoha_dev_open(struct net_de +@@ -1719,7 +1721,8 @@ static int airoha_dev_open(struct net_de if (err) return err; diff --git a/target/linux/airoha/patches-6.12/310-07-airoha-ethernet-drop-xsi-mac-reset.patch b/target/linux/airoha/patches-6.12/310-07-airoha-ethernet-drop-xsi-mac-reset.patch index 1e70f32e9d5..fefca21ca26 100644 --- a/target/linux/airoha/patches-6.12/310-07-airoha-ethernet-drop-xsi-mac-reset.patch +++ b/target/linux/airoha/patches-6.12/310-07-airoha-ethernet-drop-xsi-mac-reset.patch @@ -15,7 +15,7 @@ Signed-off-by: Christian Marangi --- a/drivers/net/ethernet/airoha/airoha_eth.c +++ b/drivers/net/ethernet/airoha/airoha_eth.c -@@ -3202,7 +3202,6 @@ static void airoha_remove(struct platfor +@@ -3194,7 +3194,6 @@ static void airoha_remove(struct platfor } static const char * const en7581_xsi_rsts_names[] = { @@ -23,7 +23,7 @@ Signed-off-by: Christian Marangi "hsi0-mac", "hsi1-mac", "hsi-mac", -@@ -3256,7 +3255,6 @@ static u32 airoha_en7581_get_vip_port(st +@@ -3248,7 +3247,6 @@ static u32 airoha_en7581_get_vip_port(st } static const char * const an7583_xsi_rsts_names[] = { diff --git a/target/linux/airoha/patches-6.12/310-10-net-airoha-add-phylink-support-for-GDM2-3-4.patch b/target/linux/airoha/patches-6.12/310-10-net-airoha-add-phylink-support-for-GDM2-3-4.patch index bc45a4c6548..d686fc739be 100644 --- a/target/linux/airoha/patches-6.12/310-10-net-airoha-add-phylink-support-for-GDM2-3-4.patch +++ b/target/linux/airoha/patches-6.12/310-10-net-airoha-add-phylink-support-for-GDM2-3-4.patch @@ -49,7 +49,7 @@ Signed-off-by: Christian Marangi static void airoha_set_macaddr(struct airoha_gdm_port *port, const u8 *addr) { struct airoha_eth *eth = port->qdma->eth; -@@ -1719,6 +1725,17 @@ static int airoha_dev_open(struct net_de +@@ -1716,6 +1722,17 @@ static int airoha_dev_open(struct net_de struct airoha_qdma *qdma = port->qdma; u32 pse_port = FE_PSE_PORT_PPE1; @@ -67,7 +67,7 @@ Signed-off-by: Christian Marangi netif_tx_start_all_queues(dev); err = airoha_set_vip_for_gdm_port(port, true); if (err) -@@ -1783,6 +1800,11 @@ static int airoha_dev_stop(struct net_de +@@ -1777,6 +1794,11 @@ static int airoha_dev_stop(struct net_de } } @@ -79,7 +79,7 @@ Signed-off-by: Christian Marangi return 0; } -@@ -2922,6 +2944,11 @@ static const struct ethtool_ops airoha_e +@@ -2914,6 +2936,11 @@ static const struct ethtool_ops airoha_e .get_link = ethtool_op_get_link, }; @@ -91,7 +91,7 @@ Signed-off-by: Christian Marangi static int airoha_metadata_dst_alloc(struct airoha_gdm_port *port) { int i; -@@ -2966,6 +2993,124 @@ bool airoha_is_valid_gdm_port(struct air +@@ -2958,6 +2985,124 @@ bool airoha_is_valid_gdm_port(struct air return false; } @@ -216,7 +216,7 @@ Signed-off-by: Christian Marangi static int airoha_alloc_gdm_port(struct airoha_eth *eth, struct device_node *np) { -@@ -3039,6 +3184,12 @@ static int airoha_alloc_gdm_port(struct +@@ -3031,6 +3176,12 @@ static int airoha_alloc_gdm_port(struct port->nbq = id == AIROHA_GDM3_IDX && airoha_is_7581(eth) ? 4 : 0; eth->ports[p] = port; @@ -229,7 +229,7 @@ Signed-off-by: Christian Marangi return airoha_metadata_dst_alloc(port); } -@@ -3166,8 +3317,11 @@ error_napi_stop: +@@ -3158,8 +3309,11 @@ error_napi_stop: if (!port) continue; @@ -242,7 +242,7 @@ Signed-off-by: Christian Marangi airoha_metadata_dst_free(port); } airoha_hw_cleanup(eth); -@@ -3192,6 +3346,8 @@ static void airoha_remove(struct platfor +@@ -3184,6 +3338,8 @@ static void airoha_remove(struct platfor if (!port) continue; @@ -253,7 +253,7 @@ Signed-off-by: Christian Marangi } --- a/drivers/net/ethernet/airoha/airoha_eth.h +++ b/drivers/net/ethernet/airoha/airoha_eth.h -@@ -540,6 +540,9 @@ struct airoha_gdm_port { +@@ -542,6 +542,9 @@ struct airoha_gdm_port { int id; int nbq; diff --git a/target/linux/airoha/patches-6.12/604-02-net-ethernet-airoha-define-sport-value-for-GDM3.patch b/target/linux/airoha/patches-6.12/604-02-net-ethernet-airoha-define-sport-value-for-GDM3.patch index 5c354ad2927..b78cc3455fe 100644 --- a/target/linux/airoha/patches-6.12/604-02-net-ethernet-airoha-define-sport-value-for-GDM3.patch +++ b/target/linux/airoha/patches-6.12/604-02-net-ethernet-airoha-define-sport-value-for-GDM3.patch @@ -14,7 +14,7 @@ Signed-off-by: Christian Marangi --- a/drivers/net/ethernet/airoha/airoha_eth.c +++ b/drivers/net/ethernet/airoha/airoha_eth.c -@@ -589,6 +589,9 @@ static int airoha_qdma_get_gdm_port(stru +@@ -585,6 +585,9 @@ static int airoha_qdma_get_gdm_port(stru case 0x18: port = 3; /* GDM4 */ break; diff --git a/target/linux/airoha/patches-6.12/606-net-airoha-disable-external-phy-code-if-PCS_AIROHA-i.patch b/target/linux/airoha/patches-6.12/606-net-airoha-disable-external-phy-code-if-PCS_AIROHA-i.patch index 4d2c003f06b..c55abcbd34f 100644 --- a/target/linux/airoha/patches-6.12/606-net-airoha-disable-external-phy-code-if-PCS_AIROHA-i.patch +++ b/target/linux/airoha/patches-6.12/606-net-airoha-disable-external-phy-code-if-PCS_AIROHA-i.patch @@ -28,7 +28,7 @@ Signed-off-by: Mikhail Kshevetskiy static void airoha_set_macaddr(struct airoha_gdm_port *port, const u8 *addr) { -@@ -1728,6 +1730,7 @@ static int airoha_dev_open(struct net_de +@@ -1725,6 +1727,7 @@ static int airoha_dev_open(struct net_de struct airoha_qdma *qdma = port->qdma; u32 pse_port = FE_PSE_PORT_PPE1; @@ -36,7 +36,7 @@ Signed-off-by: Mikhail Kshevetskiy if (airhoa_is_phy_external(port)) { err = phylink_of_phy_connect(port->phylink, dev->dev.of_node, 0); if (err) { -@@ -1738,6 +1741,7 @@ static int airoha_dev_open(struct net_de +@@ -1735,6 +1738,7 @@ static int airoha_dev_open(struct net_de phylink_start(port->phylink); } @@ -44,7 +44,7 @@ Signed-off-by: Mikhail Kshevetskiy netif_tx_start_all_queues(dev); err = airoha_set_vip_for_gdm_port(port, true); -@@ -1803,10 +1807,12 @@ static int airoha_dev_stop(struct net_de +@@ -1797,10 +1801,12 @@ static int airoha_dev_stop(struct net_de } } @@ -57,7 +57,7 @@ Signed-off-by: Mikhail Kshevetskiy return 0; } -@@ -2996,6 +3002,7 @@ bool airoha_is_valid_gdm_port(struct air +@@ -2988,6 +2994,7 @@ bool airoha_is_valid_gdm_port(struct air return false; } @@ -65,7 +65,7 @@ Signed-off-by: Mikhail Kshevetskiy static void airoha_mac_link_up(struct phylink_config *config, struct phy_device *phy, unsigned int mode, phy_interface_t interface, int speed, int duplex, bool tx_pause, bool rx_pause) -@@ -3113,6 +3120,7 @@ out: +@@ -3105,6 +3112,7 @@ out: return err; } @@ -73,7 +73,7 @@ Signed-off-by: Mikhail Kshevetskiy static int airoha_alloc_gdm_port(struct airoha_eth *eth, struct device_node *np) -@@ -3187,11 +3195,13 @@ static int airoha_alloc_gdm_port(struct +@@ -3179,11 +3187,13 @@ static int airoha_alloc_gdm_port(struct port->nbq = id == AIROHA_GDM3_IDX && airoha_is_7581(eth) ? 4 : 0; eth->ports[p] = port; @@ -87,7 +87,7 @@ Signed-off-by: Mikhail Kshevetskiy return airoha_metadata_dst_alloc(port); } -@@ -3321,8 +3331,10 @@ error_napi_stop: +@@ -3313,8 +3323,10 @@ error_napi_stop: continue; if (port->dev->reg_state == NETREG_REGISTERED) { @@ -98,7 +98,7 @@ Signed-off-by: Mikhail Kshevetskiy unregister_netdev(port->dev); } airoha_metadata_dst_free(port); -@@ -3349,8 +3361,10 @@ static void airoha_remove(struct platfor +@@ -3341,8 +3353,10 @@ static void airoha_remove(struct platfor if (!port) continue; @@ -111,7 +111,7 @@ Signed-off-by: Mikhail Kshevetskiy } --- a/drivers/net/ethernet/airoha/airoha_eth.h +++ b/drivers/net/ethernet/airoha/airoha_eth.h -@@ -540,8 +540,10 @@ struct airoha_gdm_port { +@@ -542,8 +542,10 @@ struct airoha_gdm_port { int id; int nbq;