LIBRE_REV = 1
-LINUX_VERSION-5.10 = .156
-LINUX_KERNEL_HASH-5.10.156 = 3d43a79eacfb633431c1a1cddf72928e57d295149c0683b4927147bac4c408cf
+LINUX_VERSION-5.10 = .176
+LINUX_KERNEL_HASH-5.10.176 = 684a21f45cab746068da2cf0871e94764d1538d9aae43b6acc6cba8f3b14ca4a
$(eval $(call KernelPackage,mppe))
-SCHED_MODULES_CORE = sch_ingress sch_hfsc sch_htb sch_tbf cls_basic cls_fw cls_route cls_flow cls_tcindex cls_u32 em_u32 act_gact act_mirred act_skbedit cls_matchall
+SCHED_MODULES_CORE = sch_ingress sch_hfsc sch_htb sch_tbf cls_basic cls_fw cls_route cls_flow cls_u32 em_u32 act_gact act_mirred act_skbedit cls_matchall
SCHED_FILES_CORE = $(foreach mod,$(SCHED_MODULES_CORE),$(LINUX_DIR)/net/sched/$(mod).ko)
define KernelPackage/sched-core
CONFIG_NET_CLS_FLOW \
CONFIG_NET_CLS_FW \
CONFIG_NET_CLS_ROUTE4 \
- CONFIG_NET_CLS_TCINDEX \
CONFIG_NET_CLS_U32 \
CONFIG_NET_ACT_GACT \
CONFIG_NET_ACT_MIRRED \
--- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c
-@@ -3157,6 +3157,7 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -3168,6 +3168,7 @@ int spi_nor_scan(struct spi_nor *nor, co
struct device *dev = nor->dev;
struct mtd_info *mtd = &nor->mtd;
struct device_node *np = spi_nor_get_flash_node(nor);
int ret;
int i;
-@@ -3211,7 +3212,12 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -3222,7 +3223,12 @@ int spi_nor_scan(struct spi_nor *nor, co
if (ret)
return ret;
mtd->type = MTD_NORFLASH;
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
-@@ -848,6 +848,17 @@ out_error:
+@@ -850,6 +850,17 @@ out_error:
*/
static void mtd_set_dev_defaults(struct mtd_info *mtd)
{
--- a/include/uapi/linux/ip.h
+++ b/include/uapi/linux/ip.h
-@@ -105,7 +105,7 @@ struct iphdr {
+@@ -106,7 +106,7 @@ struct iphdr {
__be32 daddr;
);
/*The options start here. */
struct ip_auth_hdr {
--- a/include/uapi/linux/ipv6.h
+++ b/include/uapi/linux/ipv6.h
-@@ -134,7 +134,7 @@ struct ipv6hdr {
+@@ -135,7 +135,7 @@ struct ipv6hdr {
struct in6_addr saddr;
struct in6_addr daddr;
);
#include <linux/uaccess.h>
#include <linux/ipv6.h>
#include <linux/icmpv6.h>
-@@ -924,10 +925,10 @@ static void tcp_v6_send_response(const s
+@@ -927,10 +928,10 @@ static void tcp_v6_send_response(const s
topt = (__be32 *)(t1 + 1);
if (tsecr) {
#endif /* _LINUX_TYPES_H */
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
-@@ -1470,8 +1470,8 @@ struct sk_buff *inet_gro_receive(struct
+@@ -1469,8 +1469,8 @@ struct sk_buff *inet_gro_receive(struct
if (unlikely(ip_fast_csum((u8 *)iph, 5)))
goto out_unlock;
--- a/Makefile
+++ b/Makefile
-@@ -509,7 +509,7 @@ KBUILD_LDFLAGS_MODULE :=
+@@ -516,7 +516,7 @@ KBUILD_LDFLAGS_MODULE :=
KBUILD_LDFLAGS :=
CLANG_FLAGS :=
+ mtd_check_of_node(mtd);
of_node_get(mtd_get_of_node(mtd));
error = device_register(&mtd->dev);
- if (error)
+ if (error) {
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
-@@ -1070,6 +1070,34 @@ int __get_mtd_device(struct mtd_info *mt
+@@ -1072,6 +1072,34 @@ int __get_mtd_device(struct mtd_info *mt
EXPORT_SYMBOL_GPL(__get_mtd_device);
/**
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
-@@ -743,6 +744,17 @@ int add_mtd_device(struct mtd_info *mtd)
+@@ -745,6 +746,17 @@ int add_mtd_device(struct mtd_info *mtd)
not->add(mtd);
mutex_unlock(&mtd_table_mutex);
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -6810,15 +6810,10 @@ void __netif_napi_del(struct napi_struct
+@@ -6813,15 +6813,10 @@ void __netif_napi_del(struct napi_struct
}
EXPORT_SYMBOL(__netif_napi_del);
weight = n->weight;
/* This NAPI_STATE_SCHED test is for avoiding a race
-@@ -6838,7 +6833,7 @@ static int napi_poll(struct napi_struct
+@@ -6841,7 +6836,7 @@ static int napi_poll(struct napi_struct
n->poll, work, weight);
if (likely(work < weight))
/* Drivers must not modify the NAPI state if they
* consume the entire weight. In such cases this code
-@@ -6847,7 +6842,7 @@ static int napi_poll(struct napi_struct
+@@ -6850,7 +6845,7 @@ static int napi_poll(struct napi_struct
*/
if (unlikely(napi_disable_pending(n))) {
napi_complete(n);
}
if (n->gro_bitmask) {
-@@ -6865,12 +6860,29 @@ static int napi_poll(struct napi_struct
+@@ -6868,12 +6863,29 @@ static int napi_poll(struct napi_struct
if (unlikely(!list_empty(&n->poll_list))) {
pr_warn_once("%s: Budget exhausted after napi rescheduled\n",
n->dev ? n->dev->name : "backlog");
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -347,6 +347,7 @@ struct napi_struct {
+@@ -356,6 +356,7 @@ struct napi_struct {
struct list_head dev_list;
struct hlist_node napi_hash_node;
unsigned int napi_id;
};
enum {
-@@ -357,6 +358,7 @@ enum {
+@@ -366,6 +367,7 @@ enum {
NAPI_STATE_LISTED, /* NAPI added to system lists */
NAPI_STATE_NO_BUSY_POLL,/* Do not add in napi_hash, no busy polling */
NAPI_STATE_IN_BUSY_POLL,/* sk_busy_loop() owns this NAPI */
};
enum {
-@@ -367,6 +369,7 @@ enum {
+@@ -376,6 +378,7 @@ enum {
NAPIF_STATE_LISTED = BIT(NAPI_STATE_LISTED),
NAPIF_STATE_NO_BUSY_POLL = BIT(NAPI_STATE_NO_BUSY_POLL),
NAPIF_STATE_IN_BUSY_POLL = BIT(NAPI_STATE_IN_BUSY_POLL),
};
enum gro_result {
-@@ -497,20 +500,7 @@ static inline bool napi_complete(struct
+@@ -506,20 +509,7 @@ static inline bool napi_complete(struct
*/
void napi_disable(struct napi_struct *n);
/**
* napi_synchronize - wait until NAPI is not running
-@@ -1856,6 +1846,8 @@ enum netdev_ml_priv_type {
+@@ -1865,6 +1855,8 @@ enum netdev_ml_priv_type {
*
* @wol_enabled: Wake-on-LAN is enabled
*
* @net_notifier_list: List of per-net netdev notifier block
* that follow this device when it is moved
* to another network namespace.
-@@ -2175,6 +2167,7 @@ struct net_device {
+@@ -2184,6 +2176,7 @@ struct net_device {
struct lock_class_key *qdisc_running_key;
bool proto_down;
unsigned wol_enabled:1;
static int __dev_open(struct net_device *dev, struct netlink_ext_ack *extack)
{
const struct net_device_ops *ops = dev->netdev_ops;
-@@ -4272,6 +4294,21 @@ int gro_normal_batch __read_mostly = 8;
+@@ -4274,6 +4296,21 @@ int gro_normal_batch __read_mostly = 8;
static inline void ____napi_schedule(struct softnet_data *sd,
struct napi_struct *napi)
{
list_add_tail(&napi->poll_list, &sd->poll_list);
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
}
-@@ -6763,6 +6800,12 @@ void netif_napi_add(struct net_device *d
+@@ -6766,6 +6803,12 @@ void netif_napi_add(struct net_device *d
set_bit(NAPI_STATE_NPSVC, &napi->state);
list_add_rcu(&napi->dev_list, &dev->napi_list);
napi_hash_add(napi);
}
EXPORT_SYMBOL(netif_napi_add);
-@@ -6779,9 +6822,28 @@ void napi_disable(struct napi_struct *n)
+@@ -6782,9 +6825,28 @@ void napi_disable(struct napi_struct *n)
hrtimer_cancel(&n->timer);
clear_bit(NAPI_STATE_DISABLE, &n->state);
static void flush_gro_hash(struct napi_struct *napi)
{
int i;
-@@ -6807,6 +6869,11 @@ void __netif_napi_del(struct napi_struct
+@@ -6810,6 +6872,11 @@ void __netif_napi_del(struct napi_struct
flush_gro_hash(napi);
napi->gro_bitmask = 0;
}
EXPORT_SYMBOL(__netif_napi_del);
-@@ -6888,6 +6955,51 @@ static int napi_poll(struct napi_struct
+@@ -6891,6 +6958,51 @@ static int napi_poll(struct napi_struct
return work;
}
+ == ==================================
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -491,6 +491,8 @@ static inline bool napi_complete(struct
+@@ -500,6 +500,8 @@ static inline bool napi_complete(struct
return napi_complete_done(n, 0);
}
* @n: NAPI context
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -4298,8 +4298,9 @@ static inline void ____napi_schedule(str
+@@ -4300,8 +4300,9 @@ static inline void ____napi_schedule(str
if (test_bit(NAPI_STATE_THREADED, &napi->state)) {
/* Paired with smp_mb__before_atomic() in
* wake_up_process() when it's not NULL.
*/
thread = READ_ONCE(napi->thread);
-@@ -6773,6 +6774,49 @@ static void init_gro_hash(struct napi_st
+@@ -6776,6 +6777,49 @@ static void init_gro_hash(struct napi_st
napi->gro_bitmask = 0;
}
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -359,6 +359,7 @@ enum {
+@@ -368,6 +368,7 @@ enum {
NAPI_STATE_NO_BUSY_POLL,/* Do not add in napi_hash, no busy polling */
NAPI_STATE_IN_BUSY_POLL,/* sk_busy_loop() owns this NAPI */
NAPI_STATE_THREADED, /* The poll is performed inside its own thread*/
};
enum {
-@@ -370,6 +371,7 @@ enum {
+@@ -379,6 +380,7 @@ enum {
NAPIF_STATE_NO_BUSY_POLL = BIT(NAPI_STATE_NO_BUSY_POLL),
NAPIF_STATE_IN_BUSY_POLL = BIT(NAPI_STATE_IN_BUSY_POLL),
NAPIF_STATE_THREADED = BIT(NAPI_STATE_THREADED),
enum gro_result {
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -4305,6 +4305,8 @@ static inline void ____napi_schedule(str
+@@ -4307,6 +4307,8 @@ static inline void ____napi_schedule(str
*/
thread = READ_ONCE(napi->thread);
if (thread) {
wake_up_process(thread);
return;
}
-@@ -6565,7 +6567,8 @@ bool napi_complete_done(struct napi_stru
+@@ -6568,7 +6570,8 @@ bool napi_complete_done(struct napi_stru
WARN_ON_ONCE(!(val & NAPIF_STATE_SCHED));
/* If STATE_MISSED was set, leave STATE_SCHED set,
* because we will call napi->poll() one more time.
-@@ -7001,16 +7004,25 @@ static int napi_poll(struct napi_struct
+@@ -7004,16 +7007,25 @@ static int napi_poll(struct napi_struct
static int napi_thread_wait(struct napi_struct *napi)
{
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -7008,7 +7008,7 @@ static int napi_thread_wait(struct napi_
+@@ -7011,7 +7011,7 @@ static int napi_thread_wait(struct napi_
set_current_state(TASK_INTERRUPTIBLE);
/* Testing SCHED_THREADED bit here to make sure the current
* kthread owns this napi and could poll on this napi.
* Testing SCHED bit is not enough because SCHED bit might be
-@@ -7026,6 +7026,7 @@ static int napi_thread_wait(struct napi_
+@@ -7029,6 +7029,7 @@ static int napi_thread_wait(struct napi_
set_current_state(TASK_INTERRUPTIBLE);
}
__set_current_state(TASK_RUNNING);
}
static int nf_flow_table_block_setup(struct nf_flowtable *flowtable,
-@@ -1013,15 +1023,33 @@ EXPORT_SYMBOL_GPL(nf_flow_table_offload_
+@@ -1017,15 +1027,33 @@ EXPORT_SYMBOL_GPL(nf_flow_table_offload_
int nf_flow_table_offload_init(void)
{
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -841,6 +841,27 @@ typedef u16 (*select_queue_fallback_t)(s
+@@ -850,6 +850,27 @@ typedef u16 (*select_queue_fallback_t)(s
struct sk_buff *skb,
struct net_device *sb_dev);
enum tc_setup_type {
TC_SETUP_QDISC_MQPRIO,
TC_SETUP_CLSU32,
-@@ -1287,6 +1308,8 @@ struct netdev_net_notifier {
+@@ -1296,6 +1317,8 @@ struct netdev_net_notifier {
* struct net_device *(*ndo_get_peer_dev)(struct net_device *dev);
* If a device is paired with a peer device, return the peer instance.
* The caller must be under RCU read context.
*/
struct net_device_ops {
int (*ndo_init)(struct net_device *dev);
-@@ -1495,6 +1518,8 @@ struct net_device_ops {
+@@ -1504,6 +1527,8 @@ struct net_device_ops {
int (*ndo_tunnel_ctl)(struct net_device *dev,
struct ip_tunnel_parm *p, int cmd);
struct net_device * (*ndo_get_peer_dev)(struct net_device *dev);
};
/**
-@@ -2842,6 +2867,8 @@ void dev_remove_offload(struct packet_of
+@@ -2851,6 +2876,8 @@ void dev_remove_offload(struct packet_of
int dev_get_iflink(const struct net_device *dev);
int dev_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb);
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -843,11 +843,18 @@ typedef u16 (*select_queue_fallback_t)(s
+@@ -852,11 +852,18 @@ typedef u16 (*select_queue_fallback_t)(s
enum net_device_path_type {
DEV_PATH_ETHERNET = 0,
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -844,6 +844,7 @@ typedef u16 (*select_queue_fallback_t)(s
+@@ -853,6 +853,7 @@ typedef u16 (*select_queue_fallback_t)(s
enum net_device_path_type {
DEV_PATH_ETHERNET = 0,
DEV_PATH_VLAN,
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -855,10 +855,20 @@ struct net_device_path {
+@@ -864,10 +864,20 @@ struct net_device_path {
u16 id;
__be16 proto;
} encap;
struct net_device_path_stack {
int num_paths;
-@@ -868,6 +878,12 @@ struct net_device_path_stack {
+@@ -877,6 +887,12 @@ struct net_device_path_stack {
struct net_device_path_ctx {
const struct net_device *dev;
const u8 *daddr;
const struct net_bridge *br)
--- a/net/bridge/br_vlan.c
+++ b/net/bridge/br_vlan.c
-@@ -1327,6 +1327,59 @@ int br_vlan_get_pvid_rcu(const struct ne
+@@ -1350,6 +1350,59 @@ int br_vlan_get_pvid_rcu(const struct ne
}
EXPORT_SYMBOL_GPL(br_vlan_get_pvid_rcu);
static int pppoe_recvmsg(struct socket *sock, struct msghdr *m,
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -845,6 +845,7 @@ enum net_device_path_type {
+@@ -854,6 +854,7 @@ enum net_device_path_type {
DEV_PATH_ETHERNET = 0,
DEV_PATH_VLAN,
DEV_PATH_BRIDGE,
};
struct net_device_path {
-@@ -854,6 +855,7 @@ struct net_device_path {
+@@ -863,6 +864,7 @@ struct net_device_path {
struct {
u16 id;
__be16 proto;
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -846,6 +846,7 @@ enum net_device_path_type {
+@@ -855,6 +855,7 @@ enum net_device_path_type {
DEV_PATH_VLAN,
DEV_PATH_BRIDGE,
DEV_PATH_PPPOE,
};
struct net_device_path {
-@@ -866,6 +867,10 @@ struct net_device_path {
+@@ -875,6 +876,10 @@ struct net_device_path {
u16 vlan_id;
__be16 vlan_proto;
} bridge;
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -863,6 +863,7 @@ struct net_device_path {
+@@ -872,6 +872,7 @@ struct net_device_path {
DEV_PATH_BR_VLAN_KEEP,
DEV_PATH_BR_VLAN_TAG,
DEV_PATH_BR_VLAN_UNTAG,
break;
--- a/net/bridge/br_vlan.c
+++ b/net/bridge/br_vlan.c
-@@ -1374,6 +1374,8 @@ int br_vlan_fill_forward_path_mode(struc
+@@ -1397,6 +1397,8 @@ int br_vlan_fill_forward_path_mode(struc
if (path->bridge.vlan_mode == DEV_PATH_BR_VLAN_TAG)
path->bridge.vlan_mode = DEV_PATH_BR_VLAN_KEEP;
#include "mtk_eth_soc.h"
-@@ -1296,13 +1297,12 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1297,13 +1298,12 @@ static int mtk_poll_rx(struct napi_struc
break;
/* find out which mac the packet come from. values start at 1 */
if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
!eth->netdev[mac]))
-@@ -2274,6 +2274,9 @@ static void mtk_gdm_config(struct mtk_et
+@@ -2275,6 +2275,9 @@ static void mtk_gdm_config(struct mtk_et
val |= config;
obj-$(CONFIG_NET_MEDIATEK_STAR_EMAC) += mtk_star_emac.o
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2299,12 +2299,17 @@ static int mtk_open(struct net_device *d
+@@ -2300,7 +2300,10 @@ static int mtk_open(struct net_device *d
/* we run 2 netdevs on the same dma ring so we only bring it up once */
if (!refcount_read(ð->dma_refcnt)) {
- int err = mtk_start_dma(eth);
+ u32 gdm_config = MTK_GDMA_TO_PDMA;
+ int err;
-
++
+ err = mtk_start_dma(eth);
+
if (err)
+ if (err) {
+@@ -2308,7 +2311,10 @@ static int mtk_open(struct net_device *d
return err;
+ }
- mtk_gdm_config(eth, MTK_GDMA_TO_PDMA);
+ if (eth->soc->offload_version && mtk_ppe_start(ð->ppe) == 0)
napi_enable(ð->tx_napi);
napi_enable(ð->rx_napi);
-@@ -2371,6 +2376,9 @@ static int mtk_stop(struct net_device *d
+@@ -2375,6 +2381,9 @@ static int mtk_stop(struct net_device *d
mtk_dma_free(eth);
return 0;
}
-@@ -3099,6 +3107,13 @@ static int mtk_probe(struct platform_dev
+@@ -3103,6 +3112,13 @@ static int mtk_probe(struct platform_dev
goto err_free_dev;
}
for (i = 0; i < MTK_MAX_DEVS; i++) {
if (!eth->netdev[i])
continue;
-@@ -3173,6 +3188,7 @@ static const struct mtk_soc_data mt7621_
+@@ -3177,6 +3193,7 @@ static const struct mtk_soc_data mt7621_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7621_CLKS_BITMAP,
.required_pctl = false,
};
static const struct mtk_soc_data mt7622_data = {
-@@ -3181,6 +3197,7 @@ static const struct mtk_soc_data mt7622_
+@@ -3185,6 +3202,7 @@ static const struct mtk_soc_data mt7622_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7622_CLKS_BITMAP,
.required_pctl = false,
#define RX_DMA_L4_VALID BIT(24)
#define RX_DMA_L4_VALID_PDMA BIT(30) /* when PDMA is used */
#define RX_DMA_FPORT_SHIFT 19
-@@ -819,6 +827,7 @@ struct mtk_soc_data {
+@@ -820,6 +828,7 @@ struct mtk_soc_data {
u32 caps;
u32 required_clks;
bool required_pctl;
netdev_features_t hw_features;
};
-@@ -918,6 +927,8 @@ struct mtk_eth {
+@@ -919,6 +928,8 @@ struct mtk_eth {
u32 tx_int_status_reg;
u32 rx_dma_l4_valid;
int ip_align;
obj-$(CONFIG_NET_MEDIATEK_STAR_EMAC) += mtk_star_emac.o
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2854,6 +2854,7 @@ static const struct net_device_ops mtk_n
+@@ -2859,6 +2859,7 @@ static const struct net_device_ops mtk_n
#ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = mtk_poll_controller,
#endif
};
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
-@@ -3112,6 +3113,10 @@ static int mtk_probe(struct platform_dev
+@@ -3117,6 +3118,10 @@ static int mtk_probe(struct platform_dev
eth->base + MTK_ETH_PPE_BASE, 2);
if (err)
goto err_free_dev;
#define MTK_HW_FEATURES_MT7628 (NETIF_F_SG | NETIF_F_RXCSUM)
#define NEXT_DESP_IDX(X, Y) (((X) + 1) & ((Y) - 1))
-@@ -929,6 +931,7 @@ struct mtk_eth {
+@@ -930,6 +932,7 @@ struct mtk_eth {
int ip_align;
struct mtk_ppe ppe;
};
/* struct mtk_mac - the structure that holds the info about the MACs of the
-@@ -973,4 +976,9 @@ int mtk_gmac_sgmii_path_setup(struct mtk
+@@ -974,4 +977,9 @@ int mtk_gmac_sgmii_path_setup(struct mtk
int mtk_gmac_gephy_path_setup(struct mtk_eth *eth, int mac_id);
int mtk_gmac_rgmii_path_setup(struct mtk_eth *eth, int mac_id);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1333,6 +1333,9 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1334,6 +1334,9 @@ static int mtk_poll_rx(struct napi_struc
goto release_desc;
}
/* receive data */
skb = build_skb(data, ring->frag_size);
if (unlikely(!skb)) {
-@@ -1342,8 +1345,6 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1343,8 +1346,6 @@ static int mtk_poll_rx(struct napi_struc
}
skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1339,9 +1339,9 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1340,9 +1340,9 @@ static int mtk_poll_rx(struct napi_struc
/* receive data */
skb = build_skb(data, ring->frag_size);
if (unlikely(!skb)) {
}
skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);
-@@ -1361,6 +1361,7 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1362,6 +1362,7 @@ static int mtk_poll_rx(struct napi_struc
skb_record_rx_queue(skb, 0);
napi_gro_receive(napi, skb);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -890,7 +890,8 @@ static int txd_to_idx(struct mtk_tx_ring
+@@ -891,7 +891,8 @@ static int txd_to_idx(struct mtk_tx_ring
return ((void *)dma - (void *)ring->dma) / sizeof(*dma);
}
{
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
if (tx_buf->flags & MTK_TX_FLAGS_SINGLE0) {
-@@ -922,8 +923,12 @@ static void mtk_tx_unmap(struct mtk_eth
+@@ -923,8 +924,12 @@ static void mtk_tx_unmap(struct mtk_eth
tx_buf->flags = 0;
if (tx_buf->skb &&
tx_buf->skb = NULL;
}
-@@ -1101,7 +1106,7 @@ err_dma:
+@@ -1102,7 +1107,7 @@ err_dma:
tx_buf = mtk_desc_to_tx_buf(ring, itxd);
/* unmap dma */
itxd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
-@@ -1423,7 +1428,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
+@@ -1424,7 +1429,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
done[mac]++;
budget--;
}
ring->last_free = desc;
atomic_inc(&ring->free_count);
-@@ -1460,7 +1465,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
+@@ -1461,7 +1466,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
budget--;
}
desc = &ring->dma[cpu];
ring->last_free = desc;
-@@ -1662,7 +1667,7 @@ static void mtk_tx_clean(struct mtk_eth
+@@ -1663,7 +1668,7 @@ static void mtk_tx_clean(struct mtk_eth
if (ring->buf) {
for (i = 0; i < MTK_DMA_SIZE; i++)
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1163,17 +1163,6 @@ static void mtk_wake_queue(struct mtk_et
+@@ -1164,17 +1164,6 @@ static void mtk_wake_queue(struct mtk_et
}
}
static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct mtk_mac *mac = netdev_priv(dev);
-@@ -1194,7 +1183,7 @@ static netdev_tx_t mtk_start_xmit(struct
+@@ -1195,7 +1184,7 @@ static netdev_tx_t mtk_start_xmit(struct
tx_num = mtk_cal_txd_req(skb);
if (unlikely(atomic_read(&ring->free_count) <= tx_num)) {
netif_err(eth, tx_queued, dev,
"Tx Ring full when queue awake!\n");
spin_unlock(ð->page_lock);
-@@ -1220,7 +1209,7 @@ static netdev_tx_t mtk_start_xmit(struct
+@@ -1221,7 +1210,7 @@ static netdev_tx_t mtk_start_xmit(struct
goto drop;
if (unlikely(atomic_read(&ring->free_count) <= ring->thresh))
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2234,7 +2234,7 @@ static int mtk_start_dma(struct mtk_eth
+@@ -2235,7 +2235,7 @@ static int mtk_start_dma(struct mtk_eth
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
mtk_w32(eth,
MTK_TX_WB_DDONE | MTK_TX_DMA_EN |
MediaTek SoC family.
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1265,12 +1265,13 @@ static void mtk_update_rx_cpu_idx(struct
+@@ -1266,12 +1266,13 @@ static void mtk_update_rx_cpu_idx(struct
static int mtk_poll_rx(struct napi_struct *napi, int budget,
struct mtk_eth *eth)
{
while (done < budget) {
struct net_device *netdev;
-@@ -1347,6 +1348,7 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1348,6 +1349,7 @@ static int mtk_poll_rx(struct napi_struc
else
skb_checksum_none_assert(skb);
skb->protocol = eth_type_trans(skb, netdev);
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
(trxd.rxd2 & RX_DMA_VTAG))
-@@ -1379,6 +1381,12 @@ rx_done:
+@@ -1380,6 +1382,12 @@ rx_done:
mtk_update_rx_cpu_idx(eth);
}
return done;
}
-@@ -1471,6 +1479,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
+@@ -1472,6 +1480,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
static int mtk_poll_tx(struct mtk_eth *eth, int budget)
{
struct mtk_tx_ring *ring = ð->tx_ring;
unsigned int done[MTK_MAX_DEVS];
unsigned int bytes[MTK_MAX_DEVS];
int total = 0, i;
-@@ -1488,8 +1497,14 @@ static int mtk_poll_tx(struct mtk_eth *e
+@@ -1489,8 +1498,14 @@ static int mtk_poll_tx(struct mtk_eth *e
continue;
netdev_completed_queue(eth->netdev[i], done[i], bytes[i]);
total += done[i];
if (mtk_queue_stopped(eth) &&
(atomic_read(&ring->free_count) > ring->thresh))
mtk_wake_queue(eth);
-@@ -2170,6 +2185,7 @@ static irqreturn_t mtk_handle_irq_rx(int
+@@ -2171,6 +2186,7 @@ static irqreturn_t mtk_handle_irq_rx(int
{
struct mtk_eth *eth = _eth;
if (likely(napi_schedule_prep(ð->rx_napi))) {
__napi_schedule(ð->rx_napi);
mtk_rx_irq_disable(eth, MTK_RX_DONE_INT);
-@@ -2182,6 +2198,7 @@ static irqreturn_t mtk_handle_irq_tx(int
+@@ -2183,6 +2199,7 @@ static irqreturn_t mtk_handle_irq_tx(int
{
struct mtk_eth *eth = _eth;
if (likely(napi_schedule_prep(ð->tx_napi))) {
__napi_schedule(ð->tx_napi);
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
-@@ -2366,6 +2383,9 @@ static int mtk_stop(struct net_device *d
+@@ -2371,6 +2388,9 @@ static int mtk_stop(struct net_device *d
napi_disable(ð->tx_napi);
napi_disable(ð->rx_napi);
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
mtk_stop_dma(eth, MTK_QDMA_GLO_CFG);
mtk_stop_dma(eth, MTK_PDMA_GLO_CFG);
-@@ -2418,6 +2438,64 @@ err_disable_clks:
+@@ -2423,6 +2443,64 @@ err_disable_clks:
return ret;
}
static int mtk_hw_init(struct mtk_eth *eth)
{
int i, val, ret;
-@@ -2439,9 +2517,6 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -2444,9 +2522,6 @@ static int mtk_hw_init(struct mtk_eth *e
goto err_disable_pm;
}
/* disable delay and normal interrupt */
mtk_tx_irq_disable(eth, ~0);
mtk_rx_irq_disable(eth, ~0);
-@@ -2480,11 +2555,11 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -2485,11 +2560,11 @@ static int mtk_hw_init(struct mtk_eth *e
/* Enable RX VLan Offloading */
mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
mtk_tx_irq_disable(eth, ~0);
mtk_rx_irq_disable(eth, ~0);
-@@ -2989,6 +3064,13 @@ static int mtk_probe(struct platform_dev
+@@ -2994,6 +3069,13 @@ static int mtk_probe(struct platform_dev
spin_lock_init(ð->page_lock);
spin_lock_init(ð->tx_irq_lock);
spin_lock_init(ð->rx_irq_lock);
/* QDMA Interrupt grouping registers */
#define MTK_QDMA_INT_GRP1 0x1a20
-@@ -863,6 +869,7 @@ struct mtk_sgmii {
+@@ -864,6 +870,7 @@ struct mtk_sgmii {
* @page_lock: Make sure that register operations are atomic
* @tx_irq__lock: Make sure that IRQ register operations are atomic
* @rx_irq__lock: Make sure that IRQ register operations are atomic
* @dummy_dev: we run 2 netdevs on 1 physical DMA ring and need a
* dummy for NAPI to work
* @netdev: The netdev instances
-@@ -881,6 +888,14 @@ struct mtk_sgmii {
+@@ -882,6 +889,14 @@ struct mtk_sgmii {
* @rx_ring_qdma: Pointer to the memory holding info about the QDMA RX ring
* @tx_napi: The TX NAPI struct
* @rx_napi: The RX NAPI struct
* @scratch_ring: Newer SoCs need memory for a second HW managed TX ring
* @phy_scratch_ring: physical address of scratch_ring
* @scratch_head: The scratch memory that scratch_ring points to.
-@@ -925,6 +940,18 @@ struct mtk_eth {
+@@ -926,6 +941,18 @@ struct mtk_eth {
const struct mtk_soc_data *soc;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1399,7 +1399,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
+@@ -1400,7 +1400,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
struct mtk_tx_buf *tx_buf;
u32 cpu, dma;
dma = mtk_r32(eth, MTK_QTX_DRX_PTR);
desc = mtk_qdma_phys_to_virt(ring, cpu);
-@@ -1433,6 +1433,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
+@@ -1434,6 +1434,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
cpu = next_cpu;
}
mtk_w32(eth, cpu, MTK_QTX_CRX_PTR);
return budget;
-@@ -1633,6 +1634,7 @@ static int mtk_tx_alloc(struct mtk_eth *
+@@ -1634,6 +1635,7 @@ static int mtk_tx_alloc(struct mtk_eth *
atomic_set(&ring->free_count, MTK_DMA_SIZE - 2);
ring->next_free = &ring->dma[0];
ring->last_free = &ring->dma[MTK_DMA_SIZE - 1];
ring->thresh = MAX_SKB_FRAGS;
/* make sure that all changes to the dma ring are flushed before we
-@@ -1646,9 +1648,7 @@ static int mtk_tx_alloc(struct mtk_eth *
+@@ -1647,9 +1649,7 @@ static int mtk_tx_alloc(struct mtk_eth *
mtk_w32(eth,
ring->phys + ((MTK_DMA_SIZE - 1) * sz),
MTK_QTX_CRX_PTR);
} else {
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -656,6 +656,7 @@ struct mtk_tx_buf {
+@@ -657,6 +657,7 @@ struct mtk_tx_buf {
* @phys: The physical addr of tx_buf
* @next_free: Pointer to the next free descriptor
* @last_free: Pointer to the last free descriptor
* @thresh: The threshold of minimum amount of free descriptors
* @free_count: QDMA uses a linked list. Track how many free descriptors
* are present
-@@ -666,6 +667,7 @@ struct mtk_tx_ring {
+@@ -667,6 +668,7 @@ struct mtk_tx_ring {
dma_addr_t phys;
struct mtk_tx_dma *next_free;
struct mtk_tx_dma *last_free;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -798,13 +798,18 @@ static inline int mtk_max_buf_size(int f
+@@ -799,13 +799,18 @@ static inline int mtk_max_buf_size(int f
return buf_size;
}
}
static void *mtk_max_lro_buf_alloc(gfp_t gfp_mask)
-@@ -1287,8 +1292,7 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1288,8 +1293,7 @@ static int mtk_poll_rx(struct napi_struc
rxd = &ring->dma[idx];
data = ring->data[idx];
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1554,8 +1554,8 @@ static int mtk_napi_tx(struct napi_struc
+@@ -1555,8 +1555,8 @@ static int mtk_napi_tx(struct napi_struc
if (status & MTK_TX_DONE_INT)
return budget;
return tx_done;
}
-@@ -1588,8 +1588,9 @@ poll_again:
+@@ -1589,8 +1589,9 @@ poll_again:
remain_budget -= rx_done;
goto poll_again;
}
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1531,7 +1531,6 @@ static void mtk_handle_status_irq(struct
+@@ -1532,7 +1532,6 @@ static void mtk_handle_status_irq(struct
static int mtk_napi_tx(struct napi_struct *napi, int budget)
{
struct mtk_eth *eth = container_of(napi, struct mtk_eth, tx_napi);
int tx_done = 0;
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
-@@ -1540,21 +1539,19 @@ static int mtk_napi_tx(struct napi_struc
+@@ -1541,21 +1540,19 @@ static int mtk_napi_tx(struct napi_struc
tx_done = mtk_poll_tx(eth, budget);
if (unlikely(netif_msg_intr(eth))) {
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
return tx_done;
-@@ -1563,36 +1560,33 @@ static int mtk_napi_tx(struct napi_struc
+@@ -1564,36 +1561,33 @@ static int mtk_napi_tx(struct napi_struc
static int mtk_napi_rx(struct napi_struct *napi, int budget)
{
struct mtk_eth *eth = container_of(napi, struct mtk_eth, rx_napi);
#include <net/dsa.h>
#include "mtk_eth_soc.h"
-@@ -1282,6 +1283,7 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1283,6 +1284,7 @@ static int mtk_poll_rx(struct napi_struc
struct net_device *netdev;
unsigned int pktlen;
dma_addr_t dma_addr;
int mac;
ring = mtk_get_rx_ring(eth);
-@@ -1354,6 +1356,12 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1355,6 +1357,12 @@ static int mtk_poll_rx(struct napi_struc
skb->protocol = eth_type_trans(skb, netdev);
bytes += pktlen;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2074,25 +2074,22 @@ static int mtk_set_features(struct net_d
+@@ -2075,25 +2075,22 @@ static int mtk_set_features(struct net_d
/* wait for DMA to finish whatever it is doing before we start using it again */
static int mtk_dma_busy_wait(struct mtk_eth *eth)
{
enum udp_conntrack {
--- a/net/netfilter/nf_conntrack_proto_tcp.c
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
-@@ -1447,6 +1447,11 @@ void nf_conntrack_tcp_init_net(struct ne
+@@ -1457,6 +1457,11 @@ void nf_conntrack_tcp_init_net(struct ne
tn->tcp_loose = nf_ct_tcp_loose;
tn->tcp_be_liberal = nf_ct_tcp_be_liberal;
tn->tcp_max_retrans = nf_ct_tcp_max_retrans;
NF_SYSCTL_CT_PROTO_TCP_LOOSE,
NF_SYSCTL_CT_PROTO_TCP_LIBERAL,
NF_SYSCTL_CT_PROTO_TCP_MAX_RETRANS,
-@@ -758,6 +762,20 @@ static struct ctl_table nf_ct_sysctl_tab
+@@ -757,6 +761,20 @@ static struct ctl_table nf_ct_sysctl_tab
.mode = 0644,
.proc_handler = proc_dointvec_jiffies,
},
[NF_SYSCTL_CT_PROTO_TCP_LOOSE] = {
.procname = "nf_conntrack_tcp_loose",
.maxlen = sizeof(int),
-@@ -967,6 +985,12 @@ static void nf_conntrack_standalone_init
+@@ -960,6 +978,12 @@ static void nf_conntrack_standalone_init
XASSIGN(LIBERAL, &tn->tcp_be_liberal);
XASSIGN(MAX_RETRANS, &tn->tcp_max_retrans);
#undef XASSIGN
NF_SYSCTL_CT_PROTO_TIMEOUT_ICMP,
NF_SYSCTL_CT_PROTO_TIMEOUT_ICMPV6,
#ifdef CONFIG_NF_CT_PROTO_SCTP
-@@ -810,6 +814,20 @@ static struct ctl_table nf_ct_sysctl_tab
+@@ -809,6 +813,20 @@ static struct ctl_table nf_ct_sysctl_tab
.mode = 0644,
.proc_handler = proc_dointvec_jiffies,
},
[NF_SYSCTL_CT_PROTO_TIMEOUT_ICMP] = {
.procname = "nf_conntrack_icmp_timeout",
.maxlen = sizeof(unsigned int),
-@@ -1078,6 +1096,10 @@ static int nf_conntrack_standalone_init_
+@@ -1070,6 +1088,10 @@ static int nf_conntrack_standalone_init_
table[NF_SYSCTL_CT_PROTO_TIMEOUT_ICMPV6].data = &nf_icmpv6_pernet(net)->timeout;
table[NF_SYSCTL_CT_PROTO_TIMEOUT_UDP].data = &un->timeouts[UDP_CT_UNREPLIED];
table[NF_SYSCTL_CT_PROTO_TIMEOUT_UDP_STREAM].data = &un->timeouts[UDP_CT_REPLIED];
mcr_new = mcr_cur;
- mcr_new |= MAC_MCR_MAX_RX_1536 | MAC_MCR_IPG_CFG | MAC_MCR_FORCE_MODE |
+ mcr_new |= MAC_MCR_IPG_CFG | MAC_MCR_FORCE_MODE |
- MAC_MCR_BACKOFF_EN | MAC_MCR_BACKPR_EN | MAC_MCR_FORCE_LINK;
+ MAC_MCR_BACKOFF_EN | MAC_MCR_BACKPR_EN | MAC_MCR_FORCE_LINK |
+ MAC_MCR_RX_FIFO_CLR_DIS;
- /* Only update control register when needed! */
-@@ -782,8 +782,8 @@ static void mtk_get_stats64(struct net_d
+@@ -783,8 +783,8 @@ static void mtk_get_stats64(struct net_d
static inline int mtk_max_frag_size(int mtu)
{
/* make sure buf_size will be at least MTK_MAX_RX_LENGTH */
return SKB_DATA_ALIGN(MTK_RX_HLEN + mtu) +
SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
-@@ -794,7 +794,7 @@ static inline int mtk_max_buf_size(int f
+@@ -795,7 +795,7 @@ static inline int mtk_max_buf_size(int f
int buf_size = frag_size - NET_SKB_PAD - NET_IP_ALIGN -
SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
return buf_size;
}
-@@ -2626,6 +2626,35 @@ static void mtk_uninit(struct net_device
+@@ -2631,6 +2631,35 @@ static void mtk_uninit(struct net_device
mtk_rx_irq_disable(eth, ~0);
}
static int mtk_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
struct mtk_mac *mac = netdev_priv(dev);
-@@ -2922,6 +2951,7 @@ static const struct net_device_ops mtk_n
+@@ -2927,6 +2956,7 @@ static const struct net_device_ops mtk_n
.ndo_set_mac_address = mtk_set_mac_address,
.ndo_validate_addr = eth_validate_addr,
.ndo_do_ioctl = mtk_do_ioctl,
.ndo_tx_timeout = mtk_tx_timeout,
.ndo_get_stats64 = mtk_get_stats64,
.ndo_fix_features = mtk_fix_features,
-@@ -3024,7 +3054,10 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -3029,7 +3059,10 @@ static int mtk_add_mac(struct mtk_eth *e
eth->netdev[id]->irq = eth->irq[0];
eth->netdev[id]->dev.of_node = np;
--- a/net/netfilter/nf_conntrack_proto_tcp.c
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
-@@ -1450,7 +1450,6 @@ void nf_conntrack_tcp_init_net(struct ne
+@@ -1460,7 +1460,6 @@ void nf_conntrack_tcp_init_net(struct ne
#if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
tn->offload_timeout = 30 * HZ;
#endif
NF_SYSCTL_CT_PROTO_TIMEOUT_ICMP,
NF_SYSCTL_CT_PROTO_TIMEOUT_ICMPV6,
-@@ -773,12 +771,6 @@ static struct ctl_table nf_ct_sysctl_tab
+@@ -772,12 +770,6 @@ static struct ctl_table nf_ct_sysctl_tab
.mode = 0644,
.proc_handler = proc_dointvec_jiffies,
},
#endif
[NF_SYSCTL_CT_PROTO_TCP_LOOSE] = {
.procname = "nf_conntrack_tcp_loose",
-@@ -821,12 +813,6 @@ static struct ctl_table nf_ct_sysctl_tab
+@@ -820,12 +812,6 @@ static struct ctl_table nf_ct_sysctl_tab
.mode = 0644,
.proc_handler = proc_dointvec_jiffies,
},
#endif
[NF_SYSCTL_CT_PROTO_TIMEOUT_ICMP] = {
.procname = "nf_conntrack_icmp_timeout",
-@@ -1006,7 +992,6 @@ static void nf_conntrack_standalone_init
+@@ -999,7 +985,6 @@ static void nf_conntrack_standalone_init
#if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
table[NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_OFFLOAD].data = &tn->offload_timeout;
#endif
}
-@@ -1098,7 +1083,6 @@ static int nf_conntrack_standalone_init_
+@@ -1090,7 +1075,6 @@ static int nf_conntrack_standalone_init_
table[NF_SYSCTL_CT_PROTO_TIMEOUT_UDP_STREAM].data = &un->timeouts[UDP_CT_REPLIED];
#if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
table[NF_SYSCTL_CT_PROTO_TIMEOUT_UDP_OFFLOAD].data = &un->offload_timeout;
mdio = of_find_node_by_phandle(*ph);
--- a/drivers/net/ethernet/aeroflex/greth.c
+++ b/drivers/net/ethernet/aeroflex/greth.c
-@@ -1449,10 +1449,10 @@ static int greth_of_probe(struct platfor
+@@ -1450,10 +1450,10 @@ static int greth_of_probe(struct platfor
break;
}
if (i == 6) {
if (bgmac->irq < 0)
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
-@@ -4487,7 +4487,6 @@ static int macb_probe(struct platform_de
+@@ -4480,7 +4480,6 @@ static int macb_probe(struct platform_de
struct net_device *dev;
struct resource *regs;
void __iomem *mem;
struct macb *bp;
int err, val;
-@@ -4600,15 +4599,11 @@ static int macb_probe(struct platform_de
+@@ -4593,15 +4592,11 @@ static int macb_probe(struct platform_de
if (bp->caps & MACB_CAPS_NEEDS_RSTONUBR)
bp->rx_intr_mask |= MACB_BIT(RXUBR);
p->phy_np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
--- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
+++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
-@@ -1474,7 +1474,6 @@ static int bgx_init_of_phy(struct bgx *b
+@@ -1476,7 +1476,6 @@ static int bgx_init_of_phy(struct bgx *b
device_for_each_child_node(&bgx->pdev->dev, fwn) {
struct phy_device *pd;
struct device_node *phy_np;
/* Should always be an OF node. But if it is not, we
* cannot handle it, so exit the loop.
-@@ -1483,9 +1482,7 @@ static int bgx_init_of_phy(struct bgx *b
+@@ -1485,9 +1484,7 @@ static int bgx_init_of_phy(struct bgx *b
if (!node)
break;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2600,14 +2600,11 @@ static int __init mtk_init(struct net_de
+@@ -2605,14 +2605,11 @@ static int __init mtk_init(struct net_de
{
struct mtk_mac *mac = netdev_priv(dev);
struct mtk_eth *eth = mac->hw;
int irq;
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-@@ -5000,7 +5000,7 @@ int stmmac_dvr_probe(struct device *devi
+@@ -5015,7 +5015,7 @@ int stmmac_dvr_probe(struct device *devi
priv->wol_irq = res->wol_irq;
priv->lpi_irq = res->lpi_irq;
--- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c
+++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
-@@ -1742,7 +1742,6 @@ static int am65_cpsw_nuss_init_slave_por
+@@ -1713,7 +1713,6 @@ static int am65_cpsw_nuss_init_slave_por
for_each_child_of_node(node, port_np) {
struct am65_cpsw_port *port;
u32 port_id;
/* it is not a slave port node, continue */
-@@ -1821,15 +1820,15 @@ static int am65_cpsw_nuss_init_slave_por
- return ret;
+@@ -1796,15 +1795,15 @@ static int am65_cpsw_nuss_init_slave_por
+ goto of_node_put;
}
- mac_addr = of_get_mac_address(port_np);
memmove(skb->data - ETH_HLEN,
--- a/net/dsa/tag_ksz.c
+++ b/net/dsa/tag_ksz.c
-@@ -24,7 +24,7 @@ static struct sk_buff *ksz_common_rcv(st
-
- pskb_trim_rcsum(skb, skb->len - len);
+@@ -25,7 +25,7 @@ static struct sk_buff *ksz_common_rcv(st
+ if (pskb_trim_rcsum(skb, skb->len - len))
+ return NULL;
- skb->offload_fwd_mark = true;
+ dsa_default_offload_fwd_mark(skb);
set_dev_node(bus->bridge, pcibus_to_node(bus));
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
-@@ -547,6 +547,7 @@ struct pci_host_bridge {
+@@ -548,6 +548,7 @@ struct pci_host_bridge {
unsigned int native_dpc:1; /* OS may use PCIe DPC */
unsigned int preserve_config:1; /* Preserve FW resource setup */
unsigned int size_windows:1; /* Enable root bus sizing */
--- a/drivers/net/usb/rndis_host.c
+++ b/drivers/net/usb/rndis_host.c
-@@ -485,10 +485,14 @@ EXPORT_SYMBOL_GPL(rndis_unbind);
+@@ -486,10 +486,14 @@ EXPORT_SYMBOL_GPL(rndis_unbind);
*/
int rndis_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
{
/* peripheral may have batched packets to us... */
while (likely(skb->len)) {
struct rndis_data_hdr *hdr = (void *)skb->data;
-@@ -523,10 +527,17 @@ int rndis_rx_fixup(struct usbnet *dev, s
+@@ -524,10 +528,17 @@ int rndis_rx_fixup(struct usbnet *dev, s
break;
skb_pull(skb, msg_len - sizeof *hdr);
skb_trim(skb2, data_len);
return 1;
}
EXPORT_SYMBOL_GPL(rndis_rx_fixup);
-@@ -600,6 +611,17 @@ static const struct driver_info rndis_po
+@@ -601,6 +612,17 @@ static const struct driver_info rndis_po
.tx_fixup = rndis_tx_fixup,
};
/*-------------------------------------------------------------------------*/
static const struct usb_device_id products [] = {
-@@ -609,6 +631,16 @@ static const struct usb_device_id produc
+@@ -610,6 +632,16 @@ static const struct usb_device_id produc
USB_CLASS_COMM, 2 /* ACM */, 0x0ff),
.driver_info = (unsigned long) &rndis_poll_status_info,
}, {
--- a/drivers/net/usb/rndis_host.c
+++ b/drivers/net/usb/rndis_host.c
-@@ -418,10 +418,7 @@ generic_rndis_bind(struct usbnet *dev, s
+@@ -419,10 +419,7 @@ generic_rndis_bind(struct usbnet *dev, s
goto halt_fail_and_release;
}
/* set a nonzero filter to enable data transfers */
memset(u.set, 0, sizeof *u.set);
-@@ -463,6 +460,16 @@ static int rndis_bind(struct usbnet *dev
+@@ -464,6 +461,16 @@ static int rndis_bind(struct usbnet *dev
return generic_rndis_bind(dev, intf, FLAG_RNDIS_PHYM_NOT_WIRELESS);
}
void rndis_unbind(struct usbnet *dev, struct usb_interface *intf)
{
struct rndis_halt *halt;
-@@ -615,7 +622,7 @@ static const struct driver_info zte_rndi
+@@ -616,7 +623,7 @@ static const struct driver_info zte_rndi
.description = "ZTE RNDIS device",
.flags = FLAG_ETHER | FLAG_POINTTOPOINT | FLAG_FRAMING_RN | FLAG_NO_SETINT,
.data = RNDIS_DRIVER_DATA_DST_MAC_FIXUP,
} \
\
/* __*init sections */ \
-@@ -1019,6 +1029,8 @@
+@@ -1024,6 +1034,8 @@
#define COMMON_DISCARDS \
SANITIZER_DISCARDS \
#include "mtdcore.h"
-@@ -928,6 +929,8 @@ int mtd_device_parse_register(struct mtd
+@@ -930,6 +931,8 @@ int mtd_device_parse_register(struct mtd
register_reboot_notifier(&mtd->reboot_notifier);
}
#ifdef CONFIG_SGI_PARTITION
sgi_partition,
#endif
-@@ -694,6 +701,14 @@ static bool blk_add_partition(struct gen
+@@ -701,6 +708,14 @@ static bool blk_add_partition(struct gen
(state->parts[p].flags & ADDPART_FLAG_RAID))
md_autodetect_dev(part_to_dev(part)->devt);
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
-@@ -756,7 +756,8 @@ int add_mtd_device(struct mtd_info *mtd)
+@@ -758,7 +758,8 @@ int add_mtd_device(struct mtd_info *mtd)
mutex_unlock(&mtd_table_mutex);
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
-@@ -758,12 +758,18 @@ int add_mtd_device(struct mtd_info *mtd)
+@@ -760,12 +760,18 @@ int add_mtd_device(struct mtd_info *mtd)
if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL) ||
(IS_ENABLED(CONFIG_MTD_ROOTFS_ROOT_DEV) && !strcmp(mtd->name, "rootfs") && ROOT_DEV == 0)) {
__u8 invert;
--- a/net/netfilter/xt_connmark.c
+++ b/net/netfilter/xt_connmark.c
-@@ -24,12 +24,13 @@ MODULE_ALIAS("ipt_connmark");
+@@ -24,13 +24,13 @@ MODULE_ALIAS("ipt_connmark");
MODULE_ALIAS("ip6t_connmark");
static unsigned int
u_int32_t new_targetmark;
struct nf_conn *ct;
u_int32_t newmark;
+- u_int32_t oldmark;
+ u_int8_t dscp;
ct = nf_ct_get(skb, &ctinfo);
if (ct == NULL)
-@@ -37,12 +38,24 @@ connmark_tg_shift(struct sk_buff *skb, c
+@@ -38,13 +38,24 @@ connmark_tg_shift(struct sk_buff *skb, c
switch (info->mode) {
case XT_CONNMARK_SET:
-- newmark = (ct->mark & ~info->ctmask) ^ info->ctmark;
+- oldmark = READ_ONCE(ct->mark);
+- newmark = (oldmark & ~info->ctmask) ^ info->ctmark;
- if (info->shift_dir == D_SHIFT_RIGHT)
- newmark >>= info->shift_bits;
- else
- newmark <<= info->shift_bits;
-+ newmark = ct->mark;
++ newmark = READ_ONCE(ct->mark);
+ if (info->func & XT_CONNMARK_VALUE) {
+ newmark = (newmark & ~info->ctmask) ^ info->ctmark;
+ if (info->shift_dir == D_SHIFT_RIGHT)
+ newmark = (newmark & ~info->ctmark) |
+ (info->ctmask | (dscp << info->shift_bits));
+ }
- if (ct->mark != newmark) {
- ct->mark = newmark;
+ if (READ_ONCE(ct->mark) != newmark) {
+ WRITE_ONCE(ct->mark, newmark);
nf_conntrack_event_cache(IPCT_MARK, ct);
-@@ -81,20 +94,36 @@ static unsigned int
+@@ -83,20 +94,36 @@ static unsigned int
connmark_tg(struct sk_buff *skb, const struct xt_action_param *par)
{
const struct xt_connmark_tginfo1 *info = par->targinfo;
return connmark_tg_shift(skb, info);
}
-@@ -165,6 +194,16 @@ static struct xt_target connmark_tg_reg[
+@@ -167,6 +194,16 @@ static struct xt_target connmark_tg_reg[
.targetsize = sizeof(struct xt_connmark_tginfo2),
.destroy = connmark_tg_destroy,
.me = THIS_MODULE,
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -1639,6 +1639,7 @@ enum netdev_priv_flags {
+@@ -1648,6 +1648,7 @@ enum netdev_priv_flags {
IFF_FAILOVER_SLAVE = 1<<28,
IFF_L3MDEV_RX_HANDLER = 1<<29,
IFF_LIVE_RENAME_OK = 1<<30,
};
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
-@@ -1671,6 +1672,7 @@ enum netdev_priv_flags {
+@@ -1680,6 +1681,7 @@ enum netdev_priv_flags {
#define IFF_FAILOVER_SLAVE IFF_FAILOVER_SLAVE
#define IFF_L3MDEV_RX_HANDLER IFF_L3MDEV_RX_HANDLER
#define IFF_LIVE_RENAME_OK IFF_LIVE_RENAME_OK
/* Specifies the type of the struct net_device::ml_priv pointer */
enum netdev_ml_priv_type {
-@@ -2011,6 +2013,11 @@ struct net_device {
+@@ -2020,6 +2022,11 @@ struct net_device {
const struct tlsdev_ops *tlsdev_ops;
#endif
const struct header_ops *header_ops;
unsigned int flags;
-@@ -2101,6 +2108,10 @@ struct net_device {
+@@ -2110,6 +2117,10 @@ struct net_device {
struct mpls_dev __rcu *mpls_ptr;
#endif
*/
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -2720,6 +2720,10 @@ static inline int pskb_trim(struct sk_bu
+@@ -2725,6 +2725,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
-@@ -2851,16 +2855,6 @@ static inline struct sk_buff *dev_alloc_
+@@ -2856,16 +2860,6 @@ static inline struct sk_buff *dev_alloc_
}
help
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -3654,6 +3654,11 @@ static int xmit_one(struct sk_buff *skb,
+@@ -3656,6 +3656,11 @@ static int xmit_one(struct sk_buff *skb,
if (dev_nit_active(dev))
dev_queue_xmit_nit(skb, dev);
/**************************************************
* MII
**************************************************/
-@@ -1542,6 +1554,14 @@ int bgmac_enet_probe(struct bgmac *bgmac
- /* Omit FCS from max MTU size */
- net_dev->max_mtu = BGMAC_RX_MAX_FRAME_SIZE - ETH_FCS_LEN;
+@@ -1546,6 +1558,14 @@ int bgmac_enet_probe(struct bgmac *bgmac
+
+ bgmac->in_init = false;
+ if ((bgmac->feature_flags & BGMAC_FEAT_SRAB) && !bgmac_b53_pdata.regs) {
+ bgmac_b53_pdata.regs = ioremap(0x18007000, 0x1000);
err = register_netdev(bgmac->net_dev);
if (err) {
dev_err(bgmac->dev, "Cannot register net device\n");
-@@ -1564,6 +1584,10 @@ EXPORT_SYMBOL_GPL(bgmac_enet_probe);
+@@ -1568,6 +1588,10 @@ EXPORT_SYMBOL_GPL(bgmac_enet_probe);
void bgmac_enet_remove(struct bgmac *bgmac)
{
struct bgmac_slot_info {
union {
-@@ -533,6 +534,9 @@ struct bgmac {
+@@ -535,6 +536,9 @@ struct bgmac {
void (*cmn_maskset32)(struct bgmac *bgmac, u16 offset, u32 mask,
u32 set);
int (*phy_connect)(struct bgmac *bgmac);
#define QUECTEL_VENDOR_ID 0x2c7c
/* These Quectel products use Quectel's vendor ID */
-@@ -1155,6 +1157,11 @@ static const struct usb_device_id option
+@@ -1164,6 +1166,11 @@ static const struct usb_device_id option
.driver_info = ZLP },
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
.driver_info = RSVD(4) },
u64 res;
--- a/net/ipv4/Kconfig
+++ b/net/ipv4/Kconfig
-@@ -414,6 +414,7 @@ config INET_TUNNEL
+@@ -424,6 +424,7 @@ config INET_TUNNEL
config INET_DIAG
tristate "INET: socket monitoring interface"
--- a/fs/locks.c
+++ b/fs/locks.c
-@@ -2993,6 +2993,8 @@ static const struct seq_operations locks
+@@ -3016,6 +3016,8 @@ static const struct seq_operations locks
static int __init proc_locks_init(void)
{
--- a/net/core/sock.c
+++ b/net/core/sock.c
-@@ -3701,6 +3701,8 @@ static __net_initdata struct pernet_oper
+@@ -3710,6 +3710,8 @@ static __net_initdata struct pernet_oper
static int __init proto_init(void)
{
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -2986,11 +2986,13 @@ static const struct seq_operations fib_r
+@@ -2988,11 +2988,13 @@ static const struct seq_operations fib_r
int __net_init fib_proc_init(struct net *net)
{
fib_triestat_seq_show, NULL))
goto out2;
-@@ -3001,17 +3003,21 @@ int __net_init fib_proc_init(struct net
+@@ -3003,17 +3005,21 @@ int __net_init fib_proc_init(struct net
return 0;
out3:
+++ /dev/null
---- a/include/uapi/linux/swab.h
-+++ b/include/uapi/linux/swab.h
-@@ -3,7 +3,7 @@
- #define _UAPI_LINUX_SWAB_H
-
- #include <linux/types.h>
--#include <linux/compiler.h>
-+#include <linux/stddef.h>
- #include <asm/bitsperlong.h>
- #include <asm/swab.h>
-
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
-@@ -7104,7 +7104,7 @@ static void __ref alloc_node_mem_map(str
+@@ -7107,7 +7107,7 @@ static void __ref alloc_node_mem_map(str
if (pgdat == NODE_DATA(0)) {
mem_map = NODE_DATA(0)->node_mem_map;
if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
--- a/drivers/spi/spidev.c
+++ b/drivers/spi/spidev.c
-@@ -682,6 +682,7 @@ static const struct of_device_id spidev_
+@@ -691,6 +691,7 @@ static const struct of_device_id spidev_
{ .compatible = "lwn,bk4" },
{ .compatible = "dh,dhcom-board" },
{ .compatible = "menlo,m53cpld" },
return !!nor->params->erase_map.uniform_erase_type;
}
-@@ -2569,6 +2571,7 @@ static int spi_nor_select_erase(struct s
+@@ -2580,6 +2582,7 @@ static int spi_nor_select_erase(struct s
{
struct spi_nor_erase_map *map = &nor->params->erase_map;
const struct spi_nor_erase_type *erase = NULL;
struct mtd_info *mtd = &nor->mtd;
u32 wanted_size = nor->info->sector_size;
int i;
-@@ -2601,8 +2604,9 @@ static int spi_nor_select_erase(struct s
+@@ -2612,8 +2615,9 @@ static int spi_nor_select_erase(struct s
*/
for (i = SNOR_ERASE_TYPE_MAX - 1; i >= 0; i--) {
if (map->erase_type[i].size) {
}
}
-@@ -2610,6 +2614,9 @@ static int spi_nor_select_erase(struct s
+@@ -2621,6 +2625,9 @@ static int spi_nor_select_erase(struct s
return -EINVAL;
mtd->erasesize = erase->size;
endif # MTD_SPI_NOR
--- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c
-@@ -2802,6 +2802,21 @@ static void spi_nor_info_init_params(str
+@@ -2813,6 +2813,21 @@ static void spi_nor_info_init_params(str
*/
erase_mask = 0;
i = 0;
if (info->flags & SECT_4K_PMC) {
erase_mask |= BIT(i);
spi_nor_set_erase_type(&map->erase_type[i], 4096u,
-@@ -2813,6 +2828,7 @@ static void spi_nor_info_init_params(str
+@@ -2824,6 +2839,7 @@ static void spi_nor_info_init_params(str
SPINOR_OP_BE_4K);
i++;
}
+};
--- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c
-@@ -2037,6 +2037,7 @@ static const struct spi_nor_manufacturer
+@@ -2039,6 +2039,7 @@ static const struct spi_nor_manufacturer
&spi_nor_winbond,
&spi_nor_xilinx,
&spi_nor_xmc,
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
-@@ -1185,6 +1185,73 @@ static struct mtd_info * __init open_mtd
+@@ -1192,6 +1192,73 @@ static struct mtd_info * __init open_mtd
return mtd;
}
static int __init ubi_init(void)
{
int err, i, k;
-@@ -1268,6 +1335,12 @@ static int __init ubi_init(void)
+@@ -1275,6 +1342,12 @@ static int __init ubi_init(void)
}
}
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
-@@ -1151,6 +1151,44 @@ out_unlock:
+@@ -1153,6 +1153,44 @@ out_unlock:
}
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
for (i = sizeof(struct ipt_entry);
i < e->target_offset;
i += m->u.match_size) {
-@@ -1223,12 +1260,15 @@ compat_copy_entry_to_user(struct ipt_ent
+@@ -1222,12 +1259,15 @@ compat_copy_entry_to_user(struct ipt_ent
compat_uint_t origsize;
const struct xt_entry_match *ematch;
int ret = 0;
static bool enable_hooks __read_mostly;
MODULE_PARM_DESC(enable_hooks, "Always enable conntrack hooks");
module_param(enable_hooks, bool, 0000);
-@@ -658,6 +661,7 @@ enum nf_ct_sysctl_index {
+@@ -657,6 +660,7 @@ enum nf_ct_sysctl_index {
NF_SYSCTL_CT_PROTO_TIMEOUT_GRE_STREAM,
#endif
__NF_SYSCTL_CT_LAST_SYSCTL,
};
-@@ -1000,6 +1004,13 @@ static struct ctl_table nf_ct_sysctl_tab
+@@ -993,6 +997,13 @@ static struct ctl_table nf_ct_sysctl_tab
.proc_handler = proc_dointvec_jiffies,
},
#endif
goto out;
if (!net_eq(dev_net(dev), sock_net(sk)))
-@@ -2079,12 +2081,12 @@ static int packet_rcv(struct sk_buff *sk
+@@ -2089,12 +2091,12 @@ static int packet_rcv(struct sk_buff *sk
unsigned int snaplen, res;
bool is_drop_n_account = false;
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -2210,12 +2212,12 @@ static int tpacket_rcv(struct sk_buff *s
+@@ -2220,12 +2222,12 @@ static int tpacket_rcv(struct sk_buff *s
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -3330,6 +3332,7 @@ static int packet_create(struct net *net
+@@ -3339,6 +3341,7 @@ static int packet_create(struct net *net
mutex_init(&po->pg_vec_lock);
po->rollover = NULL;
po->prot_hook.func = packet_rcv;
if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt;
-@@ -3974,6 +3977,16 @@ packet_setsockopt(struct socket *sock, i
+@@ -3982,6 +3985,16 @@ packet_setsockopt(struct socket *sock, i
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
return 0;
}
default:
return -ENOPROTOOPT;
}
-@@ -4030,6 +4043,13 @@ static int packet_getsockopt(struct sock
+@@ -4038,6 +4051,13 @@ static int packet_getsockopt(struct sock
case PACKET_VNET_HDR:
val = po->has_vnet_hdr;
break;
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -2686,7 +2686,7 @@ static inline int pskb_network_may_pull(
+@@ -2691,7 +2691,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/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
-@@ -142,6 +142,10 @@ const struct fib_prop fib_props[RTN_MAX
+@@ -143,6 +143,10 @@ const struct fib_prop fib_props[RTN_MAX
.error = -EINVAL,
.scope = RT_SCOPE_NOWHERE,
},
static void rt_fibinfo_free(struct rtable __rcu **rtp)
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -2734,6 +2734,7 @@ static const char *const rtn_type_names[
+@@ -2736,6 +2736,7 @@ static const char *const rtn_type_names[
[RTN_THROW] = "THROW",
[RTN_NAT] = "NAT",
[RTN_XRESOLVE] = "XRESOLVE",
cfg->fc_flags |= RTF_REJECT;
if (rtm->rtm_type == RTN_LOCAL)
-@@ -6135,6 +6166,8 @@ static int ip6_route_dev_notify(struct n
+@@ -6136,6 +6167,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
-@@ -6146,6 +6179,7 @@ static int ip6_route_dev_notify(struct n
+@@ -6147,6 +6180,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
}
-@@ -6337,6 +6371,8 @@ static int __net_init ip6_route_net_init
+@@ -6338,6 +6372,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);
-@@ -6347,11 +6383,21 @@ static int __net_init ip6_route_net_init
+@@ -6348,11 +6384,21 @@ static int __net_init ip6_route_net_init
ip6_template_metrics, true);
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->rt6i_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);
-@@ -6378,6 +6424,8 @@ out:
+@@ -6379,6 +6425,8 @@ out:
return ret;
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
out_ip6_prohibit_entry:
kfree(net->ipv6.ip6_prohibit_entry);
out_ip6_null_entry:
-@@ -6397,6 +6445,7 @@ static void __net_exit ip6_route_net_exi
+@@ -6398,6 +6446,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);
-@@ -6480,6 +6529,9 @@ void __init ip6_route_init_special_entri
+@@ -6481,6 +6530,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);
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -2050,6 +2050,8 @@ struct net_device {
+@@ -2059,6 +2059,8 @@ struct net_device {
struct netdev_hw_addr_list mc;
struct netdev_hw_addr_list dev_addrs;
#endif
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -860,6 +860,7 @@ struct sk_buff {
+@@ -861,6 +861,7 @@ struct sk_buff {
__u8 decrypted:1;
#endif
__u8 scm_io_uring:1;
__u16 tc_index; /* traffic control index */
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -6067,6 +6067,9 @@ static enum gro_result dev_gro_receive(s
+@@ -6069,6 +6069,9 @@ static enum gro_result dev_gro_receive(s
int same_flow;
int grow;
if (netif_elide_gro(skb->dev))
goto normal;
-@@ -8044,6 +8047,48 @@ static void __netdev_adjacent_dev_unlink
+@@ -8047,6 +8050,48 @@ static void __netdev_adjacent_dev_unlink
&upper_dev->adj_list.lower);
}
static int __netdev_upper_dev_link(struct net_device *dev,
struct net_device *upper_dev, bool master,
void *upper_priv, void *upper_info,
-@@ -8095,6 +8140,7 @@ static int __netdev_upper_dev_link(struc
+@@ -8098,6 +8143,7 @@ static int __netdev_upper_dev_link(struc
if (ret)
return ret;
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info);
ret = notifier_to_errno(ret);
-@@ -8191,6 +8237,7 @@ static void __netdev_upper_dev_unlink(st
+@@ -8194,6 +8240,7 @@ static void __netdev_upper_dev_unlink(st
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info);
-@@ -8977,6 +9024,7 @@ int dev_set_mac_address(struct net_devic
+@@ -8980,6 +9027,7 @@ int dev_set_mac_address(struct net_devic
if (err)
return err;
dev->addr_assign_type = NET_ADDR_SET;
#include <linux/mfd/syscon.h>
#include <linux/regmap.h>
#include <linux/clk.h>
-@@ -832,7 +833,7 @@ static int mtk_init_fq_dma(struct mtk_et
+@@ -833,7 +834,7 @@ static int mtk_init_fq_dma(struct mtk_et
dma_addr_t dma_addr;
int i;
cnt * sizeof(struct mtk_tx_dma),
ð->phy_scratch_ring,
GFP_ATOMIC);
-@@ -844,10 +845,10 @@ static int mtk_init_fq_dma(struct mtk_et
+@@ -845,10 +846,10 @@ static int mtk_init_fq_dma(struct mtk_et
if (unlikely(!eth->scratch_head))
return -ENOMEM;
return -ENOMEM;
phy_ring_tail = eth->phy_scratch_ring +
-@@ -901,26 +902,26 @@ static void mtk_tx_unmap(struct mtk_eth
+@@ -902,26 +903,26 @@ static void mtk_tx_unmap(struct mtk_eth
{
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
if (tx_buf->flags & MTK_TX_FLAGS_SINGLE0) {
dma_unmap_addr(tx_buf, dma_addr1),
dma_unmap_len(tx_buf, dma_len1),
DMA_TO_DEVICE);
-@@ -998,9 +999,9 @@ static int mtk_tx_map(struct sk_buff *sk
+@@ -999,9 +1000,9 @@ static int mtk_tx_map(struct sk_buff *sk
if (skb_vlan_tag_present(skb))
txd4 |= TX_DMA_INS_VLAN | skb_vlan_tag_get(skb);
return -ENOMEM;
WRITE_ONCE(itxd->txd1, mapped_addr);
-@@ -1039,10 +1040,10 @@ static int mtk_tx_map(struct sk_buff *sk
+@@ -1040,10 +1041,10 @@ static int mtk_tx_map(struct sk_buff *sk
frag_map_size = min(frag_size, MTK_TX_DMA_BUF_LEN);
goto err_dma;
if (i == nr_frags - 1 &&
-@@ -1323,18 +1324,18 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1324,18 +1325,18 @@ static int mtk_poll_rx(struct napi_struc
netdev->stats.rx_dropped++;
goto release_desc;
}
ring->buf_size, DMA_FROM_DEVICE);
/* receive data */
-@@ -1607,7 +1608,7 @@ static int mtk_tx_alloc(struct mtk_eth *
+@@ -1608,7 +1609,7 @@ static int mtk_tx_alloc(struct mtk_eth *
if (!ring->buf)
goto no_tx_mem;
&ring->phys, GFP_ATOMIC);
if (!ring->dma)
goto no_tx_mem;
-@@ -1625,7 +1626,7 @@ static int mtk_tx_alloc(struct mtk_eth *
+@@ -1626,7 +1627,7 @@ static int mtk_tx_alloc(struct mtk_eth *
* descriptors in ring->dma_pdma.
*/
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
&ring->phys_pdma,
GFP_ATOMIC);
if (!ring->dma_pdma)
-@@ -1684,7 +1685,7 @@ static void mtk_tx_clean(struct mtk_eth
+@@ -1685,7 +1686,7 @@ static void mtk_tx_clean(struct mtk_eth
}
if (ring->dma) {
MTK_DMA_SIZE * sizeof(*ring->dma),
ring->dma,
ring->phys);
-@@ -1692,7 +1693,7 @@ static void mtk_tx_clean(struct mtk_eth
+@@ -1693,7 +1694,7 @@ static void mtk_tx_clean(struct mtk_eth
}
if (ring->dma_pdma) {
MTK_DMA_SIZE * sizeof(*ring->dma_pdma),
ring->dma_pdma,
ring->phys_pdma);
-@@ -1740,18 +1741,18 @@ static int mtk_rx_alloc(struct mtk_eth *
+@@ -1741,18 +1742,18 @@ static int mtk_rx_alloc(struct mtk_eth *
return -ENOMEM;
}
return -ENOMEM;
ring->dma[i].rxd1 = (unsigned int)dma_addr;
-@@ -1787,7 +1788,7 @@ static void mtk_rx_clean(struct mtk_eth
+@@ -1788,7 +1789,7 @@ static void mtk_rx_clean(struct mtk_eth
continue;
if (!ring->dma[i].rxd1)
continue;
ring->dma[i].rxd1,
ring->buf_size,
DMA_FROM_DEVICE);
-@@ -1798,7 +1799,7 @@ static void mtk_rx_clean(struct mtk_eth
+@@ -1799,7 +1800,7 @@ static void mtk_rx_clean(struct mtk_eth
}
if (ring->dma) {
ring->dma_size * sizeof(*ring->dma),
ring->dma,
ring->phys);
-@@ -2154,7 +2155,7 @@ static void mtk_dma_free(struct mtk_eth
+@@ -2155,7 +2156,7 @@ static void mtk_dma_free(struct mtk_eth
if (eth->netdev[i])
netdev_reset_queue(eth->netdev[i]);
if (eth->scratch_ring) {
MTK_DMA_SIZE * sizeof(struct mtk_tx_dma),
eth->scratch_ring,
eth->phy_scratch_ring);
-@@ -2502,6 +2503,8 @@ static void mtk_dim_tx(struct work_struc
+@@ -2507,6 +2508,8 @@ static void mtk_dim_tx(struct work_struc
static int mtk_hw_init(struct mtk_eth *eth)
{
int i, val, ret;
if (test_and_set_bit(MTK_HW_INIT, ð->state))
-@@ -2514,6 +2517,10 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -2519,6 +2522,10 @@ static int mtk_hw_init(struct mtk_eth *e
if (ret)
goto err_disable_pm;
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
ret = device_reset(eth->dev);
if (ret) {
-@@ -3063,6 +3070,35 @@ free_netdev:
+@@ -3068,6 +3075,35 @@ free_netdev:
return err;
}
static int mtk_probe(struct platform_device *pdev)
{
struct device_node *mac_np;
-@@ -3076,6 +3112,7 @@ static int mtk_probe(struct platform_dev
+@@ -3081,6 +3117,7 @@ static int mtk_probe(struct platform_dev
eth->soc = of_device_get_match_data(&pdev->dev);
eth->dev = &pdev->dev;
eth->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(eth->base))
return PTR_ERR(eth->base);
-@@ -3124,6 +3161,16 @@ static int mtk_probe(struct platform_dev
+@@ -3129,6 +3166,16 @@ static int mtk_probe(struct platform_dev
}
}
GFP_KERNEL);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -456,6 +456,12 @@
+@@ -457,6 +457,12 @@
#define RSTCTRL_FE BIT(6)
#define RSTCTRL_PPE BIT(31)
/* SGMII subsystem config registers */
/* Register to auto-negotiation restart */
#define SGMSYS_PCS_CONTROL_1 0x0
-@@ -873,6 +879,7 @@ struct mtk_sgmii {
+@@ -874,6 +880,7 @@ struct mtk_sgmii {
/* struct mtk_eth - This is the main datasructure for holding the state
* of the driver
* @dev: The device pointer
* @base: The mapped register i/o base
* @page_lock: Make sure that register operations are atomic
* @tx_irq__lock: Make sure that IRQ register operations are atomic
-@@ -916,6 +923,7 @@ struct mtk_sgmii {
+@@ -917,6 +924,7 @@ struct mtk_sgmii {
struct mtk_eth {
struct device *dev;
void __iomem *base;
spinlock_t page_lock;
spinlock_t tx_irq_lock;
-@@ -1014,6 +1022,7 @@ int mtk_gmac_rgmii_path_setup(struct mtk
+@@ -1015,6 +1023,7 @@ int mtk_gmac_rgmii_path_setup(struct mtk
int mtk_eth_offload_init(struct mtk_eth *eth);
int mtk_eth_setup_tc(struct net_device *dev, enum tc_setup_type type,
void *type_data);
interface-type = "ace";
reg = <0x5000 0x1000>;
};
-@@ -936,6 +936,8 @@
+@@ -937,6 +937,8 @@
power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>;
mediatek,ethsys = <ðsys>;
mediatek,sgmiisys = <&sgmiisys>;
static int mtk_msg_level = -1;
module_param_named(msg_level, mtk_msg_level, int, 0);
-@@ -3193,6 +3194,22 @@ static int mtk_probe(struct platform_dev
+@@ -3198,6 +3199,22 @@ static int mtk_probe(struct platform_dev
}
}
static inline void
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -847,6 +847,7 @@ enum net_device_path_type {
+@@ -856,6 +856,7 @@ enum net_device_path_type {
DEV_PATH_BRIDGE,
DEV_PATH_PPPOE,
DEV_PATH_DSA,
};
struct net_device_path {
-@@ -872,6 +873,12 @@ struct net_device_path {
+@@ -881,6 +882,12 @@ struct net_device_path {
int port;
u16 proto;
} dsa;
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-@@ -892,6 +892,11 @@
+@@ -893,6 +893,11 @@
};
};
ethsys: syscon@1b000000 {
compatible = "mediatek,mt7622-ethsys",
"syscon";
-@@ -910,6 +915,26 @@
+@@ -911,6 +916,26 @@
#dma-cells = <1>;
};
eth: ethernet@1b100000 {
compatible = "mediatek,mt7622-eth",
"mediatek,mt2701-eth",
-@@ -937,6 +962,9 @@
+@@ -938,6 +963,9 @@
mediatek,ethsys = <ðsys>;
mediatek,sgmiisys = <&sgmiisys>;
mediatek,cci-control = <&cci_control2>;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2325,7 +2325,7 @@ static int mtk_open(struct net_device *d
- if (err)
+@@ -2330,7 +2330,7 @@ static int mtk_open(struct net_device *d
return err;
+ }
- if (eth->soc->offload_version && mtk_ppe_start(ð->ppe) == 0)
+ if (eth->soc->offload_version && mtk_ppe_start(eth->ppe) == 0)
gdm_config = MTK_GDMA_TO_PPE;
mtk_gdm_config(eth, gdm_config);
-@@ -2399,7 +2399,7 @@ static int mtk_stop(struct net_device *d
+@@ -2404,7 +2404,7 @@ static int mtk_stop(struct net_device *d
mtk_dma_free(eth);
if (eth->soc->offload_version)
return 0;
}
-@@ -3285,10 +3285,11 @@ static int mtk_probe(struct platform_dev
+@@ -3290,10 +3290,11 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {
if (err)
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -976,7 +976,7 @@ struct mtk_eth {
+@@ -977,7 +977,7 @@ struct mtk_eth {
u32 rx_dma_l4_valid;
int ip_align;
#include <net/dsa.h>
#include "mtk_eth_soc.h"
-@@ -1285,7 +1286,7 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1286,7 +1287,7 @@ static int mtk_poll_rx(struct napi_struc
struct net_device *netdev;
unsigned int pktlen;
dma_addr_t dma_addr;
int mac;
ring = mtk_get_rx_ring(eth);
-@@ -1364,6 +1365,11 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1365,6 +1366,11 @@ static int mtk_poll_rx(struct napi_struc
skb_set_hash(skb, hash, PKT_HASH_TYPE_L4);
}
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
(trxd.rxd2 & RX_DMA_VTAG))
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
-@@ -3285,7 +3291,7 @@ static int mtk_probe(struct platform_dev
+@@ -3290,7 +3296,7 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
-@@ -1651,6 +1651,9 @@ void phy_detach(struct phy_device *phyde
+@@ -1652,6 +1652,9 @@ void phy_detach(struct phy_device *phyde
struct module *ndev_owner = NULL;
struct mii_bus *bus;
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -892,7 +892,7 @@ struct net_device_path_stack {
+@@ -901,7 +901,7 @@ struct net_device_path_stack {
struct net_device_path_ctx {
const struct net_device *dev;
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
-@@ -2873,6 +2873,7 @@ static int mv88e6xxx_setup(struct dsa_sw
+@@ -2881,6 +2881,7 @@ static int mv88e6xxx_setup(struct dsa_sw
chip->ds = ds;
ds->slave_mii_bus = mv88e6xxx_default_mdio_bus(chip);
--- a/include/net/switchdev.h
+++ b/include/net/switchdev.h
-@@ -224,6 +224,7 @@ struct switchdev_notifier_fdb_info {
+@@ -226,6 +226,7 @@ struct switchdev_notifier_fdb_info {
const unsigned char *addr;
u16 vid;
u8 added_by_user:1,
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
-@@ -5442,6 +5442,7 @@ static int mv88e6xxx_register_switch(str
+@@ -5450,6 +5450,7 @@ static int mv88e6xxx_register_switch(str
ds->ops = &mv88e6xxx_switch_ops;
ds->ageing_time_min = chip->info->age_time_coeff;
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
+++ /dev/null
-From 1e24c54da257ab93cff5826be8a793b014a5dc9c Mon Sep 17 00:00:00 2001
-From: Hauke Mehrtens <hauke@hauke-m.de>
-Date: Mon, 21 Nov 2022 01:22:01 +0100
-Subject: ca8210: Fix crash by zero initializing data
-
-The struct cas_control embeds multiple generic SPI structures and we
-have to make sure these structures are initialized to default values.
-This driver does not set all attributes. When using kmalloc before some
-attributes were not initialized and contained random data which caused
-random crashes at bootup.
-
-Fixes: ded845a781a5 ("ieee802154: Add CA8210 IEEE 802.15.4 device driver")
-Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
-Link: https://lore.kernel.org/r/20221121002201.1339636-1-hauke@hauke-m.de
-Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
----
- drivers/net/ieee802154/ca8210.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/ieee802154/ca8210.c
-+++ b/drivers/net/ieee802154/ca8210.c
-@@ -926,7 +926,7 @@ static int ca8210_spi_transfer(
-
- dev_dbg(&spi->dev, "%s called\n", __func__);
-
-- cas_ctl = kmalloc(sizeof(*cas_ctl), GFP_ATOMIC);
-+ cas_ctl = kzalloc(sizeof(*cas_ctl), GFP_ATOMIC);
- if (!cas_ctl)
- return -ENOMEM;
-
define Device/linksys
$(Device/NAND-128K)
DEVICE_VENDOR := Linksys
- DEVICE_PACKAGES := kmod-mwlwifi wpad-basic-wolfssl
+ DEVICE_PACKAGES := wpad-basic-wolfssl
IMAGES += factory.img
IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | \
append-ubi | pad-to $$$$(PAGESIZE)
DEVICE_ALT0_VENDOR := Linksys
DEVICE_ALT0_MODEL := Caiman
DEVICE_DTS := armada-385-linksys-caiman
- DEVICE_PACKAGES += mwlwifi-firmware-88w8864
+ DEVICE_PACKAGES +=
SUPPORTED_DEVICES += armada-385-linksys-caiman linksys,caiman
endef
TARGET_DEVICES += linksys_wrt1200ac
DEVICE_ALT1_VENDOR := Linksys
DEVICE_ALT1_MODEL := Shelby
DEVICE_DTS := armada-385-linksys-shelby
- DEVICE_PACKAGES += mwlwifi-firmware-88w8864
+ DEVICE_PACKAGES +=
SUPPORTED_DEVICES += armada-385-linksys-shelby linksys,shelby
endef
TARGET_DEVICES += linksys_wrt1900acs
DEVICE_ALT0_VENDOR := Linksys
DEVICE_ALT0_MODEL := Mamba
DEVICE_DTS := armada-xp-linksys-mamba
- DEVICE_PACKAGES += mwlwifi-firmware-88w8864
+ DEVICE_PACKAGES +=
KERNEL_SIZE := 4096k
SUPPORTED_DEVICES += armada-xp-linksys-mamba linksys,mamba
endef
DEVICE_ALT0_VENDOR := Linksys
DEVICE_ALT0_MODEL := Cobra
DEVICE_DTS := armada-385-linksys-cobra
- DEVICE_PACKAGES += mwlwifi-firmware-88w8864
+ DEVICE_PACKAGES +=
SUPPORTED_DEVICES += armada-385-linksys-cobra linksys,cobra
endef
TARGET_DEVICES += linksys_wrt1900ac-v2
DEVICE_ALT0_VENDOR := Linksys
DEVICE_ALT0_MODEL := Rango
DEVICE_DTS := armada-385-linksys-rango
- DEVICE_PACKAGES += kmod-btmrvl kmod-mwifiex-sdio mwlwifi-firmware-88w8964
+ DEVICE_PACKAGES += kmod-btmrvl kmod-mwifiex-sdio
SUPPORTED_DEVICES += armada-385-linksys-rango linksys,rango
endef
TARGET_DEVICES += linksys_wrt3200acm
DEVICE_ALT0_VENDOR := Linksys
DEVICE_ALT0_MODEL := Venom
DEVICE_DTS := armada-385-linksys-venom
- DEVICE_PACKAGES += kmod-btmrvl kmod-mwifiex-sdio mwlwifi-firmware-88w8964
+ DEVICE_PACKAGES += kmod-btmrvl kmod-mwifiex-sdio
KERNEL_SIZE := 6144k
KERNEL := kernel-bin | append-dtb
SUPPORTED_DEVICES += armada-385-linksys-venom linksys,venom
--- a/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
-@@ -680,7 +680,7 @@
+@@ -679,7 +679,7 @@
&usbdrd_dwc3_0 {
status = "okay";