Loading drivers/net/wireless/ath/ath10k/core.c +9 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ static unsigned int ath10k_cryptmode_param; static bool uart_print; static bool skip_otp; static bool rawmode; static bool fw_diag_log; /* Enable ATH10K_FW_CRASH_DUMP_REGISTERS and ATH10K_FW_CRASH_DUMP_CE_DATA * by default. Loading @@ -51,6 +52,7 @@ module_param_named(cryptmode, ath10k_cryptmode_param, uint, 0644); module_param(uart_print, bool, 0644); module_param(skip_otp, bool, 0644); module_param(rawmode, bool, 0644); module_param(fw_diag_log, bool, 0644); module_param_named(coredump_mask, ath10k_coredump_mask, ulong, 0444); MODULE_PARM_DESC(debug_mask, "Debugging mask"); Loading @@ -59,6 +61,7 @@ MODULE_PARM_DESC(skip_otp, "Skip otp failure for calibration in testmode"); MODULE_PARM_DESC(cryptmode, "Crypto mode: 0-hardware, 1-software"); MODULE_PARM_DESC(rawmode, "Use raw 802.11 frame datapath"); MODULE_PARM_DESC(coredump_mask, "Bitfield of what to include in firmware crash file"); MODULE_PARM_DESC(fw_diag_log, "Diag based fw log debugging"); static const struct ath10k_hw_params ath10k_hw_params_list[] = { { Loading Loading @@ -2612,6 +2615,12 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode, if (status) goto err_hif_stop; status = ath10k_hif_set_target_log_mode(ar, fw_diag_log); if (status && status != -EOPNOTSUPP) { ath10k_warn(ar, "set traget log mode faileds: %d\n", status); goto err_hif_stop; } return 0; err_hif_stop: Loading drivers/net/wireless/ath/ath10k/core.h +1 −0 Original line number Diff line number Diff line Loading @@ -496,6 +496,7 @@ struct ath10k_debug { u32 reg_addr; u32 nf_cal_period; void *cal_data; u8 fw_dbglog_mode; }; enum ath10k_state { Loading drivers/net/wireless/ath/ath10k/hif.h +15 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,12 @@ #include "bmi.h" #include "debug.h" /* Types of fw logging mode */ enum ath_dbg_mode { ATH10K_ENABLE_FW_LOG_DIAG, ATH10K_ENABLE_FW_LOG_CE, }; struct ath10k_hif_sg_item { u16 transfer_id; void *transfer_context; /* NULL = tx completion callback not called */ Loading Loading @@ -97,6 +103,7 @@ struct ath10k_hif_ops { int (*get_target_info)(struct ath10k *ar, struct bmi_target_info *target_info); int (*set_target_log_mode)(struct ath10k *ar, u8 fw_log_mode); }; static inline int ath10k_hif_tx_sg(struct ath10k *ar, u8 pipe_id, Loading Loading @@ -231,4 +238,12 @@ static inline int ath10k_hif_get_target_info(struct ath10k *ar, return ar->hif.ops->get_target_info(ar, tgt_info); } static inline int ath10k_hif_set_target_log_mode(struct ath10k *ar, u8 fw_log_mode) { if (!ar->hif.ops->set_target_log_mode) return -EOPNOTSUPP; return ar->hif.ops->set_target_log_mode(ar, fw_log_mode); } #endif /* _HIF_H_ */ drivers/net/wireless/ath/ath10k/qmi.c +45 −0 Original line number Diff line number Diff line Loading @@ -636,6 +636,51 @@ static int ath10k_qmi_host_cap_send_sync(struct ath10k_qmi *qmi) return ret; } int ath10k_qmi_set_fw_log_mode(struct ath10k *ar, u8 fw_log_mode) { struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar); struct wlfw_ini_resp_msg_v01 resp = {}; struct ath10k_qmi *qmi = ar_snoc->qmi; struct wlfw_ini_req_msg_v01 req = {}; struct qmi_txn txn; int ret; req.enablefwlog_valid = 1; req.enablefwlog = fw_log_mode; ret = qmi_txn_init(&qmi->qmi_hdl, &txn, wlfw_ini_resp_msg_v01_ei, &resp); if (ret < 0) goto out; ret = qmi_send_request(&qmi->qmi_hdl, NULL, &txn, QMI_WLFW_INI_REQ_V01, WLFW_INI_REQ_MSG_V01_MAX_MSG_LEN, wlfw_ini_req_msg_v01_ei, &req); if (ret < 0) { qmi_txn_cancel(&txn); ath10k_err(ar, "fail to send fw log reqest: %d\n", ret); goto out; } ret = qmi_txn_wait(&txn, ATH10K_QMI_TIMEOUT * HZ); if (ret < 0) goto out; if (resp.resp.result != QMI_RESULT_SUCCESS_V01) { ath10k_err(ar, "fw log request rejectedr: %d\n", resp.resp.error); ret = -EINVAL; goto out; } ath10k_dbg(ar, ATH10K_DBG_QMI, "qmi fw log request completed, mode: %d\n", fw_log_mode); return 0; out: return ret; } static int ath10k_qmi_ind_register_send_sync_msg(struct ath10k_qmi *qmi) { Loading drivers/net/wireless/ath/ath10k/qmi.h +1 −0 Original line number Diff line number Diff line Loading @@ -126,5 +126,6 @@ int ath10k_qmi_wlan_disable(struct ath10k *ar); int ath10k_qmi_register_service_notifier(struct notifier_block *nb); int ath10k_qmi_init(struct ath10k *ar, u32 msa_size); int ath10k_qmi_deinit(struct ath10k *ar); int ath10k_qmi_set_fw_log_mode(struct ath10k *ar, u8 fw_log_mode); #endif /* ATH10K_QMI_H */ Loading
drivers/net/wireless/ath/ath10k/core.c +9 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ static unsigned int ath10k_cryptmode_param; static bool uart_print; static bool skip_otp; static bool rawmode; static bool fw_diag_log; /* Enable ATH10K_FW_CRASH_DUMP_REGISTERS and ATH10K_FW_CRASH_DUMP_CE_DATA * by default. Loading @@ -51,6 +52,7 @@ module_param_named(cryptmode, ath10k_cryptmode_param, uint, 0644); module_param(uart_print, bool, 0644); module_param(skip_otp, bool, 0644); module_param(rawmode, bool, 0644); module_param(fw_diag_log, bool, 0644); module_param_named(coredump_mask, ath10k_coredump_mask, ulong, 0444); MODULE_PARM_DESC(debug_mask, "Debugging mask"); Loading @@ -59,6 +61,7 @@ MODULE_PARM_DESC(skip_otp, "Skip otp failure for calibration in testmode"); MODULE_PARM_DESC(cryptmode, "Crypto mode: 0-hardware, 1-software"); MODULE_PARM_DESC(rawmode, "Use raw 802.11 frame datapath"); MODULE_PARM_DESC(coredump_mask, "Bitfield of what to include in firmware crash file"); MODULE_PARM_DESC(fw_diag_log, "Diag based fw log debugging"); static const struct ath10k_hw_params ath10k_hw_params_list[] = { { Loading Loading @@ -2612,6 +2615,12 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode, if (status) goto err_hif_stop; status = ath10k_hif_set_target_log_mode(ar, fw_diag_log); if (status && status != -EOPNOTSUPP) { ath10k_warn(ar, "set traget log mode faileds: %d\n", status); goto err_hif_stop; } return 0; err_hif_stop: Loading
drivers/net/wireless/ath/ath10k/core.h +1 −0 Original line number Diff line number Diff line Loading @@ -496,6 +496,7 @@ struct ath10k_debug { u32 reg_addr; u32 nf_cal_period; void *cal_data; u8 fw_dbglog_mode; }; enum ath10k_state { Loading
drivers/net/wireless/ath/ath10k/hif.h +15 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,12 @@ #include "bmi.h" #include "debug.h" /* Types of fw logging mode */ enum ath_dbg_mode { ATH10K_ENABLE_FW_LOG_DIAG, ATH10K_ENABLE_FW_LOG_CE, }; struct ath10k_hif_sg_item { u16 transfer_id; void *transfer_context; /* NULL = tx completion callback not called */ Loading Loading @@ -97,6 +103,7 @@ struct ath10k_hif_ops { int (*get_target_info)(struct ath10k *ar, struct bmi_target_info *target_info); int (*set_target_log_mode)(struct ath10k *ar, u8 fw_log_mode); }; static inline int ath10k_hif_tx_sg(struct ath10k *ar, u8 pipe_id, Loading Loading @@ -231,4 +238,12 @@ static inline int ath10k_hif_get_target_info(struct ath10k *ar, return ar->hif.ops->get_target_info(ar, tgt_info); } static inline int ath10k_hif_set_target_log_mode(struct ath10k *ar, u8 fw_log_mode) { if (!ar->hif.ops->set_target_log_mode) return -EOPNOTSUPP; return ar->hif.ops->set_target_log_mode(ar, fw_log_mode); } #endif /* _HIF_H_ */
drivers/net/wireless/ath/ath10k/qmi.c +45 −0 Original line number Diff line number Diff line Loading @@ -636,6 +636,51 @@ static int ath10k_qmi_host_cap_send_sync(struct ath10k_qmi *qmi) return ret; } int ath10k_qmi_set_fw_log_mode(struct ath10k *ar, u8 fw_log_mode) { struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar); struct wlfw_ini_resp_msg_v01 resp = {}; struct ath10k_qmi *qmi = ar_snoc->qmi; struct wlfw_ini_req_msg_v01 req = {}; struct qmi_txn txn; int ret; req.enablefwlog_valid = 1; req.enablefwlog = fw_log_mode; ret = qmi_txn_init(&qmi->qmi_hdl, &txn, wlfw_ini_resp_msg_v01_ei, &resp); if (ret < 0) goto out; ret = qmi_send_request(&qmi->qmi_hdl, NULL, &txn, QMI_WLFW_INI_REQ_V01, WLFW_INI_REQ_MSG_V01_MAX_MSG_LEN, wlfw_ini_req_msg_v01_ei, &req); if (ret < 0) { qmi_txn_cancel(&txn); ath10k_err(ar, "fail to send fw log reqest: %d\n", ret); goto out; } ret = qmi_txn_wait(&txn, ATH10K_QMI_TIMEOUT * HZ); if (ret < 0) goto out; if (resp.resp.result != QMI_RESULT_SUCCESS_V01) { ath10k_err(ar, "fw log request rejectedr: %d\n", resp.resp.error); ret = -EINVAL; goto out; } ath10k_dbg(ar, ATH10K_DBG_QMI, "qmi fw log request completed, mode: %d\n", fw_log_mode); return 0; out: return ret; } static int ath10k_qmi_ind_register_send_sync_msg(struct ath10k_qmi *qmi) { Loading
drivers/net/wireless/ath/ath10k/qmi.h +1 −0 Original line number Diff line number Diff line Loading @@ -126,5 +126,6 @@ int ath10k_qmi_wlan_disable(struct ath10k *ar); int ath10k_qmi_register_service_notifier(struct notifier_block *nb); int ath10k_qmi_init(struct ath10k *ar, u32 msa_size); int ath10k_qmi_deinit(struct ath10k *ar); int ath10k_qmi_set_fw_log_mode(struct ath10k *ar, u8 fw_log_mode); #endif /* ATH10K_QMI_H */