@@ -50,23 +50,37 @@ static void mt7915_dma_config(struct mt7915_dev *dev)
5050#define TXQ_CONFIG (q , wfdma , int , id ) Q_CONFIG(__TXQ(q), (wfdma), (int), (id))
5151
5252 if (is_mt7915 (& dev -> mt76 )) {
53- RXQ_CONFIG (MT_RXQ_MAIN , WFDMA0 , MT_INT_RX_DONE_BAND0 , MT7915_RXQ_BAND0 );
54- RXQ_CONFIG (MT_RXQ_MCU , WFDMA1 , MT_INT_RX_DONE_WM , MT7915_RXQ_MCU_WM );
55- RXQ_CONFIG (MT_RXQ_MCU_WA , WFDMA1 , MT_INT_RX_DONE_WA , MT7915_RXQ_MCU_WA );
56- RXQ_CONFIG (MT_RXQ_BAND1 , WFDMA0 , MT_INT_RX_DONE_BAND1 , MT7915_RXQ_BAND1 );
57- RXQ_CONFIG (MT_RXQ_BAND1_WA , WFDMA1 , MT_INT_RX_DONE_WA_EXT , MT7915_RXQ_MCU_WA_EXT );
58- RXQ_CONFIG (MT_RXQ_MAIN_WA , WFDMA1 , MT_INT_RX_DONE_WA_MAIN , MT7915_RXQ_MCU_WA );
53+ RXQ_CONFIG (MT_RXQ_MAIN , WFDMA0 , MT_INT_RX_DONE_BAND0 ,
54+ MT7915_RXQ_BAND0 );
55+ RXQ_CONFIG (MT_RXQ_MCU , WFDMA1 , MT_INT_RX_DONE_WM ,
56+ MT7915_RXQ_MCU_WM );
57+ RXQ_CONFIG (MT_RXQ_MCU_WA , WFDMA1 , MT_INT_RX_DONE_WA ,
58+ MT7915_RXQ_MCU_WA );
59+ RXQ_CONFIG (MT_RXQ_BAND1 , WFDMA0 , MT_INT_RX_DONE_BAND1 ,
60+ MT7915_RXQ_BAND1 );
61+ RXQ_CONFIG (MT_RXQ_BAND1_WA , WFDMA1 , MT_INT_RX_DONE_WA_EXT ,
62+ MT7915_RXQ_MCU_WA_EXT );
63+ RXQ_CONFIG (MT_RXQ_MAIN_WA , WFDMA1 , MT_INT_RX_DONE_WA_MAIN ,
64+ MT7915_RXQ_MCU_WA );
5965 TXQ_CONFIG (0 , WFDMA1 , MT_INT_TX_DONE_BAND0 , MT7915_TXQ_BAND0 );
6066 TXQ_CONFIG (1 , WFDMA1 , MT_INT_TX_DONE_BAND1 , MT7915_TXQ_BAND1 );
61- MCUQ_CONFIG (MT_MCUQ_WM , WFDMA1 , MT_INT_TX_DONE_MCU_WM , MT7915_TXQ_MCU_WM );
62- MCUQ_CONFIG (MT_MCUQ_WA , WFDMA1 , MT_INT_TX_DONE_MCU_WA , MT7915_TXQ_MCU_WA );
63- MCUQ_CONFIG (MT_MCUQ_FWDL , WFDMA1 , MT_INT_TX_DONE_FWDL , MT7915_TXQ_FWDL );
67+ MCUQ_CONFIG (MT_MCUQ_WM , WFDMA1 , MT_INT_TX_DONE_MCU_WM ,
68+ MT7915_TXQ_MCU_WM );
69+ MCUQ_CONFIG (MT_MCUQ_WA , WFDMA1 , MT_INT_TX_DONE_MCU_WA ,
70+ MT7915_TXQ_MCU_WA );
71+ MCUQ_CONFIG (MT_MCUQ_FWDL , WFDMA1 , MT_INT_TX_DONE_FWDL ,
72+ MT7915_TXQ_FWDL );
6473 } else {
65- RXQ_CONFIG (MT_RXQ_MCU , WFDMA0 , MT_INT_RX_DONE_WM , MT7916_RXQ_MCU_WM );
66- RXQ_CONFIG (MT_RXQ_BAND1_WA , WFDMA0 , MT_INT_RX_DONE_WA_EXT_MT7916 , MT7916_RXQ_MCU_WA_EXT );
67- MCUQ_CONFIG (MT_MCUQ_WM , WFDMA0 , MT_INT_TX_DONE_MCU_WM , MT7915_TXQ_MCU_WM );
68- MCUQ_CONFIG (MT_MCUQ_WA , WFDMA0 , MT_INT_TX_DONE_MCU_WA_MT7916 , MT7915_TXQ_MCU_WA );
69- MCUQ_CONFIG (MT_MCUQ_FWDL , WFDMA0 , MT_INT_TX_DONE_FWDL , MT7915_TXQ_FWDL );
74+ RXQ_CONFIG (MT_RXQ_MCU , WFDMA0 , MT_INT_RX_DONE_WM ,
75+ MT7916_RXQ_MCU_WM );
76+ RXQ_CONFIG (MT_RXQ_BAND1_WA , WFDMA0 , MT_INT_RX_DONE_WA_EXT_MT7916 ,
77+ MT7916_RXQ_MCU_WA_EXT );
78+ MCUQ_CONFIG (MT_MCUQ_WM , WFDMA0 , MT_INT_TX_DONE_MCU_WM ,
79+ MT7915_TXQ_MCU_WM );
80+ MCUQ_CONFIG (MT_MCUQ_WA , WFDMA0 , MT_INT_TX_DONE_MCU_WA_MT7916 ,
81+ MT7915_TXQ_MCU_WA );
82+ MCUQ_CONFIG (MT_MCUQ_FWDL , WFDMA0 , MT_INT_TX_DONE_FWDL ,
83+ MT7915_TXQ_FWDL );
7084
7185 if (is_mt7916 (& dev -> mt76 ) && mtk_wed_device_active (& dev -> mt76 .mmio .wed )) {
7286 RXQ_CONFIG (MT_RXQ_MAIN , WFDMA0 , MT_INT_WED_RX_DONE_BAND0_MT7916 ,
@@ -77,16 +91,23 @@ static void mt7915_dma_config(struct mt7915_dev *dev)
7791 MT7916_RXQ_BAND1 );
7892 RXQ_CONFIG (MT_RXQ_MAIN_WA , WFDMA0 , MT_INT_WED_RX_DONE_WA_MAIN_MT7916 ,
7993 MT7916_RXQ_MCU_WA_MAIN );
80- TXQ_CONFIG (0 , WFDMA0 , MT_INT_WED_TX_DONE_BAND0 , MT7915_TXQ_BAND0 );
81- TXQ_CONFIG (1 , WFDMA0 , MT_INT_WED_TX_DONE_BAND1 , MT7915_TXQ_BAND1 );
94+ TXQ_CONFIG (0 , WFDMA0 , MT_INT_WED_TX_DONE_BAND0 ,
95+ MT7915_TXQ_BAND0 );
96+ TXQ_CONFIG (1 , WFDMA0 , MT_INT_WED_TX_DONE_BAND1 ,
97+ MT7915_TXQ_BAND1 );
8298 } else {
83- RXQ_CONFIG (MT_RXQ_MAIN , WFDMA0 , MT_INT_RX_DONE_BAND0_MT7916 , MT7916_RXQ_BAND0 );
84- RXQ_CONFIG (MT_RXQ_MCU_WA , WFDMA0 , MT_INT_RX_DONE_WA , MT7916_RXQ_MCU_WA );
85- RXQ_CONFIG (MT_RXQ_BAND1 , WFDMA0 , MT_INT_RX_DONE_BAND1_MT7916 , MT7916_RXQ_BAND1 );
99+ RXQ_CONFIG (MT_RXQ_MAIN , WFDMA0 , MT_INT_RX_DONE_BAND0_MT7916 ,
100+ MT7916_RXQ_BAND0 );
101+ RXQ_CONFIG (MT_RXQ_MCU_WA , WFDMA0 , MT_INT_RX_DONE_WA ,
102+ MT7916_RXQ_MCU_WA );
103+ RXQ_CONFIG (MT_RXQ_BAND1 , WFDMA0 , MT_INT_RX_DONE_BAND1_MT7916 ,
104+ MT7916_RXQ_BAND1 );
86105 RXQ_CONFIG (MT_RXQ_MAIN_WA , WFDMA0 , MT_INT_RX_DONE_WA_MAIN_MT7916 ,
87106 MT7916_RXQ_MCU_WA_MAIN );
88- TXQ_CONFIG (0 , WFDMA0 , MT_INT_TX_DONE_BAND0 , MT7915_TXQ_BAND0 );
89- TXQ_CONFIG (1 , WFDMA0 , MT_INT_TX_DONE_BAND1 , MT7915_TXQ_BAND1 );
107+ TXQ_CONFIG (0 , WFDMA0 , MT_INT_TX_DONE_BAND0 ,
108+ MT7915_TXQ_BAND0 );
109+ TXQ_CONFIG (1 , WFDMA0 , MT_INT_TX_DONE_BAND1 ,
110+ MT7915_TXQ_BAND1 );
90111 }
91112 }
92113}
@@ -514,6 +535,53 @@ int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2)
514535 return 0 ;
515536}
516537
538+ int mt7915_dma_reset (struct mt7915_dev * dev , bool force )
539+ {
540+ struct mt76_phy * mphy_ext = dev -> mt76 .phys [MT_BAND1 ];
541+ int i ;
542+
543+ /* clean up hw queues */
544+ for (i = 0 ; i < ARRAY_SIZE (dev -> mt76 .phy .q_tx ); i ++ ) {
545+ mt76_queue_tx_cleanup (dev , dev -> mphy .q_tx [i ], true);
546+ if (mphy_ext )
547+ mt76_queue_tx_cleanup (dev , mphy_ext -> q_tx [i ], true);
548+ }
549+
550+ for (i = 0 ; i < ARRAY_SIZE (dev -> mt76 .q_mcu ); i ++ )
551+ mt76_queue_tx_cleanup (dev , dev -> mt76 .q_mcu [i ], true);
552+
553+ mt76_for_each_q_rx (& dev -> mt76 , i )
554+ mt76_queue_rx_cleanup (dev , & dev -> mt76 .q_rx [i ]);
555+
556+ /* reset wfsys */
557+ if (force )
558+ mt7915_wfsys_reset (dev );
559+
560+ mt7915_dma_disable (dev , force );
561+
562+ /* reset hw queues */
563+ for (i = 0 ; i < __MT_TXQ_MAX ; i ++ ) {
564+ mt76_queue_reset (dev , dev -> mphy .q_tx [i ]);
565+ if (mphy_ext )
566+ mt76_queue_reset (dev , mphy_ext -> q_tx [i ]);
567+ }
568+
569+ for (i = 0 ; i < __MT_MCUQ_MAX ; i ++ )
570+ mt76_queue_reset (dev , dev -> mt76 .q_mcu [i ]);
571+
572+ mt76_for_each_q_rx (& dev -> mt76 , i )
573+ mt76_queue_reset (dev , & dev -> mt76 .q_rx [i ]);
574+
575+ mt76_tx_status_check (& dev -> mt76 , true);
576+
577+ mt7915_dma_enable (dev );
578+
579+ mt76_for_each_q_rx (& dev -> mt76 , i )
580+ mt76_queue_rx_reset (dev , i );
581+
582+ return 0 ;
583+ }
584+
517585void mt7915_dma_cleanup (struct mt7915_dev * dev )
518586{
519587 mt7915_dma_disable (dev , true);
0 commit comments