blob: 0b3581da4f72250173a339c796574bfc71e5f103 [file] [log] [blame]
developerbf24a8a2022-11-30 14:52:20 +08001From 504f797dfcca7ff11c1ab1698a92c0ef545bae89 Mon Sep 17 00:00:00 2001
developer144824b2022-11-25 21:27:43 +08002From: Sujuan Chen <sujuan.chen@mediatek.com>
3Date: Fri, 25 Nov 2022 14:37:58 +0800
developerbf24a8a2022-11-30 14:52:20 +08004Subject: [PATCH 3009/3010] mt76: mt7915: wed: drop scatter and gather frame
developer144824b2022-11-25 21:27:43 +08005
6The scatter and gather frame may be incorrect because WED and WO may
7send frames to host driver interleaved.
8
9Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
10---
11 dma.c | 5 +++++
12 dma.h | 1 +
13 mt76.h | 1 +
14 3 files changed, 7 insertions(+)
15
16diff --git a/dma.c b/dma.c
developerbf24a8a2022-11-30 14:52:20 +080017index ddc804a5..fec9d090 100644
developer144824b2022-11-25 21:27:43 +080018--- a/dma.c
19+++ b/dma.c
20@@ -416,6 +416,11 @@ mt76_dma_get_buf(struct mt76_dev *dev, struct mt76_queue *q, int idx,
21
22 *drop = !!(ctrl & (MT_DMA_CTL_TO_HOST_A |
23 MT_DMA_CTL_DROP));
24+
25+ if (!(*more) && FIELD_GET(MT_DMA_CTL_WO, desc->buf1))
26+ q->flags &= ~MT_QFLAG_WED_FRAG;
27+ else
28+ q->flags |= MT_QFLAG_WED_FRAG;
29 }
30 } else {
31 buf = e->buf;
32diff --git a/dma.h b/dma.h
33index 4b9bc7f4..ce8ac426 100644
34--- a/dma.h
35+++ b/dma.h
36@@ -19,6 +19,7 @@
37 #define MT_DMA_CTL_TO_HOST_A BIT(12)
38 #define MT_DMA_CTL_DROP BIT(14)
39 #define MT_DMA_CTL_TOKEN GENMASK(31, 16)
40+#define MT_DMA_CTL_WO BIT(8)
41
42 #define MT_DMA_PPE_CPU_REASON GENMASK(15, 11)
43 #define MT_DMA_PPE_ENTRY GENMASK(30, 16)
44diff --git a/mt76.h b/mt76.h
45index cca8986f..43594102 100644
46--- a/mt76.h
47+++ b/mt76.h
48@@ -30,6 +30,7 @@
49 #define MT_QFLAG_WED_RING GENMASK(1, 0)
50 #define MT_QFLAG_WED_TYPE GENMASK(3, 2)
51 #define MT_QFLAG_WED BIT(4)
52+#define MT_QFLAG_WED_FRAG BIT(5)
53
54 #define __MT_WED_Q(_type, _n) (MT_QFLAG_WED | \
55 FIELD_PREP(MT_QFLAG_WED_TYPE, _type) | \
56--
developerbf24a8a2022-11-30 14:52:20 +0800572.36.1
developer144824b2022-11-25 21:27:43 +080058