Add NPU offload support to MT7996 driver
Subsystems (2)
Lorenzo Bianconi
maintainerv2 cover Add NPU offload support to MT7996 driver
Introduce Airoha NPU support to MT7996 driver. NPU is used to enable traffic forward offloading between the MT76 NIC and Airoha ethernet one available on the Airoha EN7581 SoC using Netfilter Flowtable APIs. This series is based on the following net-next series for airoha_npu driver:
https://lore.kernel.org/netdev/[email protected]/
Changes in RFCv2:
- Do not compile MT76 NPU codebase if NPU support is disabled in airoha-eth driver.
- Remove dev_warn() in mt7996_pci_probe() if NPU support is disabled.
Lorenzo Bianconi (4):
wifi: mt76: Move Q_READ/Q_WRITE definitions in dma.h
wifi: mt76: Add mt76_dev pointer in mt76_queue struct.
wifi: mt76: Introduce the NPU generic layer
wifi: mt76: mt7996: Add NPU offload support to MT7996 driver
drivers/net/wireless/mediatek/mt76/Makefile | 1 + drivers/net/wireless/mediatek/mt76/dma.c | 71 ++-- drivers/net/wireless/mediatek/mt76/dma.h | 67 ++++ drivers/net/wireless/mediatek/mt76/mac80211.c | 6 +- drivers/net/wireless/mediatek/mt76/mt76.h | 91 +++++ .../wireless/mediatek/mt76/mt7996/Makefile | 1 + .../net/wireless/mediatek/mt76/mt7996/dma.c | 9 +- .../net/wireless/mediatek/mt76/mt7996/init.c | 4 + .../net/wireless/mediatek/mt76/mt7996/mac.c | 3 + .../net/wireless/mediatek/mt76/mt7996/main.c | 15 +- .../net/wireless/mediatek/mt76/mt7996/mmio.c | 13 +- .../wireless/mediatek/mt76/mt7996/mt7996.h | 21 + .../net/wireless/mediatek/mt76/mt7996/npu.c | 284 +++++++++++++ .../net/wireless/mediatek/mt76/mt7996/pci.c | 3 + drivers/net/wireless/mediatek/mt76/npu.c | 378 ++++++++++++++++++ 15 files changed, 921 insertions(+), 46 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt7996/npu.c create mode 100644 drivers/net/wireless/mediatek/mt76/npu.c
Signature · 1 line
2.50.1
Lorenzo Bianconi
maintainerRFC v2 1/4 wifi: mt76: Move Q_READ/Q_WRITE definitions in dma.h
This is a preliminary patch to enable traffic forward offloading between the MT76 NIC and Airoha ethernet one via the Airoha NPU module available on the Airoha EN7581 SoC.
--- drivers/net/wireless/mediatek/mt76/dma.c | 31 ------------------------ drivers/net/wireless/mediatek/mt76/dma.h | 31 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 31 deletions(-)
drivers/net/wireless/mediatek/mt76/dma.c +0 -31
@@ -7,37 +7,6 @@#include "mt76.h" #include "dma.h" -#if IS_ENABLED (CONFIG_NET_MEDIATEK_SOC_WED ) - -#define Q_READ (_q, _field) ({ \ - u32 _offset = offsetof(struct mt76_queue_regs, _field); \ - u32 _val; \ - if ((_q)->flags & MT_QFLAG_WED) \ - _val = mtk_wed_device_reg_read((_q)->wed, \ - ((_q)->wed_regs + \ - _offset)); \ - else \ - _val = readl(&(_q)->regs->_field); \ - _val; \ -}) - -#define Q_WRITE (_q, _field, _val) do { \ - u32 _offset = offsetof(struct mt76_queue_regs, _field); \ - if ((_q)->flags & MT_QFLAG_WED) \ - mtk_wed_device_reg_write((_q)->wed, \ - ((_q)->wed_regs + _offset), \ - _val); \ - else \ - writel(_val, &(_q)->regs->_field); \ -} while (0) - -#else - -#define Q_READ (_q, _field) readl(&(_q)->regs->_field) -#define Q_WRITE (_q, _field, _val) writel(_val, &(_q)->regs->_field) - -#endif -static struct mt76_txwi_cache *mt76_alloc_txwi (struct mt76_dev *dev) {
drivers/net/wireless/mediatek/mt76/dma.h +31 -0
@@ -41,6 +41,37 @@#define MT_FCE_INFO_LEN 4#define MT_RX_RXWI_LEN 32 +#if IS_ENABLED (CONFIG_NET_MEDIATEK_SOC_WED ) + +#define Q_READ (_q, _field) ({ \ + u32 _offset = offsetof(struct mt76_queue_regs, _field); \ + u32 _val; \ + if ((_q)->flags & MT_QFLAG_WED) \ + _val = mtk_wed_device_reg_read((_q)->wed, \ + ((_q)->wed_regs + \ + _offset)); \ + else \ + _val = readl(&(_q)->regs->_field); \ + _val; \ +}) + +#define Q_WRITE (_q, _field, _val) do { \ + u32 _offset = offsetof(struct mt76_queue_regs, _field); \ + if ((_q)->flags & MT_QFLAG_WED) \ + mtk_wed_device_reg_write((_q)->wed, \ + ((_q)->wed_regs + _offset), \ + _val); \ + else \ + writel(_val, &(_q)->regs->_field); \ +} while (0) + +#else + +#define Q_READ (_q, _field) readl(&(_q)->regs->_field) +#define Q_WRITE (_q, _field, _val) writel(_val, &(_q)->regs->_field) + +#endif +struct mt76_desc {__le32 buf0;__le32 ctrl;
Signature · 1 line
2.50.1
Lorenzo Bianconi
maintainerRFC v2 2/4 wifi: mt76: Add mt76_dev pointer in mt76_queue struct.
In reply to Lorenzo BianconiThis is a preliminary patch to enable traffic forward offloading via the Airoha NPU module available on the Airoha EN7581 SoC.
--- drivers/net/wireless/mediatek/mt76/dma.c | 1 + drivers/net/wireless/mediatek/mt76/mt76.h | 1 + 2 files changed, 2 insertions(+)
drivers/net/wireless/mediatek/mt76/dma.c +1 -0
@@ -669,6 +669,7 @@ mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q, q->ndesc = n_desc; q->buf_size = bufsize; q->hw_idx = idx; + q->dev = dev; size =mt76_queue_is_wed_rro_ind (q) ?sizeof (struct mt76_wed_rro_desc ) :sizeof (struct mt76_desc );
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -234,6 +234,7 @@ struct mt76_queue {u16 flags;struct mtk_wed_device *wed; +struct mt76_dev *dev;u32 wed_regs;dma_addr_t desc_dma;
Signature · 1 line
2.50.1
Lorenzo Bianconi
maintainerRFC v2 3/4 wifi: mt76: Introduce the NPU generic layer
In reply to Lorenzo BianconiAdd the NPU generic layer in mt76 module. NPU will be used to enable traffic forward offloading between the MT76 NIC and Airoha ethernet one available on the Airoha EN7581 SoC using Netfilter Flowtable APIs.
--- drivers/net/wireless/mediatek/mt76/Makefile | 1 + drivers/net/wireless/mediatek/mt76/dma.c | 39 +- drivers/net/wireless/mediatek/mt76/dma.h | 36 ++ drivers/net/wireless/mediatek/mt76/mac80211.c | 6 +- drivers/net/wireless/mediatek/mt76/mt76.h | 90 +++++ drivers/net/wireless/mediatek/mt76/npu.c | 378 ++++++++++++++++++ 6 files changed, 544 insertions(+), 6 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/npu.c
drivers/net/wireless/mediatek/mt76/Makefile +1 -0
@@ -12,6 +12,7 @@ mt76-y := \ mmio.o util.o trace.o dma.o mac80211.o debugfs.o eeprom.o \ tx.o agg-rx.o mcu.o wed.o scan.o channel.o +mt76-$(CONFIG_NET_AIROHA_NPU) += npu.o mt76-$(CONFIG_PCI) += pci.o mt76-$(CONFIG_NL80211_TESTMODE) += testmode.o
drivers/net/wireless/mediatek/mt76/dma.c +34 -5
@@ -162,6 +162,11 @@ mt76_dma_sync_idx(struct mt76_dev *dev, struct mt76_queue *q)Q_WRITE (q, ring_size,MT_DMA_RRO_EN | q->ndesc); else Q_WRITE(q, ring_size, q->ndesc); + +if (mt76_queue_is_npu_tx (q)) { +writel (q->desc_dma, &q->regs->desc_base); +writel (q->ndesc, &q->regs->ring_size); + } q->head =Q_READ (q, dma_idx); q->tail = q->head; }
@@ -172,7 +177,7 @@ void __mt76_dma_queue_reset(struct mt76_dev *dev, struct mt76_queue *q,if (!q || !q->ndesc)return ; -if (!mt76_queue_is_wed_rro_ind (q)) { +if (!mt76_queue_is_wed_rro_ind (q) && !mt76_queue_is_npu (q)) {int i;/* clear descriptors */
@@ -364,6 +369,7 @@ mt76_dma_tx_cleanup(struct mt76_dev *dev, struct mt76_queue *q, bool flush)while (q->queued >0 && q->tail != last) {mt76_dma_tx_cleanup_idx (dev, q, q->tail, &entry); +mt76_npu_txdesc_cleanup (q, q->tail);mt76_queue_tx_complete (dev, q, &entry);if (entry.txwi) {
@@ -522,6 +528,10 @@ mt76_dma_tx_queue_skb(struct mt76_phy *phy, struct mt76_queue *q,if (test_bit (MT76_RESET , &phy->state)) goto free_skb; +/* FIXME: Take into account unlinear skbs */ +if (mt76_npu_device_active (dev) &&skb_linearize (skb)) + goto free_skb; + t =mt76_get_txwi (dev);if (!t) goto free_skb;
@@ -569,6 +579,9 @@ mt76_dma_tx_queue_skb(struct mt76_phy *phy, struct mt76_queue *q,if (ret <0 ) goto unmap; +if (mt76_queue_is_npu_tx (q)) +return mt76_npu_dma_add_buf (phy, q, skb, &tx_info.buf[1 ], txwi); +return mt76_dma_add_buf (dev, q, tx_info.buf, tx_info.nbuf, tx_info.info, tx_info.skb, t);
@@ -671,8 +684,15 @@ mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q, q->hw_idx = idx; q->dev = dev; - size =mt76_queue_is_wed_rro_ind (q) ?sizeof (struct mt76_wed_rro_desc ) - :sizeof (struct mt76_desc ); +if (mt76_queue_is_wed_rro_ind (q)) + size =sizeof (struct mt76_wed_rro_desc ); +else if (mt76_queue_is_npu_tx (q)) + size =sizeof (struct airoha_npu_tx_dma_desc ); +else if (mt76_queue_is_npu_rx (q)) + size =sizeof (struct airoha_npu_rx_dma_desc ); +else + size =sizeof (struct mt76_desc ); + q->desc =dmam_alloc_coherent (dev->dma_dev, q->ndesc * size, &q->desc_dma,GFP_KERNEL );if (!q->desc)
@@ -700,6 +720,7 @@ mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q,if (ret)return ret; +mt76_npu_queue_setup (dev, q); ret =mt76_wed_dma_setup (dev, q, false);if (ret)return ret;
@@ -724,6 +745,11 @@ mt76_dma_rx_cleanup(struct mt76_dev *dev, struct mt76_queue *q)if (!q->ndesc)return ; +if (mt76_queue_is_npu (q)) { +mt76_npu_queue_cleanup (dev, q); +return ; + } + do { spin_lock_bh(&q->lock); buf = mt76_dma_dequeue(dev, q, true, NULL, NULL, &more, NULL);
@@ -753,7 +779,7 @@ mt76_dma_rx_reset(struct mt76_dev *dev, enum mt76_rxq_id qid)if (!q->ndesc)return ; -if (!mt76_queue_is_wed_rro_ind (q)) { +if (!mt76_queue_is_wed_rro_ind (q) && !mt76_queue_is_npu (q)) {int i;for (i =0 ; i < q->ndesc; i++)
@@ -773,7 +799,10 @@ mt76_dma_rx_reset(struct mt76_dev *dev, enum mt76_rxq_id qid)return ;mt76_dma_sync_idx (dev, q); -mt76_dma_rx_fill_buf (dev, q, false); +if (mt76_queue_is_npu (q)) +mt76_npu_fill_rx_queue (dev, q); +else +mt76_dma_rx_fill (dev, q, false); } static void
drivers/net/wireless/mediatek/mt76/dma.h +36 -0
@@ -65,6 +65,42 @@writel (_val, &(_q)->regs->_field); \ } while (0) +#elif (IS_BUILTIN (CONFIG_NET_AIROHA_NPU ) ||IS_MODULE (CONFIG_NET_AIROHA_NPU )) + +#define Q_READ (_q, _field) ({ \ + u32 _offset = offsetof(struct mt76_queue_regs, _field); \ + u32 _val; \ + if ((_q)->flags & MT_QFLAG_NPU) { \ + struct airoha_npu *npu; \ + \ + rcu_read_lock(); \ + npu = rcu_dereference(q->dev->mmio.npu); \ + if (npu) \ + regmap_read(npu->regmap, \ + ((_q)->wed_regs + _offset), &_val); \ + rcu_read_unlock(); \ + } else { \ + _val = readl(&(_q)->regs->_field); \ + } \ + _val; \ +}) + +#define Q_WRITE (_q, _field, _val) do { \ + u32 _offset = offsetof(struct mt76_queue_regs, _field); \ + if ((_q)->flags & MT_QFLAG_NPU) { \ + struct airoha_npu *npu; \ + \ + rcu_read_lock(); \ + npu = rcu_dereference(q->dev->mmio.npu); \ + if (npu) \ + regmap_write(npu->regmap, \ + ((_q)->wed_regs + _offset), _val); \ + rcu_read_unlock(); \ + } else { \ + writel(_val, &(_q)->regs->_field); \ + } \ +} while (0) +#else #define Q_READ (_q, _field) readl(&(_q)->regs->_field)
drivers/net/wireless/mediatek/mt76/mac80211.c +5 -1
@@ -630,6 +630,8 @@ int mt76_create_page_pool(struct mt76_dev *dev, struct mt76_queue *q)case MT_RXQ_MAIN :case MT_RXQ_BAND1 :case MT_RXQ_BAND2 : +case MT_RXQ_NPU0 : +case MT_RXQ_NPU1 : pp_params.pool_size =256 ;break ;default :
@@ -814,6 +816,7 @@ void mt76_free_device(struct mt76_dev *dev)destroy_workqueue (dev->wq); dev->wq =NULL ; } +mt76_npu_deinit (dev);ieee80211_free_hw (dev->hw); }EXPORT_SYMBOL_GPL (mt76_free_device);
@@ -1509,7 +1512,8 @@ void mt76_rx_poll_complete(struct mt76_dev *dev, enum mt76_rxq_id q,while ((skb =__skb_dequeue (&dev->rx_skb[q])) !=NULL ) {mt76_check_sta (dev, skb); -if (mtk_wed_device_active (&dev->mmio.wed)) +if (mtk_wed_device_active (&dev->mmio.wed) || +mt76_npu_device_active (dev))__skb_queue_tail (&frames, skb);else mt76_rx_aggr_reorder (skb, &frames);
drivers/net/wireless/mediatek/mt76/mt76.h +90 -0
132 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/npu.c new file +378 -0
378 lines not on this page · raw message
Signature · 1 line
2.50.1
Lorenzo Bianconi
maintainerRFC v2 4/4 wifi: mt76: mt7996: Add NPU offload support to MT7996 driver
In reply to Lorenzo BianconiIntroduce Airoha NPU support to MT7996 driver. NPU is used to enable traffic forward offloading between the MT76 NIC and Airoha ethernet one available on the Airoha EN7581 SoC using Netfilter Flowtable APIs.
--- .../wireless/mediatek/mt76/mt7996/Makefile | 1 + .../net/wireless/mediatek/mt76/mt7996/dma.c | 9 +- .../net/wireless/mediatek/mt76/mt7996/init.c | 4 + .../net/wireless/mediatek/mt76/mt7996/mac.c | 3 + .../net/wireless/mediatek/mt76/mt7996/main.c | 15 +- .../net/wireless/mediatek/mt76/mt7996/mmio.c | 13 +- .../wireless/mediatek/mt76/mt7996/mt7996.h | 21 ++ .../net/wireless/mediatek/mt76/mt7996/npu.c | 284 ++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7996/pci.c | 3 + 9 files changed, 344 insertions(+), 9 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt7996/npu.c
drivers/net/wireless/mediatek/mt76/mt7996/Makefile +1 -0
@@ -5,4 +5,5 @@ obj-$(CONFIG_MT7996E) += mt7996e.o mt7996e-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \ debugfs.o mmio.o +mt7996e-$(CONFIG_NET_AIROHA_NPU) += npu.o mt7996e-$(CONFIG_DEV_COREDUMP) += coredump.o
drivers/net/wireless/mediatek/mt76/mt7996/dma.c +8 -1
@@ -23,6 +23,9 @@ int mt7996_init_tx_queues(struct mt7996_phy *phy, int idx, int n_desc, flags =MT_WED_Q_TX (idx); } +if (mt76_npu_device_active (&dev->mt76)) + flags =MT_NPU_Q_TX (phy->mt76->band_idx); +return mt76_connac_init_tx_queues (phy->mt76, idx, n_desc, ring_base, wed, flags); }
@@ -302,7 +305,7 @@ void mt7996_dma_start(struct mt7996_dev *dev, bool reset, bool wed_reset)mtk_wed_device_start (wed, wed_irq_mask); } -if (!mt7996_has_wa (dev)) +if (!mt7996_has_wa (dev) ||mt76_npu_device_active (&dev->mt76)) irq_mask &= ~(MT_INT_RX (MT_RXQ_MAIN_WA ) |MT_INT_RX (MT_RXQ_BAND1_WA )); irq_mask = reset ?MT_INT_MCU_CMD : irq_mask;
@@ -705,6 +708,10 @@ int mt7996_dma_init(struct mt7996_dev *dev) } } + ret =mt7996_npu_rx_queues_init (dev); +if (ret) +return ret; + ret =mt76_init_queues (dev, mt76_dma_rx_poll);if (ret <0 )return ret;
drivers/net/wireless/mediatek/mt76/mt7996/init.c +4 -0
@@ -1511,6 +1511,10 @@ int mt7996_register_device(struct mt7996_dev *dev)if (ret)return ret; + ret =mt7996_npu_hw_init (dev); +if (ret) +return ret; + ret =mt76_register_device (&dev->mt76, true, mt76_rates,ARRAY_SIZE (mt76_rates));if (ret)
drivers/net/wireless/mediatek/mt76/mt7996/mac.c +3 -0
@@ -2018,6 +2018,8 @@ void mt7996_mac_reset_work(struct work_struct *work)mutex_lock (&dev->mt76.mutex); +mt7996_npu_hw_stop (dev); +mt76_wr (dev,MT_MCU_INT_EVENT ,MT_MCU_INT_EVENT_DMA_STOPPED );if (mt7996_wait_reset_state (dev,MT_MCU_CMD_RESET_DONE )) {
@@ -2092,6 +2094,7 @@ void mt7996_mac_reset_work(struct work_struct *work)mutex_unlock (&dev->mt76.mutex); +mt7996_npu_hw_init (dev);mt7996_update_beacons (dev); ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
drivers/net/wireless/mediatek/mt76/mt7996/main.c +9 -6
@@ -2054,7 +2054,6 @@ mt7996_set_radar_background(struct ieee80211_hw *hw,return ret; } -#ifdef CONFIG_NET_MEDIATEK_SOC_WED static int mt7996_net_fill_forward_path(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
@@ -2090,12 +2089,18 @@ mt7996_net_fill_forward_path(struct ieee80211_hw *hw,if (phy != &dev->phy && phy->mt76->band_idx ==MT_BAND2 ) wed = &dev->mt76.mmio.wed_hif2; -if (!mtk_wed_device_active (wed)) +if (!mtk_wed_device_active (wed) && + !mt76_npu_device_active (&dev->mt76))return -ENODEV ; path->type =DEV_PATH_MTK_WDMA ; path->dev = ctx->dev; - path->mtk_wdma.wdma_idx = wed->wdma_idx; +#ifdef CONFIG_NET_MEDIATEK_SOC_WED +if (mtk_wed_device_active (wed)) + path->mtk_wdma.wdma_idx = wed->wdma_idx; + else +#endif + path->mtk_wdma.wdma_idx = link->phy->mt76->band_idx; path->mtk_wdma.bss = mlink->idx; path->mtk_wdma.queue =0 ; path->mtk_wdma.wcid = msta_link->wcid.idx;
@@ -2106,8 +2111,6 @@ mt7996_net_fill_forward_path(struct ieee80211_hw *hw,return 0 ; } -#endif - static int mt7996_change_vif_links(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 old_links, u16 new_links,
@@ -2168,8 +2171,8 @@ const struct ieee80211_ops mt7996_ops = { .sta_add_debugfs = mt7996_sta_add_debugfs, #endif .set_radar_background = mt7996_set_radar_background, -#ifdef CONFIG_NET_MEDIATEK_SOC_WED .net_fill_forward_path = mt7996_net_fill_forward_path, +#ifdef CONFIG_NET_MEDIATEK_SOC_WED .net_setup_tc = mt76_wed_net_setup_tc, #endif .change_vif_links = mt7996_change_vif_links,
drivers/net/wireless/mediatek/mt76/mt7996/mmio.c +11 -2
@@ -671,9 +671,18 @@ void mt7996_dual_hif_set_irq_mask(struct mt7996_dev *dev, bool write_reg,static void mt7996_rx_poll_complete (struct mt76_dev *mdev,enum mt76_rxq_id q) { - struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76); +if (q ==MT_RXQ_NPU0 || q ==MT_RXQ_NPU1 ) { +struct airoha_npu *npu; + + npu =rcu_dereference (mdev->mmio.npu); +if (npu) +airoha_npu_wlan_enable_irq (npu, q -MT_RXQ_NPU0 ); + }else { + struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, + mt76); -mt7996_irq_enable (dev,MT_INT_RX (q)); +mt7996_irq_enable (dev,MT_INT_RX (q)); + } }/* TODO: support 2/4/6/8 MSI-X vectors */
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h +21 -0
@@ -790,4 +790,25 @@ int mt7996_mtk_init_debugfs(struct mt7996_phy *phy, struct dentry *dir);int mt7996_dma_rro_init (struct mt7996_dev *dev);#endif /* CONFIG_NET_MEDIATEK_SOC_WED */ +#if (IS_BUILTIN (CONFIG_NET_AIROHA_NPU ) ||IS_MODULE (CONFIG_NET_AIROHA_NPU )) +int mt7996_npu_hw_init (struct mt7996_dev *dev); +int mt7996_npu_hw_stop (struct mt7996_dev *dev); +int mt7996_npu_rx_queues_init (struct mt7996_dev *dev); +#else +static inline int mt7996_npu_hw_init (struct mt7996_dev *dev) +{ +return 0 ; +} + +static inline int mt7996_npu_hw_stop (struct mt7996_dev *dev) +{ +return 0 ; +} + +static inline int mt7996_npu_rx_queues_init (struct mt7996_dev *dev) +{ +return 0 ; +} +#endif /* CONFIG_NET_AIROHA_NPU */ +#endif
drivers/net/wireless/mediatek/mt76/mt7996/npu.c new file +284 -0
284 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7996/pci.c +3 -0
@@ -138,6 +138,9 @@ static int mt7996_pci_probe(struct pci_dev *pdev,mt7996_wfsys_reset (dev); hif2 =mt7996_pci_init_hif2 (pdev); +mt76_npu_init (mdev,pci_resource_start (pdev,0 ), + pdev->bus &&pci_domain_nr (pdev->bus) ?3 :2 ); + ret =mt7996_mmio_wed_init (dev, pdev, false, &irq);if (ret <0 ) goto free_wed_or_irq_vector;
Signature · 1 line
2.50.1
kernel test robot
build botRe: [RFC mt76 v2 3/4] wifi: mt76: Introduce the NPU generic layer
In reply to Lorenzo Bianconikernel test robot noticed the following build errors:
Hi Lorenzo,
[This is a private test report for your RFC patch.] kernel test robot noticed the following build errors:
[auto build test ERROR on wireless-next/main]
[also build test ERROR on wireless/main linus/master v6.16-rc7 next-20250723] [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#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Lorenzo-Bianconi/wifi-mt76-Move-Q_READ-Q_WRITE-definitions-in-dma-h/20250722-165253 base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main patch link: https://lore.kernel.org/r/112fcef21bf490a2fa2c58ab1e4822756fe3c601.1753173330.git.lorenzo%40kernel.org patch subject: [RFC mt76 v2 3/4] wifi: mt76: Introduce the NPU generic layer config: x86_64-buildonly-randconfig-006-20250723 (https://download.01.org/0day-ci/archive/20250723/[email protected]/config) compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250723/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All errors (new ones prefixed by >>):
In file included from drivers/net/wireless/mediatek/mt76/mt76x2/../mt76x02.h:12,
from drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h:23,
from drivers/net/wireless/mediatek/mt76/mt76x2/init.c:7:
>> drivers/net/wireless/mediatek/mt76/mt76x2/../mt76.h:17:10: fatal error: linux/soc/airoha/airoha_offload.h: No such file or directory 17 | #include <linux/soc/airoha/airoha_offload.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
--
In file included from drivers/net/wireless/mediatek/mt76/mt7615/../mt76_connac.h:7,
from drivers/net/wireless/mediatek/mt76/mt7615/../mt76_connac_mcu.h:7,
from drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h:11,
from drivers/net/wireless/mediatek/mt76/mt7615/mcu.c:9:
>> drivers/net/wireless/mediatek/mt76/mt7615/../mt76.h:17:10: fatal error: linux/soc/airoha/airoha_offload.h: No such file or directory 17 | #include <linux/soc/airoha/airoha_offload.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
vim +17 drivers/net/wireless/mediatek/mt76/mt76x2/../mt76.h
8
9 #include <linux/kernel.h>
10 #include <linux/io.h>
11 #include <linux/spinlock.h>
12 #include <linux/skbuff.h>
13 #include <linux/leds.h>
14 #include <linux/usb.h>
15 #include <linux/average.h>
16 #include <linux/soc/mediatek/mtk_wed.h>
> 17 #include <linux/soc/airoha/airoha_offload.h>
18 #include <net/mac80211.h>
19 #include <net/page_pool/helpers.h>
20 #include "util.h"
21 #include "testmode.h"
22 Signature · 2 lines
0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki