diff options
author | Rajkumar Manoharan <rmanohar@qti.qualcomm.com> | 2015-11-11 07:01:26 -0500 |
---|---|---|
committer | Kalle Valo <kvalo@qca.qualcomm.com> | 2015-11-16 14:40:53 -0500 |
commit | 6419fdbb6f90e147690f8833cba59d289d613da5 (patch) | |
tree | d8ebdc379ff5146cb8ce0621dd2a184234935a7f | |
parent | 23ba8a66234943e0b41c13ef7ca1088cf8488025 (diff) |
ath10k: poll HTT send completion when CE 5 is unused
commit a70587b3389a ("ath10k: configure copy engine 5 for HTT messages")
moved send completion polling under HTT Rx (CE 5) service routine. For
QCA6174 based devices copy engine 1 (CE 1) is used for HTT Rx instead
of CE 5. So send completion never be called. This is causing "failed to
transmit packet, dropping: -105" errors. Fix this by processing send
completion from CE 1 service routine instead of CE 5.
Fixes: a70587b3389a ("ath10k: configure copy engine 5 for HTT messages")
Tested-by: Ryan Hsu <ryanhsu@qca.qualcomm.com>
Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
-rw-r--r-- | drivers/net/wireless/ath/ath10k/pci.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c index 0ad3dd139bf5..930785a724e1 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c | |||
@@ -107,6 +107,7 @@ static void ath10k_pci_htc_tx_cb(struct ath10k_ce_pipe *ce_state); | |||
107 | static void ath10k_pci_htc_rx_cb(struct ath10k_ce_pipe *ce_state); | 107 | static void ath10k_pci_htc_rx_cb(struct ath10k_ce_pipe *ce_state); |
108 | static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state); | 108 | static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state); |
109 | static void ath10k_pci_htt_rx_cb(struct ath10k_ce_pipe *ce_state); | 109 | static void ath10k_pci_htt_rx_cb(struct ath10k_ce_pipe *ce_state); |
110 | static void ath10k_pci_htt_htc_rx_cb(struct ath10k_ce_pipe *ce_state); | ||
110 | 111 | ||
111 | static struct ce_attr host_ce_config_wlan[] = { | 112 | static struct ce_attr host_ce_config_wlan[] = { |
112 | /* CE0: host->target HTC control and raw streams */ | 113 | /* CE0: host->target HTC control and raw streams */ |
@@ -124,7 +125,7 @@ static struct ce_attr host_ce_config_wlan[] = { | |||
124 | .src_nentries = 0, | 125 | .src_nentries = 0, |
125 | .src_sz_max = 2048, | 126 | .src_sz_max = 2048, |
126 | .dest_nentries = 512, | 127 | .dest_nentries = 512, |
127 | .recv_cb = ath10k_pci_htc_rx_cb, | 128 | .recv_cb = ath10k_pci_htt_htc_rx_cb, |
128 | }, | 129 | }, |
129 | 130 | ||
130 | /* CE2: target->host WMI */ | 131 | /* CE2: target->host WMI */ |
@@ -1204,6 +1205,16 @@ static void ath10k_pci_htc_rx_cb(struct ath10k_ce_pipe *ce_state) | |||
1204 | ath10k_pci_process_rx_cb(ce_state, ath10k_htc_rx_completion_handler); | 1205 | ath10k_pci_process_rx_cb(ce_state, ath10k_htc_rx_completion_handler); |
1205 | } | 1206 | } |
1206 | 1207 | ||
1208 | static void ath10k_pci_htt_htc_rx_cb(struct ath10k_ce_pipe *ce_state) | ||
1209 | { | ||
1210 | /* CE4 polling needs to be done whenever CE pipe which transports | ||
1211 | * HTT Rx (target->host) is processed. | ||
1212 | */ | ||
1213 | ath10k_ce_per_engine_service(ce_state->ar, 4); | ||
1214 | |||
1215 | ath10k_pci_process_rx_cb(ce_state, ath10k_htc_rx_completion_handler); | ||
1216 | } | ||
1217 | |||
1207 | /* Called by lower (CE) layer when a send to HTT Target completes. */ | 1218 | /* Called by lower (CE) layer when a send to HTT Target completes. */ |
1208 | static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state) | 1219 | static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state) |
1209 | { | 1220 | { |