Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtw88: pci: reset dma when reset pci trx ring

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>

authored by

Chin-Yen Lee and committed by
Kalle Valo
fd30e891 25cab7e7

+10 -9
+10 -9
drivers/net/wireless/realtek/rtw88/pci.c
··· 486 486 rtwpci->irq_enabled = false; 487 487 } 488 488 489 - static int rtw_pci_setup(struct rtw_dev *rtwdev) 490 - { 491 - rtw_pci_reset_trx_ring(rtwdev); 492 - 493 - return 0; 494 - } 495 - 496 489 static void rtw_pci_dma_reset(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci) 497 490 { 498 491 /* reset dma and rx tag */ 499 492 rtw_write32_set(rtwdev, RTK_PCI_CTRL, 500 493 BIT_RST_TRXDMA_INTF | BIT_RX_TAG_EN); 501 494 rtwpci->rx_tag = 0; 495 + } 496 + 497 + static int rtw_pci_setup(struct rtw_dev *rtwdev) 498 + { 499 + struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; 500 + 501 + rtw_pci_reset_trx_ring(rtwdev); 502 + rtw_pci_dma_reset(rtwdev, rtwpci); 503 + 504 + return 0; 502 505 } 503 506 504 507 static void rtw_pci_dma_release(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci) ··· 520 517 { 521 518 struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; 522 519 unsigned long flags; 523 - 524 - rtw_pci_dma_reset(rtwdev, rtwpci); 525 520 526 521 spin_lock_irqsave(&rtwpci->irq_lock, flags); 527 522 rtw_pci_enable_interrupt(rtwdev, rtwpci);