rtw88: pci: reset dma when reset pci trx ring
authorChin-Yen Lee <timlee@realtek.com>
Thu, 19 Dec 2019 08:58:11 +0000 (16:58 +0800)
committerKalle Valo <kvalo@codeaurora.org>
Sun, 26 Jan 2020 15:37:00 +0000 (17:37 +0200)
When PCI trx rings are reset, the DMA engine should also be reset.
Otherswise, the rx_tag of rx flow is not synchronous to hw.

Remove DMA reset when rtw_pci_start() as we added it in
rtw_pci_setup().

Signed-off-by: Chin-Yen Lee <timlee@realtek.com>
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Reviewed-by: Chris Chiu <chiu@endlessm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/realtek/rtw88/pci.c

index 068f1be..c394df4 100644 (file)
@@ -486,13 +486,6 @@ static void rtw_pci_disable_interrupt(struct rtw_dev *rtwdev,
        rtwpci->irq_enabled = false;
 }
 
-static int rtw_pci_setup(struct rtw_dev *rtwdev)
-{
-       rtw_pci_reset_trx_ring(rtwdev);
-
-       return 0;
-}
-
 static void rtw_pci_dma_reset(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci)
 {
        /* reset dma and rx tag */
@@ -501,6 +494,16 @@ static void rtw_pci_dma_reset(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci)
        rtwpci->rx_tag = 0;
 }
 
+static int rtw_pci_setup(struct rtw_dev *rtwdev)
+{
+       struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+
+       rtw_pci_reset_trx_ring(rtwdev);
+       rtw_pci_dma_reset(rtwdev, rtwpci);
+
+       return 0;
+}
+
 static void rtw_pci_dma_release(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci)
 {
        struct rtw_pci_tx_ring *tx_ring;
@@ -518,8 +521,6 @@ static int rtw_pci_start(struct rtw_dev *rtwdev)
        struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
        unsigned long flags;
 
-       rtw_pci_dma_reset(rtwdev, rtwpci);
-
        spin_lock_irqsave(&rtwpci->irq_lock, flags);
        rtw_pci_enable_interrupt(rtwdev, rtwpci);
        spin_unlock_irqrestore(&rtwpci->irq_lock, flags);