MT_INT_TX_RX_DONE_EXT);
}
+ __mt7996_npu_hw_init(dev);
+
clear_bit(MT76_MCU_RESET, &dev->mphy.state);
mt7996_for_each_phy(dev, phy)
clear_bit(MT76_RESET, &phy->mt76->state);
mutex_unlock(&dev->mt76.mutex);
- mt7996_npu_hw_init(dev);
-
mt7996_for_each_phy(dev, phy)
ieee80211_queue_delayed_work(hw, &phy->mt76->mac_work,
MT7996_WATCHDOG_TIME);
int mt7996_dma_rro_init(struct mt7996_dev *dev);
#ifdef CONFIG_MT7996_NPU
+int __mt7996_npu_hw_init(struct mt7996_dev *dev);
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_init(struct mt7996_dev *dev)
{
return 0;
&dev->mt76.q_rx[MT_RXQ_NPU1]);
}
-int mt7996_npu_hw_init(struct mt7996_dev *dev)
+int __mt7996_npu_hw_init(struct mt7996_dev *dev)
{
struct airoha_npu *npu;
- int i, err = 0;
-
- mutex_lock(&dev->mt76.mutex);
+ int i, err;
npu = rcu_dereference_protected(dev->mt76.mmio.npu, &dev->mt76.mutex);
if (!npu)
- goto unlock;
+ return 0;
err = mt7996_npu_offload_init(dev, npu);
if (err)
- goto unlock;
+ return err;
if (is_mt7996(&dev->mt76))
err = mt7996_npu_rxd_init(dev, npu);
err = mt7992_npu_rxd_init(dev, npu);
if (err)
- goto unlock;
+ return err;
err = mt7996_npu_txd_init(dev, npu);
if (err)
- goto unlock;
+ return err;
err = mt7996_npu_rx_event_init(dev, npu);
if (err)
- goto unlock;
+ return err;
err = mt7996_npu_set_pcie_addr(dev, npu);
if (err)
- goto unlock;
+ return err;
err = mt7996_npu_tx_done_init(dev, npu);
if (err)
- goto unlock;
+ return err;
for (i = MT_RXQ_NPU0; i <= MT_RXQ_NPU1; i++)
airoha_npu_wlan_enable_irq(npu, i - MT_RXQ_NPU0);
-unlock:
+
+ return 0;
+}
+
+int mt7996_npu_hw_init(struct mt7996_dev *dev)
+{
+ int err;
+
+ mutex_lock(&dev->mt76.mutex);
+ err = __mt7996_npu_hw_init(dev);
mutex_unlock(&dev->mt76.mutex);
return err;