mirror of
https://github.com/openwrt/openwrt.git
synced 2026-06-10 11:48:56 +04:00
kernel: bump 6.12 to 6.12.91
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.91
Remove upstreamed patches:
- airoha/patches-6.12/017-v6.13-net-airoha-Implement-BQL-support.patch[1]
- airoha/patches-6.12/138-v7.1-net-airoha-Add-missing-RX_CPU_IDX-configuration-in-a.patch[2]
- airoha/patches-6.12/149-v7.1-net-airoha-Move-ndesc-initialization-at-end-of-airoh.patch[3]
- generic/backport-6.12/940-v7.1-net-dsa-realtek-rtl8365mb-fix-mode-mask-calculation.patch[5]
Manually rebased patches:
- airoha/patches-6.12/048-01-v6.15-net-airoha-Move-airoha_eth-driver-in-a-dedicated-fol.patch[1]
- ath79/patches-6.12/800-leds-add-reset-controller-based-driver.patch[4]
- bcm27xx/patches-6.12/950-0122-bcmgenet-Better-coalescing-parameter-defaults.patch[6]
We also backported four patches to fix perf tool regression:
- generic/backport-6.12/216-01-revert-perf-cgroup-update-metric-leader-in-evlist__e.patch
- generic/backport-6.12/216-02-revert-perf-tool_pmu-fix-aggregation-on-duration_tim.patch
- generic/backport-6.12/216-03-revert-perf-python-add-parse_events-function.patch
- generic/backport-6.12/216-04-revert-perf-tool_pmu-factor-tool-events-into-their-o.patch
All other patches are automatically refreshed.
[1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=ca24fcac1daaa5e8a667981d81986a3eb4b9fb04
[2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=f00037a99bc2332ef59dc85298b98b20af165904
[3] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=d36be272adda7f313e39dd118086955d993bf6a7
[4] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=07d3611389ba7d78b80ea360a42ce32ab2521fbc
[5] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=3354d6c62fd4baa7b32cbd80cc5a8aa3f2bd0656
[6] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=b84351dcc359667bc952131c1424b692ec83dce2
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/23444
(cherry picked from commit 8f638f9366)
Link: https://github.com/openwrt/openwrt/pull/23538
[Adapted to patches in 25.12]
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
committed by
Hauke Mehrtens
parent
0eaee44870
commit
9cf794cff1
@@ -1,42 +0,0 @@
|
||||
From 1d304174106c93ce05f6088813ad7203b3eb381a Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Sat, 12 Oct 2024 11:01:11 +0200
|
||||
Subject: [PATCH] net: airoha: Implement BQL support
|
||||
|
||||
Introduce BQL support in the airoha_eth driver reporting to the kernel
|
||||
info about tx hw DMA queues in order to avoid bufferbloat and keep the
|
||||
latency small.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20241012-en7581-bql-v2-1-4deb4efdb60b@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/airoha_eth.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
@@ -1729,9 +1729,11 @@ static int airoha_qdma_tx_napi_poll(stru
|
||||
WRITE_ONCE(desc->msg1, 0);
|
||||
|
||||
if (skb) {
|
||||
+ u16 queue = skb_get_queue_mapping(skb);
|
||||
struct netdev_queue *txq;
|
||||
|
||||
- txq = netdev_get_tx_queue(skb->dev, qid);
|
||||
+ txq = netdev_get_tx_queue(skb->dev, queue);
|
||||
+ netdev_tx_completed_queue(txq, 1, skb->len);
|
||||
if (netif_tx_queue_stopped(txq) &&
|
||||
q->ndesc - q->queued >= q->free_thr)
|
||||
netif_tx_wake_queue(txq);
|
||||
@@ -2510,7 +2512,9 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
q->queued += i;
|
||||
|
||||
skb_tx_timestamp(skb);
|
||||
- if (!netdev_xmit_more())
|
||||
+ netdev_tx_sent_queue(txq, skb->len);
|
||||
+
|
||||
+ if (netif_xmit_stopped(txq) || !netdev_xmit_more())
|
||||
airoha_qdma_rmw(qdma, REG_TX_CPU_IDX(qid),
|
||||
TX_RING_CPU_IDX_MASK,
|
||||
FIELD_PREP(TX_RING_CPU_IDX_MASK, q->head));
|
||||
+3
-3
@@ -17,7 +17,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
@@ -1685,8 +1685,12 @@ static int airoha_qdma_tx_napi_poll(stru
|
||||
@@ -1690,8 +1690,12 @@ static int airoha_qdma_tx_napi_poll(stru
|
||||
irq_queued = FIELD_GET(IRQ_ENTRY_LEN_MASK, status);
|
||||
|
||||
while (irq_queued > 0 && done < budget) {
|
||||
@@ -31,7 +31,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (val == 0xff)
|
||||
break;
|
||||
@@ -1696,9 +1700,7 @@ static int airoha_qdma_tx_napi_poll(stru
|
||||
@@ -1701,9 +1705,7 @@ static int airoha_qdma_tx_napi_poll(stru
|
||||
irq_queued--;
|
||||
done++;
|
||||
|
||||
@@ -41,7 +41,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (qid >= ARRAY_SIZE(qdma->q_tx))
|
||||
continue;
|
||||
|
||||
@@ -1706,46 +1708,53 @@ static int airoha_qdma_tx_napi_poll(stru
|
||||
@@ -1711,46 +1713,53 @@ static int airoha_qdma_tx_napi_poll(stru
|
||||
if (!q->ndesc)
|
||||
continue;
|
||||
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
@@ -1805,6 +1805,10 @@ static int airoha_qdma_init_tx_queue(str
|
||||
@@ -1810,6 +1810,10 @@ static int airoha_qdma_init_tx_queue(str
|
||||
WRITE_ONCE(q->desc[i].ctrl, cpu_to_le32(val));
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -29,7 +29,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
#define AIROHA_NUM_TX_RING 32
|
||||
#define AIROHA_NUM_RX_RING 32
|
||||
#define AIROHA_FE_MC_MAX_VLAN_TABLE 64
|
||||
@@ -2437,21 +2439,44 @@ static void airoha_dev_get_stats64(struc
|
||||
@@ -2442,21 +2444,44 @@ static void airoha_dev_get_stats64(struc
|
||||
} while (u64_stats_fetch_retry(&port->stats.syncp, start));
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (skb->ip_summed == CHECKSUM_PARTIAL)
|
||||
msg0 |= FIELD_PREP(QDMA_ETH_TXMSG_TCO_MASK, 1) |
|
||||
FIELD_PREP(QDMA_ETH_TXMSG_UCO_MASK, 1) |
|
||||
@@ -2625,6 +2650,7 @@ static const struct net_device_ops airoh
|
||||
@@ -2630,6 +2655,7 @@ static const struct net_device_ops airoh
|
||||
.ndo_init = airoha_dev_init,
|
||||
.ndo_open = airoha_dev_open,
|
||||
.ndo_stop = airoha_dev_stop,
|
||||
|
||||
+5
-5
@@ -100,7 +100,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
};
|
||||
|
||||
struct airoha_eth {
|
||||
@@ -1977,6 +2018,27 @@ static void airoha_qdma_init_qos(struct
|
||||
@@ -1982,6 +2023,27 @@ static void airoha_qdma_init_qos(struct
|
||||
FIELD_PREP(SLA_SLOW_TICK_RATIO_MASK, 40));
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static int airoha_qdma_hw_init(struct airoha_qdma *qdma)
|
||||
{
|
||||
int i;
|
||||
@@ -2027,6 +2089,7 @@ static int airoha_qdma_hw_init(struct ai
|
||||
@@ -2032,6 +2094,7 @@ static int airoha_qdma_hw_init(struct ai
|
||||
|
||||
airoha_qdma_set(qdma, REG_TXQ_CNGST_CFG,
|
||||
TXQ_CNGST_DROP_EN | TXQ_CNGST_DEI_DROP_EN);
|
||||
@@ -136,7 +136,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -2646,6 +2709,135 @@ airoha_ethtool_get_rmon_stats(struct net
|
||||
@@ -2651,6 +2714,135 @@ airoha_ethtool_get_rmon_stats(struct net
|
||||
} while (u64_stats_fetch_retry(&port->stats.syncp, start));
|
||||
}
|
||||
|
||||
@@ -272,7 +272,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static const struct net_device_ops airoha_netdev_ops = {
|
||||
.ndo_init = airoha_dev_init,
|
||||
.ndo_open = airoha_dev_open,
|
||||
@@ -2654,6 +2846,7 @@ static const struct net_device_ops airoh
|
||||
@@ -2659,6 +2851,7 @@ static const struct net_device_ops airoh
|
||||
.ndo_start_xmit = airoha_dev_xmit,
|
||||
.ndo_get_stats64 = airoha_dev_get_stats64,
|
||||
.ndo_set_mac_address = airoha_dev_set_macaddr,
|
||||
@@ -280,7 +280,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
};
|
||||
|
||||
static const struct ethtool_ops airoha_ethtool_ops = {
|
||||
@@ -2703,7 +2896,8 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2708,7 +2901,8 @@ static int airoha_alloc_gdm_port(struct
|
||||
dev->watchdog_timeo = 5 * HZ;
|
||||
dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
|
||||
NETIF_F_TSO6 | NETIF_F_IPV6_CSUM |
|
||||
|
||||
+4
-4
@@ -94,7 +94,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
/* qos stats counters */
|
||||
u64 cpu_tx_packets;
|
||||
u64 fwd_tx_packets;
|
||||
@@ -2825,6 +2866,243 @@ static int airoha_tc_setup_qdisc_ets(str
|
||||
@@ -2830,6 +2871,243 @@ static int airoha_tc_setup_qdisc_ets(str
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,7 +338,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static int airoha_dev_tc_setup(struct net_device *dev, enum tc_setup_type type,
|
||||
void *type_data)
|
||||
{
|
||||
@@ -2833,6 +3111,8 @@ static int airoha_dev_tc_setup(struct ne
|
||||
@@ -2838,6 +3116,8 @@ static int airoha_dev_tc_setup(struct ne
|
||||
switch (type) {
|
||||
case TC_SETUP_QDISC_ETS:
|
||||
return airoha_tc_setup_qdisc_ets(port, type_data);
|
||||
@@ -347,7 +347,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
@@ -2883,7 +3163,8 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2888,7 +3168,8 @@ static int airoha_alloc_gdm_port(struct
|
||||
}
|
||||
|
||||
dev = devm_alloc_etherdev_mqs(eth->dev, sizeof(*port),
|
||||
@@ -357,7 +357,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (!dev) {
|
||||
dev_err(eth->dev, "alloc_etherdev failed\n");
|
||||
return -ENOMEM;
|
||||
@@ -2903,6 +3184,11 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2908,6 +3189,11 @@ static int airoha_alloc_gdm_port(struct
|
||||
dev->irq = qdma->irq;
|
||||
SET_NETDEV_DEV(dev, eth->dev);
|
||||
|
||||
|
||||
+2
-2
@@ -20,7 +20,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
@@ -2801,7 +2801,7 @@ static int airoha_qdma_set_tx_ets_sched(
|
||||
@@ -2806,7 +2806,7 @@ static int airoha_qdma_set_tx_ets_sched(
|
||||
struct tc_ets_qopt_offload_replace_params *p = &opt->replace_params;
|
||||
enum tx_sched_mode mode = TC_SCH_SP;
|
||||
u16 w[AIROHA_NUM_QOS_QUEUES] = {};
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (p->bands > AIROHA_NUM_QOS_QUEUES)
|
||||
return -EINVAL;
|
||||
@@ -2815,7 +2815,20 @@ static int airoha_qdma_set_tx_ets_sched(
|
||||
@@ -2820,7 +2820,20 @@ static int airoha_qdma_set_tx_ets_sched(
|
||||
if (nstrict == AIROHA_NUM_QOS_QUEUES - 1)
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
+3
-3
@@ -24,7 +24,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
@@ -2564,11 +2564,10 @@ static u16 airoha_dev_select_queue(struc
|
||||
@@ -2569,11 +2569,10 @@ static u16 airoha_dev_select_queue(struc
|
||||
static netdev_tx_t airoha_dev_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
{
|
||||
@@ -37,7 +37,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct netdev_queue *txq;
|
||||
struct airoha_queue *q;
|
||||
void *data = skb->data;
|
||||
@@ -2591,8 +2590,9 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -2596,8 +2595,9 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
if (skb_cow_head(skb, 0))
|
||||
goto error;
|
||||
|
||||
@@ -49,7 +49,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
tcp_hdr(skb)->check = (__force __sum16)csum;
|
||||
msg0 |= FIELD_PREP(QDMA_ETH_TXMSG_TSO_MASK, 1);
|
||||
@@ -2621,7 +2621,7 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -2626,7 +2626,7 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
for (i = 0; i < nr_frags; i++) {
|
||||
struct airoha_qdma_desc *desc = &q->desc[index];
|
||||
struct airoha_queue_entry *e = &q->entry[index];
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ Signed-off-by: Andrew Lunn <andrew@lunn.ch>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
@@ -2484,7 +2484,7 @@ static int airoha_dev_stop(struct net_de
|
||||
@@ -2489,7 +2489,7 @@ static int airoha_dev_stop(struct net_de
|
||||
{
|
||||
struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
struct airoha_qdma *qdma = port->qdma;
|
||||
@@ -25,7 +25,7 @@ Signed-off-by: Andrew Lunn <andrew@lunn.ch>
|
||||
|
||||
netif_tx_disable(dev);
|
||||
err = airoha_set_gdm_ports(qdma->eth, false);
|
||||
@@ -2495,6 +2495,14 @@ static int airoha_dev_stop(struct net_de
|
||||
@@ -2500,6 +2500,14 @@ static int airoha_dev_stop(struct net_de
|
||||
GLOBAL_CFG_TX_DMA_EN_MASK |
|
||||
GLOBAL_CFG_RX_DMA_EN_MASK);
|
||||
|
||||
|
||||
+26
-16
@@ -101,7 +101,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
-obj-$(CONFIG_NET_AIROHA) += airoha_eth.o
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -0,0 +1,3373 @@
|
||||
@@ -0,0 +1,3378 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+/*
|
||||
+ * Copyright (c) 2024 AIROHA Inc
|
||||
@@ -1763,14 +1763,18 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
+ dma_addr_t dma_addr;
|
||||
+
|
||||
+ q->buf_size = PAGE_SIZE / 2;
|
||||
+ q->ndesc = ndesc;
|
||||
+ q->qdma = qdma;
|
||||
+
|
||||
+ q->entry = devm_kzalloc(eth->dev, q->ndesc * sizeof(*q->entry),
|
||||
+ q->entry = devm_kzalloc(eth->dev, ndesc * sizeof(*q->entry),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!q->entry)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ q->desc = dmam_alloc_coherent(eth->dev, ndesc * sizeof(*q->desc),
|
||||
+ &dma_addr, GFP_KERNEL);
|
||||
+ if (!q->desc)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ q->page_pool = page_pool_create(&pp_params);
|
||||
+ if (IS_ERR(q->page_pool)) {
|
||||
+ int err = PTR_ERR(q->page_pool);
|
||||
@@ -1779,11 +1783,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ q->desc = dmam_alloc_coherent(eth->dev, q->ndesc * sizeof(*q->desc),
|
||||
+ &dma_addr, GFP_KERNEL);
|
||||
+ if (!q->desc)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ q->ndesc = ndesc;
|
||||
+ netif_napi_add(eth->napi_dev, &q->napi, airoha_qdma_rx_napi_poll);
|
||||
+
|
||||
+ airoha_qdma_wr(qdma, REG_RX_RING_BASE(qid), dma_addr);
|
||||
@@ -1830,6 +1830,11 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
+ }
|
||||
+
|
||||
+ q->head = q->tail;
|
||||
+ /* Set RX_DMA_IDX to RX_CPU_IDX to notify the hw the QDMA RX ring is
|
||||
+ * empty.
|
||||
+ */
|
||||
+ airoha_qdma_rmw(qdma, REG_RX_CPU_IDX(qid), RX_RING_CPU_IDX_MASK,
|
||||
+ FIELD_PREP(RX_RING_CPU_IDX_MASK, q->head));
|
||||
+ airoha_qdma_rmw(qdma, REG_RX_DMA_IDX(qid), RX_RING_DMA_IDX_MASK,
|
||||
+ FIELD_PREP(RX_RING_DMA_IDX_MASK, q->tail));
|
||||
+}
|
||||
@@ -3477,7 +3482,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
+MODULE_DESCRIPTION("Ethernet driver for Airoha SoC");
|
||||
--- a/drivers/net/ethernet/mediatek/airoha_eth.c
|
||||
+++ /dev/null
|
||||
@@ -1,3373 +0,0 @@
|
||||
@@ -1,3378 +0,0 @@
|
||||
-// SPDX-License-Identifier: GPL-2.0-only
|
||||
-/*
|
||||
- * Copyright (c) 2024 AIROHA Inc
|
||||
@@ -5139,14 +5144,18 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
- dma_addr_t dma_addr;
|
||||
-
|
||||
- q->buf_size = PAGE_SIZE / 2;
|
||||
- q->ndesc = ndesc;
|
||||
- q->qdma = qdma;
|
||||
-
|
||||
- q->entry = devm_kzalloc(eth->dev, q->ndesc * sizeof(*q->entry),
|
||||
- q->entry = devm_kzalloc(eth->dev, ndesc * sizeof(*q->entry),
|
||||
- GFP_KERNEL);
|
||||
- if (!q->entry)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
- q->desc = dmam_alloc_coherent(eth->dev, ndesc * sizeof(*q->desc),
|
||||
- &dma_addr, GFP_KERNEL);
|
||||
- if (!q->desc)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
- q->page_pool = page_pool_create(&pp_params);
|
||||
- if (IS_ERR(q->page_pool)) {
|
||||
- int err = PTR_ERR(q->page_pool);
|
||||
@@ -5155,11 +5164,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
- return err;
|
||||
- }
|
||||
-
|
||||
- q->desc = dmam_alloc_coherent(eth->dev, q->ndesc * sizeof(*q->desc),
|
||||
- &dma_addr, GFP_KERNEL);
|
||||
- if (!q->desc)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
- q->ndesc = ndesc;
|
||||
- netif_napi_add(eth->napi_dev, &q->napi, airoha_qdma_rx_napi_poll);
|
||||
-
|
||||
- airoha_qdma_wr(qdma, REG_RX_RING_BASE(qid), dma_addr);
|
||||
@@ -5206,6 +5211,11 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
- }
|
||||
-
|
||||
- q->head = q->tail;
|
||||
- /* Set RX_DMA_IDX to RX_CPU_IDX to notify the hw the QDMA RX ring is
|
||||
- * empty.
|
||||
- */
|
||||
- airoha_qdma_rmw(qdma, REG_RX_CPU_IDX(qid), RX_RING_CPU_IDX_MASK,
|
||||
- FIELD_PREP(RX_RING_CPU_IDX_MASK, q->head));
|
||||
- airoha_qdma_rmw(qdma, REG_RX_DMA_IDX(qid), RX_RING_DMA_IDX_MASK,
|
||||
- FIELD_PREP(RX_RING_DMA_IDX_MASK, q->tail));
|
||||
-}
|
||||
|
||||
+7
-7
@@ -74,7 +74,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
napi_gro_receive(&q->napi, skb);
|
||||
|
||||
done++;
|
||||
@@ -1652,25 +1671,76 @@ static u16 airoha_dev_select_queue(struc
|
||||
@@ -1657,25 +1676,76 @@ static u16 airoha_dev_select_queue(struc
|
||||
return queue < dev->num_tx_queues ? queue : 0;
|
||||
}
|
||||
|
||||
@@ -155,7 +155,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (skb->ip_summed == CHECKSUM_PARTIAL)
|
||||
msg0 |= FIELD_PREP(QDMA_ETH_TXMSG_TCO_MASK, 1) |
|
||||
FIELD_PREP(QDMA_ETH_TXMSG_UCO_MASK, 1) |
|
||||
@@ -1701,6 +1771,8 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -1706,6 +1776,8 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
spin_lock_bh(&q->lock);
|
||||
|
||||
txq = netdev_get_tx_queue(dev, qid);
|
||||
@@ -164,7 +164,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (q->queued + nr_frags > q->ndesc) {
|
||||
/* not enough space in the queue */
|
||||
netif_tx_stop_queue(txq);
|
||||
@@ -1708,7 +1780,10 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -1713,7 +1785,10 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
return NETDEV_TX_BUSY;
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
for (i = 0; i < nr_frags; i++) {
|
||||
struct airoha_qdma_desc *desc = &q->desc[index];
|
||||
struct airoha_queue_entry *e = &q->entry[index];
|
||||
@@ -2239,6 +2314,37 @@ static const struct ethtool_ops airoha_e
|
||||
@@ -2244,6 +2319,37 @@ static const struct ethtool_ops airoha_e
|
||||
.get_rmon_stats = airoha_ethtool_get_rmon_stats,
|
||||
};
|
||||
|
||||
@@ -213,7 +213,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static int airoha_alloc_gdm_port(struct airoha_eth *eth, struct device_node *np)
|
||||
{
|
||||
const __be32 *id_ptr = of_get_property(np, "reg", NULL);
|
||||
@@ -2311,6 +2417,10 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2316,6 +2422,10 @@ static int airoha_alloc_gdm_port(struct
|
||||
port->id = id;
|
||||
eth->ports[index] = port;
|
||||
|
||||
@@ -224,7 +224,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
return register_netdev(dev);
|
||||
}
|
||||
|
||||
@@ -2403,8 +2513,10 @@ error_hw_cleanup:
|
||||
@@ -2408,8 +2518,10 @@ error_hw_cleanup:
|
||||
for (i = 0; i < ARRAY_SIZE(eth->ports); i++) {
|
||||
struct airoha_gdm_port *port = eth->ports[i];
|
||||
|
||||
@@ -236,7 +236,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
free_netdev(eth->napi_dev);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
@@ -2429,6 +2541,7 @@ static void airoha_remove(struct platfor
|
||||
@@ -2434,6 +2546,7 @@ static void airoha_remove(struct platfor
|
||||
continue;
|
||||
|
||||
unregister_netdev(port->dev);
|
||||
|
||||
+7
-7
@@ -25,7 +25,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1578,6 +1578,7 @@ static int airoha_dev_open(struct net_de
|
||||
@@ -1583,6 +1583,7 @@ static int airoha_dev_open(struct net_de
|
||||
airoha_qdma_set(qdma, REG_QDMA_GLOBAL_CFG,
|
||||
GLOBAL_CFG_TX_DMA_EN_MASK |
|
||||
GLOBAL_CFG_RX_DMA_EN_MASK);
|
||||
@@ -33,7 +33,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1593,16 +1594,20 @@ static int airoha_dev_stop(struct net_de
|
||||
@@ -1598,16 +1599,20 @@ static int airoha_dev_stop(struct net_de
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@@ -62,7 +62,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -2345,13 +2350,14 @@ static void airoha_metadata_dst_free(str
|
||||
@@ -2350,13 +2355,14 @@ static void airoha_metadata_dst_free(str
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
u32 id;
|
||||
|
||||
if (!id_ptr) {
|
||||
@@ -2360,14 +2366,14 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2365,14 +2371,14 @@ static int airoha_alloc_gdm_port(struct
|
||||
}
|
||||
|
||||
id = be32_to_cpup(id_ptr);
|
||||
@@ -96,7 +96,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
dev_err(eth->dev, "duplicate gdm port id: %d\n", id);
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -2415,7 +2421,7 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2420,7 +2426,7 @@ static int airoha_alloc_gdm_port(struct
|
||||
port->qdma = qdma;
|
||||
port->dev = dev;
|
||||
port->id = id;
|
||||
@@ -105,7 +105,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
err = airoha_metadata_dst_alloc(port);
|
||||
if (err)
|
||||
@@ -2487,6 +2493,7 @@ static int airoha_probe(struct platform_
|
||||
@@ -2492,6 +2498,7 @@ static int airoha_probe(struct platform_
|
||||
for (i = 0; i < ARRAY_SIZE(eth->qdma); i++)
|
||||
airoha_qdma_start_napi(ð->qdma[i]);
|
||||
|
||||
@@ -113,7 +113,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
for_each_child_of_node(pdev->dev.of_node, np) {
|
||||
if (!of_device_is_compatible(np, "airoha,eth-mac"))
|
||||
continue;
|
||||
@@ -2494,7 +2501,7 @@ static int airoha_probe(struct platform_
|
||||
@@ -2499,7 +2506,7 @@ static int airoha_probe(struct platform_
|
||||
if (!of_device_is_available(np))
|
||||
continue;
|
||||
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
airoha_fe_rmw(eth, REG_GDM_LEN_CFG(p),
|
||||
GDM_SHORT_LEN_MASK | GDM_LONG_LEN_MASK,
|
||||
FIELD_PREP(GDM_SHORT_LEN_MASK, 60) |
|
||||
@@ -1630,8 +1621,11 @@ static int airoha_dev_set_macaddr(struct
|
||||
@@ -1635,8 +1626,11 @@ static int airoha_dev_set_macaddr(struct
|
||||
static int airoha_dev_init(struct net_device *dev)
|
||||
{
|
||||
struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
|
||||
+2
-2
@@ -83,7 +83,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static void airoha_fe_maccr_init(struct airoha_eth *eth)
|
||||
{
|
||||
int p;
|
||||
@@ -1555,7 +1528,7 @@ static int airoha_dev_open(struct net_de
|
||||
@@ -1560,7 +1533,7 @@ static int airoha_dev_open(struct net_de
|
||||
int err;
|
||||
|
||||
netif_tx_start_all_queues(dev);
|
||||
@@ -92,7 +92,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@@ -1581,7 +1554,7 @@ static int airoha_dev_stop(struct net_de
|
||||
@@ -1586,7 +1559,7 @@ static int airoha_dev_stop(struct net_de
|
||||
int i, err;
|
||||
|
||||
netif_tx_disable(dev);
|
||||
|
||||
+4
-4
@@ -76,7 +76,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
napi_gro_receive(&q->napi, skb);
|
||||
|
||||
done++;
|
||||
@@ -1317,6 +1326,10 @@ static int airoha_hw_init(struct platfor
|
||||
@@ -1322,6 +1331,10 @@ static int airoha_hw_init(struct platfor
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
set_bit(DEV_STATE_INITIALIZED, ð->state);
|
||||
|
||||
return 0;
|
||||
@@ -2181,6 +2194,47 @@ static int airoha_tc_htb_alloc_leaf_queu
|
||||
@@ -2186,6 +2199,47 @@ static int airoha_tc_htb_alloc_leaf_queu
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static void airoha_tc_remove_htb_queue(struct airoha_gdm_port *port, int queue)
|
||||
{
|
||||
struct net_device *dev = port->dev;
|
||||
@@ -2264,6 +2318,9 @@ static int airoha_dev_tc_setup(struct ne
|
||||
@@ -2269,6 +2323,9 @@ static int airoha_dev_tc_setup(struct ne
|
||||
return airoha_tc_setup_qdisc_ets(port, type_data);
|
||||
case TC_SETUP_QDISC_HTB:
|
||||
return airoha_tc_setup_qdisc_htb(port, type_data);
|
||||
@@ -145,7 +145,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
@@ -2519,6 +2576,7 @@ static void airoha_remove(struct platfor
|
||||
@@ -2524,6 +2581,7 @@ static void airoha_remove(struct platfor
|
||||
}
|
||||
free_netdev(eth->napi_dev);
|
||||
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1604,14 +1604,81 @@ static int airoha_dev_set_macaddr(struct
|
||||
@@ -1609,14 +1609,81 @@ static int airoha_dev_set_macaddr(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -34,7 +34,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
airoha_fe_rmw(eth, REG_CDM1_VLAN_CTRL, CDM1_VLAN_MASK,
|
||||
FIELD_PREP(CDM1_VLAN_MASK, 0x8100));
|
||||
@@ -1536,9 +1531,9 @@ static void airoha_update_hw_stats(struc
|
||||
@@ -1541,9 +1536,9 @@ static void airoha_update_hw_stats(struc
|
||||
|
||||
static int airoha_dev_open(struct net_device *dev)
|
||||
{
|
||||
@@ -45,7 +45,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
netif_tx_start_all_queues(dev);
|
||||
err = airoha_set_vip_for_gdm_port(port, true);
|
||||
@@ -1552,6 +1547,11 @@ static int airoha_dev_open(struct net_de
|
||||
@@ -1557,6 +1552,11 @@ static int airoha_dev_open(struct net_de
|
||||
airoha_fe_clear(qdma->eth, REG_GDM_INGRESS_CFG(port->id),
|
||||
GDM_STAG_EN_MASK);
|
||||
|
||||
|
||||
+1
-1
@@ -132,7 +132,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
airoha_qdma_fill_rx_queue(q);
|
||||
|
||||
@@ -1177,7 +1194,6 @@ static int airoha_qdma_hw_init(struct ai
|
||||
@@ -1182,7 +1199,6 @@ static int airoha_qdma_hw_init(struct ai
|
||||
}
|
||||
|
||||
airoha_qdma_wr(qdma, REG_QDMA_GLOBAL_CFG,
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1721,6 +1721,20 @@ static void airoha_dev_get_stats64(struc
|
||||
@@ -1726,6 +1726,20 @@ static void airoha_dev_get_stats64(struc
|
||||
} while (u64_stats_fetch_retry(&port->stats.syncp, start));
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static u16 airoha_dev_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||
struct net_device *sb_dev)
|
||||
{
|
||||
@@ -2413,6 +2427,7 @@ static const struct net_device_ops airoh
|
||||
@@ -2418,6 +2432,7 @@ static const struct net_device_ops airoh
|
||||
.ndo_init = airoha_dev_init,
|
||||
.ndo_open = airoha_dev_open,
|
||||
.ndo_stop = airoha_dev_stop,
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2518,6 +2518,7 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2523,6 +2523,7 @@ static int airoha_alloc_gdm_port(struct
|
||||
NETIF_F_SG | NETIF_F_TSO |
|
||||
NETIF_F_HW_TC;
|
||||
dev->features |= dev->hw_features;
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1757,18 +1757,13 @@ static u32 airoha_get_dsa_tag(struct sk_
|
||||
@@ -1762,18 +1762,13 @@ static u32 airoha_get_dsa_tag(struct sk_
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_NET_DSA)
|
||||
struct ethhdr *ehdr;
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2371,7 +2371,7 @@ static int airoha_tc_get_htb_get_leaf_qu
|
||||
@@ -2376,7 +2376,7 @@ static int airoha_tc_get_htb_get_leaf_qu
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -22,7 +22,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2044,7 +2044,7 @@ static int airoha_qdma_set_tx_ets_sched(
|
||||
@@ -2049,7 +2049,7 @@ static int airoha_qdma_set_tx_ets_sched(
|
||||
struct tc_ets_qopt_offload_replace_params *p = &opt->replace_params;
|
||||
enum tx_sched_mode mode = TC_SCH_SP;
|
||||
u16 w[AIROHA_NUM_QOS_QUEUES] = {};
|
||||
@@ -31,7 +31,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (p->bands > AIROHA_NUM_QOS_QUEUES)
|
||||
return -EINVAL;
|
||||
@@ -2062,17 +2062,17 @@ static int airoha_qdma_set_tx_ets_sched(
|
||||
@@ -2067,17 +2067,17 @@ static int airoha_qdma_set_tx_ets_sched(
|
||||
* lowest priorities with respect to SP ones.
|
||||
* e.g: WRR0, WRR1, .., WRRm, SP0, SP1, .., SPn
|
||||
*/
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2467,6 +2467,19 @@ static void airoha_metadata_dst_free(str
|
||||
@@ -2472,6 +2472,19 @@ static void airoha_metadata_dst_free(str
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -55,7 +55,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
/* enable 1:N vlan action, init vlan table */
|
||||
airoha_fe_set(eth, REG_MC_VLAN_EN, MC_VLAN_EN_MASK);
|
||||
|
||||
@@ -1647,7 +1666,6 @@ static void airhoha_set_gdm2_loopback(st
|
||||
@@ -1652,7 +1671,6 @@ static void airhoha_set_gdm2_loopback(st
|
||||
|
||||
if (port->id == 3) {
|
||||
/* FIXME: handle XSI_PCE1_PORT */
|
||||
@@ -63,7 +63,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
airoha_fe_rmw(eth, REG_FE_WAN_PORT,
|
||||
WAN1_EN_MASK | WAN1_MASK | WAN0_MASK,
|
||||
FIELD_PREP(WAN0_MASK, HSGMII_LAN_PCIE0_SRCPORT));
|
||||
@@ -2122,6 +2140,125 @@ static int airoha_tc_setup_qdisc_ets(str
|
||||
@@ -2127,6 +2145,125 @@ static int airoha_tc_setup_qdisc_ets(str
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static int airoha_qdma_get_trtcm_param(struct airoha_qdma *qdma, int channel,
|
||||
u32 addr, enum trtcm_param_type param,
|
||||
enum trtcm_mode_type mode,
|
||||
@@ -2286,10 +2423,142 @@ static int airoha_tc_htb_alloc_leaf_queu
|
||||
@@ -2291,10 +2428,142 @@ static int airoha_tc_htb_alloc_leaf_queu
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+9
-9
@@ -93,7 +93,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
RX_DONE_INT_MASK);
|
||||
|
||||
return done;
|
||||
@@ -960,7 +964,7 @@ unlock:
|
||||
@@ -965,7 +969,7 @@ unlock:
|
||||
}
|
||||
|
||||
if (done < budget && napi_complete(napi))
|
||||
@@ -102,7 +102,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
TX_DONE_INT_MASK(id));
|
||||
|
||||
return done;
|
||||
@@ -1191,13 +1195,16 @@ static int airoha_qdma_hw_init(struct ai
|
||||
@@ -1196,13 +1200,16 @@ static int airoha_qdma_hw_init(struct ai
|
||||
int i;
|
||||
|
||||
/* clear pending irqs */
|
||||
@@ -123,7 +123,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* setup irq binding */
|
||||
for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) {
|
||||
@@ -1242,13 +1249,14 @@ static int airoha_qdma_hw_init(struct ai
|
||||
@@ -1247,13 +1254,14 @@ static int airoha_qdma_hw_init(struct ai
|
||||
|
||||
static irqreturn_t airoha_irq_handler(int irq, void *dev_instance)
|
||||
{
|
||||
@@ -142,7 +142,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
airoha_qdma_wr(qdma, REG_INT_STATUS(i), intr[i]);
|
||||
}
|
||||
|
||||
@@ -1256,7 +1264,7 @@ static irqreturn_t airoha_irq_handler(in
|
||||
@@ -1261,7 +1269,7 @@ static irqreturn_t airoha_irq_handler(in
|
||||
return IRQ_NONE;
|
||||
|
||||
if (intr[1] & RX_DONE_INT_MASK) {
|
||||
@@ -151,7 +151,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
RX_DONE_INT_MASK);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) {
|
||||
@@ -1273,7 +1281,7 @@ static irqreturn_t airoha_irq_handler(in
|
||||
@@ -1278,7 +1286,7 @@ static irqreturn_t airoha_irq_handler(in
|
||||
if (!(intr[0] & TX_DONE_INT_MASK(i)))
|
||||
continue;
|
||||
|
||||
@@ -160,7 +160,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
TX_DONE_INT_MASK(i));
|
||||
napi_schedule(&qdma->q_tx_irq[i].napi);
|
||||
}
|
||||
@@ -1282,6 +1290,39 @@ static irqreturn_t airoha_irq_handler(in
|
||||
@@ -1287,6 +1295,39 @@ static irqreturn_t airoha_irq_handler(in
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static int airoha_qdma_init(struct platform_device *pdev,
|
||||
struct airoha_eth *eth,
|
||||
struct airoha_qdma *qdma)
|
||||
@@ -1289,9 +1330,7 @@ static int airoha_qdma_init(struct platf
|
||||
@@ -1294,9 +1335,7 @@ static int airoha_qdma_init(struct platf
|
||||
int err, id = qdma - ð->qdma[0];
|
||||
const char *res;
|
||||
|
||||
@@ -210,7 +210,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
res = devm_kasprintf(eth->dev, GFP_KERNEL, "qdma%d", id);
|
||||
if (!res)
|
||||
return -ENOMEM;
|
||||
@@ -1301,12 +1340,7 @@ static int airoha_qdma_init(struct platf
|
||||
@@ -1306,12 +1345,7 @@ static int airoha_qdma_init(struct platf
|
||||
return dev_err_probe(eth->dev, PTR_ERR(qdma->regs),
|
||||
"failed to iomap qdma%d regs\n", id);
|
||||
|
||||
@@ -224,7 +224,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@@ -2797,7 +2831,7 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2802,7 +2836,7 @@ static int airoha_alloc_gdm_port(struct
|
||||
dev->features |= dev->hw_features;
|
||||
dev->vlan_features = dev->hw_features;
|
||||
dev->dev.of_node = np;
|
||||
|
||||
+3
-3
@@ -58,7 +58,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
return done;
|
||||
}
|
||||
@@ -1194,17 +1204,24 @@ static int airoha_qdma_hw_init(struct ai
|
||||
@@ -1199,17 +1209,24 @@ static int airoha_qdma_hw_init(struct ai
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -91,7 +91,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* setup irq binding */
|
||||
for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) {
|
||||
@@ -1251,6 +1268,7 @@ static irqreturn_t airoha_irq_handler(in
|
||||
@@ -1256,6 +1273,7 @@ static irqreturn_t airoha_irq_handler(in
|
||||
{
|
||||
struct airoha_irq_bank *irq_bank = dev_instance;
|
||||
struct airoha_qdma *qdma = irq_bank->qdma;
|
||||
@@ -99,7 +99,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
u32 intr[ARRAY_SIZE(irq_bank->irqmask)];
|
||||
int i;
|
||||
|
||||
@@ -1263,17 +1281,24 @@ static irqreturn_t airoha_irq_handler(in
|
||||
@@ -1268,17 +1286,24 @@ static irqreturn_t airoha_irq_handler(in
|
||||
if (!test_bit(DEV_STATE_INITIALIZED, &qdma->eth->state))
|
||||
return IRQ_NONE;
|
||||
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1093,17 +1093,13 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
@@ -1098,17 +1098,13 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
int size;
|
||||
|
||||
size = HW_DSCP_NUM * sizeof(struct airoha_qdma_fwd_desc);
|
||||
|
||||
+2
-2
@@ -27,7 +27,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/tcp.h>
|
||||
#include <linux/u64_stats_sync.h>
|
||||
@@ -1088,9 +1089,11 @@ static void airoha_qdma_cleanup_tx_queue
|
||||
@@ -1093,9 +1094,11 @@ static void airoha_qdma_cleanup_tx_queue
|
||||
static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma)
|
||||
{
|
||||
struct airoha_eth *eth = qdma->eth;
|
||||
@@ -40,7 +40,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
size = HW_DSCP_NUM * sizeof(struct airoha_qdma_fwd_desc);
|
||||
if (!dmam_alloc_coherent(eth->dev, size, &dma_addr, GFP_KERNEL))
|
||||
@@ -1098,10 +1101,34 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
@@ -1103,10 +1106,34 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
|
||||
airoha_qdma_wr(qdma, REG_FWD_DSCP_BASE, dma_addr);
|
||||
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static void airoha_set_macaddr(struct airoha_gdm_port *port, const u8 *addr)
|
||||
{
|
||||
struct airoha_eth *eth = port->qdma->eth;
|
||||
@@ -1140,7 +1131,7 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
@@ -1145,7 +1136,7 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
LMGR_INIT_START | LMGR_SRAM_MODE_MASK |
|
||||
HW_FWD_DESC_NUM_MASK,
|
||||
FIELD_PREP(HW_FWD_DESC_NUM_MASK, HW_DSCP_NUM) |
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2896,7 +2896,15 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2901,7 +2901,15 @@ static int airoha_alloc_gdm_port(struct
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
||||
+4
-4
@@ -19,7 +19,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1081,19 +1081,13 @@ static void airoha_qdma_cleanup_tx_queue
|
||||
@@ -1086,19 +1086,13 @@ static void airoha_qdma_cleanup_tx_queue
|
||||
|
||||
static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma)
|
||||
{
|
||||
@@ -40,7 +40,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
name = devm_kasprintf(eth->dev, GFP_KERNEL, "qdma%d-buf", id);
|
||||
if (!name)
|
||||
return -ENOMEM;
|
||||
@@ -1115,8 +1109,12 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
@@ -1120,8 +1114,12 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
rmem = of_reserved_mem_lookup(np);
|
||||
of_node_put(np);
|
||||
dma_addr = rmem->base;
|
||||
@@ -54,7 +54,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (!dmam_alloc_coherent(eth->dev, size, &dma_addr,
|
||||
GFP_KERNEL))
|
||||
return -ENOMEM;
|
||||
@@ -1124,6 +1122,11 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
@@ -1129,6 +1127,11 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
|
||||
airoha_qdma_wr(qdma, REG_FWD_BUF_BASE, dma_addr);
|
||||
|
||||
@@ -66,7 +66,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
airoha_qdma_rmw(qdma, REG_HW_FWD_DSCP_CFG,
|
||||
HW_FWD_DSCP_PAYLOAD_SIZE_MASK,
|
||||
FIELD_PREP(HW_FWD_DSCP_PAYLOAD_SIZE_MASK, 0));
|
||||
@@ -1132,7 +1135,7 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
@@ -1137,7 +1140,7 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
airoha_qdma_rmw(qdma, REG_LMGR_INIT_CFG,
|
||||
LMGR_INIT_START | LMGR_SRAM_MODE_MASK |
|
||||
HW_FWD_DESC_NUM_MASK,
|
||||
|
||||
+3
-3
@@ -21,7 +21,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1084,14 +1084,15 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
@@ -1089,14 +1089,15 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
int size, index, num_desc = HW_DSCP_NUM;
|
||||
struct airoha_eth *eth = qdma->eth;
|
||||
int id = qdma - ð->qdma[0];
|
||||
@@ -38,7 +38,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
index = of_property_match_string(eth->dev->of_node,
|
||||
"memory-region-names", name);
|
||||
if (index >= 0) {
|
||||
@@ -1112,9 +1113,9 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
@@ -1117,9 +1118,9 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
/* Compute the number of hw descriptors according to the
|
||||
* reserved memory size and the payload buffer size
|
||||
*/
|
||||
@@ -50,7 +50,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (!dmam_alloc_coherent(eth->dev, size, &dma_addr,
|
||||
GFP_KERNEL))
|
||||
return -ENOMEM;
|
||||
@@ -1127,9 +1128,10 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
@@ -1132,9 +1133,10 @@ static int airoha_qdma_init_hfwd_queues(
|
||||
return -ENOMEM;
|
||||
|
||||
airoha_qdma_wr(qdma, REG_FWD_DSCP_BASE, dma_addr);
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2617,13 +2617,15 @@ static int airoha_dev_setup_tc_block_cb(
|
||||
@@ -2622,13 +2622,15 @@ static int airoha_dev_setup_tc_block_cb(
|
||||
void *type_data, void *cb_priv)
|
||||
{
|
||||
struct net_device *dev = cb_priv;
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2199,11 +2199,14 @@ static int airoha_qdma_get_tx_ets_stats(
|
||||
@@ -2204,11 +2204,14 @@ static int airoha_qdma_get_tx_ets_stats(
|
||||
static int airoha_tc_setup_qdisc_ets(struct airoha_gdm_port *port,
|
||||
struct tc_ets_qopt_offload *opt)
|
||||
{
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1731,7 +1731,9 @@ static void airhoha_set_gdm2_loopback(st
|
||||
@@ -1736,7 +1736,9 @@ static void airhoha_set_gdm2_loopback(st
|
||||
airoha_fe_wr(eth, REG_GDM_RXCHN_EN(2), 0xffff);
|
||||
airoha_fe_rmw(eth, REG_GDM_LPBK_CFG(2),
|
||||
LPBK_CHAN_MASK | LPBK_MODE_MASK | LPBK_EN_MASK,
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2043,8 +2043,12 @@ static void airoha_ethtool_get_mac_stats
|
||||
@@ -2048,8 +2048,12 @@ static void airoha_ethtool_get_mac_stats
|
||||
airoha_update_hw_stats(port);
|
||||
do {
|
||||
start = u64_stats_fetch_begin(&port->stats.syncp);
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2791,6 +2791,7 @@ static const struct ethtool_ops airoha_e
|
||||
@@ -2796,6 +2796,7 @@ static const struct ethtool_ops airoha_e
|
||||
.get_drvinfo = airoha_ethtool_get_drvinfo,
|
||||
.get_eth_mac_stats = airoha_ethtool_get_mac_stats,
|
||||
.get_rmon_stats = airoha_ethtool_get_rmon_stats,
|
||||
|
||||
+2
-2
@@ -22,7 +22,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1894,6 +1894,20 @@ static u32 airoha_get_dsa_tag(struct sk_
|
||||
@@ -1899,6 +1899,20 @@ static u32 airoha_get_dsa_tag(struct sk_
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static netdev_tx_t airoha_dev_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
{
|
||||
@@ -1947,7 +1961,7 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -1952,7 +1966,7 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
txq = netdev_get_tx_queue(dev, qid);
|
||||
nr_frags = 1 + skb_shinfo(skb)->nr_frags;
|
||||
|
||||
|
||||
+5
-5
@@ -21,7 +21,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1408,8 +1408,7 @@ static int airoha_hw_init(struct platfor
|
||||
@@ -1413,8 +1413,7 @@ static int airoha_hw_init(struct platfor
|
||||
int err, i;
|
||||
|
||||
/* disable xsi */
|
||||
@@ -31,7 +31,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@@ -2943,6 +2942,7 @@ free_metadata_dst:
|
||||
@@ -2948,6 +2947,7 @@ free_metadata_dst:
|
||||
|
||||
static int airoha_probe(struct platform_device *pdev)
|
||||
{
|
||||
@@ -39,7 +39,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
struct device_node *np;
|
||||
struct airoha_eth *eth;
|
||||
int i, err;
|
||||
@@ -2951,6 +2951,10 @@ static int airoha_probe(struct platform_
|
||||
@@ -2956,6 +2956,10 @@ static int airoha_probe(struct platform_
|
||||
if (!eth)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -50,7 +50,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
eth->dev = &pdev->dev;
|
||||
|
||||
err = dma_set_mask_and_coherent(eth->dev, DMA_BIT_MASK(32));
|
||||
@@ -2975,13 +2979,18 @@ static int airoha_probe(struct platform_
|
||||
@@ -2980,13 +2984,18 @@ static int airoha_probe(struct platform_
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
eth->xsi_rsts);
|
||||
if (err) {
|
||||
dev_err(eth->dev, "failed to get bulk xsi reset lines\n");
|
||||
@@ -3067,8 +3076,23 @@ static void airoha_remove(struct platfor
|
||||
@@ -3072,8 +3081,23 @@ static void airoha_remove(struct platfor
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -59,7 +59,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
/* GMD4 */
|
||||
for (q = 0; q < pse_port_num_queues[FE_PSE_PORT_GDM4]; q++)
|
||||
@@ -1783,8 +1790,11 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1788,8 +1795,11 @@ static int airoha_dev_init(struct net_de
|
||||
airhoha_set_gdm2_loopback(port);
|
||||
fallthrough;
|
||||
case 2:
|
||||
|
||||
+2
-2
@@ -47,7 +47,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
/* enable 1:N vlan action, init vlan table */
|
||||
airoha_fe_set(eth, REG_MC_VLAN_EN, MC_VLAN_EN_MASK);
|
||||
|
||||
@@ -1777,8 +1758,10 @@ static void airhoha_set_gdm2_loopback(st
|
||||
@@ -1782,8 +1763,10 @@ static void airhoha_set_gdm2_loopback(st
|
||||
static int airoha_dev_init(struct net_device *dev)
|
||||
{
|
||||
struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
@@ -60,7 +60,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
airoha_set_macaddr(port, dev->dev_addr);
|
||||
|
||||
@@ -1791,16 +1774,27 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1796,16 +1779,27 @@ static int airoha_dev_init(struct net_de
|
||||
fallthrough;
|
||||
case 2:
|
||||
if (airoha_ppe_is_enabled(eth, 1)) {
|
||||
|
||||
+4
-4
@@ -22,7 +22,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1703,13 +1703,17 @@ static int airoha_dev_set_macaddr(struct
|
||||
@@ -1708,13 +1708,17 @@ static int airoha_dev_set_macaddr(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
airoha_set_gdm_port_fwd_cfg(eth, REG_GDM_FWD_CFG(2), pse_port);
|
||||
airoha_fe_clear(eth, REG_GDM_FWD_CFG(2), GDM_STRIP_CRC);
|
||||
|
||||
@@ -1730,29 +1734,25 @@ static void airhoha_set_gdm2_loopback(st
|
||||
@@ -1735,29 +1739,25 @@ static void airhoha_set_gdm2_loopback(st
|
||||
airoha_fe_clear(eth, REG_FE_VIP_PORT_EN, BIT(2));
|
||||
airoha_fe_clear(eth, REG_FE_IFC_PORT_EN, BIT(2));
|
||||
|
||||
@@ -89,7 +89,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
|
||||
static int airoha_dev_init(struct net_device *dev)
|
||||
@@ -1769,8 +1769,13 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1774,8 +1774,13 @@ static int airoha_dev_init(struct net_de
|
||||
case 3:
|
||||
case 4:
|
||||
/* If GDM2 is active we can't enable loopback */
|
||||
@@ -105,7 +105,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
fallthrough;
|
||||
case 2:
|
||||
if (airoha_ppe_is_enabled(eth, 1)) {
|
||||
@@ -3088,11 +3093,38 @@ static const char * const en7581_xsi_rst
|
||||
@@ -3093,11 +3098,38 @@ static const char * const en7581_xsi_rst
|
||||
"xfp-mac",
|
||||
};
|
||||
|
||||
|
||||
+8
-8
@@ -17,7 +17,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1705,10 +1705,8 @@ static int airoha_dev_set_macaddr(struct
|
||||
@@ -1710,10 +1710,8 @@ static int airoha_dev_set_macaddr(struct
|
||||
|
||||
static int airhoha_set_gdm2_loopback(struct airoha_gdm_port *port)
|
||||
{
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
int src_port;
|
||||
|
||||
/* Forward the traffic to the proper GDM port */
|
||||
@@ -1720,6 +1718,8 @@ static int airhoha_set_gdm2_loopback(str
|
||||
@@ -1725,6 +1723,8 @@ static int airhoha_set_gdm2_loopback(str
|
||||
/* Enable GDM2 loopback */
|
||||
airoha_fe_wr(eth, REG_GDM_TXCHN_EN(2), 0xffffffff);
|
||||
airoha_fe_wr(eth, REG_GDM_RXCHN_EN(2), 0xffff);
|
||||
@@ -38,7 +38,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
airoha_fe_rmw(eth, REG_GDM_LPBK_CFG(2),
|
||||
LPBK_CHAN_MASK | LPBK_MODE_MASK | LPBK_EN_MASK,
|
||||
FIELD_PREP(LPBK_CHAN_MASK, chan) |
|
||||
@@ -1734,6 +1734,8 @@ static int airhoha_set_gdm2_loopback(str
|
||||
@@ -1739,6 +1739,8 @@ static int airhoha_set_gdm2_loopback(str
|
||||
airoha_fe_clear(eth, REG_FE_VIP_PORT_EN, BIT(2));
|
||||
airoha_fe_clear(eth, REG_FE_IFC_PORT_EN, BIT(2));
|
||||
|
||||
@@ -47,7 +47,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
src_port = eth->soc->ops.get_src_port_id(port, nbq);
|
||||
if (src_port < 0)
|
||||
return src_port;
|
||||
@@ -1747,7 +1749,7 @@ static int airhoha_set_gdm2_loopback(str
|
||||
@@ -1752,7 +1754,7 @@ static int airhoha_set_gdm2_loopback(str
|
||||
SP_CPORT_MASK(val),
|
||||
FE_PSE_PORT_CDM2 << __ffs(SP_CPORT_MASK(val)));
|
||||
|
||||
@@ -56,7 +56,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
airoha_fe_rmw(eth, REG_SRC_PORT_FC_MAP6,
|
||||
FC_ID_OF_SRC_PORT24_MASK,
|
||||
FIELD_PREP(FC_ID_OF_SRC_PORT24_MASK, 2));
|
||||
@@ -1916,6 +1918,22 @@ static bool airoha_dev_tx_queue_busy(str
|
||||
@@ -1921,6 +1923,22 @@ static bool airoha_dev_tx_queue_busy(str
|
||||
return index >= tail;
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static netdev_tx_t airoha_dev_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
{
|
||||
@@ -1956,7 +1974,7 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -1961,7 +1979,7 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
msg1 = FIELD_PREP(QDMA_ETH_TXMSG_FPORT_MASK, fport) |
|
||||
FIELD_PREP(QDMA_ETH_TXMSG_METER_MASK, 0x7f);
|
||||
|
||||
@@ -3117,6 +3135,35 @@ static int airoha_en7581_get_src_port_id
|
||||
@@ -3122,6 +3140,35 @@ static int airoha_en7581_get_src_port_id
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static const struct airoha_eth_soc_data en7581_soc_data = {
|
||||
.version = 0x7581,
|
||||
.xsi_rsts_names = en7581_xsi_rsts_names,
|
||||
@@ -3127,8 +3174,19 @@ static const struct airoha_eth_soc_data
|
||||
@@ -3132,8 +3179,19 @@ static const struct airoha_eth_soc_data
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
+1
-1
@@ -172,7 +172,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
MBI_RX_AGE_SEL_MASK | MBI_TX_AGE_SEL_MASK,
|
||||
FIELD_PREP(MBI_RX_AGE_SEL_MASK, 3) |
|
||||
FIELD_PREP(MBI_TX_AGE_SEL_MASK, 3));
|
||||
@@ -1713,7 +1713,7 @@ static int airhoha_set_gdm2_loopback(str
|
||||
@@ -1718,7 +1718,7 @@ static int airhoha_set_gdm2_loopback(str
|
||||
pse_port = port->id == AIROHA_GDM3_IDX ? FE_PSE_PORT_GDM3
|
||||
: FE_PSE_PORT_GDM4;
|
||||
airoha_set_gdm_port_fwd_cfg(eth, REG_GDM_FWD_CFG(2), pse_port);
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -3060,6 +3060,7 @@ static int airoha_probe(struct platform_
|
||||
@@ -3065,6 +3065,7 @@ static int airoha_probe(struct platform_
|
||||
error_napi_stop:
|
||||
for (i = 0; i < ARRAY_SIZE(eth->qdma); i++)
|
||||
airoha_qdma_stop_napi(ð->qdma[i]);
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -3006,11 +3006,11 @@ static int airoha_probe(struct platform_
|
||||
@@ -3011,11 +3011,11 @@ static int airoha_probe(struct platform_
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
+13
-13
@@ -23,7 +23,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -908,19 +908,13 @@ static int airoha_qdma_tx_napi_poll(stru
|
||||
@@ -913,19 +913,13 @@ static int airoha_qdma_tx_napi_poll(stru
|
||||
|
||||
dma_unmap_single(eth->dev, e->dma_addr, e->dma_len,
|
||||
DMA_TO_DEVICE);
|
||||
@@ -46,7 +46,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (skb) {
|
||||
u16 queue = skb_get_queue_mapping(skb);
|
||||
struct netdev_queue *txq;
|
||||
@@ -965,6 +959,7 @@ static int airoha_qdma_init_tx_queue(str
|
||||
@@ -970,6 +964,7 @@ static int airoha_qdma_init_tx_queue(str
|
||||
q->ndesc = size;
|
||||
q->qdma = qdma;
|
||||
q->free_thr = 1 + MAX_SKB_FRAGS;
|
||||
@@ -54,7 +54,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
q->entry = devm_kzalloc(eth->dev, q->ndesc * sizeof(*q->entry),
|
||||
GFP_KERNEL);
|
||||
@@ -977,9 +972,9 @@ static int airoha_qdma_init_tx_queue(str
|
||||
@@ -982,9 +977,9 @@ static int airoha_qdma_init_tx_queue(str
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < q->ndesc; i++) {
|
||||
@@ -66,7 +66,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
WRITE_ONCE(q->desc[i].ctrl, cpu_to_le32(val));
|
||||
}
|
||||
|
||||
@@ -989,9 +984,9 @@ static int airoha_qdma_init_tx_queue(str
|
||||
@@ -994,9 +989,9 @@ static int airoha_qdma_init_tx_queue(str
|
||||
|
||||
airoha_qdma_wr(qdma, REG_TX_RING_BASE(qid), dma_addr);
|
||||
airoha_qdma_rmw(qdma, REG_TX_CPU_IDX(qid), TX_RING_CPU_IDX_MASK,
|
||||
@@ -78,7 +78,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1047,17 +1042,21 @@ static int airoha_qdma_init_tx(struct ai
|
||||
@@ -1052,17 +1047,21 @@ static int airoha_qdma_init_tx(struct ai
|
||||
static void airoha_qdma_cleanup_tx_queue(struct airoha_queue *q)
|
||||
{
|
||||
struct airoha_eth *eth = q->qdma->eth;
|
||||
@@ -104,7 +104,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
q->queued--;
|
||||
}
|
||||
spin_unlock_bh(&q->lock);
|
||||
@@ -1899,20 +1898,6 @@ static u32 airoha_get_dsa_tag(struct sk_
|
||||
@@ -1904,20 +1903,6 @@ static u32 airoha_get_dsa_tag(struct sk_
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static int airoha_get_fe_port(struct airoha_gdm_port *port)
|
||||
{
|
||||
struct airoha_qdma *qdma = port->qdma;
|
||||
@@ -1935,8 +1920,10 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -1940,8 +1925,10 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
struct airoha_qdma *qdma = port->qdma;
|
||||
u32 nr_frags, tag, msg0, msg1, len;
|
||||
@@ -136,7 +136,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
void *data;
|
||||
int i, qid;
|
||||
u16 index;
|
||||
@@ -1982,7 +1969,7 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -1987,7 +1974,7 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
txq = netdev_get_tx_queue(dev, qid);
|
||||
nr_frags = 1 + skb_shinfo(skb)->nr_frags;
|
||||
|
||||
@@ -145,7 +145,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
/* not enough space in the queue */
|
||||
netif_tx_stop_queue(txq);
|
||||
spin_unlock_bh(&q->lock);
|
||||
@@ -1991,11 +1978,13 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -1996,11 +1983,13 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
|
||||
len = skb_headlen(skb);
|
||||
data = skb->data;
|
||||
@@ -161,7 +161,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
|
||||
dma_addr_t addr;
|
||||
u32 val;
|
||||
@@ -2005,7 +1994,14 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -2010,7 +1999,14 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
if (unlikely(dma_mapping_error(dev->dev.parent, addr)))
|
||||
goto error_unmap;
|
||||
|
||||
@@ -177,7 +177,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
val = FIELD_PREP(QDMA_DESC_LEN_MASK, len);
|
||||
if (i < nr_frags - 1)
|
||||
@@ -2018,15 +2014,9 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -2023,15 +2019,9 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
WRITE_ONCE(desc->msg1, cpu_to_le32(msg1));
|
||||
WRITE_ONCE(desc->msg2, cpu_to_le32(0xffff));
|
||||
|
||||
@@ -193,7 +193,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
q->queued += i;
|
||||
|
||||
skb_tx_timestamp(skb);
|
||||
@@ -2035,7 +2025,7 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -2040,7 +2030,7 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
if (netif_xmit_stopped(txq) || !netdev_xmit_more())
|
||||
airoha_qdma_rmw(qdma, REG_TX_CPU_IDX(qid),
|
||||
TX_RING_CPU_IDX_MASK,
|
||||
@@ -202,7 +202,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (q->ndesc - q->queued < q->free_thr)
|
||||
netif_tx_stop_queue(txq);
|
||||
@@ -2045,10 +2035,13 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
@@ -2050,10 +2040,13 @@ static netdev_tx_t airoha_dev_xmit(struc
|
||||
return NETDEV_TX_OK;
|
||||
|
||||
error_unmap:
|
||||
|
||||
+3
-3
@@ -23,7 +23,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2940,19 +2940,26 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2945,19 +2945,26 @@ static int airoha_alloc_gdm_port(struct
|
||||
port->id = id;
|
||||
eth->ports[p] = port;
|
||||
|
||||
@@ -60,7 +60,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
|
||||
static int airoha_probe(struct platform_device *pdev)
|
||||
@@ -3043,6 +3050,10 @@ static int airoha_probe(struct platform_
|
||||
@@ -3048,6 +3055,10 @@ static int airoha_probe(struct platform_
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
return 0;
|
||||
|
||||
error_napi_stop:
|
||||
@@ -3056,10 +3067,12 @@ error_hw_cleanup:
|
||||
@@ -3061,10 +3072,12 @@ error_hw_cleanup:
|
||||
for (i = 0; i < ARRAY_SIZE(eth->ports); i++) {
|
||||
struct airoha_gdm_port *port = eth->ports[i];
|
||||
|
||||
|
||||
+5
-5
@@ -40,7 +40,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
airoha_fe_crsn_qsel_init(eth);
|
||||
|
||||
@@ -1706,27 +1706,29 @@ static int airhoha_set_gdm2_loopback(str
|
||||
@@ -1711,27 +1711,29 @@ static int airhoha_set_gdm2_loopback(str
|
||||
/* Forward the traffic to the proper GDM port */
|
||||
pse_port = port->id == AIROHA_GDM3_IDX ? FE_PSE_PORT_GDM3
|
||||
: FE_PSE_PORT_GDM4;
|
||||
@@ -78,7 +78,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* XXX: handle XSI_USB_PORT and XSI_PCE1_PORT */
|
||||
nbq = port->id == AIROHA_GDM3_IDX && airoha_is_7581(eth) ? 4 : 0;
|
||||
@@ -1762,8 +1764,8 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1767,8 +1769,8 @@ static int airoha_dev_init(struct net_de
|
||||
airoha_set_macaddr(port, dev->dev_addr);
|
||||
|
||||
switch (port->id) {
|
||||
@@ -89,7 +89,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
/* If GDM2 is active we can't enable loopback */
|
||||
if (!eth->ports[1]) {
|
||||
int err;
|
||||
@@ -1773,7 +1775,7 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1778,7 +1780,7 @@ static int airoha_dev_init(struct net_de
|
||||
return err;
|
||||
}
|
||||
fallthrough;
|
||||
@@ -98,7 +98,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (airoha_ppe_is_enabled(eth, 1)) {
|
||||
/* For PPE2 always use secondary cpu port. */
|
||||
fe_cpu_port = FE_PSE_PORT_CDM2;
|
||||
@@ -3116,14 +3118,14 @@ static const char * const en7581_xsi_rst
|
||||
@@ -3121,14 +3123,14 @@ static const char * const en7581_xsi_rst
|
||||
static int airoha_en7581_get_src_port_id(struct airoha_gdm_port *port, int nbq)
|
||||
{
|
||||
switch (port->id) {
|
||||
@@ -115,7 +115,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
/* 7581 SoC supports eth and usb serdes on GDM4 port */
|
||||
if (!nbq)
|
||||
return HSGMII_LAN_7581_ETH_SRCPORT;
|
||||
@@ -3147,12 +3149,12 @@ static const char * const an7583_xsi_rst
|
||||
@@ -3152,12 +3154,12 @@ static const char * const an7583_xsi_rst
|
||||
static int airoha_an7583_get_src_port_id(struct airoha_gdm_port *port, int nbq)
|
||||
{
|
||||
switch (port->id) {
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2821,6 +2821,7 @@ static const struct ethtool_ops airoha_e
|
||||
@@ -2826,6 +2826,7 @@ static const struct ethtool_ops airoha_e
|
||||
.get_drvinfo = airoha_ethtool_get_drvinfo,
|
||||
.get_eth_mac_stats = airoha_ethtool_get_mac_stats,
|
||||
.get_rmon_stats = airoha_ethtool_get_rmon_stats,
|
||||
|
||||
+3
-3
@@ -15,7 +15,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1743,7 +1743,7 @@ static int airhoha_set_gdm2_loopback(str
|
||||
@@ -1748,7 +1748,7 @@ static int airhoha_set_gdm2_loopback(str
|
||||
airoha_fe_rmw(eth,
|
||||
REG_SP_DFT_CPORT(src_port >> fls(SP_CPORT_DFT_MASK)),
|
||||
SP_CPORT_MASK(val),
|
||||
@@ -24,7 +24,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (port->id != AIROHA_GDM3_IDX && airoha_is_7581(eth))
|
||||
airoha_fe_rmw(eth, REG_SRC_PORT_FC_MAP6,
|
||||
@@ -1797,7 +1797,7 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1802,7 +1802,7 @@ static int airoha_dev_init(struct net_de
|
||||
ppe_id = pse_port == FE_PSE_PORT_PPE2 ? 1 : 0;
|
||||
airoha_fe_rmw(eth, REG_PPE_DFT_CPORT0(ppe_id),
|
||||
DFT_CPORT_MASK(port->id),
|
||||
@@ -33,7 +33,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -2154,7 +2154,7 @@ static int airoha_qdma_set_chan_tx_sched
|
||||
@@ -2159,7 +2159,7 @@ static int airoha_qdma_set_chan_tx_sched
|
||||
|
||||
airoha_qdma_rmw(port->qdma, REG_CHAN_QOS_MODE(channel >> 3),
|
||||
CHAN_QOS_MODE_MASK(channel),
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1745,10 +1745,12 @@ static int airhoha_set_gdm2_loopback(str
|
||||
@@ -1750,10 +1750,12 @@ static int airhoha_set_gdm2_loopback(str
|
||||
SP_CPORT_MASK(val),
|
||||
__field_prep(SP_CPORT_MASK(val), FE_PSE_PORT_CDM2));
|
||||
|
||||
|
||||
+6
-6
@@ -18,7 +18,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1627,6 +1627,7 @@ static int airoha_dev_open(struct net_de
|
||||
@@ -1632,6 +1632,7 @@ static int airoha_dev_open(struct net_de
|
||||
int err, len = ETH_HLEN + dev->mtu + ETH_FCS_LEN;
|
||||
struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
struct airoha_qdma *qdma = port->qdma;
|
||||
@@ -26,7 +26,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
netif_tx_start_all_queues(dev);
|
||||
err = airoha_set_vip_for_gdm_port(port, true);
|
||||
@@ -1650,6 +1651,14 @@ static int airoha_dev_open(struct net_de
|
||||
@@ -1655,6 +1656,14 @@ static int airoha_dev_open(struct net_de
|
||||
GLOBAL_CFG_RX_DMA_EN_MASK);
|
||||
atomic_inc(&qdma->users);
|
||||
|
||||
@@ -41,7 +41,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1667,6 +1676,9 @@ static int airoha_dev_stop(struct net_de
|
||||
@@ -1672,6 +1681,9 @@ static int airoha_dev_stop(struct net_de
|
||||
for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++)
|
||||
netdev_tx_reset_subqueue(dev, i);
|
||||
|
||||
@@ -51,7 +51,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (atomic_dec_and_test(&qdma->users)) {
|
||||
airoha_qdma_clear(qdma, REG_QDMA_GLOBAL_CFG,
|
||||
GLOBAL_CFG_TX_DMA_EN_MASK |
|
||||
@@ -1760,7 +1772,7 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1765,7 +1777,7 @@ static int airoha_dev_init(struct net_de
|
||||
struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
struct airoha_qdma *qdma = port->qdma;
|
||||
struct airoha_eth *eth = qdma->eth;
|
||||
@@ -60,7 +60,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
u8 ppe_id;
|
||||
|
||||
airoha_set_macaddr(port, dev->dev_addr);
|
||||
@@ -1781,7 +1793,7 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1786,7 +1798,7 @@ static int airoha_dev_init(struct net_de
|
||||
if (airoha_ppe_is_enabled(eth, 1)) {
|
||||
/* For PPE2 always use secondary cpu port. */
|
||||
fe_cpu_port = FE_PSE_PORT_CDM2;
|
||||
@@ -69,7 +69,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
break;
|
||||
}
|
||||
fallthrough;
|
||||
@@ -1790,13 +1802,11 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1795,13 +1807,11 @@ static int airoha_dev_init(struct net_de
|
||||
|
||||
/* For PPE1 select cpu port according to the running QDMA. */
|
||||
fe_cpu_port = qdma_id ? FE_PSE_PORT_CDM2 : FE_PSE_PORT_CDM1;
|
||||
|
||||
+8
-8
@@ -39,7 +39,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1770,11 +1770,13 @@ static int airhoha_set_gdm2_loopback(str
|
||||
@@ -1775,11 +1775,13 @@ static int airhoha_set_gdm2_loopback(str
|
||||
static int airoha_dev_init(struct net_device *dev)
|
||||
{
|
||||
struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
@@ -55,7 +55,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
airoha_set_macaddr(port, dev->dev_addr);
|
||||
|
||||
switch (port->id) {
|
||||
@@ -1798,7 +1800,7 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1803,7 +1805,7 @@ static int airoha_dev_init(struct net_de
|
||||
}
|
||||
fallthrough;
|
||||
default: {
|
||||
@@ -64,7 +64,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
/* For PPE1 select cpu port according to the running QDMA. */
|
||||
fe_cpu_port = qdma_id ? FE_PSE_PORT_CDM2 : FE_PSE_PORT_CDM1;
|
||||
@@ -2882,11 +2884,10 @@ bool airoha_is_valid_gdm_port(struct air
|
||||
@@ -2887,11 +2889,10 @@ bool airoha_is_valid_gdm_port(struct air
|
||||
}
|
||||
|
||||
static int airoha_alloc_gdm_port(struct airoha_eth *eth,
|
||||
@@ -77,7 +77,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
struct net_device *dev;
|
||||
int err, p;
|
||||
u32 id;
|
||||
@@ -2917,7 +2918,6 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2922,7 +2923,6 @@ static int airoha_alloc_gdm_port(struct
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
dev->netdev_ops = &airoha_netdev_ops;
|
||||
dev->ethtool_ops = &airoha_ethtool_ops;
|
||||
dev->max_mtu = AIROHA_MAX_MTU;
|
||||
@@ -2929,7 +2929,6 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2934,7 +2934,6 @@ static int airoha_alloc_gdm_port(struct
|
||||
dev->features |= dev->hw_features;
|
||||
dev->vlan_features = dev->hw_features;
|
||||
dev->dev.of_node = np;
|
||||
@@ -93,7 +93,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
SET_NETDEV_DEV(dev, eth->dev);
|
||||
|
||||
/* reserve hw queues for HTB offloading */
|
||||
@@ -2950,7 +2949,7 @@ static int airoha_alloc_gdm_port(struct
|
||||
@@ -2955,7 +2954,7 @@ static int airoha_alloc_gdm_port(struct
|
||||
port = netdev_priv(dev);
|
||||
u64_stats_init(&port->stats.syncp);
|
||||
spin_lock_init(&port->stats.lock);
|
||||
@@ -102,7 +102,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
port->dev = dev;
|
||||
port->id = id;
|
||||
eth->ports[p] = port;
|
||||
@@ -3050,7 +3049,6 @@ static int airoha_probe(struct platform_
|
||||
@@ -3055,7 +3054,6 @@ static int airoha_probe(struct platform_
|
||||
for (i = 0; i < ARRAY_SIZE(eth->qdma); i++)
|
||||
airoha_qdma_start_napi(ð->qdma[i]);
|
||||
|
||||
@@ -110,7 +110,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
for_each_child_of_node(pdev->dev.of_node, np) {
|
||||
if (!of_device_is_compatible(np, "airoha,eth-mac"))
|
||||
continue;
|
||||
@@ -3058,7 +3056,7 @@ static int airoha_probe(struct platform_
|
||||
@@ -3063,7 +3061,7 @@ static int airoha_probe(struct platform_
|
||||
if (!of_device_is_available(np))
|
||||
continue;
|
||||
|
||||
|
||||
+3
-3
@@ -32,7 +32,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1771,8 +1771,7 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1776,8 +1776,7 @@ static int airoha_dev_init(struct net_de
|
||||
{
|
||||
struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
struct airoha_eth *eth = port->eth;
|
||||
@@ -42,7 +42,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
/* QDMA0 is used for lan ports while QDMA1 is used for WAN ports */
|
||||
port->qdma = ð->qdma[!airoha_is_lan_gdm_port(port)];
|
||||
@@ -1790,28 +1789,13 @@ static int airoha_dev_init(struct net_de
|
||||
@@ -1795,28 +1794,13 @@ static int airoha_dev_init(struct net_de
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
@@ -75,7 +75,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1914,7 +1898,7 @@ static u32 airoha_get_dsa_tag(struct sk_
|
||||
@@ -1919,7 +1903,7 @@ static u32 airoha_get_dsa_tag(struct sk_
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
+7
-7
@@ -23,7 +23,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1384,6 +1384,33 @@ static int airoha_qdma_init(struct platf
|
||||
@@ -1389,6 +1389,33 @@ static int airoha_qdma_init(struct platf
|
||||
return airoha_qdma_hw_init(qdma);
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static int airoha_hw_init(struct platform_device *pdev,
|
||||
struct airoha_eth *eth)
|
||||
{
|
||||
@@ -1411,41 +1438,30 @@ static int airoha_hw_init(struct platfor
|
||||
@@ -1416,41 +1443,30 @@ static int airoha_hw_init(struct platfor
|
||||
for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) {
|
||||
err = airoha_qdma_init(pdev, eth, ð->qdma[i]);
|
||||
if (err)
|
||||
@@ -110,7 +110,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
|
||||
static void airoha_qdma_start_napi(struct airoha_qdma *qdma)
|
||||
@@ -3028,7 +3044,7 @@ static int airoha_probe(struct platform_
|
||||
@@ -3033,7 +3049,7 @@ static int airoha_probe(struct platform_
|
||||
|
||||
err = airoha_hw_init(pdev, eth);
|
||||
if (err)
|
||||
@@ -119,7 +119,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(eth->qdma); i++)
|
||||
airoha_qdma_start_napi(ð->qdma[i]);
|
||||
@@ -3056,10 +3072,6 @@ static int airoha_probe(struct platform_
|
||||
@@ -3061,10 +3077,6 @@ static int airoha_probe(struct platform_
|
||||
error_napi_stop:
|
||||
for (i = 0; i < ARRAY_SIZE(eth->qdma); i++)
|
||||
airoha_qdma_stop_napi(ð->qdma[i]);
|
||||
@@ -130,7 +130,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(eth->ports); i++) {
|
||||
struct airoha_gdm_port *port = eth->ports[i];
|
||||
@@ -3071,6 +3083,8 @@ error_hw_cleanup:
|
||||
@@ -3076,6 +3088,8 @@ error_hw_cleanup:
|
||||
unregister_netdev(port->dev);
|
||||
airoha_metadata_dst_free(port);
|
||||
}
|
||||
@@ -139,7 +139,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
free_netdev(eth->napi_dev);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
||||
@@ -3082,10 +3096,8 @@ static void airoha_remove(struct platfor
|
||||
@@ -3087,10 +3101,8 @@ static void airoha_remove(struct platfor
|
||||
struct airoha_eth *eth = platform_get_drvdata(pdev);
|
||||
int i;
|
||||
|
||||
@@ -151,7 +151,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(eth->ports); i++) {
|
||||
struct airoha_gdm_port *port = eth->ports[i];
|
||||
@@ -3096,9 +3108,9 @@ static void airoha_remove(struct platfor
|
||||
@@ -3101,9 +3113,9 @@ static void airoha_remove(struct platfor
|
||||
unregister_netdev(port->dev);
|
||||
airoha_metadata_dst_free(port);
|
||||
}
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2973,6 +2973,8 @@ static int airoha_register_gdm_devices(s
|
||||
@@ -2978,6 +2978,8 @@ static int airoha_register_gdm_devices(s
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
From 656121b155030086b01cfce9bd31b0c925ee6860 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Wed, 8 Apr 2026 20:26:56 +0200
|
||||
Subject: [PATCH] net: airoha: Add missing RX_CPU_IDX() configuration in
|
||||
airoha_qdma_cleanup_rx_queue()
|
||||
|
||||
When the descriptor index written in REG_RX_CPU_IDX() is equal to the one
|
||||
stored in REG_RX_DMA_IDX(), the hw will stop since the QDMA RX ring is
|
||||
empty.
|
||||
Add missing REG_RX_CPU_IDX() configuration in airoha_qdma_cleanup_rx_queue
|
||||
routine during QDMA RX ring cleanup.
|
||||
|
||||
Fixes: 514aac359987 ("net: airoha: Add missing cleanup bits in airoha_qdma_cleanup_rx_queue()")
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260408-airoha-cpu-idx-airoha_qdma_cleanup_rx_queue-v1-1-8efa64844308@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -824,6 +824,11 @@ static void airoha_qdma_cleanup_rx_queue
|
||||
}
|
||||
|
||||
q->head = q->tail;
|
||||
+ /* Set RX_DMA_IDX to RX_CPU_IDX to notify the hw the QDMA RX ring is
|
||||
+ * empty.
|
||||
+ */
|
||||
+ airoha_qdma_rmw(qdma, REG_RX_CPU_IDX(qid), RX_RING_CPU_IDX_MASK,
|
||||
+ FIELD_PREP(RX_RING_CPU_IDX_MASK, q->head));
|
||||
airoha_qdma_rmw(qdma, REG_RX_DMA_IDX(qid), RX_RING_DMA_IDX_MASK,
|
||||
FIELD_PREP(RX_RING_DMA_IDX_MASK, q->tail));
|
||||
}
|
||||
-61
@@ -1,61 +0,0 @@
|
||||
From 379050947a1828826ad7ea50c95245a56929b35a Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Mon, 20 Apr 2026 10:07:47 +0200
|
||||
Subject: [PATCH] net: airoha: Move ndesc initialization at end of
|
||||
airoha_qdma_init_rx_queue()
|
||||
|
||||
If queue entry or DMA descriptor list allocation fails in
|
||||
airoha_qdma_init_rx_queue routine, airoha_qdma_cleanup() will trigger a
|
||||
NULL pointer dereference running netif_napi_del() for RX queue NAPIs
|
||||
since netif_napi_add() has never been executed to this particular RX NAPI.
|
||||
The issue is due to the early ndesc initialization in
|
||||
airoha_qdma_init_rx_queue() since airoha_qdma_cleanup() relies on ndesc
|
||||
value to check if the queue is properly initialized. Fix the issue moving
|
||||
ndesc initialization at end of airoha_qdma_init_tx routine.
|
||||
Move page_pool allocation after descriptor list allocation in order to
|
||||
avoid memory leaks if desc allocation fails.
|
||||
|
||||
Fixes: 23020f049327 ("net: airoha: Introduce ethernet support for EN7581 SoC")
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260420-airoha_qdma_init_rx_queue-fix-v2-1-d99347e5c18d@kernel.org
|
||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -745,14 +745,18 @@ static int airoha_qdma_init_rx_queue(str
|
||||
dma_addr_t dma_addr;
|
||||
|
||||
q->buf_size = PAGE_SIZE / 2;
|
||||
- q->ndesc = ndesc;
|
||||
q->qdma = qdma;
|
||||
|
||||
- q->entry = devm_kzalloc(eth->dev, q->ndesc * sizeof(*q->entry),
|
||||
+ q->entry = devm_kzalloc(eth->dev, ndesc * sizeof(*q->entry),
|
||||
GFP_KERNEL);
|
||||
if (!q->entry)
|
||||
return -ENOMEM;
|
||||
|
||||
+ q->desc = dmam_alloc_coherent(eth->dev, ndesc * sizeof(*q->desc),
|
||||
+ &dma_addr, GFP_KERNEL);
|
||||
+ if (!q->desc)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
q->page_pool = page_pool_create(&pp_params);
|
||||
if (IS_ERR(q->page_pool)) {
|
||||
int err = PTR_ERR(q->page_pool);
|
||||
@@ -761,11 +765,7 @@ static int airoha_qdma_init_rx_queue(str
|
||||
return err;
|
||||
}
|
||||
|
||||
- q->desc = dmam_alloc_coherent(eth->dev, q->ndesc * sizeof(*q->desc),
|
||||
- &dma_addr, GFP_KERNEL);
|
||||
- if (!q->desc)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
+ q->ndesc = ndesc;
|
||||
netif_napi_add(eth->napi_dev, &q->napi, airoha_qdma_rx_napi_poll);
|
||||
|
||||
airoha_qdma_wr(qdma, REG_RX_RING_BASE(qid), dma_addr);
|
||||
@@ -108,7 +108,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
+ fwnode_handle_put(child);
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+ }
|
||||
+ led->rst = __of_reset_control_get(np, NULL, 0, 0, 0, true);
|
||||
+ led->rst = __of_reset_control_get(np, NULL, 0, RESET_CONTROL_EXCLUSIVE);
|
||||
+ if (IS_ERR(led->rst))
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ Subject: [PATCH] bcmgenet: constrain max DMA burst length
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
|
||||
@@ -31,7 +31,7 @@
|
||||
@@ -34,7 +34,7 @@
|
||||
#define ENET_PAD 8
|
||||
#define ENET_MAX_MTU_SIZE (ETH_DATA_LEN + ETH_HLEN + VLAN_HLEN + \
|
||||
ENET_BRCM_TAG_LEN + ETH_FCS_LEN + ENET_PAD)
|
||||
|
||||
+6
-8
@@ -18,7 +18,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
@@ -2657,7 +2657,7 @@ static void bcmgenet_init_tx_ring(struct
|
||||
@@ -2675,7 +2675,7 @@ static void bcmgenet_init_tx_ring(struct
|
||||
|
||||
bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_PROD_INDEX);
|
||||
bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_CONS_INDEX);
|
||||
@@ -27,17 +27,15 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
/* Disable rate control for now */
|
||||
bcmgenet_tdma_ring_writel(priv, index, flow_period_val,
|
||||
TDMA_FLOW_PERIOD);
|
||||
@@ -4132,9 +4132,12 @@ static int bcmgenet_probe(struct platfor
|
||||
@@ -4074,8 +4074,10 @@ static int bcmgenet_probe(struct platfor
|
||||
netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1);
|
||||
|
||||
/* Set default coalescing parameters */
|
||||
- for (i = 0; i < priv->hw_params->rx_queues; i++)
|
||||
+ for (i = 0; i < priv->hw_params->rx_queues; i++) {
|
||||
- for (i = 0; i <= priv->hw_params->rx_queues; i++)
|
||||
+ for (i = 0; i <= priv->hw_params->rx_queues; i++) {
|
||||
priv->rx_rings[i].rx_max_coalesced_frames = 1;
|
||||
+ priv->rx_rings[i].rx_coalesce_usecs = 50;
|
||||
+ }
|
||||
priv->rx_rings[DESC_INDEX].rx_max_coalesced_frames = 1;
|
||||
+ priv->rx_rings[DESC_INDEX].rx_coalesce_usecs = 50;
|
||||
|
||||
/* libphy will determine the link state */
|
||||
netif_carrier_off(dev);
|
||||
/* Initialize u64 stats seq counter for 32bit machines */
|
||||
for (i = 0; i <= priv->hw_params->rx_queues; i++)
|
||||
|
||||
+3
-3
@@ -37,7 +37,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
|
||||
|
||||
--- a/drivers/gpu/drm/v3d/v3d_drv.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
|
||||
@@ -333,6 +333,21 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -341,6 +341,21 @@ static int v3d_platform_drm_probe(struct
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
|
||||
if (v3d->ver < 41) {
|
||||
ret = map_regs(v3d, &v3d->gca_regs, "gca");
|
||||
if (ret)
|
||||
@@ -362,6 +377,8 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -370,6 +385,8 @@ static int v3d_platform_drm_probe(struct
|
||||
ret = v3d_sysfs_init(dev);
|
||||
if (ret)
|
||||
goto drm_unregister;
|
||||
@@ -187,7 +187,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
|
||||
kref_init(&job->refcount);
|
||||
|
||||
return 0;
|
||||
@@ -1393,3 +1438,14 @@ fail:
|
||||
@@ -1398,3 +1443,14 @@ fail:
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
+3
-3
@@ -32,7 +32,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
#include <uapi/drm/v3d_drm.h>
|
||||
|
||||
#include "v3d_drv.h"
|
||||
@@ -263,6 +267,8 @@ map_regs(struct v3d_dev *v3d, void __iom
|
||||
@@ -271,6 +275,8 @@ map_regs(struct v3d_dev *v3d, void __iom
|
||||
static int v3d_platform_drm_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@@ -41,7 +41,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
struct drm_device *drm;
|
||||
struct v3d_dev *v3d;
|
||||
int ret;
|
||||
@@ -339,7 +345,20 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -347,7 +353,20 @@ static int v3d_platform_drm_probe(struct
|
||||
dev_err(dev, "Failed to get clock (%ld)\n", PTR_ERR(v3d->clk));
|
||||
return PTR_ERR(v3d->clk);
|
||||
}
|
||||
@@ -63,7 +63,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
/* For downclocking, drop it to the minimum frequency we can get from
|
||||
* the CPRMAN clock generator dividing off our parent. The divider is
|
||||
* 4 bits, but ask for just higher than that so that rounding doesn't
|
||||
@@ -377,7 +396,7 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -385,7 +404,7 @@ static int v3d_platform_drm_probe(struct
|
||||
ret = v3d_sysfs_init(dev);
|
||||
if (ret)
|
||||
goto drm_unregister;
|
||||
|
||||
+2
-2
@@ -27,7 +27,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
@@ -67,6 +67,9 @@
|
||||
@@ -65,6 +65,9 @@
|
||||
|
||||
/* Forward declarations */
|
||||
static void bcmgenet_set_rx_mode(struct net_device *dev);
|
||||
@@ -37,7 +37,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
static inline void bcmgenet_writel(u32 value, void __iomem *offset)
|
||||
{
|
||||
@@ -2486,6 +2489,11 @@ static void reset_umac(struct bcmgenet_p
|
||||
@@ -2513,6 +2516,11 @@ static void reset_umac(struct bcmgenet_p
|
||||
bcmgenet_rbuf_ctrl_set(priv, 0);
|
||||
udelay(10);
|
||||
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
@@ -67,7 +67,7 @@
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
/* Forward declarations */
|
||||
static void bcmgenet_set_rx_mode(struct net_device *dev);
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
@@ -70,6 +70,9 @@ static void bcmgenet_set_rx_mode(struct
|
||||
@@ -68,6 +68,9 @@ static void bcmgenet_set_rx_mode(struct
|
||||
static bool skip_umac_reset = false;
|
||||
module_param(skip_umac_reset, bool, 0444);
|
||||
MODULE_PARM_DESC(skip_umac_reset, "Skip UMAC reset step");
|
||||
@@ -26,7 +26,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
static inline void bcmgenet_writel(u32 value, void __iomem *offset)
|
||||
{
|
||||
@@ -3423,6 +3426,17 @@ static int bcmgenet_open(struct net_devi
|
||||
@@ -3360,6 +3363,17 @@ static int bcmgenet_open(struct net_devi
|
||||
|
||||
bcmgenet_phy_pause_set(dev, priv->rx_pause, priv->tx_pause);
|
||||
|
||||
|
||||
+10
-10
@@ -233,7 +233,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -673,18 +748,25 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
@@ -671,18 +746,25 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
switch (chan->direction) {
|
||||
case DMA_MEM_TO_DEV:
|
||||
reg_width = __ffs(chan->config.dst_addr_width);
|
||||
@@ -261,7 +261,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
|
||||
DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
|
||||
block_ts = len >> reg_width;
|
||||
@@ -720,9 +802,6 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
@@ -718,9 +800,6 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
}
|
||||
|
||||
hw_desc->lli->block_ts_lo = cpu_to_le32(block_ts - 1);
|
||||
@@ -271,7 +271,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
hw_desc->lli->ctl_lo = cpu_to_le32(ctllo);
|
||||
|
||||
set_desc_src_master(hw_desc);
|
||||
@@ -817,6 +896,8 @@ dw_axi_dma_chan_prep_cyclic(struct dma_c
|
||||
@@ -815,6 +894,8 @@ dw_axi_dma_chan_prep_cyclic(struct dma_c
|
||||
src_addr += segment_len;
|
||||
}
|
||||
|
||||
@@ -280,7 +280,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
llp = desc->hw_desc[0].llp;
|
||||
|
||||
/* Managed transfer list */
|
||||
@@ -896,6 +977,8 @@ dw_axi_dma_chan_prep_slave_sg(struct dma
|
||||
@@ -894,6 +975,8 @@ dw_axi_dma_chan_prep_slave_sg(struct dma
|
||||
} while (len >= segment_len);
|
||||
}
|
||||
|
||||
@@ -289,7 +289,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
/* Set end-of-link to the last link descriptor of list */
|
||||
set_desc_last(&desc->hw_desc[num_sgs - 1]);
|
||||
|
||||
@@ -1003,6 +1086,8 @@ dma_chan_prep_dma_memcpy(struct dma_chan
|
||||
@@ -1001,6 +1084,8 @@ dma_chan_prep_dma_memcpy(struct dma_chan
|
||||
num++;
|
||||
}
|
||||
|
||||
@@ -298,7 +298,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
/* Set end-of-link to the last link descriptor of list */
|
||||
set_desc_last(&desc->hw_desc[num - 1]);
|
||||
/* Managed transfer list */
|
||||
@@ -1051,7 +1136,7 @@ static void axi_chan_dump_lli(struct axi
|
||||
@@ -1049,7 +1134,7 @@ static void axi_chan_dump_lli(struct axi
|
||||
static void axi_chan_list_dump_lli(struct axi_dma_chan *chan,
|
||||
struct axi_dma_desc *desc_head)
|
||||
{
|
||||
@@ -307,7 +307,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
int i;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
@@ -1094,11 +1179,11 @@ out:
|
||||
@@ -1092,11 +1177,11 @@ out:
|
||||
|
||||
static void axi_chan_block_xfer_complete(struct axi_dma_chan *chan)
|
||||
{
|
||||
@@ -320,7 +320,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
u64 llp;
|
||||
int i;
|
||||
|
||||
@@ -1120,6 +1205,7 @@ static void axi_chan_block_xfer_complete
|
||||
@@ -1118,6 +1203,7 @@ static void axi_chan_block_xfer_complete
|
||||
if (chan->cyclic) {
|
||||
desc = vd_to_axi_desc(vd);
|
||||
if (desc) {
|
||||
@@ -328,7 +328,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
llp = lo_hi_readq(chan->chan_regs + CH_LLP);
|
||||
for (i = 0; i < count; i++) {
|
||||
hw_desc = &desc->hw_desc[i];
|
||||
@@ -1140,6 +1226,9 @@ static void axi_chan_block_xfer_complete
|
||||
@@ -1138,6 +1224,9 @@ static void axi_chan_block_xfer_complete
|
||||
/* Remove the completed descriptor from issued list before completing */
|
||||
list_del(&vd->node);
|
||||
vchan_cookie_complete(vd);
|
||||
@@ -338,7 +338,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -1397,6 +1486,10 @@ static int parse_device_properties(struc
|
||||
@@ -1395,6 +1484,10 @@ static int parse_device_properties(struc
|
||||
|
||||
chip->dw->hdata->nr_masters = tmp;
|
||||
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ Subject: [PATCH] drm/v3d: add brcm,2712-v3d as a compatible V3D device
|
||||
|
||||
--- a/drivers/gpu/drm/v3d/v3d_drv.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
|
||||
@@ -249,6 +249,7 @@ static const struct drm_driver v3d_drm_d
|
||||
@@ -257,6 +257,7 @@ static const struct drm_driver v3d_drm_d
|
||||
};
|
||||
|
||||
static const struct of_device_id v3d_of_match[] = {
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
|
||||
|
||||
--- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
|
||||
+++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
|
||||
@@ -963,6 +963,9 @@ dw_axi_dma_chan_prep_slave_sg(struct dma
|
||||
@@ -961,6 +961,9 @@ dw_axi_dma_chan_prep_slave_sg(struct dma
|
||||
mem = sg_dma_address(sg);
|
||||
len = sg_dma_len(sg);
|
||||
num_segments = DIV_ROUND_UP(sg_dma_len(sg), axi_block_len);
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
|
||||
+++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
|
||||
@@ -1563,6 +1563,7 @@ static int dw_probe(struct platform_devi
|
||||
@@ -1561,6 +1561,7 @@ static int dw_probe(struct platform_devi
|
||||
struct dw_axi_dma *dw;
|
||||
struct dw_axi_dma_hcfg *hdata;
|
||||
struct reset_control *resets;
|
||||
@@ -27,7 +27,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
unsigned int flags;
|
||||
u32 i;
|
||||
int ret;
|
||||
@@ -1673,9 +1674,21 @@ static int dw_probe(struct platform_devi
|
||||
@@ -1671,9 +1672,21 @@ static int dw_probe(struct platform_devi
|
||||
* Synopsis DesignWare AxiDMA datasheet mentioned Maximum
|
||||
* supported blocks is 1024. Device register width is 4 bytes.
|
||||
* Therefore, set constraint to 1024 * 4.
|
||||
|
||||
+3
-3
@@ -47,7 +47,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
static inline const char *axi_chan_name(struct axi_dma_chan *chan)
|
||||
{
|
||||
return dma_chan_name(&chan->vc.chan);
|
||||
@@ -732,41 +741,41 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
@@ -730,41 +739,41 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
size_t axi_block_ts;
|
||||
size_t block_ts;
|
||||
u32 ctllo, ctlhi;
|
||||
@@ -99,7 +99,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
|
||||
DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
|
||||
block_ts = len >> reg_width;
|
||||
@@ -807,6 +816,12 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
@@ -805,6 +814,12 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
set_desc_src_master(hw_desc);
|
||||
|
||||
hw_desc->len = len;
|
||||
@@ -112,7 +112,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -823,9 +838,6 @@ static size_t calculate_block_len(struct
|
||||
@@ -821,9 +836,6 @@ static size_t calculate_block_len(struct
|
||||
case DMA_MEM_TO_DEV:
|
||||
data_width = BIT(chan->chip->dw->hdata->m_data_width);
|
||||
mem_width = __ffs(data_width | dma_addr | buf_len);
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
|
||||
+++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
|
||||
@@ -771,6 +771,18 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
@@ -769,6 +769,18 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
case DMA_DEV_TO_MEM:
|
||||
reg_burst_msize = axi_dma_encode_msize(chan->config.src_maxburst);
|
||||
reg_width = __ffs(chan->config.src_addr_width);
|
||||
|
||||
+3
-3
@@ -18,7 +18,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/nvme/host/pci.c
|
||||
+++ b/drivers/nvme/host/pci.c
|
||||
@@ -2112,6 +2112,7 @@ static void nvme_free_host_mem(struct nv
|
||||
@@ -2113,6 +2113,7 @@ static void nvme_free_host_mem(struct nv
|
||||
dev->nr_host_mem_descs = 0;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred,
|
||||
u32 chunk_size)
|
||||
{
|
||||
@@ -2180,9 +2181,11 @@ out:
|
||||
@@ -2181,9 +2182,11 @@ out:
|
||||
dev->host_mem_descs = NULL;
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -38,7 +38,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
u64 min_chunk = min_t(u64, preferred, PAGE_SIZE * MAX_ORDER_NR_PAGES);
|
||||
u64 hmminds = max_t(u32, dev->ctrl.hmminds * 4096, PAGE_SIZE * 2);
|
||||
u64 chunk_size;
|
||||
@@ -2195,6 +2198,7 @@ static int nvme_alloc_host_mem(struct nv
|
||||
@@ -2196,6 +2199,7 @@ static int nvme_alloc_host_mem(struct nv
|
||||
nvme_free_host_mem(dev);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/kernel/cgroup/cgroup.c
|
||||
+++ b/kernel/cgroup/cgroup.c
|
||||
@@ -6933,6 +6933,39 @@ static int __init cgroup_disable(char *s
|
||||
@@ -6935,6 +6935,39 @@ static int __init cgroup_disable(char *s
|
||||
}
|
||||
__setup("cgroup_disable=", cgroup_disable);
|
||||
|
||||
|
||||
+1
-1
@@ -78,7 +78,7 @@ Reviewed-by: Maíra Canal <mcanal@igalia.com>
|
||||
kref_init(&job->refcount);
|
||||
|
||||
return 0;
|
||||
@@ -1350,7 +1368,7 @@ v3d_submit_cpu_ioctl(struct drm_device *
|
||||
@@ -1355,7 +1373,7 @@ v3d_submit_cpu_ioctl(struct drm_device *
|
||||
trace_v3d_submit_cpu_ioctl(&v3d->drm, cpu_job->job_type);
|
||||
|
||||
ret = v3d_job_init(v3d, file_priv, &cpu_job->base,
|
||||
|
||||
+3
-3
@@ -29,7 +29,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20241202140615.74802-1-chris
|
||||
|
||||
--- a/drivers/gpu/drm/v3d/v3d_drv.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
|
||||
@@ -228,6 +228,7 @@ static const struct drm_ioctl_desc v3d_d
|
||||
@@ -236,6 +236,7 @@ static const struct drm_ioctl_desc v3d_d
|
||||
DRM_IOCTL_DEF_DRV(V3D_PERFMON_GET_VALUES, v3d_perfmon_get_values_ioctl, DRM_RENDER_ALLOW),
|
||||
DRM_IOCTL_DEF_DRV(V3D_SUBMIT_CPU, v3d_submit_cpu_ioctl, DRM_RENDER_ALLOW | DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(V3D_PERFMON_GET_COUNTER, v3d_perfmon_get_counter_ioctl, DRM_RENDER_ALLOW),
|
||||
@@ -145,7 +145,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20241202140615.74802-1-chris
|
||||
static void
|
||||
--- a/drivers/gpu/drm/v3d/v3d_submit.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_submit.c
|
||||
@@ -1044,6 +1044,11 @@ v3d_submit_cl_ioctl(struct drm_device *d
|
||||
@@ -1049,6 +1049,11 @@ v3d_submit_cl_ioctl(struct drm_device *d
|
||||
goto fail;
|
||||
|
||||
if (args->perfmon_id) {
|
||||
@@ -157,7 +157,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20241202140615.74802-1-chris
|
||||
render->base.perfmon = v3d_perfmon_find(v3d_priv,
|
||||
args->perfmon_id);
|
||||
|
||||
@@ -1259,6 +1264,11 @@ v3d_submit_csd_ioctl(struct drm_device *
|
||||
@@ -1264,6 +1269,11 @@ v3d_submit_csd_ioctl(struct drm_device *
|
||||
goto fail;
|
||||
|
||||
if (args->perfmon_id) {
|
||||
|
||||
+7
-7
@@ -211,7 +211,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
return 0;
|
||||
case DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT:
|
||||
args->value = 1;
|
||||
@@ -260,15 +260,44 @@ static const struct drm_driver v3d_drm_d
|
||||
@@ -268,15 +268,44 @@ static const struct drm_driver v3d_drm_d
|
||||
};
|
||||
|
||||
static const struct of_device_id v3d_of_match[] = {
|
||||
@@ -261,7 +261,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
static int
|
||||
map_regs(struct v3d_dev *v3d, void __iomem **regs, const char *name)
|
||||
{
|
||||
@@ -283,6 +312,7 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -291,6 +320,7 @@ static int v3d_platform_drm_probe(struct
|
||||
struct device_node *node;
|
||||
struct drm_device *drm;
|
||||
struct v3d_dev *v3d;
|
||||
@@ -269,7 +269,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
int ret;
|
||||
u32 mmu_debug;
|
||||
u32 ident1, ident3;
|
||||
@@ -296,6 +326,9 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -304,6 +334,9 @@ static int v3d_platform_drm_probe(struct
|
||||
|
||||
platform_set_drvdata(pdev, drm);
|
||||
|
||||
@@ -279,7 +279,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
ret = map_regs(v3d, &v3d->hub_regs, "hub");
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -304,6 +337,12 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -312,6 +345,12 @@ static int v3d_platform_drm_probe(struct
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -292,7 +292,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
v3d->clk = devm_clk_get_optional(dev, NULL);
|
||||
if (IS_ERR(v3d->clk))
|
||||
return dev_err_probe(dev, PTR_ERR(v3d->clk), "Failed to get V3D clock\n");
|
||||
@@ -314,6 +353,8 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -322,6 +361,8 @@ static int v3d_platform_drm_probe(struct
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -301,7 +301,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
mmu_debug = V3D_READ(V3D_MMU_DEBUG_INFO);
|
||||
mask = DMA_BIT_MASK(30 + V3D_GET_FIELD(mmu_debug, V3D_MMU_PA_WIDTH));
|
||||
ret = dma_set_mask_and_coherent(dev, mask);
|
||||
@@ -327,6 +368,11 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -335,6 +376,11 @@ static int v3d_platform_drm_probe(struct
|
||||
ident1 = V3D_READ(V3D_HUB_IDENT1);
|
||||
v3d->ver = (V3D_GET_FIELD(ident1, V3D_HUB_IDENT1_TVER) * 10 +
|
||||
V3D_GET_FIELD(ident1, V3D_HUB_IDENT1_REV));
|
||||
@@ -313,7 +313,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
v3d->cores = V3D_GET_FIELD(ident1, V3D_HUB_IDENT1_NCORES);
|
||||
WARN_ON(v3d->cores > 1); /* multicore not yet implemented */
|
||||
|
||||
@@ -379,7 +425,7 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -387,7 +433,7 @@ static int v3d_platform_drm_probe(struct
|
||||
v3d->clk_down_rate =
|
||||
(clk_get_rate(clk_get_parent(v3d->clk)) / (1 << 4)) + 10000;
|
||||
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
|
||||
--- a/drivers/gpu/drm/v3d/v3d_drv.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
|
||||
@@ -487,6 +487,8 @@ static void v3d_platform_drm_remove(stru
|
||||
@@ -495,6 +495,8 @@ static void v3d_platform_drm_remove(stru
|
||||
dma_free_wc(v3d->drm.dev, 4096, v3d->mmu_scratch,
|
||||
v3d->mmu_scratch_paddr);
|
||||
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
|
||||
+++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
|
||||
@@ -750,11 +750,6 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
@@ -748,11 +748,6 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
|
||||
mem_width = __ffs(data_width | mem_addr | len);
|
||||
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
/* Use a reasonable upper limit otherwise residue reporting granularity grows large */
|
||||
mem_burst_msize = axi_dma_encode_msize(16);
|
||||
|
||||
@@ -799,6 +794,11 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
@@ -797,6 +792,11 @@ static int dw_axi_dma_set_hw_desc(struct
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
|
||||
--- a/drivers/gpu/drm/v3d/v3d_drv.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
|
||||
@@ -397,21 +397,18 @@ static int v3d_platform_drm_probe(struct
|
||||
@@ -405,21 +405,18 @@ static int v3d_platform_drm_probe(struct
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
From 5c9ceee75a90cd5db0d38d9dbfde6659194a9b5b Mon Sep 17 00:00:00 2001
|
||||
From: Sasha Levin <sashal@kernel.org>
|
||||
Date: Sun, 24 May 2026 10:29:50 -0400
|
||||
Subject: Revert "perf cgroup: Update metric leader in evlist__expand_cgroup"
|
||||
|
||||
This reverts commit d26e31446c0fa96feca0b7701243b42447225d33.
|
||||
|
||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
||||
---
|
||||
tools/perf/util/cgroup.c | 30 +++++++-----------------------
|
||||
1 file changed, 7 insertions(+), 23 deletions(-)
|
||||
|
||||
--- a/tools/perf/util/cgroup.c
|
||||
+++ b/tools/perf/util/cgroup.c
|
||||
@@ -417,6 +417,7 @@ int evlist__expand_cgroup(struct evlist
|
||||
struct rblist *metric_events, bool open_cgroup)
|
||||
{
|
||||
struct evlist *orig_list, *tmp_list;
|
||||
+ struct evsel *pos, *evsel, *leader;
|
||||
struct rblist orig_metric_events;
|
||||
struct cgroup *cgrp = NULL;
|
||||
struct cgroup_name *cn;
|
||||
@@ -455,7 +456,6 @@ int evlist__expand_cgroup(struct evlist
|
||||
goto out_err;
|
||||
|
||||
list_for_each_entry(cn, &cgroup_list, list) {
|
||||
- struct evsel *pos;
|
||||
char *name;
|
||||
|
||||
if (!cn->used)
|
||||
@@ -471,37 +471,21 @@ int evlist__expand_cgroup(struct evlist
|
||||
if (cgrp == NULL)
|
||||
continue;
|
||||
|
||||
- /* copy the list and set to the new cgroup. */
|
||||
+ leader = NULL;
|
||||
evlist__for_each_entry(orig_list, pos) {
|
||||
- struct evsel *evsel = evsel__clone(/*dest=*/NULL, pos);
|
||||
-
|
||||
+ evsel = evsel__clone(/*dest=*/NULL, pos);
|
||||
if (evsel == NULL)
|
||||
goto out_err;
|
||||
|
||||
- /* stash the copy during the copying. */
|
||||
- pos->priv = evsel;
|
||||
cgroup__put(evsel->cgrp);
|
||||
evsel->cgrp = cgroup__get(cgrp);
|
||||
|
||||
- evlist__add(tmp_list, evsel);
|
||||
- }
|
||||
- /* update leader information using stashed pointer to copy. */
|
||||
- evlist__for_each_entry(orig_list, pos) {
|
||||
- struct evsel *evsel = pos->priv;
|
||||
-
|
||||
- if (evsel__leader(pos))
|
||||
- evsel__set_leader(evsel, evsel__leader(pos)->priv);
|
||||
-
|
||||
- if (pos->metric_leader)
|
||||
- evsel->metric_leader = pos->metric_leader->priv;
|
||||
+ if (evsel__is_group_leader(pos))
|
||||
+ leader = evsel;
|
||||
+ evsel__set_leader(evsel, leader);
|
||||
|
||||
- if (pos->first_wildcard_match)
|
||||
- evsel->first_wildcard_match = pos->first_wildcard_match->priv;
|
||||
+ evlist__add(tmp_list, evsel);
|
||||
}
|
||||
- /* the stashed copy is no longer used. */
|
||||
- evlist__for_each_entry(orig_list, pos)
|
||||
- pos->priv = NULL;
|
||||
-
|
||||
/* cgroup__new() has a refcount, release it here */
|
||||
cgroup__put(cgrp);
|
||||
nr_cgroups++;
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
From f126428e706b7c6eb9aa1c79ced284b195d4e392 Mon Sep 17 00:00:00 2001
|
||||
From: Sasha Levin <sashal@kernel.org>
|
||||
Date: Sun, 24 May 2026 10:36:48 -0400
|
||||
Subject: Revert "perf tool_pmu: Fix aggregation on duration_time"
|
||||
|
||||
This reverts commit 310be445ab1028315627b326516f193511cb1c97.
|
||||
|
||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
||||
---
|
||||
tools/perf/util/tool_pmu.c | 8 +-------
|
||||
1 file changed, 1 insertion(+), 7 deletions(-)
|
||||
|
||||
--- a/tools/perf/util/tool_pmu.c
|
||||
+++ b/tools/perf/util/tool_pmu.c
|
||||
@@ -392,14 +392,8 @@ int evsel__read_tool(struct evsel *evsel
|
||||
delta_start *= 1000000000 / ticks_per_sec;
|
||||
}
|
||||
count->val = delta_start;
|
||||
+ count->ena = count->run = delta_start;
|
||||
count->lost = 0;
|
||||
- /*
|
||||
- * The values of enabled and running must make a ratio of 100%. The
|
||||
- * exact values don't matter as long as they are non-zero to avoid
|
||||
- * issues with evsel__count_has_error.
|
||||
- */
|
||||
- count->ena++;
|
||||
- count->run++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
From 8a11c59a5aab9423777ee1ead5e66174896c7adb Mon Sep 17 00:00:00 2001
|
||||
From: Sasha Levin <sashal@kernel.org>
|
||||
Date: Sun, 24 May 2026 10:36:48 -0400
|
||||
Subject: Revert "perf python: Add parse_events function"
|
||||
|
||||
This reverts commit 9cd264079fab9867dbc9fbc8a1e521996e3d7212.
|
||||
|
||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
||||
---
|
||||
tools/perf/util/cgroup.c | 2 +-
|
||||
tools/perf/util/evsel.c | 19 +++++--------
|
||||
tools/perf/util/evsel.h | 2 +-
|
||||
tools/perf/util/python.c | 61 ----------------------------------------
|
||||
4 files changed, 9 insertions(+), 75 deletions(-)
|
||||
|
||||
--- a/tools/perf/util/cgroup.c
|
||||
+++ b/tools/perf/util/cgroup.c
|
||||
@@ -473,7 +473,7 @@ int evlist__expand_cgroup(struct evlist
|
||||
|
||||
leader = NULL;
|
||||
evlist__for_each_entry(orig_list, pos) {
|
||||
- evsel = evsel__clone(/*dest=*/NULL, pos);
|
||||
+ evsel = evsel__clone(pos);
|
||||
if (evsel == NULL)
|
||||
goto out_err;
|
||||
|
||||
--- a/tools/perf/util/evsel.c
|
||||
+++ b/tools/perf/util/evsel.c
|
||||
@@ -332,7 +332,7 @@ static int evsel__copy_config_terms(stru
|
||||
* The assumption is that @orig is not configured nor opened yet.
|
||||
* So we only care about the attributes that can be set while it's parsed.
|
||||
*/
|
||||
-struct evsel *evsel__clone(struct evsel *dest, struct evsel *orig)
|
||||
+struct evsel *evsel__clone(struct evsel *orig)
|
||||
{
|
||||
struct evsel *evsel;
|
||||
|
||||
@@ -345,11 +345,7 @@ struct evsel *evsel__clone(struct evsel
|
||||
if (orig->bpf_obj)
|
||||
return NULL;
|
||||
|
||||
- if (dest)
|
||||
- evsel = dest;
|
||||
- else
|
||||
- evsel = evsel__new(&orig->core.attr);
|
||||
-
|
||||
+ evsel = evsel__new(&orig->core.attr);
|
||||
if (evsel == NULL)
|
||||
return NULL;
|
||||
|
||||
@@ -399,12 +395,11 @@ struct evsel *evsel__clone(struct evsel
|
||||
evsel->core.leader = orig->core.leader;
|
||||
|
||||
evsel->max_events = orig->max_events;
|
||||
- zfree(&evsel->unit);
|
||||
- if (orig->unit) {
|
||||
- evsel->unit = strdup(orig->unit);
|
||||
- if (evsel->unit == NULL)
|
||||
- goto out_err;
|
||||
- }
|
||||
+ free((char *)evsel->unit);
|
||||
+ evsel->unit = strdup(orig->unit);
|
||||
+ if (evsel->unit == NULL)
|
||||
+ goto out_err;
|
||||
+
|
||||
evsel->scale = orig->scale;
|
||||
evsel->snapshot = orig->snapshot;
|
||||
evsel->per_pkg = orig->per_pkg;
|
||||
--- a/tools/perf/util/evsel.h
|
||||
+++ b/tools/perf/util/evsel.h
|
||||
@@ -241,7 +241,7 @@ static inline struct evsel *evsel__new(s
|
||||
return evsel__new_idx(attr, 0);
|
||||
}
|
||||
|
||||
-struct evsel *evsel__clone(struct evsel *dest, struct evsel *orig);
|
||||
+struct evsel *evsel__clone(struct evsel *orig);
|
||||
|
||||
int copy_config_terms(struct list_head *dst, struct list_head *src);
|
||||
void free_config_terms(struct list_head *config_terms);
|
||||
--- a/tools/perf/util/python.c
|
||||
+++ b/tools/perf/util/python.c
|
||||
@@ -13,7 +13,6 @@
|
||||
#include "evsel.h"
|
||||
#include "event.h"
|
||||
#include "print_binary.h"
|
||||
-#include "strbuf.h"
|
||||
#include "thread_map.h"
|
||||
#include "trace-event.h"
|
||||
#include "mmap.h"
|
||||
@@ -1248,60 +1247,6 @@ static PyObject *pyrf__tracepoint(struct
|
||||
#endif // HAVE_LIBTRACEEVENT
|
||||
}
|
||||
|
||||
-static PyObject *pyrf_evsel__from_evsel(struct evsel *evsel)
|
||||
-{
|
||||
- struct pyrf_evsel *pevsel = PyObject_New(struct pyrf_evsel, &pyrf_evsel__type);
|
||||
-
|
||||
- if (!pevsel)
|
||||
- return NULL;
|
||||
-
|
||||
- memset(&pevsel->evsel, 0, sizeof(pevsel->evsel));
|
||||
- evsel__init(&pevsel->evsel, &evsel->core.attr, evsel->core.idx);
|
||||
-
|
||||
- evsel__clone(&pevsel->evsel, evsel);
|
||||
- return (PyObject *)pevsel;
|
||||
-}
|
||||
-
|
||||
-static PyObject *pyrf_evlist__from_evlist(struct evlist *evlist)
|
||||
-{
|
||||
- struct pyrf_evlist *pevlist = PyObject_New(struct pyrf_evlist, &pyrf_evlist__type);
|
||||
- struct evsel *pos;
|
||||
-
|
||||
- if (!pevlist)
|
||||
- return NULL;
|
||||
-
|
||||
- memset(&pevlist->evlist, 0, sizeof(pevlist->evlist));
|
||||
- evlist__init(&pevlist->evlist, evlist->core.all_cpus, evlist->core.threads);
|
||||
- evlist__for_each_entry(evlist, pos) {
|
||||
- struct pyrf_evsel *pevsel = (void *)pyrf_evsel__from_evsel(pos);
|
||||
-
|
||||
- evlist__add(&pevlist->evlist, &pevsel->evsel);
|
||||
- }
|
||||
- return (PyObject *)pevlist;
|
||||
-}
|
||||
-
|
||||
-static PyObject *pyrf__parse_events(PyObject *self, PyObject *args)
|
||||
-{
|
||||
- const char *input;
|
||||
- struct evlist evlist = {};
|
||||
- struct parse_events_error err;
|
||||
- PyObject *result;
|
||||
-
|
||||
- if (!PyArg_ParseTuple(args, "s", &input))
|
||||
- return NULL;
|
||||
-
|
||||
- parse_events_error__init(&err);
|
||||
- evlist__init(&evlist, NULL, NULL);
|
||||
- if (parse_events(&evlist, input, &err)) {
|
||||
- parse_events_error__print(&err, input);
|
||||
- PyErr_SetFromErrno(PyExc_OSError);
|
||||
- return NULL;
|
||||
- }
|
||||
- result = pyrf_evlist__from_evlist(&evlist);
|
||||
- evlist__exit(&evlist);
|
||||
- return result;
|
||||
-}
|
||||
-
|
||||
static PyMethodDef perf__methods[] = {
|
||||
{
|
||||
.ml_name = "tracepoint",
|
||||
@@ -1309,12 +1254,6 @@ static PyMethodDef perf__methods[] = {
|
||||
.ml_flags = METH_VARARGS | METH_KEYWORDS,
|
||||
.ml_doc = PyDoc_STR("Get tracepoint config.")
|
||||
},
|
||||
- {
|
||||
- .ml_name = "parse_events",
|
||||
- .ml_meth = (PyCFunction) pyrf__parse_events,
|
||||
- .ml_flags = METH_VARARGS,
|
||||
- .ml_doc = PyDoc_STR("Parse a string of events and return an evlist.")
|
||||
- },
|
||||
{ .ml_name = NULL, }
|
||||
};
|
||||
|
||||
+1387
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -24,7 +24,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ppp/ppp_generic.c
|
||||
+++ b/drivers/net/ppp/ppp_generic.c
|
||||
@@ -3504,6 +3504,10 @@ ppp_connect_channel(struct channel *pch,
|
||||
@@ -3507,6 +3507,10 @@ ppp_connect_channel(struct channel *pch,
|
||||
ret = -ENOTCONN;
|
||||
goto outl;
|
||||
}
|
||||
@@ -37,7 +37,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
ppp->file.hdrlen = pch->file.hdrlen;
|
||||
--- a/drivers/net/ppp/pppoe.c
|
||||
+++ b/drivers/net/ppp/pppoe.c
|
||||
@@ -693,6 +693,7 @@ static int pppoe_connect(struct socket *
|
||||
@@ -699,6 +699,7 @@ static int pppoe_connect(struct socket *
|
||||
po->chan.mtu = dev->mtu - sizeof(struct pppoe_hdr) - 2;
|
||||
po->chan.private = sk;
|
||||
po->chan.ops = &pppoe_chan_ops;
|
||||
|
||||
@@ -41,7 +41,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1541,23 +1528,12 @@ ppp_net_siocdevprivate(struct net_device
|
||||
@@ -1544,23 +1531,12 @@ ppp_net_siocdevprivate(struct net_device
|
||||
static void
|
||||
ppp_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats64)
|
||||
{
|
||||
@@ -66,7 +66,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
static int ppp_dev_init(struct net_device *dev)
|
||||
@@ -1655,6 +1631,7 @@ static void ppp_setup(struct net_device
|
||||
@@ -1658,6 +1634,7 @@ static void ppp_setup(struct net_device
|
||||
dev->type = ARPHRD_PPP;
|
||||
dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
|
||||
dev->priv_destructor = ppp_dev_priv_destructor;
|
||||
@@ -74,7 +74,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
netif_keep_dst(dev);
|
||||
}
|
||||
|
||||
@@ -1800,8 +1777,7 @@ ppp_send_frame(struct ppp *ppp, struct s
|
||||
@@ -1803,8 +1780,7 @@ ppp_send_frame(struct ppp *ppp, struct s
|
||||
#endif /* CONFIG_PPP_FILTER */
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
switch (proto) {
|
||||
case PPP_IP:
|
||||
@@ -2479,8 +2455,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp,
|
||||
@@ -2482,8 +2458,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp,
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
npi = proto_to_npindex(proto);
|
||||
if (npi < 0) {
|
||||
@@ -3308,14 +3283,25 @@ static void
|
||||
@@ -3311,14 +3286,25 @@ static void
|
||||
ppp_get_stats(struct ppp *ppp, struct ppp_stats *st)
|
||||
{
|
||||
struct slcompress *vj = ppp->vj;
|
||||
|
||||
@@ -114,7 +114,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
synchronize_rcu();
|
||||
|
||||
@@ -2144,10 +2144,9 @@ static int ppp_mp_explode(struct ppp *pp
|
||||
@@ -2147,10 +2147,9 @@ static int ppp_mp_explode(struct ppp *pp
|
||||
#endif /* CONFIG_PPP_MULTILINK */
|
||||
|
||||
/* Try to send data out on a channel */
|
||||
@@ -126,7 +126,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
spin_lock(&pch->downl);
|
||||
if (pch->chan) {
|
||||
@@ -2166,7 +2165,6 @@ static void __ppp_channel_push(struct ch
|
||||
@@ -2169,7 +2168,6 @@ static void __ppp_channel_push(struct ch
|
||||
spin_unlock(&pch->downl);
|
||||
/* see if there is anything from the attached unit to be sent */
|
||||
if (skb_queue_empty(&pch->file.xq)) {
|
||||
@@ -134,7 +134,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (ppp)
|
||||
__ppp_xmit_process(ppp, NULL);
|
||||
}
|
||||
@@ -2174,15 +2172,18 @@ static void __ppp_channel_push(struct ch
|
||||
@@ -2177,15 +2175,18 @@ static void __ppp_channel_push(struct ch
|
||||
|
||||
static void ppp_channel_push(struct channel *pch)
|
||||
{
|
||||
@@ -160,7 +160,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2284,6 +2285,7 @@ void
|
||||
@@ -2287,6 +2288,7 @@ void
|
||||
ppp_input(struct ppp_channel *chan, struct sk_buff *skb)
|
||||
{
|
||||
struct channel *pch = chan->ppp;
|
||||
@@ -168,7 +168,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
int proto;
|
||||
|
||||
if (!pch) {
|
||||
@@ -2295,18 +2297,19 @@ ppp_input(struct ppp_channel *chan, stru
|
||||
@@ -2298,18 +2300,19 @@ ppp_input(struct ppp_channel *chan, stru
|
||||
if (ppp_channel_bridge_input(pch, skb))
|
||||
return;
|
||||
|
||||
@@ -193,7 +193,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
/* put it on the channel queue */
|
||||
skb_queue_tail(&pch->file.rq, skb);
|
||||
/* drop old frames if queue too long */
|
||||
@@ -2315,11 +2318,11 @@ ppp_input(struct ppp_channel *chan, stru
|
||||
@@ -2318,11 +2321,11 @@ ppp_input(struct ppp_channel *chan, stru
|
||||
kfree_skb(skb);
|
||||
wake_up_interruptible(&pch->file.rwait);
|
||||
} else {
|
||||
@@ -207,7 +207,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
/* Put a 0-length skb in the receive queue as an error indication */
|
||||
@@ -2328,20 +2331,22 @@ ppp_input_error(struct ppp_channel *chan
|
||||
@@ -2331,20 +2334,22 @@ ppp_input_error(struct ppp_channel *chan
|
||||
{
|
||||
struct channel *pch = chan->ppp;
|
||||
struct sk_buff *skb;
|
||||
@@ -234,7 +234,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2889,7 +2894,6 @@ int ppp_register_net_channel(struct net
|
||||
@@ -2892,7 +2897,6 @@ int ppp_register_net_channel(struct net
|
||||
|
||||
pn = ppp_pernet(net);
|
||||
|
||||
@@ -242,7 +242,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
pch->chan = chan;
|
||||
pch->chan_net = get_net_track(net, &pch->ns_tracker, GFP_KERNEL);
|
||||
chan->ppp = pch;
|
||||
@@ -2900,7 +2904,7 @@ int ppp_register_net_channel(struct net
|
||||
@@ -2903,7 +2907,7 @@ int ppp_register_net_channel(struct net
|
||||
#endif /* CONFIG_PPP_MULTILINK */
|
||||
init_rwsem(&pch->chan_sem);
|
||||
spin_lock_init(&pch->downl);
|
||||
@@ -251,7 +251,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
spin_lock_bh(&pn->all_channels_lock);
|
||||
pch->file.index = ++pn->last_channel_index;
|
||||
@@ -2929,13 +2933,15 @@ int ppp_channel_index(struct ppp_channel
|
||||
@@ -2932,13 +2936,15 @@ int ppp_channel_index(struct ppp_channel
|
||||
int ppp_unit_number(struct ppp_channel *chan)
|
||||
{
|
||||
struct channel *pch = chan->ppp;
|
||||
@@ -271,7 +271,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
return unit;
|
||||
}
|
||||
@@ -2947,12 +2953,14 @@ char *ppp_dev_name(struct ppp_channel *c
|
||||
@@ -2950,12 +2956,14 @@ char *ppp_dev_name(struct ppp_channel *c
|
||||
{
|
||||
struct channel *pch = chan->ppp;
|
||||
char *name = NULL;
|
||||
@@ -290,7 +290,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
return name;
|
||||
}
|
||||
@@ -3475,9 +3483,9 @@ ppp_connect_channel(struct channel *pch,
|
||||
@@ -3478,9 +3486,9 @@ ppp_connect_channel(struct channel *pch,
|
||||
ppp = ppp_find_unit(pn, unit);
|
||||
if (!ppp)
|
||||
goto out;
|
||||
@@ -302,7 +302,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
rcu_dereference_protected(pch->bridge, lockdep_is_held(&pch->upl)))
|
||||
goto outl;
|
||||
|
||||
@@ -3502,13 +3510,13 @@ ppp_connect_channel(struct channel *pch,
|
||||
@@ -3505,13 +3513,13 @@ ppp_connect_channel(struct channel *pch,
|
||||
ppp->dev->hard_header_len = hdrlen;
|
||||
list_add_tail_rcu(&pch->clist, &ppp->channels);
|
||||
++ppp->n_channels;
|
||||
@@ -318,7 +318,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
out:
|
||||
mutex_unlock(&pn->all_ppp_mutex);
|
||||
return ret;
|
||||
@@ -3523,10 +3531,9 @@ ppp_disconnect_channel(struct channel *p
|
||||
@@ -3526,10 +3534,9 @@ ppp_disconnect_channel(struct channel *p
|
||||
struct ppp *ppp;
|
||||
int err = -EINVAL;
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
static int pppoe_device_event(struct notifier_block *this,
|
||||
@@ -528,6 +534,11 @@ static struct proto pppoe_sk_proto __rea
|
||||
@@ -534,6 +540,11 @@ static struct proto pppoe_sk_proto __rea
|
||||
.obj_size = sizeof(struct pppox_sock),
|
||||
};
|
||||
|
||||
@@ -196,7 +196,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
/***********************************************************************
|
||||
*
|
||||
* Initialize a new struct sock.
|
||||
@@ -542,11 +553,13 @@ static int pppoe_create(struct net *net,
|
||||
@@ -548,11 +559,13 @@ static int pppoe_create(struct net *net,
|
||||
return -ENOMEM;
|
||||
|
||||
sock_init_data(sock, sk);
|
||||
@@ -210,7 +210,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sk->sk_state = PPPOX_NONE;
|
||||
sk->sk_type = SOCK_STREAM;
|
||||
sk->sk_family = PF_PPPOX;
|
||||
@@ -599,7 +612,6 @@ static int pppoe_release(struct socket *
|
||||
@@ -605,7 +618,6 @@ static int pppoe_release(struct socket *
|
||||
sock_orphan(sk);
|
||||
sock->sk = NULL;
|
||||
|
||||
@@ -218,7 +218,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
release_sock(sk);
|
||||
sock_put(sk);
|
||||
|
||||
@@ -681,9 +693,9 @@ static int pppoe_connect(struct socket *
|
||||
@@ -687,9 +699,9 @@ static int pppoe_connect(struct socket *
|
||||
&sp->sa_addr.pppoe,
|
||||
sizeof(struct pppoe_addr));
|
||||
|
||||
@@ -230,7 +230,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (error < 0)
|
||||
goto err_put;
|
||||
|
||||
@@ -1052,11 +1064,11 @@ static inline struct pppox_sock *pppoe_g
|
||||
@@ -1058,11 +1070,11 @@ static inline struct pppox_sock *pppoe_g
|
||||
int i;
|
||||
|
||||
for (i = 0; i < PPPOE_HASH_SIZE; i++) {
|
||||
@@ -244,7 +244,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1065,19 +1077,19 @@ out:
|
||||
@@ -1071,19 +1083,19 @@ out:
|
||||
}
|
||||
|
||||
static void *pppoe_seq_start(struct seq_file *seq, loff_t *pos)
|
||||
@@ -267,7 +267,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
++*pos;
|
||||
if (v == SEQ_START_TOKEN) {
|
||||
@@ -1085,14 +1097,15 @@ static void *pppoe_seq_next(struct seq_f
|
||||
@@ -1091,14 +1103,15 @@ static void *pppoe_seq_next(struct seq_f
|
||||
goto out;
|
||||
}
|
||||
po = v;
|
||||
@@ -286,7 +286,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (po)
|
||||
break;
|
||||
}
|
||||
@@ -1103,10 +1116,9 @@ out:
|
||||
@@ -1109,10 +1122,9 @@ out:
|
||||
}
|
||||
|
||||
static void pppoe_seq_stop(struct seq_file *seq, void *v)
|
||||
@@ -299,7 +299,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
static const struct seq_operations pppoe_seq_ops = {
|
||||
@@ -1149,7 +1161,7 @@ static __net_init int pppoe_init_net(str
|
||||
@@ -1155,7 +1167,7 @@ static __net_init int pppoe_init_net(str
|
||||
struct pppoe_net *pn = pppoe_pernet(net);
|
||||
struct proc_dir_entry *pde;
|
||||
|
||||
|
||||
+2
-2
@@ -90,7 +90,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
abort_kfree:
|
||||
kfree_skb(skb);
|
||||
return NET_RX_DROP;
|
||||
@@ -447,14 +440,11 @@ static int pppoe_rcv(struct sk_buff *skb
|
||||
@@ -453,14 +446,11 @@ static int pppoe_rcv(struct sk_buff *skb
|
||||
ph = pppoe_hdr(skb);
|
||||
pn = pppoe_pernet(dev_net(dev));
|
||||
|
||||
@@ -107,7 +107,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
drop:
|
||||
kfree_skb(skb);
|
||||
@@ -820,11 +810,12 @@ static int pppoe_ioctl(struct socket *so
|
||||
@@ -826,11 +816,12 @@ static int pppoe_ioctl(struct socket *so
|
||||
|
||||
/* Check that the socket referenced by the address
|
||||
actually exists. */
|
||||
|
||||
@@ -22,7 +22,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/ppp/ppp_generic.c
|
||||
+++ b/drivers/net/ppp/ppp_generic.c
|
||||
@@ -1632,6 +1632,8 @@ static void ppp_setup(struct net_device
|
||||
@@ -1635,6 +1635,8 @@ static void ppp_setup(struct net_device
|
||||
dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
|
||||
dev->priv_destructor = ppp_dev_priv_destructor;
|
||||
dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;
|
||||
@@ -31,7 +31,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
netif_keep_dst(dev);
|
||||
}
|
||||
|
||||
@@ -1696,6 +1698,10 @@ pad_compress_skb(struct ppp *ppp, struct
|
||||
@@ -1699,6 +1701,10 @@ pad_compress_skb(struct ppp *ppp, struct
|
||||
ppp->xcomp->comp_extra + ppp->dev->hard_header_len;
|
||||
int compressor_skb_size = ppp->dev->mtu +
|
||||
ppp->xcomp->comp_extra + PPP_HDRLEN;
|
||||
@@ -42,7 +42,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
new_skb = alloc_skb(new_skb_size, GFP_ATOMIC);
|
||||
if (!new_skb) {
|
||||
if (net_ratelimit())
|
||||
@@ -1783,6 +1789,10 @@ ppp_send_frame(struct ppp *ppp, struct s
|
||||
@@ -1786,6 +1792,10 @@ ppp_send_frame(struct ppp *ppp, struct s
|
||||
case PPP_IP:
|
||||
if (!ppp->vj || (ppp->flags & SC_COMP_TCP) == 0)
|
||||
break;
|
||||
@@ -53,7 +53,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
/* try to do VJ TCP header compression */
|
||||
new_skb = alloc_skb(skb->len + ppp->dev->hard_header_len - 2,
|
||||
GFP_ATOMIC);
|
||||
@@ -1880,19 +1890,26 @@ ppp_push(struct ppp *ppp)
|
||||
@@ -1883,19 +1893,26 @@ ppp_push(struct ppp *ppp)
|
||||
}
|
||||
|
||||
if ((ppp->flags & SC_MULTILINK) == 0) {
|
||||
@@ -85,7 +85,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
spin_unlock(&pch->downl);
|
||||
return;
|
||||
}
|
||||
@@ -1977,6 +1994,8 @@ static int ppp_mp_explode(struct ppp *pp
|
||||
@@ -1980,6 +1997,8 @@ static int ppp_mp_explode(struct ppp *pp
|
||||
return 0; /* can't take now, leave it in xmit_pending */
|
||||
|
||||
/* Do protocol field compression */
|
||||
@@ -94,7 +94,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
p = skb->data;
|
||||
len = skb->len;
|
||||
if (*p == 0 && mp_protocol_compress) {
|
||||
@@ -2135,6 +2154,7 @@ static int ppp_mp_explode(struct ppp *pp
|
||||
@@ -2138,6 +2157,7 @@ static int ppp_mp_explode(struct ppp *pp
|
||||
|
||||
noskb:
|
||||
spin_unlock(&pch->downl);
|
||||
|
||||
+17
-17
@@ -325,7 +325,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
goto retry;
|
||||
}
|
||||
|
||||
@@ -2311,7 +2316,7 @@ static int cake_config_besteffort(struct
|
||||
@@ -2312,7 +2317,7 @@ static int cake_config_besteffort(struct
|
||||
struct cake_sched_data *q = qdisc_priv(sch);
|
||||
struct cake_tin_data *b = &q->tins[0];
|
||||
u32 mtu = psched_mtu(qdisc_dev(sch));
|
||||
@@ -334,7 +334,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
q->tin_cnt = 1;
|
||||
|
||||
@@ -2319,7 +2324,7 @@ static int cake_config_besteffort(struct
|
||||
@@ -2320,7 +2325,7 @@ static int cake_config_besteffort(struct
|
||||
q->tin_order = normal_order;
|
||||
|
||||
cake_set_rate(b, rate, mtu,
|
||||
@@ -343,7 +343,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
b->tin_quantum = 65535;
|
||||
|
||||
return 0;
|
||||
@@ -2330,7 +2335,7 @@ static int cake_config_precedence(struct
|
||||
@@ -2331,7 +2336,7 @@ static int cake_config_precedence(struct
|
||||
/* convert high-level (user visible) parameters into internal format */
|
||||
struct cake_sched_data *q = qdisc_priv(sch);
|
||||
u32 mtu = psched_mtu(qdisc_dev(sch));
|
||||
@@ -352,7 +352,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
u32 quantum = 256;
|
||||
u32 i;
|
||||
|
||||
@@ -2341,8 +2346,8 @@ static int cake_config_precedence(struct
|
||||
@@ -2342,8 +2347,8 @@ static int cake_config_precedence(struct
|
||||
for (i = 0; i < q->tin_cnt; i++) {
|
||||
struct cake_tin_data *b = &q->tins[i];
|
||||
|
||||
@@ -363,7 +363,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
b->tin_quantum = max_t(u16, 1U, quantum);
|
||||
|
||||
@@ -2419,7 +2424,7 @@ static int cake_config_diffserv8(struct
|
||||
@@ -2420,7 +2425,7 @@ static int cake_config_diffserv8(struct
|
||||
|
||||
struct cake_sched_data *q = qdisc_priv(sch);
|
||||
u32 mtu = psched_mtu(qdisc_dev(sch));
|
||||
@@ -372,7 +372,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
u32 quantum = 256;
|
||||
u32 i;
|
||||
|
||||
@@ -2433,8 +2438,8 @@ static int cake_config_diffserv8(struct
|
||||
@@ -2434,8 +2439,8 @@ static int cake_config_diffserv8(struct
|
||||
for (i = 0; i < q->tin_cnt; i++) {
|
||||
struct cake_tin_data *b = &q->tins[i];
|
||||
|
||||
@@ -383,7 +383,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
b->tin_quantum = max_t(u16, 1U, quantum);
|
||||
|
||||
@@ -2463,7 +2468,7 @@ static int cake_config_diffserv4(struct
|
||||
@@ -2464,7 +2469,7 @@ static int cake_config_diffserv4(struct
|
||||
|
||||
struct cake_sched_data *q = qdisc_priv(sch);
|
||||
u32 mtu = psched_mtu(qdisc_dev(sch));
|
||||
@@ -392,7 +392,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
u32 quantum = 1024;
|
||||
|
||||
q->tin_cnt = 4;
|
||||
@@ -2474,13 +2479,13 @@ static int cake_config_diffserv4(struct
|
||||
@@ -2475,13 +2480,13 @@ static int cake_config_diffserv4(struct
|
||||
|
||||
/* class characteristics */
|
||||
cake_set_rate(&q->tins[0], rate, mtu,
|
||||
@@ -410,7 +410,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
/* bandwidth-sharing weights */
|
||||
q->tins[0].tin_quantum = quantum;
|
||||
@@ -2500,7 +2505,7 @@ static int cake_config_diffserv3(struct
|
||||
@@ -2501,7 +2506,7 @@ static int cake_config_diffserv3(struct
|
||||
*/
|
||||
struct cake_sched_data *q = qdisc_priv(sch);
|
||||
u32 mtu = psched_mtu(qdisc_dev(sch));
|
||||
@@ -419,7 +419,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
u32 quantum = 1024;
|
||||
|
||||
q->tin_cnt = 3;
|
||||
@@ -2511,11 +2516,11 @@ static int cake_config_diffserv3(struct
|
||||
@@ -2512,11 +2517,11 @@ static int cake_config_diffserv3(struct
|
||||
|
||||
/* class characteristics */
|
||||
cake_set_rate(&q->tins[0], rate, mtu,
|
||||
@@ -434,7 +434,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
/* bandwidth-sharing weights */
|
||||
q->tins[0].tin_quantum = quantum;
|
||||
@@ -2527,7 +2532,8 @@ static int cake_config_diffserv3(struct
|
||||
@@ -2528,7 +2533,8 @@ static int cake_config_diffserv3(struct
|
||||
|
||||
static void cake_reconfigure(struct Qdisc *sch)
|
||||
{
|
||||
@@ -444,7 +444,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
int c, ft;
|
||||
|
||||
switch (q->tin_mode) {
|
||||
@@ -2553,36 +2559,37 @@ static void cake_reconfigure(struct Qdis
|
||||
@@ -2554,36 +2560,37 @@ static void cake_reconfigure(struct Qdis
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -493,7 +493,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
struct nlattr *tb[TCA_CAKE_MAX + 1];
|
||||
u16 rate_flags;
|
||||
u8 flow_mode;
|
||||
@@ -2636,19 +2643,19 @@ static int cake_change(struct Qdisc *sch
|
||||
@@ -2637,19 +2644,19 @@ static int cake_change(struct Qdisc *sch
|
||||
nla_get_s32(tb[TCA_CAKE_OVERHEAD]));
|
||||
rate_flags |= CAKE_FLAG_OVERHEAD;
|
||||
|
||||
@@ -521,7 +521,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
|
||||
if (tb[TCA_CAKE_MPU])
|
||||
@@ -2704,7 +2711,7 @@ static int cake_change(struct Qdisc *sch
|
||||
@@ -2705,7 +2712,7 @@ static int cake_change(struct Qdisc *sch
|
||||
|
||||
WRITE_ONCE(q->rate_flags, rate_flags);
|
||||
WRITE_ONCE(q->flow_mode, flow_mode);
|
||||
@@ -530,7 +530,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
sch_tree_lock(sch);
|
||||
cake_reconfigure(sch);
|
||||
sch_tree_unlock(sch);
|
||||
@@ -2720,14 +2727,20 @@ static void cake_destroy(struct Qdisc *s
|
||||
@@ -2721,14 +2728,20 @@ static void cake_destroy(struct Qdisc *s
|
||||
qdisc_watchdog_cancel(&q->watchdog);
|
||||
tcf_block_put(q->block);
|
||||
kvfree(q->tins);
|
||||
@@ -552,7 +552,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
sch->limit = 10240;
|
||||
q->tin_mode = CAKE_DIFFSERV_DIFFSERV3;
|
||||
q->flow_mode = CAKE_FLOW_TRIPLE;
|
||||
@@ -2739,33 +2752,36 @@ static int cake_init(struct Qdisc *sch,
|
||||
@@ -2740,33 +2753,36 @@ static int cake_init(struct Qdisc *sch,
|
||||
* for 5 to 10% of interval
|
||||
*/
|
||||
q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
|
||||
@@ -600,7 +600,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
INIT_LIST_HEAD(&b->new_flows);
|
||||
INIT_LIST_HEAD(&b->old_flows);
|
||||
@@ -2781,22 +2797,27 @@ static int cake_init(struct Qdisc *sch,
|
||||
@@ -2782,22 +2798,27 @@ static int cake_init(struct Qdisc *sch,
|
||||
INIT_LIST_HEAD(&flow->flowchain);
|
||||
cobalt_vars_init(&flow->cvars);
|
||||
|
||||
|
||||
+2
-2
@@ -32,7 +32,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
#include <net/pkt_cls.h>
|
||||
#include <net/tcp.h>
|
||||
#include <net/flow_dissector.h>
|
||||
@@ -3154,14 +3155,89 @@ static struct Qdisc_ops cake_qdisc_ops _
|
||||
@@ -3155,14 +3156,89 @@ static struct Qdisc_ops cake_qdisc_ops _
|
||||
};
|
||||
MODULE_ALIAS_NET_SCH("cake");
|
||||
|
||||
@@ -123,7 +123,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
|
||||
module_init(cake_module_init)
|
||||
@@ -3169,3 +3245,4 @@ module_exit(cake_module_exit)
|
||||
@@ -3170,3 +3246,4 @@ module_exit(cake_module_exit)
|
||||
MODULE_AUTHOR("Jonathan Morton");
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
MODULE_DESCRIPTION("The CAKE shaper.");
|
||||
|
||||
+13
-13
@@ -27,7 +27,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
};
|
||||
|
||||
struct cake_sched_data {
|
||||
@@ -2586,14 +2587,12 @@ static void cake_reconfigure(struct Qdis
|
||||
@@ -2587,14 +2588,12 @@ static void cake_reconfigure(struct Qdis
|
||||
q->buffer_config_limit));
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
int err;
|
||||
|
||||
err = nla_parse_nested_deprecated(tb, TCA_CAKE_MAX, opt, cake_policy,
|
||||
@@ -2601,7 +2600,6 @@ static int cake_change(struct Qdisc *sch
|
||||
@@ -2602,7 +2601,6 @@ static int cake_change(struct Qdisc *sch
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
@@ -54,7 +54,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (tb[TCA_CAKE_NAT]) {
|
||||
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
|
||||
flow_mode &= ~CAKE_FLOW_NAT_FLAG;
|
||||
@@ -2614,6 +2612,19 @@ static int cake_change(struct Qdisc *sch
|
||||
@@ -2615,6 +2613,19 @@ static int cake_change(struct Qdisc *sch
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (tb[TCA_CAKE_BASE_RATE64])
|
||||
WRITE_ONCE(q->rate_bps,
|
||||
nla_get_u64(tb[TCA_CAKE_BASE_RATE64]));
|
||||
@@ -2622,7 +2633,6 @@ static int cake_change(struct Qdisc *sch
|
||||
@@ -2623,7 +2634,6 @@ static int cake_change(struct Qdisc *sch
|
||||
WRITE_ONCE(q->tin_mode,
|
||||
nla_get_u32(tb[TCA_CAKE_DIFFSERV_MODE]));
|
||||
|
||||
@@ -82,7 +82,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (tb[TCA_CAKE_WASH]) {
|
||||
if (!!nla_get_u32(tb[TCA_CAKE_WASH]))
|
||||
rate_flags |= CAKE_FLAG_WASH;
|
||||
@@ -2643,20 +2653,12 @@ static int cake_change(struct Qdisc *sch
|
||||
@@ -2644,20 +2654,12 @@ static int cake_change(struct Qdisc *sch
|
||||
WRITE_ONCE(q->rate_overhead,
|
||||
nla_get_s32(tb[TCA_CAKE_OVERHEAD]));
|
||||
rate_flags |= CAKE_FLAG_OVERHEAD;
|
||||
@@ -105,7 +105,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
|
||||
if (tb[TCA_CAKE_MPU])
|
||||
@@ -2675,13 +2677,6 @@ static int cake_change(struct Qdisc *sch
|
||||
@@ -2676,13 +2678,6 @@ static int cake_change(struct Qdisc *sch
|
||||
WRITE_ONCE(q->target, max(target, 1U));
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (tb[TCA_CAKE_INGRESS]) {
|
||||
if (!!nla_get_u32(tb[TCA_CAKE_INGRESS]))
|
||||
rate_flags |= CAKE_FLAG_INGRESS;
|
||||
@@ -2712,6 +2707,34 @@ static int cake_change(struct Qdisc *sch
|
||||
@@ -2713,6 +2708,34 @@ static int cake_change(struct Qdisc *sch
|
||||
|
||||
WRITE_ONCE(q->rate_flags, rate_flags);
|
||||
WRITE_ONCE(q->flow_mode, flow_mode);
|
||||
@@ -154,7 +154,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (qd->tins) {
|
||||
sch_tree_lock(sch);
|
||||
cake_reconfigure(sch);
|
||||
@@ -2728,7 +2751,23 @@ static void cake_destroy(struct Qdisc *s
|
||||
@@ -2729,7 +2752,23 @@ static void cake_destroy(struct Qdisc *s
|
||||
qdisc_watchdog_cancel(&q->watchdog);
|
||||
tcf_block_put(q->block);
|
||||
kvfree(q->tins);
|
||||
@@ -179,7 +179,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
|
||||
static int cake_init(struct Qdisc *sch, struct nlattr *opt,
|
||||
@@ -2742,17 +2781,9 @@ static int cake_init(struct Qdisc *sch,
|
||||
@@ -2743,17 +2782,9 @@ static int cake_init(struct Qdisc *sch,
|
||||
if (!q)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -199,7 +199,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
qd->cur_tin = 0;
|
||||
qd->cur_flow = 0;
|
||||
qd->config = q;
|
||||
@@ -2815,10 +2846,21 @@ err:
|
||||
@@ -2816,10 +2847,21 @@ err:
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -222,7 +222,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
struct nlattr *opts;
|
||||
u16 rate_flags;
|
||||
u8 flow_mode;
|
||||
@@ -2894,6 +2936,13 @@ nla_put_failure:
|
||||
@@ -2895,6 +2937,13 @@ nla_put_failure:
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -236,7 +236,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static int cake_dump_stats(struct Qdisc *sch, struct gnet_dump *d)
|
||||
{
|
||||
struct nlattr *stats = nla_nest_start_noflag(d->skb, TCA_STATS_APP);
|
||||
@@ -3157,6 +3206,7 @@ MODULE_ALIAS_NET_SCH("cake");
|
||||
@@ -3158,6 +3207,7 @@ MODULE_ALIAS_NET_SCH("cake");
|
||||
|
||||
struct cake_mq_sched {
|
||||
struct mq_sched mq_priv; /* must be first */
|
||||
@@ -244,7 +244,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
};
|
||||
|
||||
static void cake_mq_destroy(struct Qdisc *sch)
|
||||
@@ -3167,25 +3217,68 @@ static void cake_mq_destroy(struct Qdisc
|
||||
@@ -3168,25 +3218,68 @@ static void cake_mq_destroy(struct Qdisc
|
||||
static int cake_mq_init(struct Qdisc *sch, struct nlattr *opt,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
|
||||
+4
-4
@@ -146,8 +146,8 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
+
|
||||
byte_target_ns = (byte_target * rate_ns) >> rate_shft;
|
||||
|
||||
b->cparams.target = max((byte_target_ns * 3) / 2, target_ns);
|
||||
@@ -2768,6 +2814,7 @@ static void cake_config_init(struct cake
|
||||
WRITE_ONCE(b->cparams.target,
|
||||
@@ -2769,6 +2815,7 @@ static void cake_config_init(struct cake
|
||||
*/
|
||||
q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
|
||||
q->is_shared = is_shared;
|
||||
@@ -155,7 +155,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
|
||||
static int cake_init(struct Qdisc *sch, struct nlattr *opt,
|
||||
@@ -2839,6 +2886,9 @@ static int cake_init(struct Qdisc *sch,
|
||||
@@ -2840,6 +2887,9 @@ static int cake_init(struct Qdisc *sch,
|
||||
qd->avg_peak_bandwidth = q->rate_bps;
|
||||
qd->min_netlen = ~0;
|
||||
qd->min_adjlen = ~0;
|
||||
@@ -165,7 +165,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
return 0;
|
||||
err:
|
||||
kvfree(qd->config);
|
||||
@@ -2971,6 +3021,7 @@ static int cake_dump_stats(struct Qdisc
|
||||
@@ -2972,6 +3022,7 @@ static int cake_dump_stats(struct Qdisc
|
||||
PUT_STAT_U32(MAX_ADJLEN, q->max_adjlen);
|
||||
PUT_STAT_U32(MIN_NETLEN, q->min_netlen);
|
||||
PUT_STAT_U32(MIN_ADJLEN, q->min_adjlen);
|
||||
|
||||
+5
-5
@@ -33,7 +33,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
struct cake_heap_entry overflow_heap[CAKE_QUEUES * CAKE_MAX_TINS];
|
||||
|
||||
@@ -2797,8 +2798,6 @@ static void cake_destroy(struct Qdisc *s
|
||||
@@ -2798,8 +2799,6 @@ static void cake_destroy(struct Qdisc *s
|
||||
qdisc_watchdog_cancel(&q->watchdog);
|
||||
tcf_block_put(q->block);
|
||||
kvfree(q->tins);
|
||||
@@ -42,7 +42,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
static void cake_config_init(struct cake_sched_config *q, bool is_shared)
|
||||
@@ -2821,13 +2820,9 @@ static int cake_init(struct Qdisc *sch,
|
||||
@@ -2822,13 +2821,9 @@ static int cake_init(struct Qdisc *sch,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct cake_sched_data *qd = qdisc_priv(sch);
|
||||
@@ -57,7 +57,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
cake_config_init(q, false);
|
||||
|
||||
sch->limit = 10240;
|
||||
@@ -2839,14 +2834,13 @@ static int cake_init(struct Qdisc *sch,
|
||||
@@ -2840,14 +2835,13 @@ static int cake_init(struct Qdisc *sch,
|
||||
|
||||
if (opt) {
|
||||
err = cake_change(sch, opt, extack);
|
||||
@@ -74,7 +74,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
quantum_div[0] = ~0;
|
||||
for (i = 1; i <= CAKE_QUEUES; i++)
|
||||
@@ -2854,10 +2848,8 @@ static int cake_init(struct Qdisc *sch,
|
||||
@@ -2855,10 +2849,8 @@ static int cake_init(struct Qdisc *sch,
|
||||
|
||||
qd->tins = kvcalloc(CAKE_MAX_TINS, sizeof(struct cake_tin_data),
|
||||
GFP_KERNEL);
|
||||
@@ -87,7 +87,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
for (i = 0; i < CAKE_MAX_TINS; i++) {
|
||||
struct cake_tin_data *b = qd->tins + i;
|
||||
@@ -2890,22 +2882,13 @@ static int cake_init(struct Qdisc *sch,
|
||||
@@ -2891,22 +2883,13 @@ static int cake_init(struct Qdisc *sch,
|
||||
qd->last_checked_active = 0;
|
||||
|
||||
return 0;
|
||||
|
||||
+10
-10
@@ -48,7 +48,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
begin:
|
||||
@@ -2361,12 +2358,10 @@ static void cake_set_rate(struct cake_ti
|
||||
@@ -2362,12 +2359,10 @@ static void cake_set_rate(struct cake_ti
|
||||
b->cparams.p_dec = 1 << 20; /* 1/4096 */
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
q->tin_cnt = 1;
|
||||
|
||||
@@ -2380,12 +2375,10 @@ static int cake_config_besteffort(struct
|
||||
@@ -2381,12 +2376,10 @@ static int cake_config_besteffort(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
u32 quantum = 256;
|
||||
u32 i;
|
||||
|
||||
@@ -2456,7 +2449,7 @@ static int cake_config_precedence(struct
|
||||
@@ -2457,7 +2450,7 @@ static int cake_config_precedence(struct
|
||||
* Total 12 traffic classes.
|
||||
*/
|
||||
|
||||
@@ -85,7 +85,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
{
|
||||
/* Pruned list of traffic classes for typical applications:
|
||||
*
|
||||
@@ -2473,8 +2466,6 @@ static int cake_config_diffserv8(struct
|
||||
@@ -2474,8 +2467,6 @@ static int cake_config_diffserv8(struct
|
||||
*/
|
||||
|
||||
struct cake_sched_data *q = qdisc_priv(sch);
|
||||
@@ -94,7 +94,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
u32 quantum = 256;
|
||||
u32 i;
|
||||
|
||||
@@ -2504,7 +2495,7 @@ static int cake_config_diffserv8(struct
|
||||
@@ -2505,7 +2496,7 @@ static int cake_config_diffserv8(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
{
|
||||
/* Further pruned list of traffic classes for four-class system:
|
||||
*
|
||||
@@ -2517,8 +2508,6 @@ static int cake_config_diffserv4(struct
|
||||
@@ -2518,8 +2509,6 @@ static int cake_config_diffserv4(struct
|
||||
*/
|
||||
|
||||
struct cake_sched_data *q = qdisc_priv(sch);
|
||||
@@ -112,7 +112,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
u32 quantum = 1024;
|
||||
|
||||
q->tin_cnt = 4;
|
||||
@@ -2546,7 +2535,7 @@ static int cake_config_diffserv4(struct
|
||||
@@ -2547,7 +2536,7 @@ static int cake_config_diffserv4(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
{
|
||||
/* Simplified Diffserv structure with 3 tins.
|
||||
* Latency Sensitive (CS7, CS6, EF, VA, TOS4)
|
||||
@@ -2554,8 +2543,6 @@ static int cake_config_diffserv3(struct
|
||||
@@ -2555,8 +2544,6 @@ static int cake_config_diffserv3(struct
|
||||
* Low Priority (LE, CS1)
|
||||
*/
|
||||
struct cake_sched_data *q = qdisc_priv(sch);
|
||||
@@ -130,7 +130,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
u32 quantum = 1024;
|
||||
|
||||
q->tin_cnt = 3;
|
||||
@@ -2580,32 +2567,33 @@ static int cake_config_diffserv3(struct
|
||||
@@ -2581,32 +2568,33 @@ static int cake_config_diffserv3(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -170,7 +170,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2616,6 +2604,14 @@ static void cake_reconfigure(struct Qdis
|
||||
@@ -2617,6 +2605,14 @@ static void cake_reconfigure(struct Qdis
|
||||
|
||||
qd->rate_ns = qd->tins[ft].tin_rate_ns;
|
||||
qd->rate_shft = qd->tins[ft].tin_rate_shft;
|
||||
|
||||
+1
-1
@@ -293,7 +293,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
};
|
||||
--- a/drivers/net/phy/dp83869.c
|
||||
+++ b/drivers/net/phy/dp83869.c
|
||||
@@ -928,7 +928,7 @@ static struct phy_driver dp83869_driver[
|
||||
@@ -939,7 +939,7 @@ static struct phy_driver dp83869_driver[
|
||||
};
|
||||
module_phy_driver(dp83869_driver);
|
||||
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/page_pool.c
|
||||
+++ b/net/core/page_pool.c
|
||||
@@ -1155,8 +1155,9 @@ static void page_pool_release_retry(stru
|
||||
@@ -1167,8 +1167,9 @@ static void page_pool_release_retry(stru
|
||||
{
|
||||
struct delayed_work *dwq = to_delayed_work(wq);
|
||||
struct page_pool *pool = container_of(dwq, typeof(*pool), release_dw);
|
||||
@@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
inflight = page_pool_release(pool);
|
||||
/* In rare cases, a driver bug may cause inflight to go negative.
|
||||
@@ -1168,6 +1169,21 @@ static void page_pool_release_retry(stru
|
||||
@@ -1180,6 +1181,21 @@ static void page_pool_release_retry(stru
|
||||
if (inflight <= 0)
|
||||
return;
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user