|
@@ -13,7 +13,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
|
-@@ -195,6 +195,7 @@ static const struct mtk_reg_map mt7988_r
|
|
|
+@@ -197,6 +197,7 @@ static const struct mtk_reg_map mt7988_r
|
|
|
.wdma_base = {
|
|
|
[0] = 0x4800,
|
|
|
[1] = 0x4c00,
|
|
@@ -46,7 +46,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
}
|
|
|
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
|
|
-@@ -16,17 +16,19 @@
|
|
|
+@@ -17,17 +17,19 @@
|
|
|
#include <net/flow_offload.h>
|
|
|
#include <net/pkt_cls.h>
|
|
|
#include "mtk_eth_soc.h"
|
|
@@ -68,7 +68,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
#define MTK_WED_TX_RING_SIZE 2048
|
|
|
#define MTK_WED_WDMA_RING_SIZE 1024
|
|
|
-@@ -40,7 +42,10 @@
|
|
|
+@@ -41,7 +43,10 @@
|
|
|
#define MTK_WED_RRO_QUE_CNT 8192
|
|
|
#define MTK_WED_MIOD_ENTRY_CNT 128
|
|
|
|
|
@@ -80,7 +80,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
static DEFINE_MUTEX(hw_lock);
|
|
|
|
|
|
struct mtk_wed_flow_block_priv {
|
|
|
-@@ -55,6 +60,7 @@ static const struct mtk_wed_soc_data mt7
|
|
|
+@@ -56,6 +61,7 @@ static const struct mtk_wed_soc_data mt7
|
|
|
.reset_idx_tx_mask = GENMASK(3, 0),
|
|
|
.reset_idx_rx_mask = GENMASK(17, 16),
|
|
|
},
|
|
@@ -88,7 +88,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
.wdma_desc_size = sizeof(struct mtk_wdma_desc),
|
|
|
};
|
|
|
|
|
|
-@@ -65,6 +71,18 @@ static const struct mtk_wed_soc_data mt7
|
|
|
+@@ -66,6 +72,18 @@ static const struct mtk_wed_soc_data mt7
|
|
|
.reset_idx_tx_mask = GENMASK(1, 0),
|
|
|
.reset_idx_rx_mask = GENMASK(7, 6),
|
|
|
},
|
|
@@ -107,7 +107,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
.wdma_desc_size = 2 * sizeof(struct mtk_wdma_desc),
|
|
|
};
|
|
|
|
|
|
-@@ -319,33 +337,38 @@ out:
|
|
|
+@@ -320,33 +338,38 @@ out:
|
|
|
static int
|
|
|
mtk_wed_tx_buffer_alloc(struct mtk_wed_device *dev)
|
|
|
{
|
|
@@ -159,7 +159,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
dma_addr_t page_phys, buf_phys;
|
|
|
struct page *page;
|
|
|
void *buf;
|
|
|
-@@ -371,28 +394,31 @@ mtk_wed_tx_buffer_alloc(struct mtk_wed_d
|
|
|
+@@ -372,28 +395,31 @@ mtk_wed_tx_buffer_alloc(struct mtk_wed_d
|
|
|
buf_phys = page_phys;
|
|
|
|
|
|
for (s = 0; s < MTK_WED_BUF_PER_PAGE; s++) {
|
|
@@ -209,7 +209,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
buf += MTK_WED_BUF_SIZE;
|
|
|
buf_phys += MTK_WED_BUF_SIZE;
|
|
|
}
|
|
|
-@@ -408,31 +434,31 @@ static void
|
|
|
+@@ -409,31 +435,31 @@ static void
|
|
|
mtk_wed_free_tx_buffer(struct mtk_wed_device *dev)
|
|
|
{
|
|
|
struct mtk_wed_buf *page_list = dev->tx_buf_ring.pages;
|
|
@@ -251,7 +251,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
free_pagelist:
|
|
|
kfree(page_list);
|
|
|
-@@ -517,13 +543,23 @@ mtk_wed_set_ext_int(struct mtk_wed_devic
|
|
|
+@@ -518,13 +544,23 @@ mtk_wed_set_ext_int(struct mtk_wed_devic
|
|
|
{
|
|
|
u32 mask = MTK_WED_EXT_INT_STATUS_ERROR_MASK;
|
|
|
|
|
@@ -277,7 +277,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
if (!dev->hw->num_flows)
|
|
|
mask &= ~MTK_WED_EXT_INT_STATUS_TKID_WO_PYLD;
|
|
|
-@@ -535,6 +571,9 @@ mtk_wed_set_ext_int(struct mtk_wed_devic
|
|
|
+@@ -536,6 +572,9 @@ mtk_wed_set_ext_int(struct mtk_wed_devic
|
|
|
static void
|
|
|
mtk_wed_set_512_support(struct mtk_wed_device *dev, bool enable)
|
|
|
{
|
|
@@ -287,7 +287,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
if (enable) {
|
|
|
wed_w32(dev, MTK_WED_TXDP_CTRL, MTK_WED_TXDP_DW9_OVERWR);
|
|
|
wed_w32(dev, MTK_WED_TXP_DW1,
|
|
|
-@@ -609,6 +648,14 @@ mtk_wed_dma_disable(struct mtk_wed_devic
|
|
|
+@@ -610,6 +649,14 @@ mtk_wed_dma_disable(struct mtk_wed_devic
|
|
|
MTK_WED_WPDMA_RX_D_RX_DRV_EN);
|
|
|
wed_clr(dev, MTK_WED_WDMA_GLO_CFG,
|
|
|
MTK_WED_WDMA_GLO_CFG_TX_DDONE_CHK);
|
|
@@ -302,7 +302,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
}
|
|
|
|
|
|
mtk_wed_set_512_support(dev, false);
|
|
|
-@@ -651,6 +698,14 @@ mtk_wed_deinit(struct mtk_wed_device *de
|
|
|
+@@ -652,6 +699,14 @@ mtk_wed_deinit(struct mtk_wed_device *de
|
|
|
MTK_WED_CTRL_RX_ROUTE_QM_EN |
|
|
|
MTK_WED_CTRL_WED_RX_BM_EN |
|
|
|
MTK_WED_CTRL_RX_RRO_QM_EN);
|
|
@@ -317,7 +317,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-@@ -700,21 +755,37 @@ mtk_wed_detach(struct mtk_wed_device *de
|
|
|
+@@ -701,21 +756,37 @@ mtk_wed_detach(struct mtk_wed_device *de
|
|
|
mutex_unlock(&hw_lock);
|
|
|
}
|
|
|
|
|
@@ -362,7 +362,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
wed_w32(dev, MTK_WED_PCIE_INT_CTRL,
|
|
|
FIELD_PREP(MTK_WED_PCIE_INT_CTRL_POLL_EN, 2));
|
|
|
-@@ -722,19 +793,9 @@ mtk_wed_bus_init(struct mtk_wed_device *
|
|
|
+@@ -723,19 +794,9 @@ mtk_wed_bus_init(struct mtk_wed_device *
|
|
|
/* pcie interrupt control: pola/source selection */
|
|
|
wed_set(dev, MTK_WED_PCIE_INT_CTRL,
|
|
|
MTK_WED_PCIE_INT_CTRL_MSK_EN_POLA |
|
|
@@ -385,7 +385,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
break;
|
|
|
}
|
|
|
case MTK_WED_BUS_AXI:
|
|
|
-@@ -772,18 +833,19 @@ mtk_wed_set_wpdma(struct mtk_wed_device
|
|
|
+@@ -773,18 +834,19 @@ mtk_wed_set_wpdma(struct mtk_wed_device
|
|
|
static void
|
|
|
mtk_wed_hw_init_early(struct mtk_wed_device *dev)
|
|
|
{
|
|
@@ -412,7 +412,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
wed_m32(dev, MTK_WED_WDMA_GLO_CFG, mask, set);
|
|
|
|
|
|
if (mtk_wed_is_v1(dev->hw)) {
|
|
|
-@@ -931,11 +993,18 @@ mtk_wed_route_qm_hw_init(struct mtk_wed_
|
|
|
+@@ -932,11 +994,18 @@ mtk_wed_route_qm_hw_init(struct mtk_wed_
|
|
|
}
|
|
|
|
|
|
/* configure RX_ROUTE_QM */
|
|
@@ -436,7 +436,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
/* enable RX_ROUTE_QM */
|
|
|
wed_set(dev, MTK_WED_CTRL, MTK_WED_CTRL_RX_ROUTE_QM_EN);
|
|
|
}
|
|
|
-@@ -948,22 +1017,30 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
|
|
+@@ -949,22 +1018,30 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
|
|
|
|
|
dev->init_done = true;
|
|
|
mtk_wed_set_ext_int(dev, false);
|
|
@@ -475,7 +475,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
wed_w32(dev, MTK_WED_TX_BM_DYN_THR,
|
|
|
FIELD_PREP(MTK_WED_TX_BM_DYN_THR_LO_V2, 0) |
|
|
|
MTK_WED_TX_BM_DYN_THR_HI_V2);
|
|
|
-@@ -973,9 +1050,6 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
|
|
+@@ -974,9 +1051,6 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
|
|
dev->tx_buf_ring.size / 128) |
|
|
|
FIELD_PREP(MTK_WED_TX_TKID_CTRL_RSV_GRP_NUM,
|
|
|
dev->tx_buf_ring.size / 128));
|
|
@@ -485,7 +485,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
}
|
|
|
|
|
|
wed_w32(dev, dev->hw->soc->regmap.tx_bm_tkid,
|
|
|
-@@ -985,26 +1059,62 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
|
|
+@@ -986,26 +1060,62 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
|
|
|
|
|
mtk_wed_reset(dev, MTK_WED_RESET_TX_BM);
|
|
|
|
|
@@ -561,7 +561,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-@@ -1302,6 +1412,24 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_we
|
|
|
+@@ -1303,6 +1413,24 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_we
|
|
|
dev->hw->soc->wdma_desc_size, true))
|
|
|
return -ENOMEM;
|
|
|
|
|
@@ -586,7 +586,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
|
|
|
wdma->desc_phys);
|
|
|
wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_COUNT,
|
|
|
-@@ -1367,6 +1495,9 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
|
|
+@@ -1368,6 +1496,9 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
|
|
|
|
|
wed_clr(dev, MTK_WED_WDMA_INT_CTRL, wdma_mask);
|
|
|
} else {
|
|
@@ -596,7 +596,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
/* initail tx interrupt trigger */
|
|
|
wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX,
|
|
|
MTK_WED_WPDMA_INT_CTRL_TX0_DONE_EN |
|
|
|
-@@ -1419,33 +1550,60 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
|
|
+@@ -1420,33 +1551,60 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
|
|
{
|
|
|
int i;
|
|
|
|
|
@@ -668,7 +668,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
wed_clr(dev, MTK_WED_WPDMA_GLO_CFG,
|
|
|
MTK_WED_WPDMA_GLO_CFG_TX_TKID_KEEP |
|
|
|
MTK_WED_WPDMA_GLO_CFG_TX_DMAD_DW3_PREV);
|
|
|
-@@ -1457,11 +1615,22 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
|
|
+@@ -1458,11 +1616,22 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
|
|
MTK_WED_WDMA_GLO_CFG_TX_DRV_EN |
|
|
|
MTK_WED_WDMA_GLO_CFG_TX_DDONE_CHK);
|
|
|
|
|
@@ -693,7 +693,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
for (i = 0; i < MTK_WED_RX_QUEUES; i++)
|
|
|
mtk_wed_check_wfdma_rx_fill(dev, i);
|
|
|
-@@ -1501,6 +1670,12 @@ mtk_wed_start(struct mtk_wed_device *dev
|
|
|
+@@ -1502,6 +1671,12 @@ mtk_wed_start(struct mtk_wed_device *dev
|
|
|
wed_r32(dev, MTK_WED_EXT_INT_MASK1);
|
|
|
wed_r32(dev, MTK_WED_EXT_INT_MASK2);
|
|
|
|
|
@@ -706,7 +706,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
if (mtk_wed_rro_cfg(dev))
|
|
|
return;
|
|
|
}
|
|
|
-@@ -1552,6 +1727,7 @@ mtk_wed_attach(struct mtk_wed_device *de
|
|
|
+@@ -1553,6 +1728,7 @@ mtk_wed_attach(struct mtk_wed_device *de
|
|
|
dev->irq = hw->irq;
|
|
|
dev->wdma_idx = hw->index;
|
|
|
dev->version = hw->version;
|
|
@@ -714,7 +714,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
if (hw->eth->dma_dev == hw->eth->dev &&
|
|
|
of_dma_is_coherent(hw->eth->dev->of_node))
|
|
|
-@@ -1619,6 +1795,23 @@ mtk_wed_tx_ring_setup(struct mtk_wed_dev
|
|
|
+@@ -1620,6 +1796,23 @@ mtk_wed_tx_ring_setup(struct mtk_wed_dev
|
|
|
ring->reg_base = MTK_WED_RING_TX(idx);
|
|
|
ring->wpdma = regs;
|
|
|
|
|
@@ -738,7 +738,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
/* WED -> WPDMA */
|
|
|
wpdma_tx_w32(dev, idx, MTK_WED_RING_OFS_BASE, ring->desc_phys);
|
|
|
wpdma_tx_w32(dev, idx, MTK_WED_RING_OFS_COUNT, MTK_WED_TX_RING_SIZE);
|
|
|
-@@ -1693,15 +1886,13 @@ mtk_wed_rx_ring_setup(struct mtk_wed_dev
|
|
|
+@@ -1694,15 +1887,13 @@ mtk_wed_rx_ring_setup(struct mtk_wed_dev
|
|
|
static u32
|
|
|
mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask)
|
|
|
{
|
|
@@ -759,7 +759,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
val = wed_r32(dev, MTK_WED_EXT_INT_STATUS);
|
|
|
wed_w32(dev, MTK_WED_EXT_INT_STATUS, val);
|
|
|
-@@ -1942,6 +2133,9 @@ void mtk_wed_add_hw(struct device_node *
|
|
|
+@@ -1943,6 +2134,9 @@ void mtk_wed_add_hw(struct device_node *
|
|
|
case 2:
|
|
|
hw->soc = &mt7986_data;
|
|
|
break;
|
|
@@ -1254,7 +1254,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
#define MTK_WO_MCU_CFG_LS_HW_VER_ADDR (MTK_WO_MCU_CFG_LS_BASE + 0x000)
|
|
|
--- a/include/linux/soc/mediatek/mtk_wed.h
|
|
|
+++ b/include/linux/soc/mediatek/mtk_wed.h
|
|
|
-@@ -139,6 +139,8 @@ struct mtk_wed_device {
|
|
|
+@@ -138,6 +138,8 @@ struct mtk_wed_device {
|
|
|
u32 wpdma_rx;
|
|
|
|
|
|
bool wcid_512;
|
|
@@ -1263,7 +1263,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
u16 token_start;
|
|
|
unsigned int nbuf;
|
|
|
-@@ -212,10 +214,12 @@ mtk_wed_device_attach(struct mtk_wed_dev
|
|
|
+@@ -211,10 +213,12 @@ mtk_wed_device_attach(struct mtk_wed_dev
|
|
|
return ret;
|
|
|
}
|
|
|
|