Hi Felix,
[FYI, it's a private test report for your RFC patch.]
[auto build test ERROR on wireless-drivers-next/master]
[also build test ERROR on mac80211-next/master linus/master v5.14-rc1 next-20210713]
[cannot apply to wireless-drivers/master mac80211/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url:
https://github.com/0day-ci/linux/commits/Felix-Fietkau/Ethernet-WLAN-hard...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-ne...
master
config: powerpc-randconfig-r003-20210713 (attached as .config)
compiler: clang version 13.0.0 (
https://github.com/llvm/llvm-project
8d69635ed9ecf36fd0ca85906bfde17949671cbe)
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# install powerpc cross compiling tool for clang build
# apt-get install binutils-powerpc-linux-gnu
#
https://github.com/0day-ci/linux/commit/16ac1606c5b18e61fb25775d621cd218f...
git remote add linux-review
https://github.com/0day-ci/linux
git fetch --no-tags linux-review
Felix-Fietkau/Ethernet-WLAN-hardware-flow-offloading-support-on-MT7622/20210714-001409
git checkout 16ac1606c5b18e61fb25775d621cd218f17bb913
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross O=build_dir
ARCH=powerpc SHELL=/bin/bash drivers/net/wireless/mediatek/mt76/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
In file included from drivers/net/wireless/mediatek/mt76/dma.c:6:
In file included from include/linux/dma-mapping.h:7:
In file included from include/linux/device.h:15:
In file included from include/linux/dev_printk.h:16:
In file included from include/linux/ratelimit.h:6:
In file included from include/linux/sched.h:14:
In file included from include/linux/pid.h:5:
In file included from include/linux/rculist.h:10:
In file included from include/linux/list.h:9:
In file included from include/linux/kernel.h:12:
In file included from include/linux/bitops.h:32:
In file included from arch/powerpc/include/asm/bitops.h:62:
arch/powerpc/include/asm/barrier.h:49:9: warning: '__lwsync' macro redefined
[-Wmacro-redefined]
#define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : :
:"memory")
^
<built-in>:309:9: note: previous definition is here
#define __lwsync __builtin_ppc_lwsync
^
drivers/net/wireless/mediatek/mt76/dma.c:111:2: warning: unused variable
'_offset' [-Wunused-variable]
Q_WRITE(dev, q, desc_base, q->desc_dma);
^
drivers/net/wireless/mediatek/mt76/dma.c:24:6: note: expanded from macro
'Q_WRITE'
u32 _offset = offsetof(struct mt76_queue_regs, _field); \
^
drivers/net/wireless/mediatek/mt76/dma.c:112:2: warning: unused variable
'_offset' [-Wunused-variable]
Q_WRITE(dev, q, ring_size, q->ndesc);
^
drivers/net/wireless/mediatek/mt76/dma.c:24:6: note: expanded from macro
'Q_WRITE'
u32 _offset = offsetof(struct mt76_queue_regs, _field); \
^
drivers/net/wireless/mediatek/mt76/dma.c:113:12: warning: unused variable
'_offset' [-Wunused-variable]
q->head = Q_READ(dev, q, dma_idx);
^
drivers/net/wireless/mediatek/mt76/dma.c:11:6: note: expanded from macro
'Q_READ'
u32 _offset = offsetof(struct mt76_queue_regs, _field); \
^
drivers/net/wireless/mediatek/mt76/dma.c:129:2: warning: unused variable
'_offset' [-Wunused-variable]
Q_WRITE(dev, q, cpu_idx, 0);
^
drivers/net/wireless/mediatek/mt76/dma.c:24:6: note: expanded from macro
'Q_WRITE'
u32 _offset = offsetof(struct mt76_queue_regs, _field); \
^
drivers/net/wireless/mediatek/mt76/dma.c:130:2: warning: unused variable
'_offset' [-Wunused-variable]
Q_WRITE(dev, q, dma_idx, 0);
^
drivers/net/wireless/mediatek/mt76/dma.c:24:6: note: expanded from macro
'Q_WRITE'
u32 _offset = offsetof(struct mt76_queue_regs, _field); \
^
> drivers/net/wireless/mediatek/mt76/dma.c:154:23: error: no member
named 'tx_ring' in 'struct mtk_wed_device'
q->wed_regs = wed->tx_ring[ring].reg_base;
~~~ ^
> drivers/net/wireless/mediatek/mt76/dma.c:163:54: error: too few
arguments provided to function-like macro invocation
ret =
mtk_wed_device_txfree_ring_setup(wed, q->regs);
^
include/linux/soc/mediatek/mtk_wed.h:120:9: note: macro
'mtk_wed_device_txfree_ring_setup' defined here
#define mtk_wed_device_txfree_ring_setup(_dev, _ring, _regs) -ENODEV
^
> drivers/net/wireless/mediatek/mt76/dma.c:163:9: error: use of
undeclared identifier 'mtk_wed_device_txfree_ring_setup'
ret = mtk_wed_device_txfree_ring_setup(wed, q->regs);
^
> drivers/net/wireless/mediatek/mt76/dma.c:165:23: error: no member
named 'txfree_ring' in 'struct mtk_wed_device'
q->wed_regs = wed->txfree_ring.reg_base;
~~~ ^
drivers/net/wireless/mediatek/mt76/dma.c:298:2: warning: unused variable
'_offset' [-Wunused-variable]
Q_WRITE(dev, q, cpu_idx, q->head);
^
drivers/net/wireless/mediatek/mt76/dma.c:24:6: note: expanded from macro
'Q_WRITE'
u32 _offset = offsetof(struct mt76_queue_regs, _field); \
^
drivers/net/wireless/mediatek/mt76/dma.c:314:10: warning: unused variable
'_offset' [-Wunused-variable]
last = Q_READ(dev, q, dma_idx);
^
drivers/net/wireless/mediatek/mt76/dma.c:11:6: note: expanded from macro
'Q_READ'
u32 _offset = offsetof(struct mt76_queue_regs, _field); \
^
drivers/net/wireless/mediatek/mt76/dma.c:326:11: warning: unused variable
'_offset' [-Wunused-variable]
last = Q_READ(dev, q, dma_idx);
^
drivers/net/wireless/mediatek/mt76/dma.c:11:6: note: expanded from macro
'Q_READ'
u32 _offset = offsetof(struct mt76_queue_regs, _field); \
^
drivers/net/wireless/mediatek/mt76/dma.c:634:13: warning: unused variable
'_offset' [-Wunused-variable]
dma_idx = Q_READ(dev, q, dma_idx);
^
drivers/net/wireless/mediatek/mt76/dma.c:11:6: note: expanded from macro
'Q_READ'
u32 _offset = offsetof(struct mt76_queue_regs, _field); \
^
drivers/net/wireless/mediatek/mt76/dma.c:643:15: warning: unused variable
'_offset' [-Wunused-variable]
dma_idx = Q_READ(dev, q, dma_idx);
^
drivers/net/wireless/mediatek/mt76/dma.c:11:6: note: expanded from macro
'Q_READ'
u32 _offset = offsetof(struct mt76_queue_regs, _field); \
^
11 warnings and 4 errors generated.
--
In file included from drivers/net/wireless/mediatek/mt76/tx.c:6:
In file included from drivers/net/wireless/mediatek/mt76/mt76.h:9:
In file included from include/linux/kernel.h:12:
In file included from include/linux/bitops.h:32:
In file included from arch/powerpc/include/asm/bitops.h:62:
arch/powerpc/include/asm/barrier.h:49:9: warning: '__lwsync' macro redefined
[-Wmacro-redefined]
#define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : :
:"memory")
^
<built-in>:309:9: note: previous definition is here
#define __lwsync __builtin_ppc_lwsync
^
> drivers/net/wireless/mediatek/mt76/tx.c:700:20: error: no member
named 'wlan' in 'struct mtk_wed_device'
token >=
wed->wlan.token_start)
~~~ ^
drivers/net/wireless/mediatek/mt76/tx.c:725:21: error: no member named 'wlan'
in 'struct mtk_wed_device'
token >= wed->wlan.token_start &&
~~~ ^
1 warning and 2 errors generated.
--
In file included from drivers/net/wireless/mediatek/mt76/mt7915/pci.c:7:
In file included from include/linux/kernel.h:12:
In file included from include/linux/bitops.h:32:
In file included from arch/powerpc/include/asm/bitops.h:62:
arch/powerpc/include/asm/barrier.h:49:9: warning: '__lwsync' macro redefined
[-Wmacro-redefined]
#define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : :
:"memory")
^
<built-in>:309:9: note: previous definition is here
#define __lwsync __builtin_ppc_lwsync
^
drivers/net/wireless/mediatek/mt76/mt7915/pci.c:100:25: warning: unused variable
'wed' [-Wunused-variable]
struct mtk_wed_device *wed = &dev->mt76.mmio.wed;
^
drivers/net/wireless/mediatek/mt76/mt7915/pci.c:165:25: warning: unused variable
'wed' [-Wunused-variable]
struct mtk_wed_device *wed = &dev->mt76.mmio.wed;
^
> drivers/net/wireless/mediatek/mt76/mt7915/pci.c:238:30: error: no
member named 'wlan' in 'struct mtk_wed_device'
dev->mt76.token_size = wed->wlan.token_start;
~~~ ^
drivers/net/wireless/mediatek/mt76/mt7915/pci.c:322:7: error: no member named
'wlan' in 'struct mtk_wed_device'
wed->wlan.pci_dev = pdev;
~~~ ^
drivers/net/wireless/mediatek/mt76/mt7915/pci.c:323:7: error: no member named
'wlan' in 'struct mtk_wed_device'
wed->wlan.wpdma_phys = pci_resource_start(pdev, 0) +
~~~ ^
drivers/net/wireless/mediatek/mt76/mt7915/pci.c:325:7: error: no member named
'wlan' in 'struct mtk_wed_device'
wed->wlan.nbuf = 4096;
~~~ ^
drivers/net/wireless/mediatek/mt76/mt7915/pci.c:326:7: error: no member named
'wlan' in 'struct mtk_wed_device'
wed->wlan.token_start = MT7915_TOKEN_SIZE - wed->wlan.nbuf - 1;
~~~ ^
drivers/net/wireless/mediatek/mt76/mt7915/pci.c:326:51: error: no member named
'wlan' in 'struct mtk_wed_device'
wed->wlan.token_start = MT7915_TOKEN_SIZE - wed->wlan.nbuf - 1;
~~~ ^
drivers/net/wireless/mediatek/mt76/mt7915/pci.c:327:7: error: no member named
'wlan' in 'struct mtk_wed_device'
wed->wlan.init_buf = mt7915_wed_init_buf;
~~~ ^
drivers/net/wireless/mediatek/mt76/mt7915/pci.c:328:7: error: no member named
'wlan' in 'struct mtk_wed_device'
wed->wlan.offload_enable = mt7915_wed_offload_enable;
~~~ ^
drivers/net/wireless/mediatek/mt76/mt7915/pci.c:329:7: error: no member named
'wlan' in 'struct mtk_wed_device'
wed->wlan.offload_disable = mt7915_wed_offload_disable;
~~~ ^
> drivers/net/wireless/mediatek/mt76/mt7915/pci.c:332:14: error: no
member named 'irq' in 'struct mtk_wed_device'
irq
= wed->irq;
~~~ ^
3 warnings and 10 errors generated.
--
In file included from drivers/net/wireless/mediatek/mt76/mt7915/main.c:4:
In file included from include/linux/etherdevice.h:20:
In file included from include/linux/if_ether.h:19:
In file included from include/linux/skbuff.h:13:
In file included from include/linux/kernel.h:12:
In file included from include/linux/bitops.h:32:
In file included from arch/powerpc/include/asm/bitops.h:62:
arch/powerpc/include/asm/barrier.h:49:9: warning: '__lwsync' macro redefined
[-Wmacro-redefined]
#define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : :
:"memory")
^
<built-in>:309:9: note: previous definition is here
#define __lwsync __builtin_ppc_lwsync
^
> drivers/net/wireless/mediatek/mt76/mt7915/main.c:1056:33: error:
no member named 'wdma_idx' in 'struct mtk_wed_device'
path->mtk_wdma.wdma_idx = wed->wdma_idx;
~~~ ^
1 warning and 1 error generated.
vim +154 drivers/net/wireless/mediatek/mt76/dma.c
22
23 #define Q_WRITE(_dev, _q, _field, _val) do { \
24 u32 _offset = offsetof(struct mt76_queue_regs, _field); \
25 if (IS_ENABLED(CONFIG_NET_MEDIATEK_SOC_WED) && \
26 (_q)->flags & MT_QFLAG_WED) \
27 mtk_wed_device_reg_write(&(_dev)->mmio.wed, \
28 ((_q)->wed_regs + _offset), \
29 _val); \
30 else \
31 writel(_val, &(_q)->regs->_field); \
32 } while (0)
33
34 static int mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q);
35
36 static struct mt76_txwi_cache *
37 mt76_alloc_txwi(struct mt76_dev *dev)
38 {
39 struct mt76_txwi_cache *t;
40 dma_addr_t addr;
41 u8 *txwi;
42 int size;
43
44 size = L1_CACHE_ALIGN(dev->drv->txwi_size + sizeof(*t));
45 txwi = devm_kzalloc(dev->dev, size, GFP_ATOMIC);
46 if (!txwi)
47 return NULL;
48
49 addr = dma_map_single(dev->dev, txwi, dev->drv->txwi_size,
50 DMA_TO_DEVICE);
51 t = (struct mt76_txwi_cache *)(txwi + dev->drv->txwi_size);
52 t->dma_addr = addr;
53
54 return t;
55 }
56
57 static struct mt76_txwi_cache *
58 __mt76_get_txwi(struct mt76_dev *dev)
59 {
60 struct mt76_txwi_cache *t = NULL;
61
62 spin_lock(&dev->lock);
63 if (!list_empty(&dev->txwi_cache)) {
64 t = list_first_entry(&dev->txwi_cache, struct mt76_txwi_cache,
65 list);
66 list_del(&t->list);
67 }
68 spin_unlock(&dev->lock);
69
70 return t;
71 }
72
73 static struct mt76_txwi_cache *
74 mt76_get_txwi(struct mt76_dev *dev)
75 {
76 struct mt76_txwi_cache *t = __mt76_get_txwi(dev);
77
78 if (t)
79 return t;
80
81 return mt76_alloc_txwi(dev);
82 }
83
84 void
85 mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t)
86 {
87 if (!t)
88 return;
89
90 spin_lock(&dev->lock);
91 list_add(&t->list, &dev->txwi_cache);
92 spin_unlock(&dev->lock);
93 }
94 EXPORT_SYMBOL_GPL(mt76_put_txwi);
95
96 static void
97 mt76_free_pending_txwi(struct mt76_dev *dev)
98 {
99 struct mt76_txwi_cache *t;
100
101 local_bh_disable();
102 while ((t = __mt76_get_txwi(dev)) != NULL)
103 dma_unmap_single(dev->dev, t->dma_addr, dev->drv->txwi_size,
104 DMA_TO_DEVICE);
105 local_bh_enable();
106 }
107
108 static void
109 mt76_dma_sync_idx(struct mt76_dev *dev, struct mt76_queue *q)
110 {
111 Q_WRITE(dev, q, desc_base, q->desc_dma);
112 Q_WRITE(dev, q, ring_size, q->ndesc);
113 q->head = Q_READ(dev, q, dma_idx);
114 q->tail = q->head;
115 }
116
117 static void
118 mt76_dma_queue_reset(struct mt76_dev *dev, struct mt76_queue *q)
119 {
120 int i;
121
122 if (!q)
123 return;
124
125 /* clear descriptors */
126 for (i = 0; i < q->ndesc; i++)
127 q->desc[i].ctrl = cpu_to_le32(MT_DMA_CTL_DMA_DONE);
128
129 Q_WRITE(dev, q, cpu_idx, 0);
130 Q_WRITE(dev, q, dma_idx, 0);
131 mt76_dma_sync_idx(dev, q);
132 }
133
134 static int
135 mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
136 {
137 struct mtk_wed_device *wed = &dev->mmio.wed;
138 int ret, type, ring;
139 u8 flags = q->flags;
140
141 if (!mtk_wed_device_active(wed))
142 q->flags &= ~MT_QFLAG_WED;
143
144 if (!(q->flags & MT_QFLAG_WED))
145 return 0;
146
147 type = FIELD_GET(MT_QFLAG_WED_TYPE, q->flags);
148 ring = FIELD_GET(MT_QFLAG_WED_RING, q->flags);
149
150 switch (type) {
151 case MT76_WED_Q_TX:
152 ret = mtk_wed_device_tx_ring_setup(wed, ring, q->regs);
153 if (!ret)
154 q->wed_regs = wed->tx_ring[ring].reg_base;
155 break;
156 case MT76_WED_Q_TXFREE:
157 /* WED txfree queue needs ring to be initialized before setup */
158 q->flags = 0;
159 mt76_dma_queue_reset(dev, q);
160 mt76_dma_rx_fill(dev, q);
161 q->flags = flags;
162
163 ret = mtk_wed_device_txfree_ring_setup(wed, q->regs);
164 if (!ret)
165 q->wed_regs = wed->txfree_ring.reg_base;
166 break;
167 default:
168 ret = -EINVAL;
169 }
170
171 return ret;
172 }
173
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org