| From cb4281528b62207918b1e95827cad7527aa4dbaa Mon Sep 17 00:00:00 2001 |
| From: Tamizh chelvam <c_traja@qti.qualcomm.com> |
| Date: Thu, 2 Feb 2017 08:32:18 +0200 |
| Subject: ath10k: fix boot failure in UTF mode/testmode |
| |
| From: Tamizh chelvam <c_traja@qti.qualcomm.com> |
| |
| commit cb4281528b62207918b1e95827cad7527aa4dbaa upstream. |
| |
| Rx filter reset and the dynamic tx switch mode (EXT_RESOURCE_CFG) |
| configuration are causing the following errors when UTF firmware |
| is loaded to the target. |
| |
| Error message 1: |
| [ 598.015629] ath10k_pci 0001:01:00.0: failed to ping firmware: -110 |
| [ 598.020828] ath10k_pci 0001:01:00.0: failed to reset rx filter: -110 |
| [ 598.141556] ath10k_pci 0001:01:00.0: failed to start core (testmode): -110 |
| |
| Error message 2: |
| [ 668.615839] ath10k_ahb a000000.wifi: failed to send ext resource cfg command : -95 |
| [ 668.618902] ath10k_ahb a000000.wifi: failed to start core (testmode): -95 |
| |
| Avoiding these configurations while bringing the target in |
| testmode is solving the problem. |
| |
| Signed-off-by: Tamizh chelvam <c_traja@qti.qualcomm.com> |
| Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/wireless/ath/ath10k/core.c | 14 +++++++++----- |
| 1 file changed, 9 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/net/wireless/ath/ath10k/core.c |
| +++ b/drivers/net/wireless/ath/ath10k/core.c |
| @@ -1913,7 +1913,8 @@ int ath10k_core_start(struct ath10k *ar, |
| ath10k_dbg(ar, ATH10K_DBG_BOOT, "firmware %s booted\n", |
| ar->hw->wiphy->fw_version); |
| |
| - if (test_bit(WMI_SERVICE_EXT_RES_CFG_SUPPORT, ar->wmi.svc_map)) { |
| + if (test_bit(WMI_SERVICE_EXT_RES_CFG_SUPPORT, ar->wmi.svc_map) && |
| + mode == ATH10K_FIRMWARE_MODE_NORMAL) { |
| val = 0; |
| if (ath10k_peer_stats_enabled(ar)) |
| val = WMI_10_4_PEER_STATS; |
| @@ -1966,10 +1967,13 @@ int ath10k_core_start(struct ath10k *ar, |
| * possible to implicitly make it correct by creating a dummy vdev and |
| * then deleting it. |
| */ |
| - status = ath10k_core_reset_rx_filter(ar); |
| - if (status) { |
| - ath10k_err(ar, "failed to reset rx filter: %d\n", status); |
| - goto err_hif_stop; |
| + if (mode == ATH10K_FIRMWARE_MODE_NORMAL) { |
| + status = ath10k_core_reset_rx_filter(ar); |
| + if (status) { |
| + ath10k_err(ar, |
| + "failed to reset rx filter: %d\n", status); |
| + goto err_hif_stop; |
| + } |
| } |
| |
| /* If firmware indicates Full Rx Reorder support it must be used in a |