-LINUX_VERSION-5.15 = .158
-LINUX_KERNEL_HASH-5.15.158 = f9071c83a4fd8b80af026b48cfc1869bfa25883f9148b92b5dc1e1e1e26dd5c6
+LINUX_VERSION-5.15 = .159
+LINUX_KERNEL_HASH-5.15.159 = 3478fe50225e9c88e09cf114f38e3fb71e82d9fdcc356aa1257d721199b341c5
}
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
-@@ -5676,7 +5676,7 @@ static void port_event(struct usb_hub *h
+@@ -5677,7 +5677,7 @@ static void port_event(struct usb_hub *h
port_dev->over_current_count++;
port_over_current_notify(port_dev);
/* Disable rate control for now */
bcmgenet_tdma_ring_writel(priv, index, flow_period_val,
TDMA_FLOW_PERIOD);
-@@ -4083,9 +4083,12 @@ static int bcmgenet_probe(struct platfor
+@@ -4093,9 +4093,12 @@ static int bcmgenet_probe(struct platfor
netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1);
/* Set default coalescing parameters */
+++ /dev/null
-From 87bb6f0edf9a4a14d9b41bcfe97216f74f730b43 Mon Sep 17 00:00:00 2001
-From: Phil Elwell <phil@raspberrypi.com>
-Date: Fri, 25 Sep 2020 15:07:23 +0100
-Subject: [PATCH] net: bcmgenet: Reset RBUF on first open
-
-If the RBUF logic is not reset when the kernel starts then there
-may be some data left over from any network boot loader. If the
-64-byte packet headers are enabled then this can be fatal.
-
-Extend bcmgenet_dma_disable to do perform the reset, but not when
-called from bcmgenet_resume in order to preserve a wake packet.
-
-N.B. This different handling of resume is just based on a hunch -
-why else wouldn't one reset the RBUF as well as the TBUF? If this
-isn't the case then it's easy to change the patch to make the RBUF
-reset unconditional.
-
-See: https://github.com/raspberrypi/linux/issues/3850
-
-Signed-off-by: Phil Elwell <phil@raspberrypi.com>
----
- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 16 ++++++++++++----
- 1 file changed, 12 insertions(+), 4 deletions(-)
-
---- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
-+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
-@@ -3264,7 +3264,7 @@ static void bcmgenet_get_hw_addr(struct
- }
-
- /* Returns a reusable dma control register value */
--static u32 bcmgenet_dma_disable(struct bcmgenet_priv *priv)
-+static u32 bcmgenet_dma_disable(struct bcmgenet_priv *priv, bool flush_rx)
- {
- unsigned int i;
- u32 reg;
-@@ -3289,6 +3289,14 @@ static u32 bcmgenet_dma_disable(struct b
- udelay(10);
- bcmgenet_umac_writel(priv, 0, UMAC_TX_FLUSH);
-
-+ if (flush_rx) {
-+ reg = bcmgenet_rbuf_ctrl_get(priv);
-+ bcmgenet_rbuf_ctrl_set(priv, reg | BIT(0));
-+ udelay(10);
-+ bcmgenet_rbuf_ctrl_set(priv, reg);
-+ udelay(10);
-+ }
-+
- return dma_ctrl;
- }
-
-@@ -3352,8 +3360,8 @@ static int bcmgenet_open(struct net_devi
-
- bcmgenet_set_hw_addr(priv, dev->dev_addr);
-
-- /* Disable RX/TX DMA and flush TX queues */
-- dma_ctrl = bcmgenet_dma_disable(priv);
-+ /* Disable RX/TX DMA and flush TX and RX queues */
-+ dma_ctrl = bcmgenet_dma_disable(priv, true);
-
- /* Reinitialize TDMA and RDMA and SW housekeeping */
- ret = bcmgenet_init_dma(priv);
-@@ -4212,7 +4220,7 @@ static int bcmgenet_resume(struct device
- bcmgenet_hfb_create_rxnfc_filter(priv, rule);
-
- /* Disable RX/TX DMA and flush TX queues */
-- dma_ctrl = bcmgenet_dma_disable(priv);
-+ dma_ctrl = bcmgenet_dma_disable(priv, false);
-
- /* Reinitialize TDMA and RDMA and SW housekeeping */
- ret = bcmgenet_init_dma(priv);
+ if (clk->min_rate > 0 || clk->max_rate < ULONG_MAX)
+ clk_set_rate_range_nolock(clk, 0, ULONG_MAX);
- owner = clk->core->owner;
- kref_put(&clk->core->ref, __clk_release);
+ clk_prepare_unlock();
+
--- a/drivers/clk/clk_test.c
+++ b/drivers/clk/clk_test.c
@@ -760,9 +760,65 @@ static void clk_range_test_multiple_set_
if (priv && (priv->quirks & XHCI_SG_TRB_CACHE_SIZE_QUIRK))
--- a/drivers/usb/host/xhci-plat.h
+++ b/drivers/usb/host/xhci-plat.h
-@@ -13,7 +13,6 @@
+@@ -15,7 +15,6 @@ struct usb_hcd;
struct xhci_plat_priv {
const char *firmware_name;
unsigned long long quirks;
*/
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -2855,6 +2855,10 @@ static inline int pskb_trim(struct sk_bu
+@@ -2870,6 +2870,10 @@ static inline int pskb_trim(struct sk_bu
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
}
/**
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
* @skb: buffer to alter
-@@ -3005,16 +3009,6 @@ static inline struct sk_buff *dev_alloc_
+@@ -3020,16 +3024,6 @@ static inline struct sk_buff *dev_alloc_
}
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -2821,7 +2821,7 @@ static inline int pskb_network_may_pull(
+@@ -2836,7 +2836,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
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
-@@ -4360,6 +4360,15 @@ int skb_gro_receive(struct sk_buff *p, s
+@@ -4371,6 +4371,15 @@ int skb_gro_receive(struct sk_buff *p, s
if (unlikely(p->len + len >= 65536 || NAPI_GRO_CB(skb)->flush))
return -E2BIG;
+++ /dev/null
-From 4a44a52f16ccd3d03e0cb5fb437a5eb31a5f9f05 Mon Sep 17 00:00:00 2001
-From: David Bauer <mail@david-bauer.net>
-Date: Mon, 26 Feb 2024 21:39:34 +0100
-Subject: [PATCH] net l2tp: drop flow hash on forward
-
-Drop the flow-hash of the skb when forwarding to the L2TP netdev.
-
-This avoids the L2TP qdisc from using the flow-hash from the outer
-packet, which is identical for every flow within the tunnel.
-
-This does not affect every platform but is specific for the ethernet
-driver. It depends on the platform including L4 information in the
-flow-hash.
-
-Signed-off-by: David Bauer <mail@david-bauer.net>
----
- net/l2tp/l2tp_eth.c | 3 +++
- 1 file changed, 3 insertions(+)
-
---- a/net/l2tp/l2tp_eth.c
-+++ b/net/l2tp/l2tp_eth.c
-@@ -136,6 +136,9 @@ static void l2tp_eth_dev_recv(struct l2t
- /* checksums verified by L2TP */
- skb->ip_summed = CHECKSUM_NONE;
-
-+ /* drop outer flow-hash */
-+ skb_clear_hash(skb);
-+
- skb_dst_drop(skb);
- nf_reset_ct(skb);
-
void mtk_rmw(struct mtk_pinctrl *pctl, u8 i, u32 reg, u32 mask, u32 set);
--- a/drivers/pinctrl/mediatek/pinctrl-paris.c
+++ b/drivers/pinctrl/mediatek/pinctrl-paris.c
-@@ -574,8 +574,9 @@ static int mtk_hw_get_value_wrap(struct
+@@ -538,8 +538,9 @@ static int mtk_hw_get_value_wrap(struct
ssize_t mtk_pctrl_show_one_pin(struct mtk_pinctrl *hw,
unsigned int gpio, char *buf, unsigned int buf_len)
{
if (gpio >= hw->soc->npins)
return -EINVAL;
-@@ -589,24 +590,39 @@ ssize_t mtk_pctrl_show_one_pin(struct mt
+@@ -553,24 +554,39 @@ ssize_t mtk_pctrl_show_one_pin(struct mt
pinmux -= hw->soc->nfuncs;
mtk_pinconf_bias_get_combo(hw, desc, &pullup, &pullen);
}
len += scnprintf(buf + len, buf_len - len,
"%03d: %1d%1d%1d%1d%02d%1d%1d%1d%1d",
-@@ -624,6 +640,8 @@ ssize_t mtk_pctrl_show_one_pin(struct mt
+@@ -588,6 +604,8 @@ ssize_t mtk_pctrl_show_one_pin(struct mt
if (r1 != -1) {
len += scnprintf(buf + len, buf_len - len, " (%1d %1d)\n",
r1, r0);
} else {
len += scnprintf(buf + len, buf_len - len, "\n");
}
-@@ -966,6 +984,12 @@ int mtk_paris_pinctrl_probe(struct platf
+@@ -930,6 +948,12 @@ int mtk_paris_pinctrl_probe(struct platf
hw->nbase = hw->soc->nbase_names;