Message ID | 155507569645.32018.15231567732563770250.stgit@potku.adurom.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/6] ath10k: sdio: workaround firmware UART pin configuration bug | expand |
Kalle Valo <kvalo@codeaurora.org> wrote: > On QCA6174 SDIO devices the SDIO interrupt will fail if UART is > disabled from ath10k. SDIO firmware enables UART printouts by > default. If ath10k will try to enable UART again the firmware > will configure it's GPIO line incorrectly and SDIO interrupts > won't work anymore. The workaround is to set UART pin again (19 > for QCA6174 SDIO) if uart_print is 0. > > Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00007-QCARMSWP-1. > > Signed-off-by: Wen Gong <wgong@codeaurora.org> > Signed-off-by: Kalle Valo <kvalo@codeaurora.org> 6 patches applied to ath-next branch of ath.git, thanks. 4504f0e5b571 ath10k: sdio: workaround firmware UART pin configuration bug 70736b9753fd ath10k: don't disable interrupts in ath10k_sdio_remove() e2a6b711282a ath10k: htt: don't use txdone_fifo with SDIO 6d084ac27ab4 ath10k: initialise struct ath10k_bus params to zero 8ea51e409eb0 ath10k: htt: support MSDU ids with SDIO 30382dd1cf3a ath10k: fix use-after-free on SDIO data frames
diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index 835b8de92d55..cfd7bb29a1ec 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -2065,8 +2065,16 @@ static int ath10k_init_uart(struct ath10k *ar) return ret; } - if (!uart_print) + if (!uart_print && ar->hw_params.uart_pin_workaround) { + ret = ath10k_bmi_write32(ar, hi_dbg_uart_txpin, + ar->hw_params.uart_pin); + if (ret) { + ath10k_warn(ar, "failed to set UART TX pin: %d", ret); + return ret; + } + return 0; + } ret = ath10k_bmi_write32(ar, hi_dbg_uart_txpin, ar->hw_params.uart_pin); if (ret) { diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h index 71314999aa24..a92fce1bb6f0 100644 --- a/drivers/net/wireless/ath/ath10k/hw.h +++ b/drivers/net/wireless/ath/ath10k/hw.h @@ -606,6 +606,11 @@ struct ath10k_hw_params { /* target supporting fw download via diag ce */ bool fw_diag_ce_download; + + /* need to set uart pin if disable uart print, workaround for a + * firmware bug + */ + bool uart_pin_workaround; }; struct htt_rx_desc;