};
/* Uart divisor latch read */
-@@ -2766,6 +2774,12 @@ serial8250_do_set_termios(struct uart_po
+@@ -2769,6 +2777,12 @@ serial8250_do_set_termios(struct uart_po
baud = serial8250_get_baud_rate(port, termios, old);
quot = serial8250_get_divisor(port, baud, &frac);
&sin->sin6_addr);
sin->sin6_scope_id = 0;
}
-@@ -853,12 +853,12 @@ int ip6_datagram_send_ctl(struct net *ne
+@@ -891,12 +891,12 @@ int ip6_datagram_send_ctl(struct net *ne
}
if (fl6->flowlabel&IPV6_FLOWINFO_MASK) {
case IPV6_2292HOPOPTS:
--- a/net/ipv6/exthdrs.c
+++ b/net/ipv6/exthdrs.c
-@@ -1002,7 +1002,7 @@ static bool ipv6_hop_jumbo(struct sk_buf
+@@ -1006,7 +1006,7 @@ static bool ipv6_hop_jumbo(struct sk_buf
goto drop;
}
-LINUX_VERSION-6.18 = .34
-LINUX_KERNEL_HASH-6.18.34 = 640c4732fb42842166db97e032c1fe7e5ff72c85a8982c75b40f74be3555d760
+LINUX_VERSION-6.18 = .35
+LINUX_KERNEL_HASH-6.18.35 = f78602932219125e211c5f5bfd84edcfd4ec5ce88fc944f8248413f665bef236
--- a/net/bridge/br_switchdev.c
+++ b/net/bridge/br_switchdev.c
-@@ -576,10 +576,18 @@ static void br_switchdev_host_mdb(struct
+@@ -575,10 +575,18 @@ static void br_switchdev_host_mdb(struct
struct net_bridge_mdb_entry *mp, int type)
{
struct net_device *lower_dev;
static const struct rt6_info ip6_blk_hole_entry_template = {
.dst = {
.__rcuref = RCUREF_INIT(1),
-@@ -1085,6 +1099,7 @@ static const int fib6_prop[RTN_MAX + 1]
+@@ -1088,6 +1102,7 @@ static const int fib6_prop[RTN_MAX + 1]
[RTN_BLACKHOLE] = -EINVAL,
[RTN_UNREACHABLE] = -EHOSTUNREACH,
[RTN_PROHIBIT] = -EACCES,
[RTN_THROW] = -EAGAIN,
[RTN_NAT] = -EINVAL,
[RTN_XRESOLVE] = -EINVAL,
-@@ -1120,6 +1135,10 @@ static void ip6_rt_init_dst_reject(struc
+@@ -1123,6 +1138,10 @@ static void ip6_rt_init_dst_reject(struc
rt->dst.output = ip6_pkt_prohibit_out;
rt->dst.input = ip6_pkt_prohibit;
break;
case RTN_THROW:
case RTN_UNREACHABLE:
default:
-@@ -4654,6 +4673,17 @@ static int ip6_pkt_prohibit_out(struct n
+@@ -4657,6 +4676,17 @@ static int ip6_pkt_prohibit_out(struct n
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
}
/*
* Allocate a dst for local (unicast / anycast) address.
*/
-@@ -5206,7 +5236,8 @@ static int rtm_to_fib6_config(struct sk_
+@@ -5209,7 +5239,8 @@ static int rtm_to_fib6_config(struct sk_
if (rtm->rtm_type == RTN_UNREACHABLE ||
rtm->rtm_type == RTN_BLACKHOLE ||
rtm->rtm_type == RTN_PROHIBIT ||
cfg->fc_flags |= RTF_REJECT;
if (rtm->rtm_type == RTN_LOCAL)
-@@ -6475,6 +6506,8 @@ static int ip6_route_dev_notify(struct n
+@@ -6480,6 +6511,8 @@ static int ip6_route_dev_notify(struct n
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
#endif
-@@ -6486,6 +6519,7 @@ static int ip6_route_dev_notify(struct n
+@@ -6491,6 +6524,7 @@ static int ip6_route_dev_notify(struct n
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
#endif
}
-@@ -6681,6 +6715,8 @@ static int __net_init ip6_route_net_init
+@@ -6686,6 +6720,8 @@ static int __net_init ip6_route_net_init
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.fib6_has_custom_rules = false;
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
sizeof(*net->ipv6.ip6_prohibit_entry),
GFP_KERNEL);
-@@ -6691,11 +6727,21 @@ static int __net_init ip6_route_net_init
+@@ -6696,11 +6732,21 @@ static int __net_init ip6_route_net_init
ip6_template_metrics, true);
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->dst.rt_uncached);
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
ip6_template_metrics, true);
-@@ -6722,6 +6768,8 @@ out:
+@@ -6727,6 +6773,8 @@ out:
return ret;
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
out_ip6_prohibit_entry:
kfree(net->ipv6.ip6_prohibit_entry);
out_ip6_null_entry:
-@@ -6741,6 +6789,7 @@ static void __net_exit ip6_route_net_exi
+@@ -6746,6 +6794,7 @@ static void __net_exit ip6_route_net_exi
kfree(net->ipv6.ip6_null_entry);
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
kfree(net->ipv6.ip6_prohibit_entry);
kfree(net->ipv6.ip6_blk_hole_entry);
#endif
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
-@@ -6824,6 +6873,9 @@ void __init ip6_route_init_special_entri
+@@ -6829,6 +6878,9 @@ void __init ip6_route_init_special_entri
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
if (p->br->stp_enabled == BR_NO_STP ||
--- a/net/bridge/br_sysfs_if.c
+++ b/net/bridge/br_sysfs_if.c
-@@ -240,6 +240,7 @@ BRPORT_ATTR_FLAG(multicast_flood, BR_MCA
+@@ -258,6 +258,7 @@ BRPORT_ATTR_FLAG(multicast_flood, BR_MCA
BRPORT_ATTR_FLAG(broadcast_flood, BR_BCAST_FLOOD);
BRPORT_ATTR_FLAG(neigh_suppress, BR_NEIGH_SUPPRESS);
BRPORT_ATTR_FLAG(isolated, BR_ISOLATED);
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
static ssize_t show_multicast_router(struct net_bridge_port *p, char *buf)
-@@ -292,6 +293,7 @@ static const struct brport_attribute *br
+@@ -310,6 +311,7 @@ static const struct brport_attribute *br
&brport_attr_group_fwd_mask,
&brport_attr_neigh_suppress,
&brport_attr_isolated,
#include <net/dst.h>
#include <net/sock.h>
#include <net/checksum.h>
-@@ -5089,6 +5093,9 @@ static const u8 skb_ext_type_len[] = {
+@@ -5112,6 +5116,9 @@ static const u8 skb_ext_type_len[] = {
#if IS_ENABLED(CONFIG_INET_PSP)
[SKB_EXT_PSP] = SKB_EXT_CHUNKSIZEOF(struct psp_skb_ext),
#endif
},
[PORT_NPCM] = {
.name = "Nuvoton 16550",
-@@ -2766,6 +2766,11 @@ serial8250_do_set_termios(struct uart_po
+@@ -2769,6 +2769,11 @@ serial8250_do_set_termios(struct uart_po
baud = serial8250_get_baud_rate(port, termios, old);
quot = serial8250_get_divisor(port, baud, &frac);
--- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c
-@@ -511,6 +511,14 @@ int spi_mem_exec_op(struct spi_mem *mem,
+@@ -518,6 +518,14 @@ int spi_mem_exec_op(struct spi_mem *mem,
}
EXPORT_SYMBOL_GPL(spi_mem_exec_op);
+++ /dev/null
-From e027c218c482c6a0ae1948129ccda3b0a2033368 Mon Sep 17 00:00:00 2001
-From: Robert Marko <robert.marko@sartura.hr>
-Date: Tue, 28 Apr 2026 15:41:01 +0200
-Subject: [PATCH] net: phy: micrel: fix LAN8814 QSGMII soft reset
-
-LAN8814 QSGMII soft reset was moved into the probe function to avoid
-triggering it for each of 4 PHY-s in the package.
-
-However, that broke QSGMII link between the MAC and PHY on most LAN8814
-PHY-s, specificaly for us on the Microchip LAN969x switch.
-Reading the QSGMII status registers it was visible that lanes were only
-partially synced.
-
-It looks like the reset timing is crucial, so lets move the reset back
-into the .config_init function but guard it with phy_package_init_once()
-to avoid it being triggered on each of 4 PHY-s in the package.
-Change the probe function to use phy_package_probe_once() for coma and PtP
-setup.
-
-Fixes: 96a9178a29a6 ("net: phy: micrel: lan8814 fix reset of the QSGMII interface")
-Signed-off-by: Robert Marko <robert.marko@sartura.hr>
-Link: https://patch.msgid.link/20260428134138.1741253-1-robert.marko@sartura.hr
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
----
- drivers/net/phy/micrel.c | 15 ++++++++-------
- 1 file changed, 8 insertions(+), 7 deletions(-)
-
---- a/drivers/net/phy/micrel.c
-+++ b/drivers/net/phy/micrel.c
-@@ -4389,6 +4389,13 @@ static int lan8814_config_init(struct ph
- {
- struct kszphy_priv *lan8814 = phydev->priv;
-
-+ if (phy_package_init_once(phydev))
-+ /* Reset the PHY */
-+ lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
-+ LAN8814_QSGMII_SOFT_RESET,
-+ LAN8814_QSGMII_SOFT_RESET_BIT,
-+ LAN8814_QSGMII_SOFT_RESET_BIT);
-+
- /* Disable ANEG with QSGMII PCS Host side */
- lanphy_modify_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
- LAN8814_QSGMII_PCS1G_ANEG_CONFIG,
-@@ -4473,13 +4480,7 @@ static int lan8814_probe(struct phy_devi
- devm_phy_package_join(&phydev->mdio.dev, phydev,
- addr, sizeof(struct lan8814_shared_priv));
-
-- if (phy_package_init_once(phydev)) {
-- /* Reset the PHY */
-- lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
-- LAN8814_QSGMII_SOFT_RESET,
-- LAN8814_QSGMII_SOFT_RESET_BIT,
-- LAN8814_QSGMII_SOFT_RESET_BIT);
--
-+ if (phy_package_probe_once(phydev)) {
- err = lan8814_release_coma_mode(phydev);
- if (err)
- return err;
--- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c
-@@ -1016,7 +1016,9 @@ static int spi_mem_probe(struct spi_devi
+@@ -1023,7 +1023,9 @@ static int spi_mem_probe(struct spi_devi
{
struct spi_mem_driver *memdrv = to_spi_mem_drv(spi->dev.driver);
struct spi_controller *ctlr = spi->controller;
mem = devm_kzalloc(&spi->dev, sizeof(*mem), GFP_KERNEL);
if (!mem)
-@@ -1024,10 +1026,15 @@ static int spi_mem_probe(struct spi_devi
+@@ -1031,10 +1033,15 @@ static int spi_mem_probe(struct spi_devi
mem->spi = spi;
}
/*
-@@ -2565,7 +2578,6 @@ static unsigned int serial8250_get_baud_
+@@ -2568,7 +2581,6 @@ static unsigned int serial8250_get_baud_
min = port->uartclk / 16 / UART_DIV_MAX;
max = (port->uartclk + tolerance) / 16;
}