Commit 1d5f5d55 authored by Sujuan Chen's avatar Sujuan Chen Committed by Felix Fietkau
Browse files

wifi: mt76: dma: add reset to mt76_dma_wed_setup signature



Export mt76_dma_wed_setup routine. This is a preliminary patch to
introduce proper wed reset support.

Tested-by: default avatarDaniel Golle <daniel@makrotopia.org>
Co-developed-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarSujuan Chen <sujuan.chen@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent ba01944a
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -626,14 +626,17 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q,
	return frames;
}

static int
mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
int mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q, bool reset)
{
#ifdef CONFIG_NET_MEDIATEK_SOC_WED
	struct mtk_wed_device *wed = &dev->mmio.wed;
	int ret, type, ring;
	u8 flags = q->flags;
	u8 flags;

	if (!q || !q->ndesc)
		return -EINVAL;

	flags = q->flags;
	if (!mtk_wed_device_active(wed))
		q->flags &= ~MT_QFLAG_WED;

@@ -645,7 +648,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)

	switch (type) {
	case MT76_WED_Q_TX:
		ret = mtk_wed_device_tx_ring_setup(wed, ring, q->regs, false);
		ret = mtk_wed_device_tx_ring_setup(wed, ring, q->regs, reset);
		if (!ret)
			q->wed_regs = wed->tx_ring[ring].reg_base;
		break;
@@ -661,7 +664,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
			q->wed_regs = wed->txfree_ring.reg_base;
		break;
	case MT76_WED_Q_RX:
		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs, false);
		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs, reset);
		if (!ret)
			q->wed_regs = wed->rx_ring[ring].reg_base;
		break;
@@ -674,6 +677,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
	return 0;
#endif
}
EXPORT_SYMBOL_GPL(mt76_dma_wed_setup);

static int
mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q,
@@ -704,7 +708,7 @@ mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q,
	if (ret)
		return ret;

	ret = mt76_dma_wed_setup(dev, q);
	ret = mt76_dma_wed_setup(dev, q, false);
	if (ret)
		return ret;

+1 −0
Original line number Diff line number Diff line
@@ -56,5 +56,6 @@ enum mt76_mcu_evt_type {
int mt76_dma_rx_poll(struct napi_struct *napi, int budget);
void mt76_dma_attach(struct mt76_dev *dev);
void mt76_dma_cleanup(struct mt76_dev *dev);
int mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q, bool reset);

#endif