case IPV6_2292HOPOPTS:
--- a/net/ipv6/exthdrs.c
+++ b/net/ipv6/exthdrs.c
-@@ -990,7 +990,7 @@ static bool ipv6_hop_jumbo(struct sk_buf
+@@ -993,7 +993,7 @@ static bool ipv6_hop_jumbo(struct sk_buf
goto drop;
}
static inline int mmc_blk_part_switch(struct mmc_card *card,
unsigned int part_type);
static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,
-@@ -3313,6 +3320,8 @@ static int mmc_blk_probe(struct mmc_card
+@@ -3321,6 +3328,8 @@ static int mmc_blk_probe(struct mmc_card
{
struct mmc_blk_data *md;
int ret = 0;
/*
* Check that the card supports the command class(es) we need.
-@@ -3320,7 +3329,16 @@ static int mmc_blk_probe(struct mmc_card
+@@ -3328,7 +3337,16 @@ static int mmc_blk_probe(struct mmc_card
if (!(card->csd.cmdclass & CCC_BLOCK_READ))
return -ENODEV;
card->complete_wq = alloc_workqueue("mmc_complete",
WQ_MEM_RECLAIM | WQ_HIGHPRI, 0);
-@@ -3335,6 +3353,17 @@ static int mmc_blk_probe(struct mmc_card
+@@ -3343,6 +3361,17 @@ static int mmc_blk_probe(struct mmc_card
goto out_free;
}
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
-@@ -2011,7 +2011,7 @@ static void mmc_blk_mq_rw_recovery(struc
+@@ -2017,7 +2017,7 @@ static void mmc_blk_mq_rw_recovery(struc
return;
}
* @dev: the device whose endpoint is being disabled
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
-@@ -1879,6 +1879,8 @@ extern int usb_clear_halt(struct usb_dev
+@@ -1880,6 +1880,8 @@ extern int usb_clear_halt(struct usb_dev
extern int usb_reset_configuration(struct usb_device *dev);
extern int usb_set_interface(struct usb_device *dev, int ifnum, int alternate);
extern void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr);
* non-error returns are a promise to giveback() the urb later
* we drop ownership so next owner (or urb unlink) can get it
*/
-@@ -5387,6 +5490,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,
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
-@@ -3901,6 +3901,7 @@ static int spi_set_cs_timing(struct spi_
- */
- int spi_setup(struct spi_device *spi)
+@@ -3883,6 +3883,7 @@ static int spi_set_cs_timing(struct spi_
+
+ static int __spi_setup(struct spi_device *spi, bool initial_setup)
{
+ struct spi_controller *ctlr = spi->controller;
unsigned bad_bits, ugly_bits;
int status;
-@@ -3927,6 +3928,14 @@ int spi_setup(struct spi_device *spi)
+@@ -3909,6 +3910,14 @@ static int __spi_setup(struct spi_device
"setup: MOSI configured to idle low and high at the same time.\n");
return -EINVAL;
}
--- a/drivers/mmc/host/sdhci-of-dwcmshc.c
+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
-@@ -1248,7 +1248,11 @@ static const struct dwcmshc_pltfm_data s
+@@ -1261,7 +1261,11 @@ static const struct dwcmshc_pltfm_data s
.quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN |
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL,
.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
static unsigned int dwcmshc_get_max_clock(struct sdhci_host *host)
{
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-@@ -1150,10 +1162,11 @@ static int sg2042_init(struct device *de
+@@ -1163,10 +1175,11 @@ static int sg2042_init(struct device *de
}
static const struct sdhci_ops sdhci_dwcmshc_ops = {
.reset = dwcmshc_reset,
.adma_write_desc = dwcmshc_adma_write_desc,
.irq = dwcmshc_cqe_irq_handler,
-@@ -1226,8 +1239,10 @@ static const struct sdhci_ops sdhci_dwcm
+@@ -1239,8 +1252,10 @@ static const struct sdhci_ops sdhci_dwcm
static const struct dwcmshc_pltfm_data sdhci_dwcmshc_pdata = {
.pdata = {
.ops = &sdhci_dwcmshc_ops,
},
};
-@@ -1242,6 +1257,15 @@ static const struct dwcmshc_pltfm_data s
+@@ -1255,6 +1270,15 @@ static const struct dwcmshc_pltfm_data s
};
#endif
static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk35xx_pdata = {
.pdata = {
.ops = &sdhci_dwcmshc_rk35xx_ops,
-@@ -1365,6 +1389,10 @@ dsbl_cqe_caps:
+@@ -1378,6 +1402,10 @@ dsbl_cqe_caps:
static const struct of_device_id sdhci_dwcmshc_dt_ids[] = {
{
.compatible = "rockchip,rk3588-dwcmshc",
.data = &sdhci_dwcmshc_rk35xx_pdata,
},
-@@ -1457,13 +1485,32 @@ static int dwcmshc_probe(struct platform
+@@ -1470,13 +1498,32 @@ static int dwcmshc_probe(struct platform
priv->bus_clk = devm_clk_get(dev, "bus");
if (!IS_ERR(priv->bus_clk))
clk_prepare_enable(priv->bus_clk);
priv->vendor_specific_area1 =
sdhci_readl(host, DWCMSHC_P_VENDOR_AREA1) & DWCMSHC_AREA1_MASK;
-@@ -1523,6 +1570,7 @@ err_rpm:
+@@ -1536,6 +1583,7 @@ err_rpm:
pm_runtime_put_noidle(dev);
err_clk:
clk_disable_unprepare(pltfm_host->clk);
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
-@@ -1617,6 +1617,8 @@ static void mmc_blk_cqe_complete_rq(stru
+@@ -1623,6 +1623,8 @@ static void mmc_blk_cqe_complete_rq(stru
spin_lock_irqsave(&mq->lock, flags);
mq->in_flight[issue_type] -= 1;
put_card = (mmc_tot_in_flight(mq) == 0);
-@@ -2133,6 +2135,8 @@ static void mmc_blk_mq_complete_rq(struc
+@@ -2139,6 +2141,8 @@ static void mmc_blk_mq_complete_rq(struc
struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req);
unsigned int nr_bytes = mqrq->brq.data.bytes_xfered;
if (nr_bytes) {
if (blk_update_request(req, BLK_STS_OK, nr_bytes))
blk_mq_requeue_request(req, true);
-@@ -2227,13 +2231,16 @@ static void mmc_blk_mq_poll_completion(s
+@@ -2235,13 +2239,16 @@ static void mmc_blk_mq_poll_completion(s
mmc_blk_urgent_bkops(mq, mqrq);
}
mq->in_flight[issue_type] -= 1;
put_card = (mmc_tot_in_flight(mq) == 0);
-@@ -2267,7 +2274,7 @@ static void mmc_blk_mq_post_req(struct m
+@@ -2275,7 +2282,7 @@ static void mmc_blk_mq_post_req(struct m
blk_mq_complete_request(req);
}
put_card = true;
--- a/drivers/mmc/core/queue.h
+++ b/drivers/mmc/core/queue.h
-@@ -79,6 +79,7 @@ struct mmc_queue {
+@@ -82,6 +82,7 @@ struct mmc_queue {
struct request_queue *queue;
spinlock_t lock;
int in_flight[MMC_ISSUE_MAX];
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
-@@ -1586,6 +1586,7 @@ static void mmc_blk_cqe_complete_rq(stru
+@@ -1589,6 +1589,7 @@ static void mmc_blk_cqe_complete_rq(stru
struct request_queue *q = req->q;
struct mmc_host *host = mq->card->host;
enum mmc_issue_type issue_type = mmc_issue_type(mq, req);
unsigned long flags;
bool put_card;
int err;
-@@ -1617,7 +1618,7 @@ static void mmc_blk_cqe_complete_rq(stru
+@@ -1623,7 +1624,7 @@ static void mmc_blk_cqe_complete_rq(stru
spin_lock_irqsave(&mq->lock, flags);
mq->pending_writes--;
mq->in_flight[issue_type] -= 1;
-@@ -2232,15 +2233,16 @@ static void mmc_blk_mq_poll_completion(s
+@@ -2240,15 +2241,16 @@ static void mmc_blk_mq_poll_completion(s
}
static void mmc_blk_mq_dec_in_flight(struct mmc_queue *mq, enum mmc_issue_type issue_type,
mq->in_flight[issue_type] -= 1;
put_card = (mmc_tot_in_flight(mq) == 0);
-@@ -2255,6 +2257,7 @@ static void mmc_blk_mq_post_req(struct m
+@@ -2263,6 +2265,7 @@ static void mmc_blk_mq_post_req(struct m
bool can_sleep)
{
enum mmc_issue_type issue_type = mmc_issue_type(mq, req);
struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req);
struct mmc_request *mrq = &mqrq->brq.mrq;
struct mmc_host *host = mq->card->host;
-@@ -2274,7 +2277,7 @@ static void mmc_blk_mq_post_req(struct m
+@@ -2282,7 +2285,7 @@ static void mmc_blk_mq_post_req(struct m
blk_mq_complete_request(req);
}
--- a/drivers/mmc/host/sdhci-of-dwcmshc.c
+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
-@@ -1257,13 +1257,15 @@ static const struct dwcmshc_pltfm_data s
+@@ -1270,13 +1270,15 @@ static const struct dwcmshc_pltfm_data s
};
#endif
static bool td_on_ring(struct xhci_td *td, struct xhci_ring *ring)
{
struct xhci_segment *seg;
-@@ -4792,7 +4796,7 @@ static u16 xhci_calculate_u1_timeout(str
+@@ -4791,7 +4795,7 @@ static u16 xhci_calculate_u1_timeout(str
}
}
timeout_ns = xhci_calculate_intel_u1_timeout(udev, desc);
else
timeout_ns = udev->u1_params.sel;
-@@ -4856,7 +4860,7 @@ static u16 xhci_calculate_u2_timeout(str
+@@ -4855,7 +4859,7 @@ static u16 xhci_calculate_u2_timeout(str
}
}
--- a/block/blk.h
+++ b/block/blk.h
-@@ -574,6 +574,7 @@ void blk_free_ext_minor(unsigned int min
+@@ -593,6 +593,7 @@ void blk_free_ext_minor(unsigned int min
#define ADDPART_FLAG_NONE 0
#define ADDPART_FLAG_RAID 1
#define ADDPART_FLAG_WHOLEDISK 2
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
-@@ -2517,6 +2517,56 @@ static inline int mmc_blk_readonly(struc
+@@ -2525,6 +2525,56 @@ static inline int mmc_blk_readonly(struc
!(card->csd.cmdclass & CCC_BLOCK_WRITE);
}
static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
struct device *parent,
sector_t size,
-@@ -2525,6 +2575,7 @@ static struct mmc_blk_data *mmc_blk_allo
+@@ -2533,6 +2583,7 @@ static struct mmc_blk_data *mmc_blk_allo
int area_type,
unsigned int part_type)
{
struct mmc_blk_data *md;
int devidx, ret;
char cap_str[10];
-@@ -2626,7 +2677,9 @@ static struct mmc_blk_data *mmc_blk_allo
+@@ -2634,7 +2685,9 @@ static struct mmc_blk_data *mmc_blk_allo
/* used in ->open, must be set before add_disk: */
if (area_type == MMC_BLK_DATA_AREA_MAIN)
dev_set_drvdata(&card->dev, md);
--- a/sound/usb/mixer_quirks.c
+++ b/sound/usb/mixer_quirks.c
-@@ -3367,10 +3367,6 @@ static int snd_bbfpro_controls_create(st
+@@ -3369,10 +3369,6 @@ static int snd_bbfpro_controls_create(st
#define RME_DIGIFACE_REGISTER(reg, mask) (((reg) << 16) | (mask))
#define RME_DIGIFACE_INVERT BIT(31)
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
-@@ -2679,6 +2679,10 @@ static struct mmc_blk_data *mmc_blk_allo
+@@ -2687,6 +2687,10 @@ static struct mmc_blk_data *mmc_blk_allo
if (area_type == MMC_BLK_DATA_AREA_MAIN)
dev_set_drvdata(&card->dev, md);
disk_fwnode = mmc_blk_get_partitions_node(parent, subname);
-LINUX_VERSION-6.12 = .85
-LINUX_KERNEL_HASH-6.12.85 = e35ac999f40a6874493d8d60f33f1150d7a89ae5841c428da82257fbcd070aed
+LINUX_VERSION-6.12 = .86
+LINUX_KERNEL_HASH-6.12.86 = edef22b327c7cbf39cdbf8d717fffa344f1ca299e513990e21705b3bf26dbb5d
--- a/Makefile
+++ b/Makefile
-@@ -590,7 +590,7 @@ export RUSTC_BOOTSTRAP := 1
+@@ -591,7 +591,7 @@ export RUSTC_BOOTSTRAP := 1
# Allows finding `.clippy.toml` in out-of-srctree builds.
export CLIPPY_CONF_DIR := $(srctree)
--- a/net/bridge/br_arp_nd_proxy.c
+++ b/net/bridge/br_arp_nd_proxy.c
-@@ -204,7 +204,10 @@ void br_do_proxy_suppress_arp(struct sk_
+@@ -205,7 +205,10 @@ void br_do_proxy_suppress_arp(struct sk_
if ((p && (p->flags & BR_PROXYARP)) ||
- (f->dst && (f->dst->flags & BR_PROXYARP_WIFI)) ||
- br_is_neigh_suppress_enabled(f->dst, vid)) {
+ (dst && (dst->flags & BR_PROXYARP_WIFI)) ||
+ br_is_neigh_suppress_enabled(dst, vid)) {
- if (!vid)
+ replied = true;
+ if (!memcmp(n->ha, sha, dev->addr_len))
br_arp_send(br, p, skb->dev, sip, tip,
sha, n->ha, sha, 0, 0);
else
-@@ -212,7 +215,6 @@ void br_do_proxy_suppress_arp(struct sk_
+@@ -213,7 +216,6 @@ void br_do_proxy_suppress_arp(struct sk_
sha, n->ha, sha,
skb->vlan_proto,
skb_vlan_tag_get(skb));
--- a/kernel/fork.c
+++ b/kernel/fork.c
-@@ -123,7 +123,7 @@
+@@ -124,7 +124,7 @@
/*
* Minimum number of threads to boot the kernel
*/
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
-@@ -2644,6 +2644,7 @@ static struct mmc_blk_data *mmc_blk_allo
+@@ -2652,6 +2652,7 @@ static struct mmc_blk_data *mmc_blk_allo
md->disk->major = MMC_BLOCK_MAJOR;
md->disk->minors = perdev_minors;
md->disk->first_minor = devidx * perdev_minors;
/*
* We need to store the untouched command line for future reference.
* We also need to store the touched command line since the parameter
-@@ -939,6 +962,7 @@ void start_kernel(void)
+@@ -938,6 +961,7 @@ void start_kernel(void)
jump_label_init();
static_call_init();
early_security_init();
#include <linux/percpu.h>
#include <linux/kmod.h>
#include <linux/kprobes.h>
-@@ -973,6 +974,17 @@ void start_kernel(void)
+@@ -972,6 +973,17 @@ void start_kernel(void)
pr_notice("Kernel command line: %s\n", saved_command_line);
/* parameters may set static keys */
+++ /dev/null
-From 4b23f8aecf46484cefb5563b0c255ac4e0cd52f9 Mon Sep 17 00:00:00 2001
-From: Robert Marko <robert.marko@sartura.hr>
-Date: Tue, 27 Jan 2026 13:24:59 +0100
-Subject: [PATCH] arm64: dts: marvell: uDPU: add ethernet aliases
-
-On eDPU plus, which is an updated revision of eDPU which uses an external
-MV88E6361 switch we are relying on U-Boot to detect the board, and then
-enable and disable the required nodes for that revision.
-
-However, it seems that I missed adding the required aliases for ethernet
-controllers, and this worked as in OpenWrt we had added those locally.
-
-Cc: stable@vger.kernel.org
-Fixes: 660b8b2f3944 ("arm64: dts: marvell: eDPU: add support for version with external switch")
-Signed-off-by: Robert Marko <robert.marko@sartura.hr>
----
- arch/arm64/boot/dts/marvell/armada-3720-uDPU.dtsi | 5 +++++
- 1 file changed, 5 insertions(+)
-
---- a/arch/arm64/boot/dts/marvell/armada-3720-uDPU.dtsi
-+++ b/arch/arm64/boot/dts/marvell/armada-3720-uDPU.dtsi
-@@ -15,6 +15,11 @@
- #include "armada-372x.dtsi"
-
- / {
-+ aliases {
-+ ethernet0 = ð0;
-+ ethernet1 = ð1;
-+ };
-+
- chosen {
- stdout-path = "serial0:115200n8";
- };
static int kernel_init(void *);
/*
-@@ -972,6 +976,18 @@ void start_kernel(void)
+@@ -971,6 +975,18 @@ void start_kernel(void)
boot_cpu_hotplug_init();
pr_notice("Kernel command line: %s\n", saved_command_line);
static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clock)
{
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-@@ -741,6 +807,10 @@ static void rk35xx_sdhci_reset(struct sd
+@@ -754,6 +820,10 @@ static void rk35xx_sdhci_reset(struct sd
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
struct dwcmshc_priv *dwc_priv = sdhci_pltfm_priv(pltfm_host);
struct rk35xx_priv *priv = dwc_priv->priv;
if (mask & SDHCI_RESET_ALL && priv->reset) {
reset_control_assert(priv->reset);
-@@ -749,6 +819,9 @@ static void rk35xx_sdhci_reset(struct sd
+@@ -762,6 +832,9 @@ static void rk35xx_sdhci_reset(struct sd
}
sdhci_reset(host, mask);
}
static int dwcmshc_rk35xx_init(struct device *dev, struct sdhci_host *host,
-@@ -1242,6 +1315,15 @@ static const struct dwcmshc_pltfm_data s
+@@ -1255,6 +1328,15 @@ static const struct dwcmshc_pltfm_data s
};
#endif
static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk35xx_pdata = {
.pdata = {
.ops = &sdhci_dwcmshc_rk35xx_ops,
-@@ -1250,6 +1332,7 @@ static const struct dwcmshc_pltfm_data s
+@@ -1263,6 +1345,7 @@ static const struct dwcmshc_pltfm_data s
.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN,
},
.init = dwcmshc_rk35xx_init,
.postinit = dwcmshc_rk35xx_postinit,
};
-@@ -1299,7 +1382,8 @@ static const struct cqhci_host_ops dwcms
+@@ -1312,7 +1395,8 @@ static const struct cqhci_host_ops dwcms
.set_tran_desc = dwcmshc_set_tran_desc,
};
{
struct cqhci_host *cq_host;
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-@@ -1329,7 +1413,10 @@ static void dwcmshc_cqhci_init(struct sd
+@@ -1342,7 +1426,10 @@ static void dwcmshc_cqhci_init(struct sd
}
cq_host->mmio = host->ioaddr + priv->vendor_specific_area2;
/* Enable using of 128-bit task descriptors */
dma64 = host->flags & SDHCI_USE_64_BIT_DMA;
-@@ -1498,7 +1585,7 @@ static int dwcmshc_probe(struct platform
+@@ -1511,7 +1598,7 @@ static int dwcmshc_probe(struct platform
priv->vendor_specific_area2 =
sdhci_readw(host, DWCMSHC_P_VENDOR_AREA2);
--- a/drivers/mmc/host/sdhci-of-dwcmshc.c
+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
-@@ -1345,6 +1345,7 @@ static const struct dwcmshc_pltfm_data s
+@@ -1358,6 +1358,7 @@ static const struct dwcmshc_pltfm_data s
.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN,
},
+ extra |= BIT(4);
sdhci_writel(host, extra, reg);
- if (clock <= 52000000) {
+ /* Disable clock while config DLL */