-LINUX_VERSION-5.15 = .80
-LINUX_KERNEL_HASH-5.15.80 = 3b321a6466d2021f60ed8d4e33bba21db2f23efc2ddd2d9fb775393d9afdfd4d
+LINUX_VERSION-5.15 = .81
+LINUX_KERNEL_HASH-5.15.81 = 8f885cdebd754d6e63b920cf6c3e5713e91bbf5f52e9d99eb0054ef7e8f096ab
#include <linux/uaccess.h>
#include <linux/ipv6.h>
#include <linux/icmpv6.h>
-@@ -941,10 +942,10 @@ static void tcp_v6_send_response(const s
+@@ -943,10 +944,10 @@ static void tcp_v6_send_response(const s
topt = (__be32 *)(t1 + 1);
if (tsecr) {
QUIRK_FLAG_GENERIC_IMPLICIT_FB),
+ DEVICE_FLG(0x09da, 0x2695, /* A4Tech FHD 1080p webcam */
+ QUIRK_FLAG_DISABLE_AUTOSUSPEND | QUIRK_FLAG_GET_SAMPLE_RATE),
+ DEVICE_FLG(0x0525, 0xa4ad, /* Hamedal C20 usb camero */
+ QUIRK_FLAG_IFACE_SKIP_CLOSE),
- /* Vendor matches */
- VENDOR_FLG(0x045e, /* MS Lifecam */
/*
* Determine how aggressively the anon and file LRU lists should be
* scanned. The relative value of each set of LRU lists is determined
-@@ -3032,7 +3129,6 @@ static void shrink_node(pg_data_t *pgdat
+@@ -3030,7 +3127,6 @@ static void shrink_node(pg_data_t *pgdat
unsigned long nr_reclaimed, nr_scanned;
struct lruvec *target_lruvec;
bool reclaimable = false;
target_lruvec = mem_cgroup_lruvec(sc->target_mem_cgroup, pgdat);
-@@ -3048,93 +3144,7 @@ again:
+@@ -3046,93 +3142,7 @@ again:
nr_reclaimed = sc->nr_reclaimed;
nr_scanned = sc->nr_scanned;
#endif /* CONFIG_LRU_GEN */
static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc)
-@@ -4333,6 +5276,11 @@ static void age_active_anon(struct pglis
+@@ -4331,6 +5274,11 @@ static void age_active_anon(struct pglis
struct mem_cgroup *memcg;
struct lruvec *lruvec;
static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc)
@@ -4433,6 +4978,11 @@ static void shrink_lruvec(struct lruvec
+ bool proportional_reclaim;
struct blk_plug plug;
- bool scan_adjusted;
+ if (lru_gen_enabled()) {
+ lru_gen_shrink_lruvec(lruvec, sc);
get_scan_count(lruvec, sc, nr);
/* Record the original scan target for proportional adjustments later */
-@@ -4906,6 +5456,9 @@ static void snapshot_refaults(struct mem
+@@ -4904,6 +5454,9 @@ static void snapshot_refaults(struct mem
struct lruvec *target_lruvec;
unsigned long refaults;
MTK_DMA_SIZE * sizeof(struct mtk_tx_dma),
eth->scratch_ring,
eth->phy_scratch_ring);
-@@ -2511,6 +2512,8 @@ static void mtk_dim_tx(struct work_struc
+@@ -2513,6 +2514,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))
-@@ -2523,6 +2526,10 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -2525,6 +2528,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) {
-@@ -3076,6 +3083,35 @@ free_netdev:
+@@ -3078,6 +3085,35 @@ free_netdev:
return err;
}
static int mtk_probe(struct platform_device *pdev)
{
struct device_node *mac_np;
-@@ -3089,6 +3125,7 @@ static int mtk_probe(struct platform_dev
+@@ -3091,6 +3127,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);
-@@ -3137,6 +3174,16 @@ static int mtk_probe(struct platform_dev
+@@ -3139,6 +3176,16 @@ static int mtk_probe(struct platform_dev
}
}
static int mtk_msg_level = -1;
module_param_named(msg_level, mtk_msg_level, int, 0);
-@@ -3206,6 +3207,22 @@ static int mtk_probe(struct platform_dev
+@@ -3208,6 +3209,22 @@ static int mtk_probe(struct platform_dev
}
}
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2332,7 +2332,7 @@ static int mtk_open(struct net_device *d
- if (err)
+@@ -2334,7 +2334,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);
-@@ -2406,7 +2406,7 @@ static int mtk_stop(struct net_device *d
+@@ -2408,7 +2408,7 @@ static int mtk_stop(struct net_device *d
mtk_dma_free(eth);
if (eth->soc->offload_version)
return 0;
}
-@@ -3298,10 +3298,11 @@ static int mtk_probe(struct platform_dev
+@@ -3300,10 +3300,11 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
(trxd.rxd2 & RX_DMA_VTAG))
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
-@@ -3298,7 +3304,7 @@ static int mtk_probe(struct platform_dev
+@@ -3300,7 +3306,7 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {
mediatek,hifsys = <&hifsys>;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3185,7 +3185,7 @@ static int mtk_probe(struct platform_dev
+@@ -3187,7 +3187,7 @@ static int mtk_probe(struct platform_dev
struct regmap *cci;
cci = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
eth->scratch_ring = NULL;
eth->phy_scratch_ring = 0;
}
-@@ -3388,6 +3391,9 @@ static const struct mtk_soc_data mt2701_
+@@ -3390,6 +3393,9 @@ static const struct mtk_soc_data mt2701_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7623_CLKS_BITMAP,
.required_pctl = true,
};
static const struct mtk_soc_data mt7621_data = {
-@@ -3396,6 +3402,9 @@ static const struct mtk_soc_data mt7621_
+@@ -3398,6 +3404,9 @@ static const struct mtk_soc_data mt7621_
.required_clks = MT7621_CLKS_BITMAP,
.required_pctl = false,
.offload_version = 2,
};
static const struct mtk_soc_data mt7622_data = {
-@@ -3405,6 +3414,9 @@ static const struct mtk_soc_data mt7622_
+@@ -3407,6 +3416,9 @@ static const struct mtk_soc_data mt7622_
.required_clks = MT7622_CLKS_BITMAP,
.required_pctl = false,
.offload_version = 2,
};
static const struct mtk_soc_data mt7623_data = {
-@@ -3413,6 +3425,9 @@ static const struct mtk_soc_data mt7623_
+@@ -3415,6 +3427,9 @@ static const struct mtk_soc_data mt7623_
.required_clks = MT7623_CLKS_BITMAP,
.required_pctl = true,
.offload_version = 2,
};
static const struct mtk_soc_data mt7629_data = {
-@@ -3421,6 +3436,9 @@ static const struct mtk_soc_data mt7629_
+@@ -3423,6 +3438,9 @@ static const struct mtk_soc_data mt7629_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7629_CLKS_BITMAP,
.required_pctl = false,
};
static const struct mtk_soc_data rt5350_data = {
-@@ -3428,6 +3446,9 @@ static const struct mtk_soc_data rt5350_
+@@ -3430,6 +3448,9 @@ static const struct mtk_soc_data rt5350_
.hw_features = MTK_HW_FEATURES_MT7628,
.required_clks = MT7628_CLKS_BITMAP,
.required_pctl = false,
ring->dma = NULL;
}
}
-@@ -3403,6 +3402,7 @@ static const struct mtk_soc_data mt2701_
+@@ -3405,6 +3404,7 @@ static const struct mtk_soc_data mt2701_
.required_pctl = true,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
},
};
-@@ -3414,6 +3414,7 @@ static const struct mtk_soc_data mt7621_
+@@ -3416,6 +3416,7 @@ static const struct mtk_soc_data mt7621_
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
},
};
-@@ -3426,6 +3427,7 @@ static const struct mtk_soc_data mt7622_
+@@ -3428,6 +3429,7 @@ static const struct mtk_soc_data mt7622_
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
},
};
-@@ -3437,6 +3439,7 @@ static const struct mtk_soc_data mt7623_
+@@ -3439,6 +3441,7 @@ static const struct mtk_soc_data mt7623_
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
},
};
-@@ -3448,6 +3451,7 @@ static const struct mtk_soc_data mt7629_
+@@ -3450,6 +3453,7 @@ static const struct mtk_soc_data mt7629_
.required_pctl = false,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
},
};
-@@ -3458,6 +3462,7 @@ static const struct mtk_soc_data rt5350_
+@@ -3460,6 +3464,7 @@ static const struct mtk_soc_data rt5350_
.required_pctl = false,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
}
return 0;
-@@ -2437,8 +2497,8 @@ static int mtk_stop(struct net_device *d
+@@ -2439,8 +2499,8 @@ static int mtk_stop(struct net_device *d
cancel_work_sync(ð->tx_dim.work);
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
mtk_dma_free(eth);
-@@ -2492,6 +2552,7 @@ static void mtk_dim_rx(struct work_struc
+@@ -2494,6 +2554,7 @@ static void mtk_dim_rx(struct work_struc
{
struct dim *dim = container_of(work, struct dim, work);
struct mtk_eth *eth = container_of(dim, struct mtk_eth, rx_dim);
struct dim_cq_moder cur_profile;
u32 val, cur;
-@@ -2499,7 +2560,7 @@ static void mtk_dim_rx(struct work_struc
+@@ -2501,7 +2562,7 @@ static void mtk_dim_rx(struct work_struc
dim->profile_ix);
spin_lock_bh(ð->dim_lock);
val &= MTK_PDMA_DELAY_TX_MASK;
val |= MTK_PDMA_DELAY_RX_EN;
-@@ -2509,9 +2570,9 @@ static void mtk_dim_rx(struct work_struc
+@@ -2511,9 +2572,9 @@ static void mtk_dim_rx(struct work_struc
cur = min_t(u32, cur_profile.pkts, MTK_PDMA_DELAY_PINT_MASK);
val |= cur << MTK_PDMA_DELAY_RX_PINT_SHIFT;
spin_unlock_bh(ð->dim_lock);
-@@ -2522,6 +2583,7 @@ static void mtk_dim_tx(struct work_struc
+@@ -2524,6 +2585,7 @@ static void mtk_dim_tx(struct work_struc
{
struct dim *dim = container_of(work, struct dim, work);
struct mtk_eth *eth = container_of(dim, struct mtk_eth, tx_dim);
struct dim_cq_moder cur_profile;
u32 val, cur;
-@@ -2529,7 +2591,7 @@ static void mtk_dim_tx(struct work_struc
+@@ -2531,7 +2593,7 @@ static void mtk_dim_tx(struct work_struc
dim->profile_ix);
spin_lock_bh(ð->dim_lock);
val &= MTK_PDMA_DELAY_RX_MASK;
val |= MTK_PDMA_DELAY_TX_EN;
-@@ -2539,9 +2601,9 @@ static void mtk_dim_tx(struct work_struc
+@@ -2541,9 +2603,9 @@ static void mtk_dim_tx(struct work_struc
cur = min_t(u32, cur_profile.pkts, MTK_PDMA_DELAY_PINT_MASK);
val |= cur << MTK_PDMA_DELAY_TX_PINT_SHIFT;
spin_unlock_bh(ð->dim_lock);
-@@ -2552,6 +2614,7 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -2554,6 +2616,7 @@ static int mtk_hw_init(struct mtk_eth *e
{
u32 dma_mask = ETHSYS_DMA_AG_MAP_PDMA | ETHSYS_DMA_AG_MAP_QDMA |
ETHSYS_DMA_AG_MAP_PPE;
int i, val, ret;
if (test_and_set_bit(MTK_HW_INIT, ð->state))
-@@ -2626,10 +2689,10 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -2628,10 +2691,10 @@ static int mtk_hw_init(struct mtk_eth *e
mtk_rx_irq_disable(eth, ~0);
/* FE int grouping */
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
return 0;
-@@ -3168,14 +3231,6 @@ static int mtk_probe(struct platform_dev
+@@ -3170,14 +3233,6 @@ static int mtk_probe(struct platform_dev
if (IS_ERR(eth->base))
return PTR_ERR(eth->base);
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
eth->rx_dma_l4_valid = RX_DMA_L4_VALID_PDMA;
eth->ip_align = NET_IP_ALIGN;
-@@ -3409,6 +3464,7 @@ static int mtk_remove(struct platform_de
+@@ -3411,6 +3466,7 @@ static int mtk_remove(struct platform_de
}
static const struct mtk_soc_data mt2701_data = {
.caps = MT7623_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7623_CLKS_BITMAP,
-@@ -3420,6 +3476,7 @@ static const struct mtk_soc_data mt2701_
+@@ -3422,6 +3478,7 @@ static const struct mtk_soc_data mt2701_
};
static const struct mtk_soc_data mt7621_data = {
.caps = MT7621_CAPS,
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7621_CLKS_BITMAP,
-@@ -3432,6 +3489,7 @@ static const struct mtk_soc_data mt7621_
+@@ -3434,6 +3491,7 @@ static const struct mtk_soc_data mt7621_
};
static const struct mtk_soc_data mt7622_data = {
.ana_rgc3 = 0x2028,
.caps = MT7622_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
-@@ -3445,6 +3503,7 @@ static const struct mtk_soc_data mt7622_
+@@ -3447,6 +3505,7 @@ static const struct mtk_soc_data mt7622_
};
static const struct mtk_soc_data mt7623_data = {
.caps = MT7623_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7623_CLKS_BITMAP,
-@@ -3457,6 +3516,7 @@ static const struct mtk_soc_data mt7623_
+@@ -3459,6 +3518,7 @@ static const struct mtk_soc_data mt7623_
};
static const struct mtk_soc_data mt7629_data = {
.ana_rgc3 = 0x128,
.caps = MT7629_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
-@@ -3469,6 +3529,7 @@ static const struct mtk_soc_data mt7629_
+@@ -3471,6 +3531,7 @@ static const struct mtk_soc_data mt7629_
};
static const struct mtk_soc_data rt5350_data = {
mtk_w32(eth,
MTK_RX_DMA_EN | rx_2b_offset |
MTK_RX_BT_32DWORDS | MTK_MULTI_EN,
-@@ -2437,7 +2554,7 @@ static int mtk_open(struct net_device *d
+@@ -2439,7 +2556,7 @@ static int mtk_open(struct net_device *d
napi_enable(ð->tx_napi);
napi_enable(ð->rx_napi);
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
refcount_set(ð->dma_refcnt, 1);
}
else
-@@ -2489,7 +2606,7 @@ static int mtk_stop(struct net_device *d
+@@ -2491,7 +2608,7 @@ static int mtk_stop(struct net_device *d
mtk_gdm_config(eth, MTK_GDMA_DROP_ALL);
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
napi_disable(ð->tx_napi);
napi_disable(ð->rx_napi);
-@@ -2649,9 +2766,25 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -2651,9 +2768,25 @@ static int mtk_hw_init(struct mtk_eth *e
return 0;
}
if (eth->pctl) {
/* Set GE2 driving and slew rate */
-@@ -2690,11 +2823,47 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -2692,11 +2825,47 @@ static int mtk_hw_init(struct mtk_eth *e
/* FE int grouping */
mtk_w32(eth, MTK_TX_DONE_INT, reg_map->pdma.int_grp);
return 0;
err_disable_pm:
-@@ -3231,12 +3400,8 @@ static int mtk_probe(struct platform_dev
+@@ -3233,12 +3402,8 @@ static int mtk_probe(struct platform_dev
if (IS_ERR(eth->base))
return PTR_ERR(eth->base);
spin_lock_init(ð->page_lock);
spin_lock_init(ð->tx_irq_lock);
-@@ -3472,6 +3637,10 @@ static const struct mtk_soc_data mt2701_
+@@ -3474,6 +3639,10 @@ static const struct mtk_soc_data mt2701_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
},
};
-@@ -3485,6 +3654,10 @@ static const struct mtk_soc_data mt7621_
+@@ -3487,6 +3656,10 @@ static const struct mtk_soc_data mt7621_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
},
};
-@@ -3499,6 +3672,10 @@ static const struct mtk_soc_data mt7622_
+@@ -3501,6 +3674,10 @@ static const struct mtk_soc_data mt7622_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
},
};
-@@ -3512,6 +3689,10 @@ static const struct mtk_soc_data mt7623_
+@@ -3514,6 +3691,10 @@ static const struct mtk_soc_data mt7623_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
},
};
-@@ -3525,6 +3706,10 @@ static const struct mtk_soc_data mt7629_
+@@ -3527,6 +3708,10 @@ static const struct mtk_soc_data mt7629_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
},
};
-@@ -3537,6 +3722,10 @@ static const struct mtk_soc_data rt5350_
+@@ -3539,6 +3724,10 @@ static const struct mtk_soc_data rt5350_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
};
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
-@@ -3709,6 +3746,21 @@ static const struct mtk_soc_data mt7629_
+@@ -3711,6 +3748,21 @@ static const struct mtk_soc_data mt7629_
},
};
static const struct mtk_soc_data rt5350_data = {
.reg_map = &mt7628_reg_map,
.caps = MT7628_CAPS,
-@@ -3731,6 +3783,7 @@ const struct of_device_id of_mtk_match[]
+@@ -3733,6 +3785,7 @@ const struct of_device_id of_mtk_match[]
{ .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
{ .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
{ .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
skb->ip_summed = CHECKSUM_UNNECESSARY;
else
skb_checksum_none_assert(skb);
-@@ -3756,6 +3762,7 @@ static const struct mtk_soc_data mt7986_
+@@ -3758,6 +3764,7 @@ static const struct mtk_soc_data mt7986_
.txd_size = sizeof(struct mtk_tx_dma_v2),
.rxd_size = sizeof(struct mtk_rx_dma_v2),
.rx_irq_done_mask = MTK_RX_DONE_INT_V2,
static void macb_usx_pcs_link_up(struct phylink_pcs *pcs, unsigned int mode,
--- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
-@@ -968,7 +968,7 @@ static void enetc_pl_mac_validate(struct
+@@ -965,7 +965,7 @@ static void enetc_pl_mac_validate(struct
state->interface != PHY_INTERFACE_MODE_2500BASEX &&
state->interface != PHY_INTERFACE_MODE_USXGMII &&
!phy_interface_mode_is_rgmii(state->interface)) {
return;
}
-@@ -991,10 +991,8 @@ static void enetc_pl_mac_validate(struct
+@@ -988,10 +988,8 @@ static void enetc_pl_mac_validate(struct
phylink_set(mask, 2500baseX_Full);
}
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3352,6 +3352,26 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -3354,6 +3354,26 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = ð->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;
.mac_pcs_get_state = mtk_mac_pcs_get_state,
.mac_an_restart = mtk_mac_an_restart,
.mac_config = mtk_mac_config,
-@@ -3314,6 +3266,9 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -3316,6 +3268,9 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = ð->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3266,6 +3266,10 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -3268,6 +3268,10 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = ð->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3565,9 +3565,9 @@ static int mtk_probe(struct platform_dev
+@@ -3567,9 +3567,9 @@ static int mtk_probe(struct platform_dev
*/
init_dummy_netdev(ð->dummy_dev);
netif_napi_add(ð->dummy_dev, ð->tx_napi, mtk_napi_tx,
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3261,7 +3261,6 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -3263,7 +3263,6 @@ static int mtk_add_mac(struct mtk_eth *e
/* mac config is not set */
mac->interface = PHY_INTERFACE_MODE_NA;
mcr &= ~(MAC_MCR_SPEED_100 | MAC_MCR_SPEED_1000 |
MAC_MCR_FORCE_DPX | MAC_MCR_FORCE_TX_FC |
MAC_MCR_FORCE_RX_FC);
-@@ -3265,9 +3275,7 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -3267,9 +3277,7 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = ð->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;
struct page_pool *pp;
pp = mtk_create_page_pool(eth, &ring->xdp_q, ring_no,
-@@ -2707,6 +2782,48 @@ static int mtk_stop(struct net_device *d
+@@ -2709,6 +2784,48 @@ static int mtk_stop(struct net_device *d
return 0;
}
static void ethsys_reset(struct mtk_eth *eth, u32 reset_bits)
{
regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL,
-@@ -3002,6 +3119,12 @@ static int mtk_change_mtu(struct net_dev
+@@ -3004,6 +3121,12 @@ static int mtk_change_mtu(struct net_dev
struct mtk_eth *eth = mac->hw;
u32 mcr_cur, mcr_new;
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
mcr_new = mcr_cur & ~MAC_MCR_MAX_RX_MASK;
-@@ -3329,6 +3452,7 @@ static const struct net_device_ops mtk_n
+@@ -3331,6 +3454,7 @@ static const struct net_device_ops mtk_n
.ndo_poll_controller = mtk_poll_controller,
#endif
.ndo_setup_tc = mtk_eth_setup_tc,
}
mtk_tx_unmap(eth, tx_buf, true);
-@@ -3475,6 +3624,7 @@ static const struct net_device_ops mtk_n
+@@ -3477,6 +3626,7 @@ static const struct net_device_ops mtk_n
#endif
.ndo_setup_tc = mtk_eth_setup_tc,
.ndo_bpf = mtk_xdp,
MediaTek SoC family.
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3485,11 +3485,18 @@ static void mtk_get_strings(struct net_d
+@@ -3487,11 +3487,18 @@ static void mtk_get_strings(struct net_d
int i;
switch (stringset) {
break;
}
}
-@@ -3497,13 +3504,35 @@ static void mtk_get_strings(struct net_d
+@@ -3499,13 +3506,35 @@ static void mtk_get_strings(struct net_d
static int mtk_get_sset_count(struct net_device *dev, int sset)
{
switch (sset) {
static void mtk_get_ethtool_stats(struct net_device *dev,
struct ethtool_stats *stats, u64 *data)
{
-@@ -3531,6 +3560,8 @@ static void mtk_get_ethtool_stats(struct
+@@ -3533,6 +3562,8 @@ static void mtk_get_ethtool_stats(struct
for (i = 0; i < ARRAY_SIZE(mtk_ethtool_stats); i++)
*data_dst++ = *(data_src + mtk_ethtool_stats[i].offset);
u32 gdm_config = MTK_GDMA_TO_PDMA;
int err;
-@@ -2931,15 +2936,15 @@ static int mtk_open(struct net_device *d
- if (err)
+@@ -2933,15 +2938,15 @@ static int mtk_open(struct net_device *d
return err;
+ }
- if (eth->soc->offload_version && mtk_ppe_start(eth->ppe) == 0)
- gdm_config = MTK_GDMA_TO_PPE;
refcount_set(ð->dma_refcnt, 1);
}
else
-@@ -4045,7 +4050,9 @@ static int mtk_probe(struct platform_dev
+@@ -4047,7 +4052,9 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4148,6 +4148,7 @@ static const struct mtk_soc_data mt7621_
+@@ -4150,6 +4150,7 @@ static const struct mtk_soc_data mt7621_
.required_clks = MT7621_CLKS_BITMAP,
.required_pctl = false,
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4166,6 +4167,7 @@ static const struct mtk_soc_data mt7622_
+@@ -4168,6 +4169,7 @@ static const struct mtk_soc_data mt7622_
.required_clks = MT7622_CLKS_BITMAP,
.required_pctl = false,
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4183,6 +4185,7 @@ static const struct mtk_soc_data mt7623_
+@@ -4185,6 +4187,7 @@ static const struct mtk_soc_data mt7623_
.required_clks = MT7623_CLKS_BITMAP,
.required_pctl = true,
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4216,6 +4219,7 @@ static const struct mtk_soc_data mt7986_
+@@ -4218,6 +4221,7 @@ static const struct mtk_soc_data mt7986_
.caps = MT7986_CAPS,
.required_clks = MT7986_CLKS_BITMAP,
.required_pctl = false,
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
-@@ -2929,15 +2929,19 @@ static int mtk_open(struct net_device *d
+@@ -2929,7 +2929,8 @@ 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)) {
const struct mtk_soc_data *soc = eth->soc;
int err;
err = mtk_start_dma(eth);
- if (err)
+@@ -2938,8 +2939,11 @@ static int mtk_open(struct net_device *d
return err;
+ }
- if (soc->offload_version && mtk_ppe_start(eth->ppe) == 0)
- gdm_config = soc->reg_map->gdma_to_ppe0;
+ mtk_ppe_start(eth->ppe[i]);
+
+ gdm_config = soc->offload_version ? soc->reg_map->gdma_to_ppe0
-+ : MTK_GDMA_TO_PDMA;
++ : MTK_GDMA_TO_PDMA;
mtk_gdm_config(eth, gdm_config);
-@@ -2982,6 +2986,7 @@ static int mtk_stop(struct net_device *d
+@@ -2984,6 +2988,7 @@ static int mtk_stop(struct net_device *d
{
struct mtk_mac *mac = netdev_priv(dev);
struct mtk_eth *eth = mac->hw;
phylink_stop(mac->phylink);
-@@ -3009,8 +3014,8 @@ static int mtk_stop(struct net_device *d
+@@ -3011,8 +3016,8 @@ static int mtk_stop(struct net_device *d
mtk_dma_free(eth);
return 0;
}
-@@ -4050,12 +4055,19 @@ static int mtk_probe(struct platform_dev
+@@ -4052,12 +4057,19 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {
};
/* strings used by ethtool */
-@@ -3967,16 +3975,12 @@ static int mtk_probe(struct platform_dev
+@@ -3969,16 +3977,12 @@ static int mtk_probe(struct platform_dev
for (i = 0;; i++) {
struct device_node *np = of_parse_phandle(pdev->dev.of_node,
"mediatek,wed", i);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4165,6 +4165,7 @@ static const struct mtk_soc_data mt7621_
+@@ -4167,6 +4167,7 @@ static const struct mtk_soc_data mt7621_
.required_pctl = false,
.offload_version = 2,
.hash_offset = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4184,6 +4185,7 @@ static const struct mtk_soc_data mt7622_
+@@ -4186,6 +4187,7 @@ static const struct mtk_soc_data mt7622_
.required_pctl = false,
.offload_version = 2,
.hash_offset = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4202,6 +4204,7 @@ static const struct mtk_soc_data mt7623_
+@@ -4204,6 +4206,7 @@ static const struct mtk_soc_data mt7623_
.required_pctl = true,
.offload_version = 2,
.hash_offset = 2,
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3892,6 +3892,7 @@ void mtk_eth_set_dma_device(struct mtk_e
+@@ -3894,6 +3894,7 @@ void mtk_eth_set_dma_device(struct mtk_e
static int mtk_probe(struct platform_device *pdev)
{
struct device_node *mac_np;
struct mtk_eth *eth;
int err, i;
-@@ -3972,16 +3973,31 @@ static int mtk_probe(struct platform_dev
+@@ -3974,16 +3975,31 @@ static int mtk_probe(struct platform_dev
}
}
if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
mtk_ppe_check_skb(eth->ppe[0], skb, hash);
-@@ -4181,7 +4182,7 @@ static const struct mtk_soc_data mt7621_
+@@ -4183,7 +4184,7 @@ static const struct mtk_soc_data mt7621_
.required_pctl = false,
.offload_version = 2,
.hash_offset = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4201,7 +4202,7 @@ static const struct mtk_soc_data mt7622_
+@@ -4203,7 +4204,7 @@ static const struct mtk_soc_data mt7622_
.required_pctl = false,
.offload_version = 2,
.hash_offset = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4220,7 +4221,7 @@ static const struct mtk_soc_data mt7623_
+@@ -4222,7 +4223,7 @@ static const struct mtk_soc_data mt7623_
.required_pctl = true,
.offload_version = 2,
.hash_offset = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4252,9 +4253,11 @@ static const struct mtk_soc_data mt7986_
+@@ -4254,9 +4255,11 @@ static const struct mtk_soc_data mt7986_
.reg_map = &mt7986_reg_map,
.ana_rgc3 = 0x128,
.caps = MT7986_CAPS,
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4256,6 +4256,7 @@ static const struct mtk_soc_data mt7986_
+@@ -4258,6 +4258,7 @@ static const struct mtk_soc_data mt7986_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7986_CLKS_BITMAP,
.required_pctl = false,
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4008,19 +4008,23 @@ static int mtk_probe(struct platform_dev
+@@ -4010,19 +4010,23 @@ static int mtk_probe(struct platform_dev
eth->irq[i] = platform_get_irq(pdev, i);
if (eth->irq[i] < 0) {
dev_err(&pdev->dev, "no IRQ%d resource found\n", i);
}
eth->clks[i] = NULL;
}
-@@ -4031,7 +4035,7 @@ static int mtk_probe(struct platform_dev
+@@ -4033,7 +4037,7 @@ static int mtk_probe(struct platform_dev
err = mtk_hw_init(eth);
if (err)
eth->hwlro = MTK_HAS_CAPS(eth->soc->caps, MTK_HWLRO);
-@@ -4129,6 +4133,8 @@ err_free_dev:
+@@ -4131,6 +4135,8 @@ err_free_dev:
mtk_free_dev(eth);
err_deinit_hw:
mtk_hw_deinit(eth);
return err;
}
-@@ -4148,6 +4154,7 @@ static int mtk_remove(struct platform_de
+@@ -4150,6 +4156,7 @@ static int mtk_remove(struct platform_de
phylink_disconnect_phy(mac->phylink);
}
__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,
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/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -3022,11 +3022,13 @@ static const struct seq_operations fib_r
+@@ -3024,11 +3024,13 @@ static const struct seq_operations fib_r
int __net_init fib_proc_init(struct net *net)
{
fib_triestat_seq_show, NULL))
goto out2;
-@@ -3037,17 +3039,21 @@ int __net_init fib_proc_init(struct net
+@@ -3039,17 +3041,21 @@ int __net_init fib_proc_init(struct net
return 0;
out3:
static void rt_fibinfo_free(struct rtable __rcu **rtp)
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -2770,6 +2770,7 @@ static const char *const rtn_type_names[
+@@ -2772,6 +2772,7 @@ static const char *const rtn_type_names[
[RTN_THROW] = "THROW",
[RTN_NAT] = "NAT",
[RTN_XRESOLVE] = "XRESOLVE",
+++ /dev/null
-From: Felix Fietkau <nbd@nbd.name>
-Date: Sat, 19 Nov 2022 18:48:42 +0100
-Subject: [PATCH] netfilter: nf_flow_table: add missing locking
-
-nf_flow_table_block_setup and the driver TC_SETUP_FT call can modify the flow
-block cb list while they are being traversed elsewhere, causing a crash.
-Add a write lock around the calls to protect readers
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
----
-
---- a/net/netfilter/nf_flow_table_offload.c
-+++ b/net/netfilter/nf_flow_table_offload.c
-@@ -1074,6 +1074,7 @@ static int nf_flow_table_block_setup(str
- struct flow_block_cb *block_cb, *next;
- int err = 0;
-
-+ down_write(&flowtable->flow_block_lock);
- switch (cmd) {
- case FLOW_BLOCK_BIND:
- list_splice(&bo->cb_list, &flowtable->flow_block.cb_list);
-@@ -1088,6 +1089,7 @@ static int nf_flow_table_block_setup(str
- WARN_ON_ONCE(1);
- err = -EOPNOTSUPP;
- }
-+ up_write(&flowtable->flow_block_lock);
-
- return err;
- }
-@@ -1144,7 +1146,9 @@ static int nf_flow_table_offload_cmd(str
-
- nf_flow_table_block_offload_init(bo, dev_net(dev), cmd, flowtable,
- extack);
-+ down_write(&flowtable->flow_block_lock);
- err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_FT, bo);
-+ up_write(&flowtable->flow_block_lock);
- if (err < 0)
- return err;
-
}
return IRQ_HANDLED;
-@@ -4118,6 +4118,8 @@ static int mtk_probe(struct platform_dev
+@@ -4120,6 +4120,8 @@ static int mtk_probe(struct platform_dev
* for NAPI to work
*/
init_dummy_netdev(ð->dummy_dev);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4088,7 +4088,9 @@ static int mtk_probe(struct platform_dev
+@@ -4090,7 +4090,9 @@ static int mtk_probe(struct platform_dev
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
eth->ppe[i] = mtk_ppe_init(eth, eth->base + ppe_addr,
if (!eth->ppe[i]) {
err = -ENOMEM;
goto err_free_dev;
-@@ -4211,6 +4213,7 @@ static const struct mtk_soc_data mt7622_
+@@ -4213,6 +4215,7 @@ static const struct mtk_soc_data mt7622_
.required_pctl = false,
.offload_version = 2,
.hash_offset = 2,
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
-@@ -4248,6 +4251,7 @@ static const struct mtk_soc_data mt7629_
+@@ -4250,6 +4253,7 @@ static const struct mtk_soc_data mt7629_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7629_CLKS_BITMAP,
.required_pctl = false,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4268,6 +4272,7 @@ static const struct mtk_soc_data mt7986_
+@@ -4270,6 +4274,7 @@ static const struct mtk_soc_data mt7986_
.offload_version = 2,
.hash_offset = 4,
.foe_entry_size = sizeof(struct mtk_foe_entry),
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4197,7 +4197,7 @@ static const struct mtk_soc_data mt7621_
+@@ -4199,7 +4199,7 @@ static const struct mtk_soc_data mt7621_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7621_CLKS_BITMAP,
.required_pctl = false,
.hash_offset = 2,
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
.txrx = {
-@@ -4237,7 +4237,7 @@ static const struct mtk_soc_data mt7623_
+@@ -4239,7 +4239,7 @@ static const struct mtk_soc_data mt7623_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7623_CLKS_BITMAP,
.required_pctl = true,
static int mtk_open(struct net_device *dev)
{
struct mtk_mac *mac = netdev_priv(dev);
-@@ -2970,7 +3125,8 @@ static int mtk_open(struct net_device *d
+@@ -2972,7 +3127,8 @@ static int mtk_open(struct net_device *d
refcount_inc(ð->dma_refcnt);
phylink_start(mac->phylink);
return 0;
}
-@@ -3486,8 +3642,12 @@ static int mtk_unreg_dev(struct mtk_eth
+@@ -3488,8 +3644,12 @@ static int mtk_unreg_dev(struct mtk_eth
int i;
for (i = 0; i < MTK_MAC_COUNT; i++) {
unregister_netdev(eth->netdev[i]);
}
-@@ -3703,6 +3863,23 @@ static int mtk_set_rxnfc(struct net_devi
+@@ -3705,6 +3865,23 @@ static int mtk_set_rxnfc(struct net_devi
return ret;
}
static const struct ethtool_ops mtk_ethtool_ops = {
.get_link_ksettings = mtk_get_link_ksettings,
.set_link_ksettings = mtk_set_link_ksettings,
-@@ -3738,6 +3915,7 @@ static const struct net_device_ops mtk_n
+@@ -3740,6 +3917,7 @@ static const struct net_device_ops mtk_n
.ndo_setup_tc = mtk_eth_setup_tc,
.ndo_bpf = mtk_xdp,
.ndo_xdp_xmit = mtk_xdp_xmit,
};
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
-@@ -3747,6 +3925,7 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -3749,6 +3927,7 @@ static int mtk_add_mac(struct mtk_eth *e
struct phylink *phylink;
struct mtk_mac *mac;
int id, err;
if (!_id) {
dev_err(eth->dev, "missing mac id\n");
-@@ -3764,7 +3943,10 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -3766,7 +3945,10 @@ static int mtk_add_mac(struct mtk_eth *e
return -EINVAL;
}
if (!eth->netdev[id]) {
dev_err(eth->dev, "alloc_etherdev failed\n");
return -ENOMEM;
-@@ -3861,6 +4043,11 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -3863,6 +4045,11 @@ static int mtk_add_mac(struct mtk_eth *e
else
eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH_2K - MTK_RX_ETH_HLEN;
err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
if (err) {
-@@ -3417,6 +3473,10 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -3419,6 +3475,10 @@ static int mtk_hw_init(struct mtk_eth *e
*/
val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
mtk_w32(eth, val | MTK_CDMQ_STAG_EN, MTK_CDMQ_IG_CTRL);
/* Enable RX VLan Offloading */
mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
-@@ -3634,6 +3694,12 @@ static int mtk_free_dev(struct mtk_eth *
+@@ -3636,6 +3696,12 @@ static int mtk_free_dev(struct mtk_eth *
free_netdev(eth->netdev[i]);
}
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3529,9 +3529,12 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -3531,9 +3531,12 @@ static int mtk_hw_init(struct mtk_eth *e
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
if (err) {
netdev_err(dev, "%s: could not attach PHY: %d\n", __func__,
-@@ -3215,6 +3160,35 @@ static int mtk_open(struct net_device *d
+@@ -3217,6 +3162,35 @@ static int mtk_open(struct net_device *d
phylink_start(mac->phylink);
netif_tx_start_all_queues(dev);
return 0;
}
-@@ -3508,10 +3482,9 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -3510,10 +3484,9 @@ static int mtk_hw_init(struct mtk_eth *e
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
/* set interrupt delays based on current Net DIM sample */
mtk_dim_rx(ð->rx_dim.work);
-@@ -4132,7 +4105,7 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -4134,7 +4107,7 @@ static int mtk_add_mac(struct mtk_eth *e
eth->netdev[id]->hw_features |= NETIF_F_LRO;
eth->netdev[id]->vlan_features = eth->soc->hw_features &
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3994,6 +3994,7 @@ static const struct net_device_ops mtk_n
+@@ -3996,6 +3996,7 @@ static const struct net_device_ops mtk_n
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
{
const __be32 *_id = of_get_property(np, "reg", NULL);
phy_interface_t phy_mode;
struct phylink *phylink;
-@@ -4122,6 +4123,9 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -4124,6 +4125,9 @@ static int mtk_add_mac(struct mtk_eth *e
register_netdevice_notifier(&mac->device_notifier);
}