generic: 6.6: refresh backport patches
[openwrt/staging/981213.git] / target / linux / generic / backport-6.6 / 752-14-v6.7-net-ethernet-mtk_wed-introduce-WED-support-for-MT798.patch
index f874899c5bdc5fd36666342c2355b722cb2c0049..12733b142f747a84ad93d266a9f219e0b03d5ad4 100644 (file)
@@ -13,7 +13,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
 
 --- 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 <pabeni@redhat.com>
                        }
 --- 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 <pabeni@redhat.com>
  
  #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 <pabeni@redhat.com>
  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 <pabeni@redhat.com>
        .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 <pabeni@redhat.com>
        .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 <pabeni@redhat.com>
                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 <pabeni@redhat.com>
                        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 <pabeni@redhat.com>
  
  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 <pabeni@redhat.com>
  
        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 <pabeni@redhat.com>
        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 <pabeni@redhat.com>
        }
  
        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 <pabeni@redhat.com>
  }
  
  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 <pabeni@redhat.com>
  
                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 <pabeni@redhat.com>
                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 <pabeni@redhat.com>
        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 <pabeni@redhat.com>
        /* 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 <pabeni@redhat.com>
                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 <pabeni@redhat.com>
        }
  
        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 <pabeni@redhat.com>
  }
  
  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 <pabeni@redhat.com>
        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 <pabeni@redhat.com>
                /* 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 <pabeni@redhat.com>
        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 <pabeni@redhat.com>
  
        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 <pabeni@redhat.com>
                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 <pabeni@redhat.com>
  
        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 <pabeni@redhat.com>
        /* 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 <pabeni@redhat.com>
  
        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 <pabeni@redhat.com>
  #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 <pabeni@redhat.com>
  
                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;
  }