1 | From 27ed5ec6924c17b76d65b697a162bafee7bd8e4e Mon Sep 17 00:00:00 2001 |
2 | From: Helmut Schaa <helmut.schaa@googlemail.com> |
3 | Date: Mon, 21 Jun 2010 10:03:05 +0200 |
4 | Subject: [PATCH] rt2x00: fix rt2800pci hang on ifdown |
5 | |
6 | rt2800pci hangs the system on rt305x SoC devices on ifdown. Work around |
7 | this issue by disabling TX DMA prior to resetting the TX queue indices. |
8 | |
9 | This patch is not suitable for upstream inclusion but is just meant as |
10 | a workaround until a proper solution is implemented. |
11 | |
12 | Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com> |
13 | --- |
14 | drivers/net/wireless/rt2x00/rt2800pci.c | 4 ++++ |
15 | 1 files changed, 4 insertions(+), 0 deletions(-) |
16 | |
17 | --- a/drivers/net/wireless/rt2x00/rt2800pci.c |
18 | +++ b/drivers/net/wireless/rt2x00/rt2800pci.c |
19 | @@ -593,6 +593,10 @@ static void rt2800pci_kill_tx_queue(stru |
20 | return; |
21 | } |
22 | |
23 | + rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, ®); |
24 | + rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0); |
25 | + rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg); |
26 | + |
27 | rt2800_register_read(rt2x00dev, WPDMA_RST_IDX, ®); |
28 | rt2x00_set_field32(®, WPDMA_RST_IDX_DTX_IDX0, (queue->qid == QID_AC_BE)); |
29 | rt2x00_set_field32(®, WPDMA_RST_IDX_DTX_IDX1, (queue->qid == QID_AC_BK)); |
30 | |