kernel: bump 6.6 to 6.6.90
Remove upstreamed patches: bcm27xx/patches-6.6/950-0481-xhci-Use-more-event-ring-segment-table-entries.patch [1] pending-6.6/691-net-ipv6-fix-UDPv6-GSO-segmentation-with-NAT.patch [2] Manually rebased patches: generic/hack-6.6/781-usb-net-rndis-support-asr.patch [3] [1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.90&id=f377434945f528217e65fc5b18781caeba19ce72 [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.90&id=e0272844995aff8cbf2cc88b78c2b35ca51eda43 [3] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.90&id=222b6685efe0d8c1cdb078a67bbe806f56d18f94 Signed-off-by: Shiji Yang <yangshiji66@outlook.com> Link: https://github.com/openwrt/openwrt/pull/18775 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
9d15c1a020
commit
01d5026239
43 changed files with 146 additions and 310 deletions
|
@ -15,7 +15,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
|||
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -1498,6 +1498,109 @@ command_cleanup:
|
||||
@@ -1524,6 +1524,109 @@ command_cleanup:
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -125,7 +125,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
|||
* non-error returns are a promise to giveback() the urb later
|
||||
* we drop ownership so next owner (or urb unlink) can get it
|
||||
*/
|
||||
@@ -5360,6 +5463,7 @@ static const struct hc_driver xhci_hc_dr
|
||||
@@ -5386,6 +5489,7 @@ static const struct hc_driver xhci_hc_dr
|
||||
.endpoint_reset = xhci_endpoint_reset,
|
||||
.check_bandwidth = xhci_check_bandwidth,
|
||||
.reset_bandwidth = xhci_reset_bandwidth,
|
||||
|
|
|
@ -19,7 +19,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -1587,7 +1587,7 @@ static void xhci_fixup_endpoint(struct u
|
||||
@@ -1613,7 +1613,7 @@ static void xhci_fixup_endpoint(struct u
|
||||
return;
|
||||
}
|
||||
ctrl_ctx->add_flags = xhci_get_endpoint_flag_from_index(ep_index);
|
||||
|
|
|
@ -1,66 +0,0 @@
|
|||
From d631e7354399aa2fb6079b72f515acd6d080c203 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
Date: Thu, 13 Jul 2023 14:43:21 +0100
|
||||
Subject: [PATCH 0481/1085] xhci: Use more event ring segment table entries
|
||||
|
||||
Users have reported log spam created by "Event Ring Full" xHC event
|
||||
TRBs. These are caused by interrupt latency in conjunction with a very
|
||||
busy set of devices on the bus. The errors are benign, but throughput
|
||||
will suffer as the xHC will pause processing of transfers until the
|
||||
event ring is drained by the kernel. Expand the number of event TRB slots
|
||||
available by increasing the number of event ring segments in the ERST.
|
||||
|
||||
Controllers have a hardware-defined limit as to the number of ERST
|
||||
entries they can process, so make the actual number in use
|
||||
min(ERST_MAX_SEGS, hw_max).
|
||||
|
||||
Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
---
|
||||
drivers/usb/host/xhci-mem.c | 9 +++++++--
|
||||
drivers/usb/host/xhci.h | 5 +++--
|
||||
2 files changed, 10 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/usb/host/xhci-mem.c
|
||||
+++ b/drivers/usb/host/xhci-mem.c
|
||||
@@ -2241,12 +2241,17 @@ xhci_alloc_interrupter(struct xhci_hcd *
|
||||
struct device *dev = xhci_to_hcd(xhci)->self.sysdev;
|
||||
struct xhci_interrupter *ir;
|
||||
int ret;
|
||||
+ unsigned int nr_event_segs;
|
||||
|
||||
ir = kzalloc_node(sizeof(*ir), flags, dev_to_node(dev));
|
||||
if (!ir)
|
||||
return NULL;
|
||||
|
||||
- ir->event_ring = xhci_ring_alloc(xhci, ERST_NUM_SEGS, 1, TYPE_EVENT,
|
||||
+ nr_event_segs = min_t(unsigned int,
|
||||
+ 1 << HCS_ERST_MAX(xhci->hcs_params2),
|
||||
+ ERST_MAX_SEGS);
|
||||
+
|
||||
+ ir->event_ring = xhci_ring_alloc(xhci, nr_event_segs, 1, TYPE_EVENT,
|
||||
0, flags);
|
||||
if (!ir->event_ring) {
|
||||
xhci_warn(xhci, "Failed to allocate interrupter event ring\n");
|
||||
@@ -2283,7 +2288,7 @@ xhci_add_interrupter(struct xhci_hcd *xh
|
||||
/* set ERST count with the number of entries in the segment table */
|
||||
erst_size = readl(&ir->ir_set->erst_size);
|
||||
erst_size &= ERST_SIZE_MASK;
|
||||
- erst_size |= ERST_NUM_SEGS;
|
||||
+ erst_size |= ir->event_ring->num_segs;
|
||||
writel(erst_size, &ir->ir_set->erst_size);
|
||||
|
||||
erst_base = xhci_read_64(xhci, &ir->ir_set->erst_base);
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1426,8 +1426,9 @@ struct urb_priv {
|
||||
* Each segment table entry is 4*32bits long. 1K seems like an ok size:
|
||||
* (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table,
|
||||
* meaning 64 ring segments.
|
||||
- * Initial allocated size of the ERST, in number of entries */
|
||||
-#define ERST_NUM_SEGS 1
|
||||
+ */
|
||||
+/* Maximum number of segments in the ERST */
|
||||
+#define ERST_MAX_SEGS 8
|
||||
/* Poll every 60 seconds */
|
||||
#define POLL_TIMEOUT 60
|
||||
/* Stop endpoint command timeout (secs) for URB cancellation watchdog timer */
|
|
@ -52,7 +52,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
addr = xhci_trb_virt_to_dma(new_seg, new_deq);
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1664,6 +1664,9 @@ struct xhci_hcd {
|
||||
@@ -1660,6 +1660,9 @@ struct xhci_hcd {
|
||||
#define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48)
|
||||
#define XHCI_ETRON_HOST BIT_ULL(49)
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/usb/host/xhci-mem.c
|
||||
+++ b/drivers/usb/host/xhci-mem.c
|
||||
@@ -1400,6 +1400,7 @@ int xhci_endpoint_init(struct xhci_hcd *
|
||||
@@ -1405,6 +1405,7 @@ int xhci_endpoint_init(struct xhci_hcd *
|
||||
unsigned int ep_index;
|
||||
struct xhci_ep_ctx *ep_ctx;
|
||||
struct xhci_ring *ep_ring;
|
||||
|
@ -42,7 +42,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
unsigned int max_packet;
|
||||
enum xhci_ring_type ring_type;
|
||||
u32 max_esit_payload;
|
||||
@@ -1409,6 +1410,8 @@ int xhci_endpoint_init(struct xhci_hcd *
|
||||
@@ -1414,6 +1415,8 @@ int xhci_endpoint_init(struct xhci_hcd *
|
||||
unsigned int mult;
|
||||
unsigned int avg_trb_len;
|
||||
unsigned int err_count = 0;
|
||||
|
@ -51,7 +51,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
ep_index = xhci_get_endpoint_index(&ep->desc);
|
||||
ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index);
|
||||
@@ -1440,9 +1443,35 @@ int xhci_endpoint_init(struct xhci_hcd *
|
||||
@@ -1445,9 +1448,35 @@ int xhci_endpoint_init(struct xhci_hcd *
|
||||
|
||||
mult = xhci_get_endpoint_mult(udev, ep);
|
||||
max_packet = usb_endpoint_maxp(&ep->desc);
|
||||
|
@ -100,7 +100,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1666,6 +1666,7 @@ struct xhci_hcd {
|
||||
@@ -1662,6 +1662,7 @@ struct xhci_hcd {
|
||||
|
||||
/* Downstream VLI fixes */
|
||||
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(56)
|
||||
|
|
|
@ -144,7 +144,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
return 0;
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1667,6 +1667,7 @@ struct xhci_hcd {
|
||||
@@ -1663,6 +1663,7 @@ struct xhci_hcd {
|
||||
/* Downstream VLI fixes */
|
||||
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(56)
|
||||
#define XHCI_VLI_SS_BULK_OUT_BUG BIT_ULL(57)
|
||||
|
|
|
@ -15,7 +15,7 @@ Define these members unconditionally, so that there is no ABI change.
|
|||
|
||||
--- a/include/linux/module.h
|
||||
+++ b/include/linux/module.h
|
||||
@@ -510,7 +510,7 @@ struct module {
|
||||
@@ -512,7 +512,7 @@ struct module {
|
||||
unsigned int num_bpf_raw_events;
|
||||
struct bpf_raw_event_map *bpf_raw_events;
|
||||
#endif
|
||||
|
|
|
@ -28,7 +28,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/usb/host/xhci-mem.c
|
||||
+++ b/drivers/usb/host/xhci-mem.c
|
||||
@@ -716,6 +716,14 @@ void xhci_setup_streams_ep_input_ctx(str
|
||||
@@ -721,6 +721,14 @@ void xhci_setup_streams_ep_input_ctx(str
|
||||
ep_ctx->ep_info &= cpu_to_le32(~EP_MAXPSTREAMS_MASK);
|
||||
ep_ctx->ep_info |= cpu_to_le32(EP_MAXPSTREAMS(max_primary_streams)
|
||||
| EP_HAS_LSA);
|
||||
|
|
|
@ -85,7 +85,7 @@ it on BCM4708 family.
|
|||
/*
|
||||
* Reset a halted HC.
|
||||
*
|
||||
@@ -481,6 +524,15 @@ static int xhci_run_finished(struct xhci
|
||||
@@ -498,6 +541,15 @@ static int xhci_run_finished(struct xhci
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,7 @@ it on BCM4708 family.
|
|||
if (xhci->quirks & XHCI_NEC_HOST)
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1662,6 +1662,7 @@ struct xhci_hcd {
|
||||
@@ -1659,6 +1659,7 @@ struct xhci_hcd {
|
||||
#define XHCI_WRITE_64_HI_LO BIT_ULL(47)
|
||||
#define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48)
|
||||
#define XHCI_ETRON_HOST BIT_ULL(49)
|
||||
|
|
|
@ -65,7 +65,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
}
|
||||
--- a/net/ipv4/udp_offload.c
|
||||
+++ b/net/ipv4/udp_offload.c
|
||||
@@ -384,6 +384,14 @@ struct sk_buff *__udp_gso_segment(struct
|
||||
@@ -443,6 +443,14 @@ struct sk_buff *__udp_gso_segment(struct
|
||||
else
|
||||
uh->check = gso_make_checksum(seg, ~check) ? : CSUM_MANGLED_0;
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
--- a/net/ipv4/udp_offload.c
|
||||
+++ b/net/ipv4/udp_offload.c
|
||||
@@ -283,6 +283,12 @@ struct sk_buff *__udp_gso_segment(struct
|
||||
@@ -342,6 +342,12 @@ struct sk_buff *__udp_gso_segment(struct
|
||||
!(skb_shinfo(gso_skb)->gso_type & SKB_GSO_FRAGLIST)))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||
{
|
||||
--- a/net/ipv4/udp_offload.c
|
||||
+++ b/net/ipv4/udp_offload.c
|
||||
@@ -474,33 +474,6 @@ out:
|
||||
@@ -533,33 +533,6 @@ out:
|
||||
return segs;
|
||||
}
|
||||
|
||||
|
|
|
@ -167,7 +167,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
else
|
||||
skb_checksum_none_assert(skb);
|
||||
@@ -2276,7 +2276,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
@@ -2280,7 +2280,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
break;
|
||||
|
||||
tx_buf = mtk_desc_to_tx_buf(ring, desc,
|
||||
|
@ -176,7 +176,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
if (!tx_buf->data)
|
||||
break;
|
||||
|
||||
@@ -2327,7 +2327,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
|
||||
@@ -2331,7 +2331,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
|
||||
}
|
||||
mtk_tx_unmap(eth, tx_buf, &bq, true);
|
||||
|
||||
|
@ -185,7 +185,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
ring->last_free = desc;
|
||||
atomic_inc(&ring->free_count);
|
||||
|
||||
@@ -2417,7 +2417,7 @@ static int mtk_napi_rx(struct napi_struc
|
||||
@@ -2421,7 +2421,7 @@ static int mtk_napi_rx(struct napi_struc
|
||||
do {
|
||||
int rx_done;
|
||||
|
||||
|
@ -194,7 +194,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
reg_map->pdma.irq_status);
|
||||
rx_done = mtk_poll_rx(napi, budget - rx_done_total, eth);
|
||||
rx_done_total += rx_done;
|
||||
@@ -2433,10 +2433,10 @@ static int mtk_napi_rx(struct napi_struc
|
||||
@@ -2437,10 +2437,10 @@ static int mtk_napi_rx(struct napi_struc
|
||||
return budget;
|
||||
|
||||
} while (mtk_r32(eth, reg_map->pdma.irq_status) &
|
||||
|
@ -207,7 +207,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
return rx_done_total;
|
||||
}
|
||||
@@ -2445,7 +2445,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -2449,7 +2449,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
{
|
||||
const struct mtk_soc_data *soc = eth->soc;
|
||||
struct mtk_tx_ring *ring = ð->tx_ring;
|
||||
|
@ -216,7 +216,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
struct mtk_tx_dma_v2 *txd;
|
||||
int ring_size;
|
||||
u32 ofs, val;
|
||||
@@ -2568,14 +2568,14 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
@@ -2572,14 +2572,14 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
}
|
||||
if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && ring->dma) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
|
@ -233,7 +233,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
ring->dma_pdma, ring->phys_pdma);
|
||||
ring->dma_pdma = NULL;
|
||||
}
|
||||
@@ -2630,15 +2630,15 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
@@ -2634,15 +2634,15 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SRAM) ||
|
||||
rx_flag != MTK_RX_FLAGS_NORMAL) {
|
||||
ring->dma = dma_alloc_coherent(eth->dma_dev,
|
||||
|
@ -253,7 +253,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
}
|
||||
|
||||
if (!ring->dma)
|
||||
@@ -2649,7 +2649,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
@@ -2653,7 +2653,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
dma_addr_t dma_addr;
|
||||
void *data;
|
||||
|
||||
|
@ -262,7 +262,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
if (ring->page_pool) {
|
||||
data = mtk_page_pool_get_buff(ring->page_pool,
|
||||
&dma_addr, GFP_KERNEL);
|
||||
@@ -2740,7 +2740,7 @@ static void mtk_rx_clean(struct mtk_eth
|
||||
@@ -2744,7 +2744,7 @@ static void mtk_rx_clean(struct mtk_eth
|
||||
if (!ring->data[i])
|
||||
continue;
|
||||
|
||||
|
@ -271,7 +271,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
if (!rxd->rxd1)
|
||||
continue;
|
||||
|
||||
@@ -2757,7 +2757,7 @@ static void mtk_rx_clean(struct mtk_eth
|
||||
@@ -2761,7 +2761,7 @@ static void mtk_rx_clean(struct mtk_eth
|
||||
|
||||
if (!in_sram && ring->dma) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
|
@ -280,7 +280,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
ring->dma, ring->phys);
|
||||
ring->dma = NULL;
|
||||
}
|
||||
@@ -3120,7 +3120,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
@@ -3124,7 +3124,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
netdev_reset_queue(eth->netdev[i]);
|
||||
if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && eth->scratch_ring) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
|
@ -289,7 +289,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
eth->scratch_ring, eth->phy_scratch_ring);
|
||||
eth->scratch_ring = NULL;
|
||||
eth->phy_scratch_ring = 0;
|
||||
@@ -3170,7 +3170,7 @@ static irqreturn_t mtk_handle_irq_rx(int
|
||||
@@ -3174,7 +3174,7 @@ static irqreturn_t mtk_handle_irq_rx(int
|
||||
|
||||
eth->rx_events++;
|
||||
if (likely(napi_schedule_prep(ð->rx_napi))) {
|
||||
|
@ -298,7 +298,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
__napi_schedule(ð->rx_napi);
|
||||
}
|
||||
|
||||
@@ -3196,9 +3196,9 @@ static irqreturn_t mtk_handle_irq(int ir
|
||||
@@ -3200,9 +3200,9 @@ static irqreturn_t mtk_handle_irq(int ir
|
||||
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
||||
|
||||
if (mtk_r32(eth, reg_map->pdma.irq_mask) &
|
||||
|
@ -310,7 +310,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
mtk_handle_irq_rx(irq, _eth);
|
||||
}
|
||||
if (mtk_r32(eth, reg_map->tx_irq_mask) & MTK_TX_DONE_INT) {
|
||||
@@ -3216,10 +3216,10 @@ static void mtk_poll_controller(struct n
|
||||
@@ -3220,10 +3220,10 @@ static void mtk_poll_controller(struct n
|
||||
struct mtk_eth *eth = mac->hw;
|
||||
|
||||
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
||||
|
@ -323,7 +323,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
}
|
||||
#endif
|
||||
|
||||
@@ -3383,7 +3383,7 @@ static int mtk_open(struct net_device *d
|
||||
@@ -3387,7 +3387,7 @@ static int mtk_open(struct net_device *d
|
||||
napi_enable(ð->tx_napi);
|
||||
napi_enable(ð->rx_napi);
|
||||
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
|
||||
|
@ -332,7 +332,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
refcount_set(ð->dma_refcnt, 1);
|
||||
}
|
||||
else
|
||||
@@ -3467,7 +3467,7 @@ static int mtk_stop(struct net_device *d
|
||||
@@ -3471,7 +3471,7 @@ static int mtk_stop(struct net_device *d
|
||||
mtk_gdm_config(eth, MTK_GDMA_DROP_ALL);
|
||||
|
||||
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
||||
|
@ -341,7 +341,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
napi_disable(ð->tx_napi);
|
||||
napi_disable(ð->rx_napi);
|
||||
|
||||
@@ -3943,9 +3943,9 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -3947,9 +3947,9 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
|
||||
/* FE int grouping */
|
||||
mtk_w32(eth, MTK_TX_DONE_INT, reg_map->pdma.int_grp);
|
||||
|
@ -353,7 +353,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
||||
|
||||
if (mtk_is_netsys_v3_or_greater(eth)) {
|
||||
@@ -5053,11 +5053,15 @@ static const struct mtk_soc_data mt2701_
|
||||
@@ -5057,11 +5057,15 @@ static const struct mtk_soc_data mt2701_
|
||||
.required_clks = MT7623_CLKS_BITMAP,
|
||||
.required_pctl = true,
|
||||
.version = 1,
|
||||
|
@ -374,7 +374,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5073,11 +5077,15 @@ static const struct mtk_soc_data mt7621_
|
||||
@@ -5077,11 +5081,15 @@ static const struct mtk_soc_data mt7621_
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
|
@ -395,7 +395,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5095,11 +5103,15 @@ static const struct mtk_soc_data mt7622_
|
||||
@@ -5099,11 +5107,15 @@ static const struct mtk_soc_data mt7622_
|
||||
.hash_offset = 2,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
|
@ -416,7 +416,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5116,11 +5128,15 @@ static const struct mtk_soc_data mt7623_
|
||||
@@ -5120,11 +5132,15 @@ static const struct mtk_soc_data mt7623_
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
.disable_pll_modes = true,
|
||||
|
@ -437,7 +437,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5135,11 +5151,15 @@ static const struct mtk_soc_data mt7629_
|
||||
@@ -5139,11 +5155,15 @@ static const struct mtk_soc_data mt7629_
|
||||
.required_pctl = false,
|
||||
.has_accounting = true,
|
||||
.version = 1,
|
||||
|
@ -458,7 +458,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5157,11 +5177,15 @@ static const struct mtk_soc_data mt7981_
|
||||
@@ -5161,11 +5181,15 @@ static const struct mtk_soc_data mt7981_
|
||||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
|
||||
|
@ -479,7 +479,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
.dma_len_offset = 8,
|
||||
},
|
||||
@@ -5179,11 +5203,15 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -5183,11 +5207,15 @@ static const struct mtk_soc_data mt7986_
|
||||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
|
||||
|
@ -500,7 +500,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
.dma_len_offset = 8,
|
||||
},
|
||||
@@ -5201,11 +5229,15 @@ static const struct mtk_soc_data mt7988_
|
||||
@@ -5205,11 +5233,15 @@ static const struct mtk_soc_data mt7988_
|
||||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V3_SIZE,
|
||||
|
@ -521,7 +521,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
.dma_len_offset = 8,
|
||||
},
|
||||
@@ -5218,11 +5250,15 @@ static const struct mtk_soc_data rt5350_
|
||||
@@ -5222,11 +5254,15 @@ static const struct mtk_soc_data rt5350_
|
||||
.required_clks = MT7628_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
.version = 1,
|
||||
|
|
|
@ -76,7 +76,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON, trxd.rxd5);
|
||||
hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY;
|
||||
if (hash != MTK_RXD5_FOE_ENTRY)
|
||||
@@ -2686,7 +2686,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
@@ -2690,7 +2690,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
|
||||
rxd->rxd3 = 0;
|
||||
rxd->rxd4 = 0;
|
||||
|
@ -85,7 +85,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
rxd->rxd5 = 0;
|
||||
rxd->rxd6 = 0;
|
||||
rxd->rxd7 = 0;
|
||||
@@ -3889,7 +3889,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -3893,7 +3893,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
else
|
||||
mtk_hw_reset(eth);
|
||||
|
||||
|
@ -94,7 +94,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
/* Set FE to PDMAv2 if necessary */
|
||||
val = mtk_r32(eth, MTK_FE_GLO_MISC);
|
||||
mtk_w32(eth, val | BIT(4), MTK_FE_GLO_MISC);
|
||||
@@ -5183,11 +5183,11 @@ static const struct mtk_soc_data mt7981_
|
||||
@@ -5187,11 +5187,11 @@ static const struct mtk_soc_data mt7981_
|
||||
.dma_len_offset = 8,
|
||||
},
|
||||
.rx = {
|
||||
|
@ -110,7 +110,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
},
|
||||
};
|
||||
|
||||
@@ -5209,11 +5209,11 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -5213,11 +5213,11 @@ static const struct mtk_soc_data mt7986_
|
||||
.dma_len_offset = 8,
|
||||
},
|
||||
.rx = {
|
||||
|
|
|
@ -123,7 +123,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
}
|
||||
}
|
||||
|
||||
@@ -2457,7 +2463,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -2461,7 +2467,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
if (MTK_HAS_CAPS(soc->caps, MTK_QDMA))
|
||||
ring_size = MTK_QDMA_RING_SIZE;
|
||||
else
|
||||
|
@ -132,7 +132,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
|
||||
ring->buf = kcalloc(ring_size, sizeof(*ring->buf),
|
||||
GFP_KERNEL);
|
||||
@@ -2465,8 +2471,8 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -2469,8 +2475,8 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
goto no_tx_mem;
|
||||
|
||||
if (MTK_HAS_CAPS(soc->caps, MTK_SRAM)) {
|
||||
|
@ -143,7 +143,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
} else {
|
||||
ring->dma = dma_alloc_coherent(eth->dma_dev, ring_size * sz,
|
||||
&ring->phys, GFP_KERNEL);
|
||||
@@ -2588,6 +2594,7 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
@@ -2592,6 +2598,7 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
static int mtk_rx_alloc(struct mtk_eth *eth, int ring_no, int rx_flag)
|
||||
{
|
||||
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
||||
|
@ -151,7 +151,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
struct mtk_rx_ring *ring;
|
||||
int rx_data_len, rx_dma_size, tx_ring_size;
|
||||
int i;
|
||||
@@ -2595,7 +2602,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
@@ -2599,7 +2606,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
|
||||
tx_ring_size = MTK_QDMA_RING_SIZE;
|
||||
else
|
||||
|
@ -160,7 +160,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
|
||||
if (rx_flag == MTK_RX_FLAGS_QDMA) {
|
||||
if (ring_no)
|
||||
@@ -2610,7 +2617,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
@@ -2614,7 +2621,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
rx_dma_size = MTK_HW_LRO_DMA_SIZE;
|
||||
} else {
|
||||
rx_data_len = ETH_DATA_LEN;
|
||||
|
@ -169,7 +169,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
}
|
||||
|
||||
ring->frag_size = mtk_max_frag_size(rx_data_len);
|
||||
@@ -3139,7 +3146,10 @@ static void mtk_dma_free(struct mtk_eth
|
||||
@@ -3143,7 +3150,10 @@ static void mtk_dma_free(struct mtk_eth
|
||||
mtk_rx_clean(eth, ð->rx_ring[i], false);
|
||||
}
|
||||
|
||||
|
@ -181,7 +181,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
}
|
||||
|
||||
static bool mtk_hw_reset_check(struct mtk_eth *eth)
|
||||
@@ -5061,11 +5071,14 @@ static const struct mtk_soc_data mt2701_
|
||||
@@ -5065,11 +5075,14 @@ static const struct mtk_soc_data mt2701_
|
||||
.desc_size = sizeof(struct mtk_tx_dma),
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
@ -196,7 +196,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5085,11 +5098,14 @@ static const struct mtk_soc_data mt7621_
|
||||
@@ -5089,11 +5102,14 @@ static const struct mtk_soc_data mt7621_
|
||||
.desc_size = sizeof(struct mtk_tx_dma),
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
@ -211,7 +211,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5111,11 +5127,14 @@ static const struct mtk_soc_data mt7622_
|
||||
@@ -5115,11 +5131,14 @@ static const struct mtk_soc_data mt7622_
|
||||
.desc_size = sizeof(struct mtk_tx_dma),
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
@ -226,7 +226,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5136,11 +5155,14 @@ static const struct mtk_soc_data mt7623_
|
||||
@@ -5140,11 +5159,14 @@ static const struct mtk_soc_data mt7623_
|
||||
.desc_size = sizeof(struct mtk_tx_dma),
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
@ -241,7 +241,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5159,11 +5181,14 @@ static const struct mtk_soc_data mt7629_
|
||||
@@ -5163,11 +5185,14 @@ static const struct mtk_soc_data mt7629_
|
||||
.desc_size = sizeof(struct mtk_tx_dma),
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
@ -256,7 +256,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5185,6 +5210,8 @@ static const struct mtk_soc_data mt7981_
|
||||
@@ -5189,6 +5214,8 @@ static const struct mtk_soc_data mt7981_
|
||||
.desc_size = sizeof(struct mtk_tx_dma_v2),
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
.dma_len_offset = 8,
|
||||
|
@ -265,7 +265,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
},
|
||||
.rx = {
|
||||
.desc_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -5192,6 +5219,7 @@ static const struct mtk_soc_data mt7981_
|
||||
@@ -5196,6 +5223,7 @@ static const struct mtk_soc_data mt7981_
|
||||
.dma_l4_valid = RX_DMA_L4_VALID_V2,
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
@ -273,7 +273,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
},
|
||||
};
|
||||
|
||||
@@ -5211,6 +5239,8 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -5215,6 +5243,8 @@ static const struct mtk_soc_data mt7986_
|
||||
.desc_size = sizeof(struct mtk_tx_dma_v2),
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
.dma_len_offset = 8,
|
||||
|
@ -282,7 +282,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
},
|
||||
.rx = {
|
||||
.desc_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -5218,6 +5248,7 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -5222,6 +5252,7 @@ static const struct mtk_soc_data mt7986_
|
||||
.dma_l4_valid = RX_DMA_L4_VALID_V2,
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
@ -290,7 +290,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
},
|
||||
};
|
||||
|
||||
@@ -5237,6 +5268,8 @@ static const struct mtk_soc_data mt7988_
|
||||
@@ -5241,6 +5272,8 @@ static const struct mtk_soc_data mt7988_
|
||||
.desc_size = sizeof(struct mtk_tx_dma_v2),
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
.dma_len_offset = 8,
|
||||
|
@ -299,7 +299,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
},
|
||||
.rx = {
|
||||
.desc_size = sizeof(struct mtk_rx_dma_v2),
|
||||
@@ -5244,6 +5277,7 @@ static const struct mtk_soc_data mt7988_
|
||||
@@ -5248,6 +5281,7 @@ static const struct mtk_soc_data mt7988_
|
||||
.dma_l4_valid = RX_DMA_L4_VALID_V2,
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
.dma_len_offset = 8,
|
||||
|
@ -307,7 +307,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
},
|
||||
};
|
||||
|
||||
@@ -5258,6 +5292,7 @@ static const struct mtk_soc_data rt5350_
|
||||
@@ -5262,6 +5296,7 @@ static const struct mtk_soc_data rt5350_
|
||||
.desc_size = sizeof(struct mtk_tx_dma),
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
@ -315,7 +315,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
},
|
||||
.rx = {
|
||||
.desc_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -5265,6 +5300,7 @@ static const struct mtk_soc_data rt5350_
|
||||
@@ -5269,6 +5304,7 @@ static const struct mtk_soc_data rt5350_
|
||||
.dma_l4_valid = RX_DMA_L4_VALID_PDMA,
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
|
|
@ -85,7 +85,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
skb_record_rx_queue(skb, 0);
|
||||
napi_gro_receive(napi, skb);
|
||||
@@ -3276,37 +3287,27 @@ static int mtk_start_dma(struct mtk_eth
|
||||
@@ -3280,37 +3291,27 @@ static int mtk_start_dma(struct mtk_eth
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -134,7 +134,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
}
|
||||
|
||||
|
||||
@@ -3366,7 +3367,10 @@ static int mtk_open(struct net_device *d
|
||||
@@ -3370,7 +3371,10 @@ static int mtk_open(struct net_device *d
|
||||
{
|
||||
struct mtk_mac *mac = netdev_priv(dev);
|
||||
struct mtk_eth *eth = mac->hw;
|
||||
|
@ -146,7 +146,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
|
||||
if (err) {
|
||||
@@ -3390,18 +3394,38 @@ static int mtk_open(struct net_device *d
|
||||
@@ -3394,18 +3398,38 @@ static int mtk_open(struct net_device *d
|
||||
for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
|
||||
mtk_ppe_start(eth->ppe[i]);
|
||||
|
||||
|
@ -190,7 +190,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
phylink_start(mac->phylink);
|
||||
netif_tx_start_all_queues(dev);
|
||||
@@ -3478,7 +3502,8 @@ static int mtk_stop(struct net_device *d
|
||||
@@ -3482,7 +3506,8 @@ static int mtk_stop(struct net_device *d
|
||||
if (!refcount_dec_and_test(ð->dma_refcnt))
|
||||
return 0;
|
||||
|
||||
|
@ -200,7 +200,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
||||
mtk_rx_irq_disable(eth, eth->soc->rx.irq_done_mask);
|
||||
@@ -4973,23 +4998,24 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -4977,23 +5002,24 @@ static int mtk_probe(struct platform_dev
|
||||
}
|
||||
|
||||
if (eth->soc->offload_version) {
|
||||
|
@ -233,7 +233,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
}
|
||||
|
||||
for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
@@ -5092,6 +5118,7 @@ static const struct mtk_soc_data mt7621_
|
||||
@@ -5096,6 +5122,7 @@ static const struct mtk_soc_data mt7621_
|
||||
.required_pctl = false,
|
||||
.version = 1,
|
||||
.offload_version = 1,
|
||||
|
@ -241,7 +241,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
.tx = {
|
||||
@@ -5120,6 +5147,7 @@ static const struct mtk_soc_data mt7622_
|
||||
@@ -5124,6 +5151,7 @@ static const struct mtk_soc_data mt7622_
|
||||
.required_pctl = false,
|
||||
.version = 1,
|
||||
.offload_version = 2,
|
||||
|
@ -249,7 +249,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.hash_offset = 2,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
@@ -5148,6 +5176,7 @@ static const struct mtk_soc_data mt7623_
|
||||
@@ -5152,6 +5180,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.required_pctl = true,
|
||||
.version = 1,
|
||||
.offload_version = 1,
|
||||
|
@ -257,7 +257,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
.disable_pll_modes = true,
|
||||
@@ -5203,6 +5232,7 @@ static const struct mtk_soc_data mt7981_
|
||||
@@ -5207,6 +5236,7 @@ static const struct mtk_soc_data mt7981_
|
||||
.required_pctl = false,
|
||||
.version = 2,
|
||||
.offload_version = 2,
|
||||
|
@ -265,7 +265,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
|
||||
@@ -5232,6 +5262,7 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -5236,6 +5266,7 @@ static const struct mtk_soc_data mt7986_
|
||||
.required_pctl = false,
|
||||
.version = 2,
|
||||
.offload_version = 2,
|
||||
|
@ -273,7 +273,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
|
||||
@@ -5261,6 +5292,7 @@ static const struct mtk_soc_data mt7988_
|
||||
@@ -5265,6 +5296,7 @@ static const struct mtk_soc_data mt7988_
|
||||
.required_pctl = false,
|
||||
.version = 3,
|
||||
.offload_version = 2,
|
||||
|
|
|
@ -21,7 +21,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -3396,7 +3396,7 @@ static int mtk_open(struct net_device *d
|
||||
@@ -3400,7 +3400,7 @@ static int mtk_open(struct net_device *d
|
||||
|
||||
for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i])
|
||||
|
|
|
@ -20,7 +20,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4478,6 +4478,20 @@ static int mtk_set_rxnfc(struct net_devi
|
||||
@@ -4482,6 +4482,20 @@ static int mtk_set_rxnfc(struct net_devi
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
static u16 mtk_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||
struct net_device *sb_dev)
|
||||
{
|
||||
@@ -4506,8 +4520,10 @@ static const struct ethtool_ops mtk_etht
|
||||
@@ -4510,8 +4524,10 @@ static const struct ethtool_ops mtk_etht
|
||||
.get_strings = mtk_get_strings,
|
||||
.get_sset_count = mtk_get_sset_count,
|
||||
.get_ethtool_stats = mtk_get_ethtool_stats,
|
||||
|
|
|
@ -39,7 +39,7 @@ Signed-off-by: Qingfang Deng <dqfext@gmail.com>
|
|||
mcr |= MAC_MCR_TX_EN | MAC_MCR_RX_EN | MAC_MCR_FORCE_LINK;
|
||||
mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
|
||||
}
|
||||
@@ -4492,6 +4502,61 @@ static int mtk_set_pauseparam(struct net
|
||||
@@ -4496,6 +4506,61 @@ static int mtk_set_pauseparam(struct net
|
||||
return phylink_ethtool_set_pauseparam(mac->phylink, pause);
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,7 @@ Signed-off-by: Qingfang Deng <dqfext@gmail.com>
|
|||
static u16 mtk_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||
struct net_device *sb_dev)
|
||||
{
|
||||
@@ -4524,6 +4589,8 @@ static const struct ethtool_ops mtk_etht
|
||||
@@ -4528,6 +4593,8 @@ static const struct ethtool_ops mtk_etht
|
||||
.set_pauseparam = mtk_set_pauseparam,
|
||||
.get_rxnfc = mtk_get_rxnfc,
|
||||
.set_rxnfc = mtk_set_rxnfc,
|
||||
|
@ -110,7 +110,7 @@ Signed-off-by: Qingfang Deng <dqfext@gmail.com>
|
|||
};
|
||||
|
||||
static const struct net_device_ops mtk_netdev_ops = {
|
||||
@@ -4584,6 +4651,8 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
@@ -4588,6 +4655,8 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
}
|
||||
mac = netdev_priv(eth->netdev[id]);
|
||||
eth->mac[id] = mac;
|
||||
|
|
|
@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/include/linux/module.h
|
||||
+++ b/include/linux/module.h
|
||||
@@ -164,6 +164,7 @@ extern void cleanup_module(void);
|
||||
@@ -166,6 +166,7 @@ struct module_kobject *lookup_or_create_
|
||||
|
||||
/* Generic info of form tag = "info" */
|
||||
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
|
||||
|
@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
/* For userspace: you can also call me... */
|
||||
#define MODULE_ALIAS(_alias) MODULE_INFO(alias, _alias)
|
||||
@@ -233,12 +234,12 @@ extern void cleanup_module(void);
|
||||
@@ -235,12 +236,12 @@ struct module_kobject *lookup_or_create_
|
||||
* Author(s), use "Name <email>" or just "Name", for multiple
|
||||
* authors use multiple MODULE_AUTHOR() statements/lines.
|
||||
*/
|
||||
|
@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
/* Creates an alias so file2alias.c can find device table. */
|
||||
#define MODULE_DEVICE_TABLE(type, name) \
|
||||
extern typeof(name) __mod_##type##__##name##_device_table \
|
||||
@@ -265,7 +266,9 @@ extern typeof(name) __mod_##type##__##na
|
||||
@@ -267,7 +268,9 @@ extern typeof(name) __mod_##type##__##na
|
||||
*/
|
||||
|
||||
#if defined(MODULE) || !defined(CONFIG_SYSFS)
|
||||
|
@ -49,7 +49,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
#else
|
||||
#define MODULE_VERSION(_version) \
|
||||
MODULE_INFO(version, _version); \
|
||||
@@ -288,7 +291,7 @@ extern typeof(name) __mod_##type##__##na
|
||||
@@ -290,7 +293,7 @@ extern typeof(name) __mod_##type##__##na
|
||||
/* Optional firmware file (or files) needed by the module
|
||||
* format is simply firmware file name. Multiple firmware
|
||||
* files require multiple MODULE_FIRMWARE() specifiers */
|
||||
|
|
|
@ -60,7 +60,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
*/
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -3095,6 +3095,10 @@ static inline int pskb_trim(struct sk_bu
|
||||
@@ -3098,6 +3098,10 @@ static inline int pskb_trim(struct sk_bu
|
||||
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
/**
|
||||
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
|
||||
* @skb: buffer to alter
|
||||
@@ -3260,16 +3264,6 @@ static inline struct sk_buff *dev_alloc_
|
||||
@@ -3263,16 +3267,6 @@ static inline struct sk_buff *dev_alloc_
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ Signed-off-by: Bo-Cun Chen <bc-bocun.chen@mediatek.com>
|
|||
.glo_cfg = 0x4604,
|
||||
.rst_idx = 0x4608,
|
||||
.delay_irq = 0x460c,
|
||||
@@ -3895,6 +3898,56 @@ static void mtk_set_mcr_max_rx(struct mt
|
||||
@@ -3899,6 +3902,56 @@ static void mtk_set_mcr_max_rx(struct mt
|
||||
mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
|
||||
}
|
||||
|
||||
|
@ -94,7 +94,7 @@ Signed-off-by: Bo-Cun Chen <bc-bocun.chen@mediatek.com>
|
|||
static void mtk_hw_reset(struct mtk_eth *eth)
|
||||
{
|
||||
u32 val;
|
||||
@@ -4370,6 +4423,8 @@ static void mtk_pending_work(struct work
|
||||
@@ -4374,6 +4427,8 @@ static void mtk_pending_work(struct work
|
||||
rtnl_lock();
|
||||
set_bit(MTK_RESETTING, ð->state);
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
|
||||
--- a/drivers/net/usb/rndis_host.c
|
||||
+++ b/drivers/net/usb/rndis_host.c
|
||||
@@ -640,6 +640,16 @@ static const struct driver_info wwan_rnd
|
||||
@@ -630,6 +630,16 @@ static const struct driver_info zte_rndi
|
||||
.tx_fixup = rndis_tx_fixup,
|
||||
};
|
||||
|
||||
|
@ -30,7 +30,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
static const struct usb_device_id products [] = {
|
||||
@@ -676,6 +686,36 @@ static const struct usb_device_id produc
|
||||
@@ -666,6 +676,36 @@ static const struct usb_device_id produc
|
||||
USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
|
||||
.driver_info = (unsigned long) &rndis_info,
|
||||
}, {
|
||||
|
@ -64,6 +64,6 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
+ USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
|
||||
+ .driver_info = (unsigned long) &asr_rndis_info,
|
||||
+}, {
|
||||
/* Mobile Broadband Modem, seen in Novatel Verizon USB730L and
|
||||
* Telit FN990A (RNDIS)
|
||||
*/
|
||||
/* Novatel Verizon USB730L */
|
||||
USB_INTERFACE_INFO(USB_CLASS_MISC, 4, 1),
|
||||
.driver_info = (unsigned long) &rndis_info,
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
LINUX_VERSION-6.6 = .89
|
||||
LINUX_KERNEL_HASH-6.6.89 = c21af7d36068e4ac0704c242eac8459212e6bf4a5d09df941b9b4d17dc1eba00
|
||||
LINUX_VERSION-6.6 = .90
|
||||
LINUX_KERNEL_HASH-6.6.90 = ff856748671629c1fefef219099e0b4b81131c2d325e768cb0806e204157014e
|
||||
|
|
|
@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -3062,7 +3062,7 @@ static inline int pskb_network_may_pull(
|
||||
@@ -3065,7 +3065,7 @@ static inline int pskb_network_may_pull(
|
||||
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
|
||||
*/
|
||||
#ifndef NET_SKB_PAD
|
||||
|
|
|
@ -1,88 +0,0 @@
|
|||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sat, 26 Apr 2025 17:18:03 +0200
|
||||
Subject: [PATCH] net: ipv6: fix UDPv6 GSO segmentation with NAT
|
||||
|
||||
If any address or port is changed, update it in all packets and recalculate
|
||||
checksum.
|
||||
|
||||
Fixes: 9fd1ff5d2ac7 ("udp: Support UDP fraglist GRO/GSO.")
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/ipv4/udp_offload.c
|
||||
+++ b/net/ipv4/udp_offload.c
|
||||
@@ -247,6 +247,62 @@ static struct sk_buff *__udpv4_gso_segme
|
||||
return segs;
|
||||
}
|
||||
|
||||
+static void __udpv6_gso_segment_csum(struct sk_buff *seg,
|
||||
+ struct in6_addr *oldip,
|
||||
+ const struct in6_addr *newip,
|
||||
+ __be16 *oldport, __be16 newport)
|
||||
+{
|
||||
+ struct udphdr *uh = udp_hdr(seg);
|
||||
+
|
||||
+ if (ipv6_addr_equal(oldip, newip) && *oldport == newport)
|
||||
+ return;
|
||||
+
|
||||
+ if (uh->check) {
|
||||
+ inet_proto_csum_replace16(&uh->check, seg, oldip->s6_addr32,
|
||||
+ newip->s6_addr32, true);
|
||||
+
|
||||
+ inet_proto_csum_replace2(&uh->check, seg, *oldport, newport,
|
||||
+ false);
|
||||
+ if (!uh->check)
|
||||
+ uh->check = CSUM_MANGLED_0;
|
||||
+ }
|
||||
+
|
||||
+ *oldip = *newip;
|
||||
+ *oldport = newport;
|
||||
+}
|
||||
+
|
||||
+static struct sk_buff *__udpv6_gso_segment_list_csum(struct sk_buff *segs)
|
||||
+{
|
||||
+ const struct ipv6hdr *iph;
|
||||
+ const struct udphdr *uh;
|
||||
+ struct ipv6hdr *iph2;
|
||||
+ struct sk_buff *seg;
|
||||
+ struct udphdr *uh2;
|
||||
+
|
||||
+ seg = segs;
|
||||
+ uh = udp_hdr(seg);
|
||||
+ iph = ipv6_hdr(seg);
|
||||
+ uh2 = udp_hdr(seg->next);
|
||||
+ iph2 = ipv6_hdr(seg->next);
|
||||
+
|
||||
+ if (!(*(const u32 *)&uh->source ^ *(const u32 *)&uh2->source) &&
|
||||
+ ipv6_addr_equal(&iph->saddr, &iph2->saddr) &&
|
||||
+ ipv6_addr_equal(&iph->daddr, &iph2->daddr))
|
||||
+ return segs;
|
||||
+
|
||||
+ while ((seg = seg->next)) {
|
||||
+ uh2 = udp_hdr(seg);
|
||||
+ iph2 = ipv6_hdr(seg);
|
||||
+
|
||||
+ __udpv6_gso_segment_csum(seg, &iph2->saddr, &iph->saddr,
|
||||
+ &uh2->source, uh->source);
|
||||
+ __udpv6_gso_segment_csum(seg, &iph2->daddr, &iph->daddr,
|
||||
+ &uh2->dest, uh->dest);
|
||||
+ }
|
||||
+
|
||||
+ return segs;
|
||||
+}
|
||||
+
|
||||
static struct sk_buff *__udp_gso_segment_list(struct sk_buff *skb,
|
||||
netdev_features_t features,
|
||||
bool is_ipv6)
|
||||
@@ -259,7 +315,10 @@ static struct sk_buff *__udp_gso_segment
|
||||
|
||||
udp_hdr(skb)->len = htons(sizeof(struct udphdr) + mss);
|
||||
|
||||
- return is_ipv6 ? skb : __udpv4_gso_segment_list_csum(skb);
|
||||
+ if (is_ipv6)
|
||||
+ return __udpv6_gso_segment_list_csum(skb);
|
||||
+ else
|
||||
+ return __udpv4_gso_segment_list_csum(skb);
|
||||
}
|
||||
|
||||
struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
|
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -5121,6 +5121,8 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -5125,6 +5125,8 @@ static int mtk_probe(struct platform_dev
|
||||
* for NAPI to work
|
||||
*/
|
||||
init_dummy_netdev(ð->dummy_dev);
|
||||
|
|
|
@ -23,7 +23,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -3145,11 +3145,19 @@ static int mtk_dma_init(struct mtk_eth *
|
||||
@@ -3149,11 +3149,19 @@ static int mtk_dma_init(struct mtk_eth *
|
||||
static void mtk_dma_free(struct mtk_eth *eth)
|
||||
{
|
||||
const struct mtk_soc_data *soc = eth->soc;
|
||||
|
|
|
@ -25,7 +25,7 @@ Signed-off-by: Chad Monroe <chad@monroe.io>
|
|||
/* QDMA Flow Control Register */
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -3319,12 +3319,14 @@ static int mtk_start_dma(struct mtk_eth
|
||||
@@ -3323,12 +3323,14 @@ static int mtk_start_dma(struct mtk_eth
|
||||
MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
|
||||
MTK_RX_2B_OFFSET | MTK_TX_WB_DDONE;
|
||||
|
||||
|
|
|
@ -490,7 +490,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
.mac_finish = mtk_mac_finish,
|
||||
.mac_link_down = mtk_mac_link_down,
|
||||
.mac_link_up = mtk_mac_link_up,
|
||||
@@ -3427,6 +3568,9 @@ static int mtk_open(struct net_device *d
|
||||
@@ -3431,6 +3572,9 @@ static int mtk_open(struct net_device *d
|
||||
|
||||
ppe_num = eth->soc->ppe_num;
|
||||
|
||||
|
@ -500,7 +500,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
|
||||
if (err) {
|
||||
netdev_err(dev, "%s: could not attach PHY: %d\n", __func__,
|
||||
@@ -3577,6 +3721,9 @@ static int mtk_stop(struct net_device *d
|
||||
@@ -3581,6 +3725,9 @@ static int mtk_stop(struct net_device *d
|
||||
for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
|
||||
mtk_ppe_stop(eth->ppe[i]);
|
||||
|
||||
|
@ -510,7 +510,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
return 0;
|
||||
}
|
||||
|
||||
@@ -4663,6 +4810,7 @@ static const struct net_device_ops mtk_n
|
||||
@@ -4667,6 +4814,7 @@ static const struct net_device_ops mtk_n
|
||||
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
||||
{
|
||||
const __be32 *_id = of_get_property(np, "reg", NULL);
|
||||
|
@ -518,7 +518,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
phy_interface_t phy_mode;
|
||||
struct phylink *phylink;
|
||||
struct mtk_mac *mac;
|
||||
@@ -4701,16 +4849,41 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
@@ -4705,16 +4853,41 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
mac->id = id;
|
||||
mac->hw = eth;
|
||||
mac->of_node = np;
|
||||
|
@ -568,7 +568,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
}
|
||||
|
||||
memset(mac->hwlro_ip, 0, sizeof(mac->hwlro_ip));
|
||||
@@ -4793,8 +4966,21 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
@@ -4797,8 +4970,21 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
phy_interface_zero(mac->phylink_config.supported_interfaces);
|
||||
__set_bit(PHY_INTERFACE_MODE_INTERNAL,
|
||||
mac->phylink_config.supported_interfaces);
|
||||
|
@ -590,7 +590,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
phylink = phylink_create(&mac->phylink_config,
|
||||
of_fwnode_handle(mac->of_node),
|
||||
phy_mode, &mtk_phylink_ops);
|
||||
@@ -4845,6 +5031,26 @@ free_netdev:
|
||||
@@ -4849,6 +5035,26 @@ free_netdev:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -617,7 +617,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
void mtk_eth_set_dma_device(struct mtk_eth *eth, struct device *dma_dev)
|
||||
{
|
||||
struct net_device *dev, *tmp;
|
||||
@@ -4991,7 +5197,8 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -4995,7 +5201,8 @@ static int mtk_probe(struct platform_dev
|
||||
regmap_write(cci, 0, 3);
|
||||
}
|
||||
|
||||
|
@ -627,7 +627,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
err = mtk_sgmii_init(eth);
|
||||
|
||||
if (err)
|
||||
@@ -5102,6 +5309,24 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -5106,6 +5313,24 @@ static int mtk_probe(struct platform_dev
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -652,7 +652,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_INT)) {
|
||||
err = devm_request_irq(eth->dev, eth->irq[0],
|
||||
mtk_handle_irq, 0,
|
||||
@@ -5205,6 +5430,11 @@ static int mtk_remove(struct platform_de
|
||||
@@ -5209,6 +5434,11 @@ static int mtk_remove(struct platform_de
|
||||
mtk_stop(eth->netdev[i]);
|
||||
mac = netdev_priv(eth->netdev[i]);
|
||||
phylink_disconnect_phy(mac->phylink);
|
||||
|
|
|
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -5466,7 +5466,7 @@ static const struct mtk_soc_data mt2701_
|
||||
@@ -5470,7 +5470,7 @@ static const struct mtk_soc_data mt2701_
|
||||
.desc_size = sizeof(struct mtk_rx_dma),
|
||||
.irq_done_mask = MTK_RX_DONE_INT,
|
||||
.dma_l4_valid = RX_DMA_L4_VALID,
|
||||
|
@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5494,7 +5494,7 @@ static const struct mtk_soc_data mt7621_
|
||||
@@ -5498,7 +5498,7 @@ static const struct mtk_soc_data mt7621_
|
||||
.desc_size = sizeof(struct mtk_rx_dma),
|
||||
.irq_done_mask = MTK_RX_DONE_INT,
|
||||
.dma_l4_valid = RX_DMA_L4_VALID,
|
||||
|
@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5524,7 +5524,7 @@ static const struct mtk_soc_data mt7622_
|
||||
@@ -5528,7 +5528,7 @@ static const struct mtk_soc_data mt7622_
|
||||
.desc_size = sizeof(struct mtk_rx_dma),
|
||||
.irq_done_mask = MTK_RX_DONE_INT,
|
||||
.dma_l4_valid = RX_DMA_L4_VALID,
|
||||
|
@ -57,7 +57,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5553,7 +5553,7 @@ static const struct mtk_soc_data mt7623_
|
||||
@@ -5557,7 +5557,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.desc_size = sizeof(struct mtk_rx_dma),
|
||||
.irq_done_mask = MTK_RX_DONE_INT,
|
||||
.dma_l4_valid = RX_DMA_L4_VALID,
|
||||
|
@ -66,7 +66,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5579,7 +5579,7 @@ static const struct mtk_soc_data mt7629_
|
||||
@@ -5583,7 +5583,7 @@ static const struct mtk_soc_data mt7629_
|
||||
.desc_size = sizeof(struct mtk_rx_dma),
|
||||
.irq_done_mask = MTK_RX_DONE_INT,
|
||||
.dma_l4_valid = RX_DMA_L4_VALID,
|
||||
|
@ -75,7 +75,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5611,7 +5611,7 @@ static const struct mtk_soc_data mt7981_
|
||||
@@ -5615,7 +5615,7 @@ static const struct mtk_soc_data mt7981_
|
||||
.dma_l4_valid = RX_DMA_L4_VALID_V2,
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
@ -84,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
},
|
||||
};
|
||||
|
||||
@@ -5641,7 +5641,7 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -5645,7 +5645,7 @@ static const struct mtk_soc_data mt7986_
|
||||
.dma_l4_valid = RX_DMA_L4_VALID_V2,
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
@ -93,7 +93,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
},
|
||||
};
|
||||
|
||||
@@ -5694,7 +5694,7 @@ static const struct mtk_soc_data rt5350_
|
||||
@@ -5698,7 +5698,7 @@ static const struct mtk_soc_data rt5350_
|
||||
.dma_l4_valid = RX_DMA_L4_VALID_PDMA,
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
|
|
|
@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
help
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4578,6 +4578,7 @@ static int mtk_get_sset_count(struct net
|
||||
@@ -4582,6 +4582,7 @@ static int mtk_get_sset_count(struct net
|
||||
|
||||
static void mtk_ethtool_pp_stats(struct mtk_eth *eth, u64 *data)
|
||||
{
|
||||
|
@ -33,7 +33,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
struct page_pool_stats stats = {};
|
||||
int i;
|
||||
|
||||
@@ -4590,6 +4591,7 @@ static void mtk_ethtool_pp_stats(struct
|
||||
@@ -4594,6 +4595,7 @@ static void mtk_ethtool_pp_stats(struct
|
||||
page_pool_get_stats(ring->page_pool, &stats);
|
||||
}
|
||||
page_pool_ethtool_stats_get(data, &stats);
|
||||
|
|
|
@ -100,7 +100,7 @@ Signed-off-by: Tim Harvey <tharvey@gateworks.com>
|
|||
return 0;
|
||||
|
||||
err_reset_phy:
|
||||
@@ -1456,14 +1455,16 @@ static const struct imx6_pcie_drvdata dr
|
||||
@@ -1457,14 +1456,16 @@ static const struct imx6_pcie_drvdata dr
|
||||
},
|
||||
[IMX8MM] = {
|
||||
.variant = IMX8MM,
|
||||
|
|
|
@ -93,7 +93,7 @@ Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
|
|||
+#endif
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -4657,6 +4657,9 @@ enum skb_ext_id {
|
||||
@@ -4683,6 +4683,9 @@ enum skb_ext_id {
|
||||
#if IS_ENABLED(CONFIG_MCTP_FLOWS)
|
||||
SKB_EXT_MCTP,
|
||||
#endif
|
||||
|
|
|
@ -34,7 +34,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||
cuImage.mpc8572ds
|
||||
--- a/arch/powerpc/boot/wrapper
|
||||
+++ b/arch/powerpc/boot/wrapper
|
||||
@@ -258,6 +258,11 @@ if [ -n "$esm_blob" -a "$platform" != "p
|
||||
@@ -256,6 +256,11 @@ if [ -n "$esm_blob" -a "$platform" != "p
|
||||
fi
|
||||
|
||||
case "$platform" in
|
||||
|
|
|
@ -38,7 +38,7 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
|||
|
||||
--- a/arch/powerpc/boot/wrapper
|
||||
+++ b/arch/powerpc/boot/wrapper
|
||||
@@ -350,6 +350,11 @@ adder875-redboot)
|
||||
@@ -348,6 +348,11 @@ adder875-redboot)
|
||||
platformo="$object/fixed-head.o $object/redboot-8xx.o"
|
||||
binary=y
|
||||
;;
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
image-$(CONFIG_MVME7100) += dtbImage.mvme7100
|
||||
--- a/arch/powerpc/boot/wrapper
|
||||
+++ b/arch/powerpc/boot/wrapper
|
||||
@@ -350,6 +350,7 @@ adder875-redboot)
|
||||
@@ -348,6 +348,7 @@ adder875-redboot)
|
||||
platformo="$object/fixed-head.o $object/redboot-8xx.o"
|
||||
binary=y
|
||||
;;
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
|
||||
--- a/arch/powerpc/boot/wrapper
|
||||
+++ b/arch/powerpc/boot/wrapper
|
||||
@@ -351,7 +351,8 @@ adder875-redboot)
|
||||
@@ -349,7 +349,8 @@ adder875-redboot)
|
||||
binary=y
|
||||
;;
|
||||
simpleboot-hiveap-330|\
|
||||
|
|
|
@ -55,7 +55,7 @@ WS-AP3825i AP.
|
|||
|
||||
--- a/arch/powerpc/boot/wrapper
|
||||
+++ b/arch/powerpc/boot/wrapper
|
||||
@@ -352,7 +352,8 @@ adder875-redboot)
|
||||
@@ -350,7 +350,8 @@ adder875-redboot)
|
||||
;;
|
||||
simpleboot-hiveap-330|\
|
||||
simpleboot-tl-wdr4900-v1|\
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
image-$(CONFIG_WS_AP3710I) += simpleImage.ws-ap3710i
|
||||
--- a/arch/powerpc/boot/wrapper
|
||||
+++ b/arch/powerpc/boot/wrapper
|
||||
@@ -350,6 +350,7 @@ adder875-redboot)
|
||||
@@ -348,6 +348,7 @@ adder875-redboot)
|
||||
platformo="$object/fixed-head.o $object/redboot-8xx.o"
|
||||
binary=y
|
||||
;;
|
||||
|
|
|
@ -25,8 +25,6 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||
3 files changed, 502 insertions(+)
|
||||
create mode 100644 drivers/input/keyboard/sx951x.c
|
||||
|
||||
diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
|
||||
index 1d0c5f4c0f99..6dc397389c64 100644
|
||||
--- a/drivers/input/keyboard/Kconfig
|
||||
+++ b/drivers/input/keyboard/Kconfig
|
||||
@@ -616,6 +616,17 @@ config KEYBOARD_SUNKBD
|
||||
|
@ -47,11 +45,9 @@ index 1d0c5f4c0f99..6dc397389c64 100644
|
|||
config KEYBOARD_SH_KEYSC
|
||||
tristate "SuperH KEYSC keypad support"
|
||||
depends on ARCH_SHMOBILE || COMPILE_TEST
|
||||
diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
|
||||
index aecef00c5d09..e59ca83c30ec 100644
|
||||
--- a/drivers/input/keyboard/Makefile
|
||||
+++ b/drivers/input/keyboard/Makefile
|
||||
@@ -66,6 +66,7 @@ obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o
|
||||
@@ -66,6 +66,7 @@ obj-$(CONFIG_KEYBOARD_STOWAWAY) += stow
|
||||
obj-$(CONFIG_KEYBOARD_ST_KEYSCAN) += st-keyscan.o
|
||||
obj-$(CONFIG_KEYBOARD_SUN4I_LRADC) += sun4i-lradc-keys.o
|
||||
obj-$(CONFIG_KEYBOARD_SUNKBD) += sunkbd.o
|
||||
|
@ -59,9 +55,6 @@ index aecef00c5d09..e59ca83c30ec 100644
|
|||
obj-$(CONFIG_KEYBOARD_TC3589X) += tc3589x-keypad.o
|
||||
obj-$(CONFIG_KEYBOARD_TEGRA) += tegra-kbc.o
|
||||
obj-$(CONFIG_KEYBOARD_TM2_TOUCHKEY) += tm2-touchkey.o
|
||||
diff --git a/drivers/input/keyboard/sx951x.c b/drivers/input/keyboard/sx951x.c
|
||||
new file mode 100644
|
||||
index 000000000000..66355036aa95
|
||||
--- /dev/null
|
||||
+++ b/drivers/input/keyboard/sx951x.c
|
||||
@@ -0,0 +1,490 @@
|
||||
|
@ -555,6 +548,3 @@ index 000000000000..66355036aa95
|
|||
+MODULE_DESCRIPTION("Semtech SX9512/SX9513 driver");
|
||||
+MODULE_AUTHOR("David Bauer <mail@david-bauer.net>");
|
||||
+MODULE_LICENSE("GPL");
|
||||
--
|
||||
2.47.2
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
|||
|
||||
#include "xhci.h"
|
||||
#include "xhci-trace.h"
|
||||
@@ -1842,6 +1843,7 @@ xhci_free_interrupter(struct xhci_hcd *x
|
||||
@@ -1878,6 +1879,7 @@ EXPORT_SYMBOL_GPL(xhci_remove_secondary_
|
||||
void xhci_mem_cleanup(struct xhci_hcd *xhci)
|
||||
{
|
||||
struct device *dev = xhci_to_hcd(xhci)->self.sysdev;
|
||||
|
@ -58,7 +58,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
|||
int i, j, num_ports;
|
||||
|
||||
cancel_delayed_work_sync(&xhci->cmd_timer);
|
||||
@@ -1887,6 +1889,13 @@ void xhci_mem_cleanup(struct xhci_hcd *x
|
||||
@@ -1928,6 +1930,13 @@ void xhci_mem_cleanup(struct xhci_hcd *x
|
||||
xhci_dbg_trace(xhci, trace_xhci_dbg_init,
|
||||
"Freed medium stream array pool");
|
||||
|
||||
|
@ -72,9 +72,9 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
|||
if (xhci->dcbaa)
|
||||
dma_free_coherent(dev, sizeof(*xhci->dcbaa),
|
||||
xhci->dcbaa, xhci->dcbaa->dma);
|
||||
@@ -2300,6 +2309,55 @@ xhci_add_interrupter(struct xhci_hcd *xh
|
||||
return 0;
|
||||
@@ -2399,6 +2408,55 @@ xhci_create_secondary_interrupter(struct
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xhci_create_secondary_interrupter);
|
||||
|
||||
+int xhci_setup_local_lowmem(struct xhci_hcd *xhci, size_t size)
|
||||
+{
|
||||
|
@ -127,8 +127,8 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
|||
+
|
||||
int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
|
||||
{
|
||||
dma_addr_t dma;
|
||||
@@ -2437,6 +2495,12 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
||||
struct xhci_interrupter *ir;
|
||||
@@ -2540,6 +2598,12 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
||||
|
||||
xhci->isoc_bei_interval = AVOID_BEI_INTERVAL_MAX;
|
||||
|
||||
|
@ -181,7 +181,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
|||
|
||||
#include "xhci.h"
|
||||
#include "xhci-trace.h"
|
||||
@@ -1286,6 +1288,55 @@ static void xhci_unmap_temp_buf(struct u
|
||||
@@ -1312,6 +1314,55 @@ static void xhci_unmap_temp_buf(struct u
|
||||
urb->transfer_buffer = NULL;
|
||||
}
|
||||
|
||||
|
@ -237,7 +237,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
|||
/*
|
||||
* Bypass the DMA mapping if URB is suitable for Immediate Transfer (IDT),
|
||||
* we'll copy the actual data into the TRB address register. This is limited to
|
||||
@@ -1306,9 +1357,11 @@ static int xhci_map_urb_for_dma(struct u
|
||||
@@ -1332,9 +1383,11 @@ static int xhci_map_urb_for_dma(struct u
|
||||
if (xhci_urb_temp_buffer_required(hcd, urb))
|
||||
return xhci_map_temp_buffer(hcd, urb);
|
||||
}
|
||||
|
@ -249,7 +249,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
|||
static void xhci_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
|
||||
{
|
||||
struct xhci_hcd *xhci;
|
||||
@@ -1321,8 +1374,10 @@ static void xhci_unmap_urb_for_dma(struc
|
||||
@@ -1347,8 +1400,10 @@ static void xhci_unmap_urb_for_dma(struc
|
||||
|
||||
if ((xhci->quirks & XHCI_SG_TRB_CACHE_SIZE_QUIRK) && unmap_temp_buf)
|
||||
xhci_unmap_temp_buf(hcd, urb);
|
||||
|
@ -263,7 +263,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
|||
/**
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1509,6 +1509,13 @@ struct xhci_hub {
|
||||
@@ -1506,6 +1506,13 @@ struct xhci_hub {
|
||||
u8 min_rev;
|
||||
};
|
||||
|
||||
|
@ -277,7 +277,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
|||
/* There is one xhci_hcd structure per controller */
|
||||
struct xhci_hcd {
|
||||
struct usb_hcd *main_hcd;
|
||||
@@ -1663,6 +1670,8 @@ struct xhci_hcd {
|
||||
@@ -1660,6 +1667,8 @@ struct xhci_hcd {
|
||||
#define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48)
|
||||
#define XHCI_ETRON_HOST BIT_ULL(49)
|
||||
|
||||
|
@ -286,7 +286,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
|||
unsigned int num_active_eps;
|
||||
unsigned int limit_active_eps;
|
||||
struct xhci_port *hw_ports;
|
||||
@@ -1692,6 +1701,8 @@ struct xhci_hcd {
|
||||
@@ -1689,6 +1698,8 @@ struct xhci_hcd {
|
||||
struct list_head regset_list;
|
||||
|
||||
void *dbc;
|
||||
|
|
|
@ -16,7 +16,7 @@ Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
|
|||
|
||||
--- a/drivers/usb/host/xhci-mem.c
|
||||
+++ b/drivers/usb/host/xhci-mem.c
|
||||
@@ -1891,7 +1891,8 @@ void xhci_mem_cleanup(struct xhci_hcd *x
|
||||
@@ -1932,7 +1932,8 @@ void xhci_mem_cleanup(struct xhci_hcd *x
|
||||
|
||||
if (xhci->lowmem_pool.pool) {
|
||||
pool = &xhci->lowmem_pool;
|
||||
|
@ -26,7 +26,7 @@ Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
|
|||
gen_pool_destroy(pool->pool);
|
||||
pool->pool = NULL;
|
||||
}
|
||||
@@ -2320,15 +2321,15 @@ int xhci_setup_local_lowmem(struct xhci_
|
||||
@@ -2419,15 +2420,15 @@ int xhci_setup_local_lowmem(struct xhci_
|
||||
if (!pool->pool) {
|
||||
/* minimal alloc one page */
|
||||
pool->pool = gen_pool_create(PAGE_SHIFT, dev_to_node(hcd->self.sysdev));
|
||||
|
@ -48,7 +48,7 @@ Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
|
|||
goto destroy_pool;
|
||||
}
|
||||
|
||||
@@ -2338,11 +2339,11 @@ int xhci_setup_local_lowmem(struct xhci_
|
||||
@@ -2437,11 +2438,11 @@ int xhci_setup_local_lowmem(struct xhci_
|
||||
* for it.
|
||||
*/
|
||||
err = gen_pool_add_virt(pool->pool, (unsigned long)buffer,
|
||||
|
@ -62,7 +62,7 @@ Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
|
|||
goto destroy_pool;
|
||||
}
|
||||
|
||||
@@ -2365,7 +2366,7 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
||||
@@ -2465,7 +2466,7 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
||||
unsigned int val, val2;
|
||||
u64 val_64;
|
||||
u32 page_size, temp;
|
||||
|
@ -71,7 +71,7 @@ Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
|
|||
|
||||
INIT_LIST_HEAD(&xhci->cmd_list);
|
||||
|
||||
@@ -2496,9 +2497,11 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
||||
@@ -2599,9 +2600,11 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
||||
xhci->isoc_bei_interval = AVOID_BEI_INTERVAL_MAX;
|
||||
|
||||
if (xhci->quirks & XHCI_LOCAL_BUFFER) {
|
||||
|
|
Loading…
Reference in a new issue