summaryrefslogtreecommitdiff
path: root/target/linux/mediatek/patches-4.9/0037-net-next-mediatek-bring-up-QDMA-RX-ring-0.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/mediatek/patches-4.9/0037-net-next-mediatek-bring-up-QDMA-RX-ring-0.patch')
-rw-r--r--target/linux/mediatek/patches-4.9/0037-net-next-mediatek-bring-up-QDMA-RX-ring-0.patch128
1 files changed, 0 insertions, 128 deletions
diff --git a/target/linux/mediatek/patches-4.9/0037-net-next-mediatek-bring-up-QDMA-RX-ring-0.patch b/target/linux/mediatek/patches-4.9/0037-net-next-mediatek-bring-up-QDMA-RX-ring-0.patch
deleted file mode 100644
index 9d6a089..0000000
--- a/target/linux/mediatek/patches-4.9/0037-net-next-mediatek-bring-up-QDMA-RX-ring-0.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From 047a4e7b17322c1b32d8db32a0df9899cb4963a3 Mon Sep 17 00:00:00 2001
-From: John Crispin <john@phrozen.org>
-Date: Fri, 21 Jul 2017 08:48:38 +0200
-Subject: [PATCH 37/57] net-next: mediatek: bring up QDMA RX ring 0
-
-This patch is in peparation for adding HW flow and QoS offloading. For
-those features to work, the driver needs to bring up the first QDMA RX
-ring. This ring is used by the PPE offloading HW.
-
-Signed-off-by: John Crispin <john@phrozen.org>
----
- drivers/net/ethernet/mediatek/mtk_eth_soc.c | 38 ++++++++++++++++++++---------
- drivers/net/ethernet/mediatek/mtk_eth_soc.h | 3 +++
- 2 files changed, 30 insertions(+), 11 deletions(-)
-
---- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1224,11 +1224,21 @@ static void mtk_tx_clean(struct mtk_eth
-
- static int mtk_rx_alloc(struct mtk_eth *eth, int ring_no, int rx_flag)
- {
-- struct mtk_rx_ring *ring = &eth->rx_ring[ring_no];
-+ struct mtk_rx_ring *ring;
- int rx_data_len, rx_dma_size;
- int i;
-+ u32 offset = 0;
-
-- if (rx_flag == MTK_RX_FLAGS_HWLRO) {
-+ if (rx_flag & MTK_RX_FLAGS_QDMA) {
-+ if (ring_no)
-+ return -EINVAL;
-+ ring = &eth->rx_ring_qdma;
-+ offset = 0x1000;
-+ } else {
-+ ring = &eth->rx_ring[ring_no];
-+ }
-+
-+ if (rx_flag & MTK_RX_FLAGS_HWLRO) {
- rx_data_len = MTK_MAX_LRO_RX_LENGTH;
- rx_dma_size = MTK_HW_LRO_DMA_SIZE;
- } else {
-@@ -1276,17 +1286,16 @@ static int mtk_rx_alloc(struct mtk_eth *
- */
- wmb();
-
-- mtk_w32(eth, ring->phys, MTK_PRX_BASE_PTR_CFG(ring_no));
-- mtk_w32(eth, rx_dma_size, MTK_PRX_MAX_CNT_CFG(ring_no));
-- mtk_w32(eth, ring->calc_idx, ring->crx_idx_reg);
-- mtk_w32(eth, MTK_PST_DRX_IDX_CFG(ring_no), MTK_PDMA_RST_IDX);
-+ mtk_w32(eth, ring->phys, MTK_PRX_BASE_PTR_CFG(ring_no) + offset);
-+ mtk_w32(eth, rx_dma_size, MTK_PRX_MAX_CNT_CFG(ring_no) + offset);
-+ mtk_w32(eth, ring->calc_idx, ring->crx_idx_reg + offset);
-+ mtk_w32(eth, MTK_PST_DRX_IDX_CFG(ring_no), MTK_PDMA_RST_IDX + offset);
-
- return 0;
- }
-
--static void mtk_rx_clean(struct mtk_eth *eth, int ring_no)
-+static void mtk_rx_clean(struct mtk_eth *eth, struct mtk_rx_ring *ring)
- {
-- struct mtk_rx_ring *ring = &eth->rx_ring[ring_no];
- int i;
-
- if (ring->data && ring->dma) {
-@@ -1612,6 +1621,10 @@ static int mtk_dma_init(struct mtk_eth *
- if (err)
- return err;
-
-+ err = mtk_rx_alloc(eth, 0, MTK_RX_FLAGS_QDMA);
-+ if (err)
-+ return err;
-+
- err = mtk_rx_alloc(eth, 0, MTK_RX_FLAGS_NORMAL);
- if (err)
- return err;
-@@ -1651,12 +1664,13 @@ static void mtk_dma_free(struct mtk_eth
- eth->phy_scratch_ring = 0;
- }
- mtk_tx_clean(eth);
-- mtk_rx_clean(eth, 0);
-+ mtk_rx_clean(eth, &eth->rx_ring[0]);
-+ mtk_rx_clean(eth, &eth->rx_ring_qdma);
-
- if (eth->hwlro) {
- mtk_hwlro_rx_uninit(eth);
- for (i = 1; i < MTK_MAX_RX_RING_NUM; i++)
-- mtk_rx_clean(eth, i);
-+ mtk_rx_clean(eth, &eth->rx_ring[i]);
- }
-
- kfree(eth->scratch_head);
-@@ -1723,7 +1737,9 @@ static int mtk_start_dma(struct mtk_eth
-
- mtk_w32(eth,
- MTK_TX_WB_DDONE | MTK_TX_DMA_EN |
-- MTK_DMA_SIZE_16DWORDS | MTK_NDP_CO_PRO,
-+ MTK_DMA_SIZE_16DWORDS | MTK_NDP_CO_PRO |
-+ MTK_RX_DMA_EN | MTK_RX_2B_OFFSET |
-+ MTK_RX_BT_32DWORDS,
- MTK_QDMA_GLO_CFG);
-
- mtk_w32(eth,
---- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -484,6 +484,7 @@ struct mtk_tx_ring {
- enum mtk_rx_flags {
- MTK_RX_FLAGS_NORMAL = 0,
- MTK_RX_FLAGS_HWLRO,
-+ MTK_RX_FLAGS_QDMA,
- };
-
- /* struct mtk_rx_ring - This struct holds info describing a RX ring
-@@ -527,6 +528,7 @@ struct mtk_rx_ring {
- * @dma_refcnt: track how many netdevs are using the DMA engine
- * @tx_ring: Pointer to the memory holding info about the TX ring
- * @rx_ring: Pointer to the memory holding info about the RX ring
-+ * @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
-@@ -556,6 +558,7 @@ struct mtk_eth {
- atomic_t dma_refcnt;
- struct mtk_tx_ring tx_ring;
- struct mtk_rx_ring rx_ring[MTK_MAX_RX_RING_NUM];
-+ struct mtk_rx_ring rx_ring_qdma;
- struct napi_struct tx_napi;
- struct napi_struct rx_napi;
- struct mtk_tx_dma *scratch_ring;