OSDN Git Service

net: ethernet: mtk_eth_soc: move gdma_to_ppe and ppe_base definitions in mtk register map
authorLorenzo Bianconi <lorenzo@kernel.org>
Tue, 20 Sep 2022 10:11:15 +0000 (12:11 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 22 Sep 2022 13:13:23 +0000 (15:13 +0200)
This is a preliminary patch to introduce mt7986 hw packet engine.

Tested-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/mediatek/mtk_eth_soc.c
drivers/net/ethernet/mediatek/mtk_eth_soc.h
drivers/net/ethernet/mediatek/mtk_ppe.h

index c19c67a..b2b92fe 100644 (file)
@@ -73,6 +73,8 @@ static const struct mtk_reg_map mtk_reg_map = {
                .fq_blen        = 0x1b2c,
        },
        .gdm1_cnt               = 0x2400,
+       .gdma_to_ppe            = 0x4444,
+       .ppe_base               = 0x0c00,
 };
 
 static const struct mtk_reg_map mt7628_reg_map = {
@@ -126,6 +128,8 @@ static const struct mtk_reg_map mt7986_reg_map = {
                .fq_blen        = 0x472c,
        },
        .gdm1_cnt               = 0x1c00,
+       .gdma_to_ppe            = 0x3333,
+       .ppe_base               = 0x2000,
 };
 
 /* strings used by ethtool */
@@ -2978,21 +2982,22 @@ static int mtk_open(struct net_device *dev)
 
        /* we run 2 netdevs on the same dma ring so we only bring it up once */
        if (!refcount_read(&eth->dma_refcnt)) {
+               const struct mtk_soc_data *soc = eth->soc;
                u32 gdm_config = MTK_GDMA_TO_PDMA;
 
                err = mtk_start_dma(eth);
                if (err)
                        return err;
 
-               if (eth->soc->offload_version && mtk_ppe_start(eth->ppe) == 0)
-                       gdm_config = MTK_GDMA_TO_PPE;
+               if (soc->offload_version && mtk_ppe_start(eth->ppe) == 0)
+                       gdm_config = soc->reg_map->gdma_to_ppe;
 
                mtk_gdm_config(eth, gdm_config);
 
                napi_enable(&eth->tx_napi);
                napi_enable(&eth->rx_napi);
                mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
-               mtk_rx_irq_enable(eth, eth->soc->txrx.rx_irq_done_mask);
+               mtk_rx_irq_enable(eth, soc->txrx.rx_irq_done_mask);
                refcount_set(&eth->dma_refcnt, 1);
        }
        else
@@ -4098,7 +4103,9 @@ static int mtk_probe(struct platform_device *pdev)
        }
 
        if (eth->soc->offload_version) {
-               eth->ppe = mtk_ppe_init(eth, eth->base + MTK_ETH_PPE_BASE, 2);
+               u32 ppe_addr = eth->soc->reg_map->ppe_base;
+
+               eth->ppe = mtk_ppe_init(eth, eth->base + ppe_addr, 2);
                if (!eth->ppe) {
                        err = -ENOMEM;
                        goto err_free_dev;
index ecf85e9..2617cbe 100644 (file)
 #define MTK_GDMA_TCS_EN                BIT(21)
 #define MTK_GDMA_UCS_EN                BIT(20)
 #define MTK_GDMA_TO_PDMA       0x0
-#define MTK_GDMA_TO_PPE                0x4444
 #define MTK_GDMA_DROP_ALL       0x7777
 
 /* Unicast Filter MAC Address Register - Low */
@@ -955,6 +954,8 @@ struct mtk_reg_map {
                u32     fq_blen;        /* fq free page buffer length */
        } qdma;
        u32     gdm1_cnt;
+       u32     gdma_to_ppe;
+       u32     ppe_base;
 };
 
 /* struct mtk_eth_data -       This is the structure holding all differences
index 8f786c4..bb079e3 100644 (file)
@@ -8,8 +8,6 @@
 #include <linux/bitfield.h>
 #include <linux/rhashtable.h>
 
-#define MTK_ETH_PPE_BASE               0xc00
-
 #define MTK_PPE_ENTRIES_SHIFT          3
 #define MTK_PPE_ENTRIES                        (1024 << MTK_PPE_ENTRIES_SHIFT)
 #define MTK_PPE_HASH_MASK              (MTK_PPE_ENTRIES - 1)