static inline struct neighbour *__ipv6_neigh_lookup_noref(struct net_device *dev, const void *pkey)
--- a/net/sched/cls_u32.c
+++ b/net/sched/cls_u32.c
-@@ -167,7 +167,7 @@ next_knode:
- data = skb_header_pointer(skb, toff, 4, &hdata);
+@@ -165,7 +165,7 @@ next_knode:
+ &hdata);
if (!data)
goto out;
- if ((*data ^ key->val) & key->mask) {
n = rcu_dereference_bh(n->next);
goto next_knode;
}
-@@ -218,8 +218,8 @@ check_terminal:
- &hdata);
+@@ -217,8 +217,8 @@ check_terminal:
+ 4, &hdata);
if (!data)
goto out;
- sel = ht->divisor & u32_hash_fold(*data, &n->sel,
--- a/arch/arm/include/asm/string.h
+++ b/arch/arm/include/asm/string.h
-@@ -65,4 +65,9 @@ static inline void *memset64(uint64_t *p
+@@ -68,4 +68,9 @@ static inline void *memset64(uint64_t *p
#endif
#define USB_VENDOR_ID_BELKIN 0x050d
#define USB_DEVICE_ID_FLIP_KVM 0x3201
-@@ -1471,6 +1474,9 @@
+@@ -1475,6 +1478,9 @@
#define USB_VENDOR_ID_XIAOMI 0x2717
#define USB_DEVICE_ID_MI_SILENT_MOUSE 0x5014
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH), HID_QUIRK_MULTI_INPUT },
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE2), HID_QUIRK_ALWAYS_POLL },
-@@ -215,6 +216,7 @@ static const struct hid_device_id hid_qu
+@@ -216,6 +217,7 @@ static const struct hid_device_id hid_qu
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE), HID_QUIRK_MULTI_INPUT },
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_GROUP_AUDIO), HID_QUIRK_NOGET },
*
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -816,6 +816,24 @@ struct phy_tdr_config {
+@@ -826,6 +826,24 @@ struct phy_tdr_config {
#define PHY_PAIR_ALL -1
/**
* struct phy_plca_cfg - Configuration of the PLCA (Physical Layer Collision
* Avoidance) Reconciliation Sublayer.
*
-@@ -954,6 +972,14 @@ struct phy_driver {
+@@ -964,6 +982,14 @@ struct phy_driver {
int (*get_features)(struct phy_device *phydev);
/**
* @get_rate_matching: Get the supported type of rate matching for a
* particular phy interface. This is used by phy consumers to determine
* whether to advertise lower-speed modes for that interface. It is
-@@ -1832,6 +1858,8 @@ int phy_config_aneg(struct phy_device *p
+@@ -1842,6 +1868,8 @@ int phy_config_aneg(struct phy_device *p
int _phy_start_aneg(struct phy_device *phydev);
int phy_start_aneg(struct phy_device *phydev);
int phy_aneg_done(struct phy_device *phydev);
*
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -980,6 +980,11 @@ struct phy_driver {
+@@ -990,6 +990,11 @@ struct phy_driver {
phy_interface_t interface);
/**
* @get_rate_matching: Get the supported type of rate matching for a
* particular phy interface. This is used by phy consumers to determine
* whether to advertise lower-speed modes for that interface. It is
-@@ -1860,6 +1865,7 @@ int phy_start_aneg(struct phy_device *ph
+@@ -1870,6 +1875,7 @@ int phy_start_aneg(struct phy_device *ph
int phy_aneg_done(struct phy_device *phydev);
unsigned int phy_inband_caps(struct phy_device *phydev,
phy_interface_t interface);
+++ /dev/null
-From 4beb44a2d62dddfe450f310aa1a950901731cb3a Mon Sep 17 00:00:00 2001
-From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
-Date: Sun, 31 Aug 2025 18:34:33 +0100
-Subject: net: phy: add phy_interface_weight()
-
-Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
-Reviewed-by: Andrew Lunn <andrew@lunn.ch>
-Link: https://patch.msgid.link/E1uslwn-00000001SOx-0a7H@rmk-PC.armlinux.org.uk
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
----
- include/linux/phy.h | 5 +++++
- 1 file changed, 5 insertions(+)
-
---- a/include/linux/phy.h
-+++ b/include/linux/phy.h
-@@ -187,6 +187,11 @@ static inline bool phy_interface_empty(c
- return bitmap_empty(intf, PHY_INTERFACE_MODE_MAX);
- }
-
-+static inline unsigned int phy_interface_weight(const unsigned long *intf)
-+{
-+ return bitmap_weight(intf, PHY_INTERFACE_MODE_MAX);
-+}
-+
- static inline void phy_interface_and(unsigned long *dst, const unsigned long *a,
- const unsigned long *b)
- {
if (!phydev->drv->led_polarity_set)
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -897,8 +897,9 @@ struct phy_plca_status {
+@@ -907,8 +907,9 @@ struct phy_plca_status {
/* Modes for PHY LED configuration */
enum phy_led_modes {
* __phy_read_mmd - Convenience function for reading a register
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -2027,6 +2027,11 @@ extern struct phy_driver genphy_c45_driv
+@@ -2037,6 +2037,11 @@ extern struct phy_driver genphy_c45_driv
/* The gen10g_* functions are the old Clause 45 stub */
int gen10g_config_aneg(struct phy_device *phydev);
}
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -1040,7 +1040,8 @@ struct phy_driver {
+@@ -1050,7 +1050,8 @@ struct phy_driver {
* driver for the given phydev. If NULL, matching is based on
* phy_id and phy_id_mask.
*/
static ssize_t
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -1945,6 +1945,9 @@ char *phy_attached_info_irq(struct phy_d
+@@ -1955,6 +1955,9 @@ char *phy_attached_info_irq(struct phy_d
__malloc;
void phy_attached_info(struct phy_device *phydev);
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -1261,9 +1261,13 @@ struct phy_driver {
+@@ -1271,9 +1271,13 @@ struct phy_driver {
#define PHY_ANY_ID "MATCH ANY PHY"
#define PHY_ANY_UID 0xffffffff
/**
* phy_id_compare - compare @id1 with @id2 taking account of @mask
-@@ -1280,6 +1284,19 @@ static inline bool phy_id_compare(u32 id
+@@ -1290,6 +1294,19 @@ static inline bool phy_id_compare(u32 id
}
/**
-LINUX_VERSION-6.12 = .69
-LINUX_KERNEL_HASH-6.12.69 = 4b493657f218703239c4f22415f027b3644949bf2761abd18b849f0aad5f7665
+LINUX_VERSION-6.12 = .70
+LINUX_KERNEL_HASH-6.12.70 = 9b4ccec7d8ceff4824f149e476ec06e83c86546ae8af82582871647809a62ef0
sysfs_remove_link(&dev->dev.kobj, "phydev");
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -1032,6 +1032,12 @@ struct phy_driver {
+@@ -1042,6 +1042,12 @@ struct phy_driver {
/** @handle_interrupt: Override default interrupt handling */
irqreturn_t (*handle_interrupt)(struct phy_device *phydev);
+#endif
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -4806,6 +4806,9 @@ enum skb_ext_id {
+@@ -4818,6 +4818,9 @@ enum skb_ext_id {
#if IS_ENABLED(CONFIG_MCTP_FLOWS)
SKB_EXT_MCTP,
#endif
static int qcom_pcie_init_2_4_0(struct qcom_pcie *pcie)
{
struct qcom_pcie_resources_2_4_0 *res = &pcie->res.v2_4_0;
-@@ -1336,6 +1413,16 @@ static const struct qcom_pcie_ops ops_2_
+@@ -1337,6 +1414,16 @@ static const struct qcom_pcie_ops ops_2_
.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
};
/* Qcom IP rev.: 2.3.3 Synopsys IP rev.: 4.30a */
static const struct qcom_pcie_ops ops_2_3_3 = {
.get_resources = qcom_pcie_get_resources_2_3_3,
-@@ -1403,6 +1490,10 @@ static const struct qcom_pcie_cfg cfg_2_
+@@ -1405,6 +1492,10 @@ static const struct qcom_pcie_cfg cfg_2_
.ops = &ops_2_4_0,
};
static const struct qcom_pcie_cfg cfg_2_7_0 = {
.ops = &ops_2_7_0,
};
-@@ -1827,6 +1918,7 @@ static const struct of_device_id qcom_pc
+@@ -1829,6 +1920,7 @@ static const struct of_device_id qcom_pc
{ .compatible = "qcom,pcie-apq8064", .data = &cfg_2_1_0 },
{ .compatible = "qcom,pcie-apq8084", .data = &cfg_1_0_0 },
{ .compatible = "qcom,pcie-ipq4019", .data = &cfg_2_4_0 },
PHY_INTERFACE_MODE_MAX,
} phy_interface_t;
-@@ -240,6 +241,8 @@ static inline const char *phy_modes(phy_
+@@ -250,6 +251,8 @@ static inline const char *phy_modes(phy_
return "gmii";
case PHY_INTERFACE_MODE_SGMII:
return "sgmii";
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
-@@ -1827,6 +1827,7 @@ static const struct of_device_id qcom_pc
+@@ -1829,6 +1829,7 @@ static const struct of_device_id qcom_pc
{ .compatible = "qcom,pcie-apq8064", .data = &cfg_2_1_0 },
{ .compatible = "qcom,pcie-apq8084", .data = &cfg_1_0_0 },
{ .compatible = "qcom,pcie-ipq4019", .data = &cfg_2_4_0 },
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -371,6 +371,7 @@ struct phy_package_shared {
+@@ -381,6 +381,7 @@ struct phy_package_shared {
/* used as bit number in atomic bitops */
#define PHY_SHARED_F_INIT_DONE 0
#define PHY_SHARED_F_PROBE_DONE 1
/**
* struct mii_bus - Represents an MDIO bus
-@@ -2272,6 +2273,11 @@ static inline bool phy_package_probe_onc
+@@ -2282,6 +2283,11 @@ static inline bool phy_package_probe_onc
return __phy_package_set_once(phydev, PHY_SHARED_F_PROBE_DONE);
}
if (phydev->mii_ts && phydev->mii_ts->link_state)
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -680,6 +680,7 @@ struct phy_device {
+@@ -690,6 +690,7 @@ struct phy_device {
unsigned downshifted_rate:1;
unsigned is_on_sfp_module:1;
unsigned mac_managed_pm:1;
&phy->mdio.reset_assert_delay);
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -306,7 +306,7 @@ static inline const char *phy_modes(phy_
+@@ -316,7 +316,7 @@ static inline const char *phy_modes(phy_
#define PHY_INIT_TIMEOUT 100000
#define PHY_FORCE_TIMEOUT 10
/* Used when trying to connect to a specific phy (mii bus id:phy device id) */
#define PHY_ID_FMT "%s:%02x"
-@@ -426,10 +426,10 @@ struct mii_bus {
+@@ -436,10 +436,10 @@ struct mii_bus {
struct mdio_device *mdio_map[PHY_MAX_ADDR];
/** @phy_mask: PHY addresses to be ignored when probing */
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -717,10 +717,64 @@ static int sfp_i2c_write(struct sfp *sfp
+@@ -718,10 +718,64 @@ static int sfp_i2c_write(struct sfp *sfp
return ret == ARRAY_SIZE(msgs) ? len : 0;
}
sfp->i2c = i2c;
sfp->read = sfp_i2c_read;
-@@ -752,6 +806,29 @@ static int sfp_i2c_mdiobus_create(struct
+@@ -753,6 +807,29 @@ static int sfp_i2c_mdiobus_create(struct
return 0;
}
static void sfp_i2c_mdiobus_destroy(struct sfp *sfp)
{
mdiobus_unregister(sfp->i2c_mii);
-@@ -1926,9 +2003,15 @@ static void sfp_sm_fault(struct sfp *sfp
+@@ -1927,9 +2004,15 @@ static void sfp_sm_fault(struct sfp *sfp
static int sfp_sm_add_mdio_bus(struct sfp *sfp)
{