-LINUX_VERSION-5.10 = .215
-LINUX_KERNEL_HASH-5.10.215 = 879ca159c34ea9d3a6775f292cc59c2d3931d57dca00f0bebe2675ea0c82c6a9
+LINUX_VERSION-5.10 = .216
+LINUX_KERNEL_HASH-5.10.216 = e310588c4b23f0959614e60f007afc20e9b1a8f296d682b041fa129f96fbe151
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
-@@ -3119,7 +3119,10 @@ static int clk_rate_get(void *data, u64
+@@ -3209,7 +3209,10 @@ static int clk_rate_get(void *data, u64
{
struct clk_core *core = data;
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
-@@ -77,12 +77,14 @@ struct clk_core {
+@@ -82,12 +82,14 @@ struct clk_core {
unsigned int protect_count;
unsigned long min_rate;
unsigned long max_rate;
unsigned int notifier_count;
#ifdef CONFIG_DEBUG_FS
struct dentry *dentry;
-@@ -105,6 +107,12 @@ struct clk {
+@@ -110,6 +112,12 @@ struct clk {
struct hlist_node clks_node;
};
/*** runtime pm ***/
static int clk_pm_runtime_get(struct clk_core *core)
{
-@@ -1444,10 +1452,14 @@ unsigned long clk_hw_round_rate(struct c
+@@ -1534,10 +1542,14 @@ unsigned long clk_hw_round_rate(struct c
{
int ret;
struct clk_rate_request req;
ret = clk_core_round_rate_nolock(hw->core, &req);
if (ret)
return 0;
-@@ -1468,6 +1480,7 @@ EXPORT_SYMBOL_GPL(clk_hw_round_rate);
+@@ -1558,6 +1570,7 @@ EXPORT_SYMBOL_GPL(clk_hw_round_rate);
long clk_round_rate(struct clk *clk, unsigned long rate)
{
struct clk_rate_request req;
int ret;
if (!clk)
-@@ -1481,6 +1494,9 @@ long clk_round_rate(struct clk *clk, uns
+@@ -1571,6 +1584,9 @@ long clk_round_rate(struct clk *clk, uns
clk_core_get_boundaries(clk->core, &req.min_rate, &req.max_rate);
req.rate = rate;
ret = clk_core_round_rate_nolock(clk->core, &req);
if (clk->exclusive_count)
-@@ -1948,6 +1964,7 @@ static struct clk_core *clk_calc_new_rat
+@@ -2038,6 +2054,7 @@ static struct clk_core *clk_calc_new_rat
unsigned long new_rate;
unsigned long min_rate;
unsigned long max_rate;
int p_index = 0;
long ret;
-@@ -1962,6 +1979,9 @@ static struct clk_core *clk_calc_new_rat
+@@ -2052,6 +2069,9 @@ static struct clk_core *clk_calc_new_rat
clk_core_get_boundaries(core, &min_rate, &max_rate);
/* find the closest rate and parent clk/rate */
if (clk_core_can_round(core)) {
struct clk_rate_request req;
-@@ -2166,6 +2186,7 @@ static unsigned long clk_core_req_round_
+@@ -2256,6 +2276,7 @@ static unsigned long clk_core_req_round_
{
int ret, cnt;
struct clk_rate_request req;
lockdep_assert_held(&prepare_lock);
-@@ -2180,6 +2201,9 @@ static unsigned long clk_core_req_round_
+@@ -2270,6 +2291,9 @@ static unsigned long clk_core_req_round_
clk_core_get_boundaries(core, &req.min_rate, &req.max_rate);
req.rate = req_rate;
ret = clk_core_round_rate_nolock(core, &req);
/* restore the protection */
-@@ -2273,6 +2297,9 @@ int clk_set_rate(struct clk *clk, unsign
+@@ -2363,6 +2387,9 @@ int clk_set_rate(struct clk *clk, unsign
ret = clk_core_set_rate_nolock(clk->core, rate);
if (clk->exclusive_count)
clk_core_rate_protect(clk->core);
-@@ -2439,6 +2466,99 @@ int clk_set_max_rate(struct clk *clk, un
+@@ -2529,6 +2556,99 @@ int clk_set_max_rate(struct clk *clk, un
EXPORT_SYMBOL_GPL(clk_set_max_rate);
/**
* clk_get_parent - return the parent of a clk
* @clk: the clk whose parent gets returned
*
-@@ -3891,6 +4011,7 @@ __clk_register(struct device *dev, struc
+@@ -3995,6 +4115,7 @@ __clk_register(struct device *dev, struc
goto fail_parents;
INIT_HLIST_HEAD(&core->clks);
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
-@@ -2535,6 +2535,9 @@ void clk_request_done(struct clk_request
+@@ -2625,6 +2625,9 @@ void clk_request_done(struct clk_request
{
struct clk_core *core = req->clk->core;
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
-@@ -2533,10 +2533,11 @@ EXPORT_SYMBOL_GPL(clk_request_start);
+@@ -2623,10 +2623,11 @@ EXPORT_SYMBOL_GPL(clk_request_start);
*/
void clk_request_done(struct clk_request *req)
{
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
-@@ -1347,6 +1347,8 @@ static int clk_core_determine_round_nolo
+@@ -1437,6 +1437,8 @@ static int clk_core_determine_round_nolo
if (!core)
return 0;
#include <linux/uaccess.h>
#include <asm/io.h>
-@@ -2243,6 +2245,69 @@ static void b44_adjust_link(struct net_d
+@@ -2245,6 +2247,69 @@ static void b44_adjust_link(struct net_d
}
}
static int b44_register_phy_one(struct b44 *bp)
{
__ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
-@@ -2279,6 +2344,9 @@ static int b44_register_phy_one(struct b
+@@ -2281,6 +2346,9 @@ static int b44_register_phy_one(struct b
if (!mdiobus_is_registered_device(bp->mii_bus, bp->phy_addr) &&
(sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) {
dev_info(sdev->dev,
"could not find PHY at %i, use fixed one\n",
bp->phy_addr);
-@@ -2473,6 +2541,7 @@ static void b44_remove_one(struct ssb_de
+@@ -2475,6 +2543,7 @@ static void b44_remove_one(struct ssb_de
unregister_netdev(dev);
if (bp->flags & B44_FLAG_EXTERNAL_PHY)
b44_unregister_phy_one(bp);
if (bp->flags & B44_FLAG_EXTERNAL_PHY)
return 0;
-@@ -2173,6 +2198,8 @@ static int b44_get_invariants(struct b44
+@@ -2175,6 +2200,8 @@ static int b44_get_invariants(struct b44
* valid PHY address. */
bp->phy_addr &= 0x1F;
eth_hw_addr_inherit(slave_dev, master);
--- a/net/ethernet/eth.c
+++ b/net/ethernet/eth.c
-@@ -506,13 +506,14 @@ unsigned char * __weak arch_get_platform
+@@ -496,13 +496,14 @@ unsigned char * __weak arch_get_platform
int eth_platform_get_mac_address(struct device *dev, u8 *mac_addr)
{
#define QUECTEL_VENDOR_ID 0x2c7c
/* These Quectel products use Quectel's vendor ID */
-@@ -1193,6 +1195,11 @@ static const struct usb_device_id option
+@@ -1197,6 +1199,11 @@ static const struct usb_device_id option
.driver_info = ZLP },
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
.driver_info = RSVD(4) },
for (i = sizeof(struct ipt_entry);
i < e->target_offset;
i += m->u.match_size) {
-@@ -1224,12 +1261,15 @@ compat_copy_entry_to_user(struct ipt_ent
+@@ -1226,12 +1263,15 @@ compat_copy_entry_to_user(struct ipt_ent
compat_uint_t origsize;
const struct xt_entry_match *ematch;
int ret = 0;
/**
* eth_type_trans - determine the packet's protocol ID.
* @skb: received socket data
-@@ -174,6 +186,10 @@ __be16 eth_type_trans(struct sk_buff *sk
- } else {
- skb->pkt_type = PACKET_OTHERHOST;
- }
-+
-+ if (eth_check_local_mask(eth->h_dest, dev->dev_addr,
-+ dev->local_addr_mask))
-+ skb->gro_skip = 1;
- }
+@@ -166,6 +178,10 @@ __be16 eth_type_trans(struct sk_buff *sk
+
+ eth_skb_pkt_type(skb, dev);
++ if (unlikely(!ether_addr_equal_64bits(eth->h_dest, dev->dev_addr)) &&
++ eth_check_local_mask(eth->h_dest, dev->dev_addr, dev->local_addr_mask))
++ skb->gro_skip = 1;
++
/*
+ * Some variants of DSA tagging don't have an ethertype field
+ * at all, so we check here whether one of those tagging
+++ /dev/null
-From: Felix Fietkau <nbd@nbd.name>
-Date: Mon, 7 Feb 2022 10:27:22 +0100
-Subject: [PATCH] arm64: dts: mediatek: mt7622: add support for coherent
- DMA
-
-It improves performance by eliminating the need for a cache flush on rx and tx
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
----
-
---- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-@@ -357,7 +357,7 @@
- };
-
- cci_control2: slave-if@5000 {
-- compatible = "arm,cci-400-ctrl-if";
-+ compatible = "arm,cci-400-ctrl-if", "syscon";
- interface-type = "ace";
- reg = <0x5000 0x1000>;
- };
-@@ -937,6 +937,8 @@
- power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>;
- mediatek,ethsys = <ðsys>;
- mediatek,sgmiisys = <&sgmiisys>;
-+ mediatek,cci-control = <&cci_control2>;
-+ dma-coherent;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
+++ /dev/null
-From: Felix Fietkau <nbd@nbd.name>
-Date: Sat, 5 Feb 2022 18:36:36 +0100
-Subject: [PATCH] arm64: dts: mediatek: mt7622: introduce nodes for
- Wireless Ethernet Dispatch
-
-Introduce wed0 and wed1 nodes in order to enable offloading forwarding
-between ethernet and wireless devices on the mt7622 chipset.
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
----
-
---- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-@@ -893,6 +893,11 @@
- };
- };
-
-+ hifsys: syscon@1af00000 {
-+ compatible = "mediatek,mt7622-hifsys", "syscon";
-+ reg = <0 0x1af00000 0 0x70>;
-+ };
-+
- ethsys: syscon@1b000000 {
- compatible = "mediatek,mt7622-ethsys",
- "syscon";
-@@ -911,6 +916,26 @@
- #dma-cells = <1>;
- };
-
-+ pcie_mirror: pcie-mirror@10000400 {
-+ compatible = "mediatek,mt7622-pcie-mirror",
-+ "syscon";
-+ reg = <0 0x10000400 0 0x10>;
-+ };
-+
-+ wed0: wed@1020a000 {
-+ compatible = "mediatek,mt7622-wed",
-+ "syscon";
-+ reg = <0 0x1020a000 0 0x1000>;
-+ interrupts = <GIC_SPI 214 IRQ_TYPE_LEVEL_LOW>;
-+ };
-+
-+ wed1: wed@1020b000 {
-+ compatible = "mediatek,mt7622-wed",
-+ "syscon";
-+ reg = <0 0x1020b000 0 0x1000>;
-+ interrupts = <GIC_SPI 215 IRQ_TYPE_LEVEL_LOW>;
-+ };
-+
- eth: ethernet@1b100000 {
- compatible = "mediatek,mt7622-eth",
- "mediatek,mt2701-eth",
-@@ -938,6 +963,9 @@
- mediatek,ethsys = <ðsys>;
- mediatek,sgmiisys = <&sgmiisys>;
- mediatek,cci-control = <&cci_control2>;
-+ mediatek,wed = <&wed0>, <&wed1>;
-+ mediatek,pcie-mirror = <&pcie_mirror>;
-+ mediatek,hifsys = <&hifsys>;
- dma-coherent;
- #address-cells = <1>;
- #size-cells = <0>;
/*
* We need to store the untouched command line for future reference.
* We also need to store the touched command line since the parameter
-@@ -866,6 +889,7 @@ asmlinkage __visible void __init __no_sa
+@@ -868,6 +891,7 @@ asmlinkage __visible void __init __no_sa
pr_notice("%s", linux_banner);
early_security_init();
setup_arch(&command_line);
static int kernel_init(void *);
extern void init_IRQ(void);
-@@ -903,6 +907,18 @@ asmlinkage __visible void __init __no_sa
+@@ -905,6 +909,18 @@ asmlinkage __visible void __init __no_sa
pr_notice("Kernel command line: %s\n", saved_command_line);
/* parameters may set static keys */
jump_label_init();
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-@@ -562,6 +562,20 @@
+@@ -559,6 +559,20 @@
status = "disabled";
};
--- a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
-@@ -915,60 +915,73 @@
+@@ -916,60 +916,73 @@
};
};
&pio {
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-@@ -803,45 +803,41 @@
+@@ -798,45 +798,41 @@
#reset-cells = <1>;
};
interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &pcie_intc0 0>,
<0 0 0 2 &pcie_intc0 1>,
-@@ -853,15 +849,39 @@
+@@ -848,15 +844,39 @@
#interrupt-cells = <1>;
};
};
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-@@ -814,6 +814,8 @@
+@@ -809,6 +809,8 @@
reg = <0 0x1a143000 0 0x1000>;
reg-names = "port0";
mediatek,pcie-cfg = <&pciecfg>;
#address-cells = <3>;
#size-cells = <2>;
interrupts = <GIC_SPI 228 IRQ_TYPE_LEVEL_LOW>;
-@@ -831,6 +833,7 @@
+@@ -826,6 +828,7 @@
bus-range = <0x00 0xff>;
ranges = <0x82000000 0 0x20000000 0x0 0x20000000 0 0x8000000>;
status = "disabled";
slot0: pcie@0,0 {
reg = <0x0000 0 0 0 0>;
-@@ -857,6 +860,8 @@
+@@ -852,6 +855,8 @@
reg = <0 0x1a145000 0 0x1000>;
reg-names = "port1";
mediatek,pcie-cfg = <&pciecfg>;
#address-cells = <3>;
#size-cells = <2>;
interrupts = <GIC_SPI 229 IRQ_TYPE_LEVEL_LOW>;
-@@ -875,6 +880,7 @@
+@@ -870,6 +875,7 @@
bus-range = <0x00 0xff>;
ranges = <0x82000000 0 0x28000000 0x0 0x28000000 0 0x8000000>;
status = "disabled";
static int kernel_init(void *);
extern void init_IRQ(void);
-@@ -901,6 +905,18 @@ asmlinkage __visible void __init __no_sa
+@@ -903,6 +907,18 @@ asmlinkage __visible void __init __no_sa
page_alloc_init();
pr_notice("Kernel command line: %s\n", saved_command_line);
static int kernel_init(void *);
extern void init_IRQ(void);
-@@ -901,6 +905,18 @@ asmlinkage __visible void __init __no_sa
+@@ -903,6 +907,18 @@ asmlinkage __visible void __init __no_sa
page_alloc_init();
pr_notice("Kernel command line: %s\n", saved_command_line);
# CONFIG_SLS is not set
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_MITIGATIONS=y
CONFIG_CPU_SRSO=y
CONFIG_CPU_SUP_AMD=y
CONFIG_CPU_SUP_CENTAUR=y
# CONFIG_SMSC_SCH311X_WDT is not set
CONFIG_SPARSEMEM_STATIC=y
CONFIG_SPARSE_IRQ=y
-CONFIG_SPECULATION_MITIGATIONS=y
CONFIG_SRCU=y
# CONFIG_STATIC_CALL_SELFTEST is not set
CONFIG_SYSCTL_EXCEPTION_TRACE=y