summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/ath/ath10k/snoc.h
diff options
context:
space:
mode:
authorSurabhi Vishnoi <svishnoi@codeaurora.org>2018-10-12 11:23:39 +0530
committerKalle Valo <kvalo@codeaurora.org>2018-11-05 12:06:15 +0200
commit0e622f67e0413ad12c2481d47353031ddb185620 (patch)
tree9a624331a55ec18575e20a5deefaea55e136dbcd /drivers/net/wireless/ath/ath10k/snoc.h
parentba94c753ccb471bafe8bd824b744fda6fee0001e (diff)
ath10k: add support for WCN3990 firmware crash recovery
Whenever the WCN3990 firmware becomes unavailable, the host driver receives a FW down indication, post which all the direct hardware register access should be avoided, in order to prevent improper behavior in the host driver. Set the crash_flush flag when the host driver receives a FW_DOWN_IND via qmi, in order to stop the untimely hardware register access. Also handle the case, where we need to do core register only for the first FW_READY indication, which is when we initialize the host driver. All the subsequent FW_READY indication will be received in subsystem recovery case and we only need to do the restart work. The state of driver is maintained using flags to distinguish between first and subsequent FW_READY indication received. Tested HW: WCN3990 Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1 Signed-off-by: Surabhi Vishnoi <svishnoi@codeaurora.org> Signed-off-by: Rakesh Pillai <pillair@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/snoc.h')
-rw-r--r--drivers/net/wireless/ath/ath10k/snoc.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath10k/snoc.h b/drivers/net/wireless/ath/ath10k/snoc.h
index e1d2d6675556..3a44e30696bc 100644
--- a/drivers/net/wireless/ath/ath10k/snoc.h
+++ b/drivers/net/wireless/ath/ath10k/snoc.h
@@ -70,6 +70,12 @@ struct ath10k_wcn3990_clk_info {
bool required;
};
+enum ath10k_snoc_flags {
+ ATH10K_SNOC_FLAG_REGISTERED,
+ ATH10K_SNOC_FLAG_UNREGISTERING,
+ ATH10K_SNOC_FLAG_RECOVERY,
+};
+
struct ath10k_snoc {
struct platform_device *dev;
struct ath10k *ar;
@@ -84,6 +90,7 @@ struct ath10k_snoc {
struct ath10k_wcn3990_vreg_info *vreg;
struct ath10k_wcn3990_clk_info *clk;
struct ath10k_qmi *qmi;
+ unsigned long int flags;
};
static inline struct ath10k_snoc *ath10k_snoc_priv(struct ath10k *ar)