All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ath10k: Fill the channel survey results for WCN3990 correctly
@ 2018-10-03 10:57 ` Rakesh Pillai
  0 siblings, 0 replies; 11+ messages in thread
From: Rakesh Pillai @ 2018-10-03 10:57 UTC (permalink / raw)
  To: ath10k; +Cc: linux-wireless, Rakesh Pillai, Surabhi Vishnoi

The host driver currently expects the channel info event to be
received in pairs for all the channels, i.e. the first
chan_info event for a particular channel will not have the
COMPLETE flag set and the second chan_info event for the
same channel will have the COMPLETE flag set.

The HL2.0 firmware sends only one channel info event per channel
which is scanned without the COMPLETE flag set. After sending the
chan_info_event for all the channels, the HL2.0 firmware sends a
chan_info_event with COMPLETE flag set to indicate the completion
of the channel info event.

The firmware does not indicate this behavior with any service bitmap
and hence a new firmware feature flag is used to handle the modified
parsing of the channel info events, in the host driver, for the
firmware which sends single channel info event per scanned channel.

Tested HW: WCN3990
Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1

Co-developed-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
Signed-off-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
---
 drivers/net/wireless/ath/ath10k/core.c    |   1 +
 drivers/net/wireless/ath/ath10k/core.h    |   3 +
 drivers/net/wireless/ath/ath10k/wmi-tlv.c |   3 +
 drivers/net/wireless/ath/ath10k/wmi-tlv.h |  10 +++
 drivers/net/wireless/ath/ath10k/wmi.c     | 130 +++++++++++++++++++++---------
 drivers/net/wireless/ath/ath10k/wmi.h     |  12 +++
 6 files changed, 122 insertions(+), 37 deletions(-)

diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
index 203f309..218b44f 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -594,6 +594,7 @@ static const char *const ath10k_core_fw_feature_str[] = {
 	[ATH10K_FW_FEATURE_NO_PS] = "no-ps",
 	[ATH10K_FW_FEATURE_MGMT_TX_BY_REF] = "mgmt-tx-by-reference",
 	[ATH10K_FW_FEATURE_NON_BMI] = "non-bmi",
+	[ATH10K_FW_FEATURE_SINGLE_CHAN_INFO_PER_CHANNEL] = "single-chan-info-per-channel",
 };
 
 static unsigned int ath10k_core_get_fw_feature_str(char *buf,
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index c76af34..3c34560 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -760,6 +760,9 @@ enum ath10k_fw_features {
 	/* Firmware load is done externally, not by bmi */
 	ATH10K_FW_FEATURE_NON_BMI = 19,
 
+	/* Firmware sends only one chan_info event per channel */
+	ATH10K_FW_FEATURE_SINGLE_CHAN_INFO_PER_CHANNEL = 20,
+
 	/* keep last */
 	ATH10K_FW_FEATURE_COUNT,
 };
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index df8f673..442184d 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -824,6 +824,9 @@ static int ath10k_wmi_tlv_op_pull_ch_info_ev(struct ath10k *ar,
 	arg->noise_floor = ev->noise_floor;
 	arg->rx_clear_count = ev->rx_clear_count;
 	arg->cycle_count = ev->cycle_count;
+	if (test_bit(ATH10K_FW_FEATURE_SINGLE_CHAN_INFO_PER_CHANNEL,
+		     ar->running_fw->fw_file.fw_features))
+		arg->mac_clk_mhz = ev->mac_clk_mhz;
 
 	kfree(tb);
 	return 0;
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.h b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
index 8014fc8..b529955 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
@@ -1582,6 +1582,16 @@ struct ath10k_mgmt_tx_pkt_addr {
 
 #define WMI_TLV_FLAG_MGMT_BUNDLE_TX_COMPL	BIT(9)
 
+struct chan_info_params {
+	u32 err_code;
+	u32 freq;
+	u32 cmd_flags;
+	u32 noise_floor;
+	u32 rx_clear_count;
+	u32 cycle_count;
+	u32 mac_clk_mhz;
+};
+
 struct wmi_tlv_mgmt_tx_compl_ev {
 	__le32 desc_id;
 	__le32 status;
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index 8f62a85..37607fa 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -2580,60 +2580,71 @@ static int ath10k_wmi_10_4_op_pull_ch_info_ev(struct ath10k *ar,
 	return 0;
 }
 
-void ath10k_wmi_event_chan_info(struct ath10k *ar, struct sk_buff *skb)
+/*
+ * Handle the channel info event for firmware which only sends one
+ * chan_info event per scanned channel.
+ */
+static void ath10k_wmi_event_chan_info_unpaired(struct ath10k *ar,
+						struct chan_info_params *params)
 {
-	struct wmi_ch_info_ev_arg arg = {};
 	struct survey_info *survey;
-	u32 err_code, freq, cmd_flags, noise_floor, rx_clear_count, cycle_count;
-	int idx, ret;
+	u64 clock_freq;
+	int idx;
 
-	ret = ath10k_wmi_pull_ch_info(ar, skb, &arg);
-	if (ret) {
-		ath10k_warn(ar, "failed to parse chan info event: %d\n", ret);
+	if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) {
+		ath10k_dbg(ar, ATH10K_DBG_WMI, "chan info report completed\n");
 		return;
 	}
 
-	err_code = __le32_to_cpu(arg.err_code);
-	freq = __le32_to_cpu(arg.freq);
-	cmd_flags = __le32_to_cpu(arg.cmd_flags);
-	noise_floor = __le32_to_cpu(arg.noise_floor);
-	rx_clear_count = __le32_to_cpu(arg.rx_clear_count);
-	cycle_count = __le32_to_cpu(arg.cycle_count);
+	idx = freq_to_idx(ar, params->freq);
+	if (idx >= ARRAY_SIZE(ar->survey)) {
+		ath10k_warn(ar, "chan info: invalid frequency %d (idx %d out of bounds)\n",
+			    params->freq, idx);
+		return;
+	}
 
-	ath10k_dbg(ar, ATH10K_DBG_WMI,
-		   "chan info err_code %d freq %d cmd_flags %d noise_floor %d rx_clear_count %d cycle_count %d\n",
-		   err_code, freq, cmd_flags, noise_floor, rx_clear_count,
-		   cycle_count);
+	survey = &ar->survey[idx];
 
-	spin_lock_bh(&ar->data_lock);
+	if (!params->mac_clk_mhz || !survey)
+		return;
 
-	switch (ar->scan.state) {
-	case ATH10K_SCAN_IDLE:
-	case ATH10K_SCAN_STARTING:
-		ath10k_warn(ar, "received chan info event without a scan request, ignoring\n");
-		goto exit;
-	case ATH10K_SCAN_RUNNING:
-	case ATH10K_SCAN_ABORTING:
-		break;
-	}
+	clock_freq = params->mac_clk_mhz * 1000;
+	memset(survey, 0, sizeof(*survey));
 
-	idx = freq_to_idx(ar, freq);
+	survey->noise = params->noise_floor;
+	survey->time = params->cycle_count / clock_freq;
+	survey->time_busy = params->rx_clear_count / clock_freq;
+	survey->filled |= SURVEY_INFO_NOISE_DBM | SURVEY_INFO_TIME |
+			  SURVEY_INFO_TIME_BUSY;
+}
+
+/*
+ * Handle the channel info event for firmware which sends chan_info
+ * event in pairs(start and stop events) for every scanned channel.
+ */
+static void ath10k_wmi_event_chan_info_paired(struct ath10k *ar,
+					      struct chan_info_params *params)
+{
+	struct survey_info *survey;
+	int idx;
+
+	idx = freq_to_idx(ar, params->freq);
 	if (idx >= ARRAY_SIZE(ar->survey)) {
 		ath10k_warn(ar, "chan info: invalid frequency %d (idx %d out of bounds)\n",
-			    freq, idx);
-		goto exit;
+			    params->freq, idx);
+		return;
 	}
 
-	if (cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) {
+	if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) {
 		if (ar->ch_info_can_report_survey) {
 			survey = &ar->survey[idx];
-			survey->noise = noise_floor;
+			survey->noise = params->noise_floor;
 			survey->filled = SURVEY_INFO_NOISE_DBM;
 
 			ath10k_hw_fill_survey_time(ar,
 						   survey,
-						   cycle_count,
-						   rx_clear_count,
+						   params->cycle_count,
+						   params->rx_clear_count,
 						   ar->survey_last_cycle_count,
 						   ar->survey_last_rx_clear_count);
 		}
@@ -2643,11 +2654,56 @@ void ath10k_wmi_event_chan_info(struct ath10k *ar, struct sk_buff *skb)
 		ar->ch_info_can_report_survey = true;
 	}
 
-	if (!(cmd_flags & WMI_CHAN_INFO_FLAG_PRE_COMPLETE)) {
-		ar->survey_last_rx_clear_count = rx_clear_count;
-		ar->survey_last_cycle_count = cycle_count;
+	if (!(params->cmd_flags & WMI_CHAN_INFO_FLAG_PRE_COMPLETE)) {
+		ar->survey_last_rx_clear_count = params->rx_clear_count;
+		ar->survey_last_cycle_count = params->cycle_count;
+	}
+}
+
+void ath10k_wmi_event_chan_info(struct ath10k *ar, struct sk_buff *skb)
+{
+	struct chan_info_params ch_info_param;
+	struct wmi_ch_info_ev_arg arg = {};
+	int ret;
+
+	ret = ath10k_wmi_pull_ch_info(ar, skb, &arg);
+	if (ret) {
+		ath10k_warn(ar, "failed to parse chan info event: %d\n", ret);
+		return;
+	}
+
+	ch_info_param.err_code = __le32_to_cpu(arg.err_code);
+	ch_info_param.freq = __le32_to_cpu(arg.freq);
+	ch_info_param.cmd_flags = __le32_to_cpu(arg.cmd_flags);
+	ch_info_param.noise_floor = __le32_to_cpu(arg.noise_floor);
+	ch_info_param.rx_clear_count = __le32_to_cpu(arg.rx_clear_count);
+	ch_info_param.cycle_count = __le32_to_cpu(arg.cycle_count);
+	ch_info_param.mac_clk_mhz = __le32_to_cpu(arg.mac_clk_mhz);
+
+	ath10k_dbg(ar, ATH10K_DBG_WMI,
+		   "chan info err_code %d freq %d cmd_flags %d noise_floor %d rx_clear_count %d cycle_count %d\n",
+		   ch_info_param.err_code, ch_info_param.freq, ch_info_param.cmd_flags,
+		   ch_info_param.noise_floor, ch_info_param.rx_clear_count,
+		   ch_info_param.cycle_count);
+
+	spin_lock_bh(&ar->data_lock);
+
+	switch (ar->scan.state) {
+	case ATH10K_SCAN_IDLE:
+	case ATH10K_SCAN_STARTING:
+		ath10k_warn(ar, "received chan info event without a scan request, ignoring\n");
+		goto exit;
+	case ATH10K_SCAN_RUNNING:
+	case ATH10K_SCAN_ABORTING:
+		break;
 	}
 
+	if (test_bit(ATH10K_FW_FEATURE_SINGLE_CHAN_INFO_PER_CHANNEL,
+		     ar->running_fw->fw_file.fw_features))
+		ath10k_wmi_event_chan_info_unpaired(ar, &ch_info_param);
+	else
+		ath10k_wmi_event_chan_info_paired(ar, &ch_info_param);
+
 exit:
 	spin_unlock_bh(&ar->data_lock);
 }
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index 1287687..e8e471e 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -6441,6 +6441,14 @@ struct wmi_chan_info_event {
 	__le32 noise_floor;
 	__le32 rx_clear_count;
 	__le32 cycle_count;
+	__le32 chan_tx_pwr_range;
+	__le32 chan_tx_pwr_tp;
+	__le32 rx_frame_count;
+	__le32 my_bss_rx_cycle_count;
+	__le32 rx_11b_mode_data_duration;
+	__le32 tx_frame_cnt;
+	__le32 mac_clk_mhz;
+
 } __packed;
 
 struct wmi_10_4_chan_info_event {
@@ -6675,6 +6683,10 @@ struct wmi_ch_info_ev_arg {
 	__le32 chan_tx_pwr_range;
 	__le32 chan_tx_pwr_tp;
 	__le32 rx_frame_count;
+	__le32 my_bss_rx_cycle_count;
+	__le32 rx_11b_mode_data_duration;
+	__le32 tx_frame_cnt;
+	__le32 mac_clk_mhz;
 };
 
 /* From 10.4 firmware, not sure all have the same values. */
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH] ath10k: Fill the channel survey results for WCN3990 correctly
@ 2018-10-03 10:57 ` Rakesh Pillai
  0 siblings, 0 replies; 11+ messages in thread
From: Rakesh Pillai @ 2018-10-03 10:57 UTC (permalink / raw)
  To: ath10k; +Cc: Rakesh Pillai, linux-wireless, Surabhi Vishnoi

The host driver currently expects the channel info event to be
received in pairs for all the channels, i.e. the first
chan_info event for a particular channel will not have the
COMPLETE flag set and the second chan_info event for the
same channel will have the COMPLETE flag set.

The HL2.0 firmware sends only one channel info event per channel
which is scanned without the COMPLETE flag set. After sending the
chan_info_event for all the channels, the HL2.0 firmware sends a
chan_info_event with COMPLETE flag set to indicate the completion
of the channel info event.

The firmware does not indicate this behavior with any service bitmap
and hence a new firmware feature flag is used to handle the modified
parsing of the channel info events, in the host driver, for the
firmware which sends single channel info event per scanned channel.

Tested HW: WCN3990
Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1

Co-developed-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
Signed-off-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
---
 drivers/net/wireless/ath/ath10k/core.c    |   1 +
 drivers/net/wireless/ath/ath10k/core.h    |   3 +
 drivers/net/wireless/ath/ath10k/wmi-tlv.c |   3 +
 drivers/net/wireless/ath/ath10k/wmi-tlv.h |  10 +++
 drivers/net/wireless/ath/ath10k/wmi.c     | 130 +++++++++++++++++++++---------
 drivers/net/wireless/ath/ath10k/wmi.h     |  12 +++
 6 files changed, 122 insertions(+), 37 deletions(-)

diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
index 203f309..218b44f 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -594,6 +594,7 @@ static const char *const ath10k_core_fw_feature_str[] = {
 	[ATH10K_FW_FEATURE_NO_PS] = "no-ps",
 	[ATH10K_FW_FEATURE_MGMT_TX_BY_REF] = "mgmt-tx-by-reference",
 	[ATH10K_FW_FEATURE_NON_BMI] = "non-bmi",
+	[ATH10K_FW_FEATURE_SINGLE_CHAN_INFO_PER_CHANNEL] = "single-chan-info-per-channel",
 };
 
 static unsigned int ath10k_core_get_fw_feature_str(char *buf,
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index c76af34..3c34560 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -760,6 +760,9 @@ enum ath10k_fw_features {
 	/* Firmware load is done externally, not by bmi */
 	ATH10K_FW_FEATURE_NON_BMI = 19,
 
+	/* Firmware sends only one chan_info event per channel */
+	ATH10K_FW_FEATURE_SINGLE_CHAN_INFO_PER_CHANNEL = 20,
+
 	/* keep last */
 	ATH10K_FW_FEATURE_COUNT,
 };
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index df8f673..442184d 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -824,6 +824,9 @@ static int ath10k_wmi_tlv_op_pull_ch_info_ev(struct ath10k *ar,
 	arg->noise_floor = ev->noise_floor;
 	arg->rx_clear_count = ev->rx_clear_count;
 	arg->cycle_count = ev->cycle_count;
+	if (test_bit(ATH10K_FW_FEATURE_SINGLE_CHAN_INFO_PER_CHANNEL,
+		     ar->running_fw->fw_file.fw_features))
+		arg->mac_clk_mhz = ev->mac_clk_mhz;
 
 	kfree(tb);
 	return 0;
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.h b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
index 8014fc8..b529955 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
@@ -1582,6 +1582,16 @@ struct ath10k_mgmt_tx_pkt_addr {
 
 #define WMI_TLV_FLAG_MGMT_BUNDLE_TX_COMPL	BIT(9)
 
+struct chan_info_params {
+	u32 err_code;
+	u32 freq;
+	u32 cmd_flags;
+	u32 noise_floor;
+	u32 rx_clear_count;
+	u32 cycle_count;
+	u32 mac_clk_mhz;
+};
+
 struct wmi_tlv_mgmt_tx_compl_ev {
 	__le32 desc_id;
 	__le32 status;
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index 8f62a85..37607fa 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -2580,60 +2580,71 @@ static int ath10k_wmi_10_4_op_pull_ch_info_ev(struct ath10k *ar,
 	return 0;
 }
 
-void ath10k_wmi_event_chan_info(struct ath10k *ar, struct sk_buff *skb)
+/*
+ * Handle the channel info event for firmware which only sends one
+ * chan_info event per scanned channel.
+ */
+static void ath10k_wmi_event_chan_info_unpaired(struct ath10k *ar,
+						struct chan_info_params *params)
 {
-	struct wmi_ch_info_ev_arg arg = {};
 	struct survey_info *survey;
-	u32 err_code, freq, cmd_flags, noise_floor, rx_clear_count, cycle_count;
-	int idx, ret;
+	u64 clock_freq;
+	int idx;
 
-	ret = ath10k_wmi_pull_ch_info(ar, skb, &arg);
-	if (ret) {
-		ath10k_warn(ar, "failed to parse chan info event: %d\n", ret);
+	if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) {
+		ath10k_dbg(ar, ATH10K_DBG_WMI, "chan info report completed\n");
 		return;
 	}
 
-	err_code = __le32_to_cpu(arg.err_code);
-	freq = __le32_to_cpu(arg.freq);
-	cmd_flags = __le32_to_cpu(arg.cmd_flags);
-	noise_floor = __le32_to_cpu(arg.noise_floor);
-	rx_clear_count = __le32_to_cpu(arg.rx_clear_count);
-	cycle_count = __le32_to_cpu(arg.cycle_count);
+	idx = freq_to_idx(ar, params->freq);
+	if (idx >= ARRAY_SIZE(ar->survey)) {
+		ath10k_warn(ar, "chan info: invalid frequency %d (idx %d out of bounds)\n",
+			    params->freq, idx);
+		return;
+	}
 
-	ath10k_dbg(ar, ATH10K_DBG_WMI,
-		   "chan info err_code %d freq %d cmd_flags %d noise_floor %d rx_clear_count %d cycle_count %d\n",
-		   err_code, freq, cmd_flags, noise_floor, rx_clear_count,
-		   cycle_count);
+	survey = &ar->survey[idx];
 
-	spin_lock_bh(&ar->data_lock);
+	if (!params->mac_clk_mhz || !survey)
+		return;
 
-	switch (ar->scan.state) {
-	case ATH10K_SCAN_IDLE:
-	case ATH10K_SCAN_STARTING:
-		ath10k_warn(ar, "received chan info event without a scan request, ignoring\n");
-		goto exit;
-	case ATH10K_SCAN_RUNNING:
-	case ATH10K_SCAN_ABORTING:
-		break;
-	}
+	clock_freq = params->mac_clk_mhz * 1000;
+	memset(survey, 0, sizeof(*survey));
 
-	idx = freq_to_idx(ar, freq);
+	survey->noise = params->noise_floor;
+	survey->time = params->cycle_count / clock_freq;
+	survey->time_busy = params->rx_clear_count / clock_freq;
+	survey->filled |= SURVEY_INFO_NOISE_DBM | SURVEY_INFO_TIME |
+			  SURVEY_INFO_TIME_BUSY;
+}
+
+/*
+ * Handle the channel info event for firmware which sends chan_info
+ * event in pairs(start and stop events) for every scanned channel.
+ */
+static void ath10k_wmi_event_chan_info_paired(struct ath10k *ar,
+					      struct chan_info_params *params)
+{
+	struct survey_info *survey;
+	int idx;
+
+	idx = freq_to_idx(ar, params->freq);
 	if (idx >= ARRAY_SIZE(ar->survey)) {
 		ath10k_warn(ar, "chan info: invalid frequency %d (idx %d out of bounds)\n",
-			    freq, idx);
-		goto exit;
+			    params->freq, idx);
+		return;
 	}
 
-	if (cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) {
+	if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) {
 		if (ar->ch_info_can_report_survey) {
 			survey = &ar->survey[idx];
-			survey->noise = noise_floor;
+			survey->noise = params->noise_floor;
 			survey->filled = SURVEY_INFO_NOISE_DBM;
 
 			ath10k_hw_fill_survey_time(ar,
 						   survey,
-						   cycle_count,
-						   rx_clear_count,
+						   params->cycle_count,
+						   params->rx_clear_count,
 						   ar->survey_last_cycle_count,
 						   ar->survey_last_rx_clear_count);
 		}
@@ -2643,11 +2654,56 @@ void ath10k_wmi_event_chan_info(struct ath10k *ar, struct sk_buff *skb)
 		ar->ch_info_can_report_survey = true;
 	}
 
-	if (!(cmd_flags & WMI_CHAN_INFO_FLAG_PRE_COMPLETE)) {
-		ar->survey_last_rx_clear_count = rx_clear_count;
-		ar->survey_last_cycle_count = cycle_count;
+	if (!(params->cmd_flags & WMI_CHAN_INFO_FLAG_PRE_COMPLETE)) {
+		ar->survey_last_rx_clear_count = params->rx_clear_count;
+		ar->survey_last_cycle_count = params->cycle_count;
+	}
+}
+
+void ath10k_wmi_event_chan_info(struct ath10k *ar, struct sk_buff *skb)
+{
+	struct chan_info_params ch_info_param;
+	struct wmi_ch_info_ev_arg arg = {};
+	int ret;
+
+	ret = ath10k_wmi_pull_ch_info(ar, skb, &arg);
+	if (ret) {
+		ath10k_warn(ar, "failed to parse chan info event: %d\n", ret);
+		return;
+	}
+
+	ch_info_param.err_code = __le32_to_cpu(arg.err_code);
+	ch_info_param.freq = __le32_to_cpu(arg.freq);
+	ch_info_param.cmd_flags = __le32_to_cpu(arg.cmd_flags);
+	ch_info_param.noise_floor = __le32_to_cpu(arg.noise_floor);
+	ch_info_param.rx_clear_count = __le32_to_cpu(arg.rx_clear_count);
+	ch_info_param.cycle_count = __le32_to_cpu(arg.cycle_count);
+	ch_info_param.mac_clk_mhz = __le32_to_cpu(arg.mac_clk_mhz);
+
+	ath10k_dbg(ar, ATH10K_DBG_WMI,
+		   "chan info err_code %d freq %d cmd_flags %d noise_floor %d rx_clear_count %d cycle_count %d\n",
+		   ch_info_param.err_code, ch_info_param.freq, ch_info_param.cmd_flags,
+		   ch_info_param.noise_floor, ch_info_param.rx_clear_count,
+		   ch_info_param.cycle_count);
+
+	spin_lock_bh(&ar->data_lock);
+
+	switch (ar->scan.state) {
+	case ATH10K_SCAN_IDLE:
+	case ATH10K_SCAN_STARTING:
+		ath10k_warn(ar, "received chan info event without a scan request, ignoring\n");
+		goto exit;
+	case ATH10K_SCAN_RUNNING:
+	case ATH10K_SCAN_ABORTING:
+		break;
 	}
 
+	if (test_bit(ATH10K_FW_FEATURE_SINGLE_CHAN_INFO_PER_CHANNEL,
+		     ar->running_fw->fw_file.fw_features))
+		ath10k_wmi_event_chan_info_unpaired(ar, &ch_info_param);
+	else
+		ath10k_wmi_event_chan_info_paired(ar, &ch_info_param);
+
 exit:
 	spin_unlock_bh(&ar->data_lock);
 }
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index 1287687..e8e471e 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -6441,6 +6441,14 @@ struct wmi_chan_info_event {
 	__le32 noise_floor;
 	__le32 rx_clear_count;
 	__le32 cycle_count;
+	__le32 chan_tx_pwr_range;
+	__le32 chan_tx_pwr_tp;
+	__le32 rx_frame_count;
+	__le32 my_bss_rx_cycle_count;
+	__le32 rx_11b_mode_data_duration;
+	__le32 tx_frame_cnt;
+	__le32 mac_clk_mhz;
+
 } __packed;
 
 struct wmi_10_4_chan_info_event {
@@ -6675,6 +6683,10 @@ struct wmi_ch_info_ev_arg {
 	__le32 chan_tx_pwr_range;
 	__le32 chan_tx_pwr_tp;
 	__le32 rx_frame_count;
+	__le32 my_bss_rx_cycle_count;
+	__le32 rx_11b_mode_data_duration;
+	__le32 tx_frame_cnt;
+	__le32 mac_clk_mhz;
 };
 
 /* From 10.4 firmware, not sure all have the same values. */
-- 
2.7.4


_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH] ath10k: Fill the channel survey results for WCN3990 correctly
  2018-10-03 10:57 ` Rakesh Pillai
  (?)
@ 2018-10-12 14:34 ` Kalle Valo
  -1 siblings, 0 replies; 11+ messages in thread
From: Kalle Valo @ 2018-10-12 14:34 UTC (permalink / raw)
  To: Rakesh Pillai; +Cc: ath10k, linux-wireless, Rakesh Pillai, Surabhi Vishnoi

Rakesh Pillai <pillair@codeaurora.org> wrote:

> The host driver currently expects the channel info event to be
> received in pairs for all the channels, i.e. the first
> chan_info event for a particular channel will not have the
> COMPLETE flag set and the second chan_info event for the
> same channel will have the COMPLETE flag set.
> 
> The HL2.0 firmware sends only one channel info event per channel
> which is scanned without the COMPLETE flag set. After sending the
> chan_info_event for all the channels, the HL2.0 firmware sends a
> chan_info_event with COMPLETE flag set to indicate the completion
> of the channel info event.
> 
> The firmware does not indicate this behavior with any service bitmap
> and hence a new firmware feature flag is used to handle the modified
> parsing of the channel info events, in the host driver, for the
> firmware which sends single channel info event per scanned channel.
> 
> Tested HW: WCN3990
> Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
> 
> Co-developed-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
> Signed-off-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
> Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>

Kbuild bot reported some errors:

>> ERROR: "__udivdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] undefined!
>> ERROR: "__divdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] undefined!

Need to investigate those if they are valid or problem with the bot.

-- 
https://patchwork.kernel.org/patch/10624567/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] ath10k: Fill the channel survey results for WCN3990 correctly
  2018-10-03 10:57 ` Rakesh Pillai
  (?)
  (?)
@ 2018-10-12 14:34 ` Kalle Valo
  2018-10-12 15:53     ` Kalle Valo
  -1 siblings, 1 reply; 11+ messages in thread
From: Kalle Valo @ 2018-10-12 14:34 UTC (permalink / raw)
  To: Rakesh Pillai; +Cc: linux-wireless, ath10k, Surabhi Vishnoi

Rakesh Pillai <pillair@codeaurora.org> wrote:

> The host driver currently expects the channel info event to be
> received in pairs for all the channels, i.e. the first
> chan_info event for a particular channel will not have the
> COMPLETE flag set and the second chan_info event for the
> same channel will have the COMPLETE flag set.
> 
> The HL2.0 firmware sends only one channel info event per channel
> which is scanned without the COMPLETE flag set. After sending the
> chan_info_event for all the channels, the HL2.0 firmware sends a
> chan_info_event with COMPLETE flag set to indicate the completion
> of the channel info event.
> 
> The firmware does not indicate this behavior with any service bitmap
> and hence a new firmware feature flag is used to handle the modified
> parsing of the channel info events, in the host driver, for the
> firmware which sends single channel info event per scanned channel.
> 
> Tested HW: WCN3990
> Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
> 
> Co-developed-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
> Signed-off-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
> Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>

Kbuild bot reported some errors:

>> ERROR: "__udivdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] undefined!
>> ERROR: "__divdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] undefined!

Need to investigate those if they are valid or problem with the bot.

-- 
https://patchwork.kernel.org/patch/10624567/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] ath10k: Fill the channel survey results for WCN3990 correctly
  2018-10-12 14:34 ` Kalle Valo
@ 2018-10-12 15:53     ` Kalle Valo
  0 siblings, 0 replies; 11+ messages in thread
From: Kalle Valo @ 2018-10-12 15:53 UTC (permalink / raw)
  To: Rakesh Pillai; +Cc: linux-wireless, ath10k, Surabhi Vishnoi

Kalle Valo <kvalo@codeaurora.org> writes:

> Rakesh Pillai <pillair@codeaurora.org> wrote:
>
>> The host driver currently expects the channel info event to be
>> received in pairs for all the channels, i.e. the first
>> chan_info event for a particular channel will not have the
>> COMPLETE flag set and the second chan_info event for the
>> same channel will have the COMPLETE flag set.
>> 
>> The HL2.0 firmware sends only one channel info event per channel
>> which is scanned without the COMPLETE flag set. After sending the
>> chan_info_event for all the channels, the HL2.0 firmware sends a
>> chan_info_event with COMPLETE flag set to indicate the completion
>> of the channel info event.
>> 
>> The firmware does not indicate this behavior with any service bitmap
>> and hence a new firmware feature flag is used to handle the modified
>> parsing of the channel info events, in the host driver, for the
>> firmware which sends single channel info event per scanned channel.
>> 
>> Tested HW: WCN3990
>> Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
>> 
>> Co-developed-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
>> Signed-off-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
>> Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
>> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
>
> Kbuild bot reported some errors:
>
>>> ERROR: "__udivdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] undefined!
>>> ERROR: "__divdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] undefined!
>
> Need to investigate those if they are valid or problem with the bot.

Arnd explained the problem in the other thread:

  "I think the problem is that 'clock_freq' is a 'u64', which means we
   can't use a normal 32-bit division. It looks like it cannot actually
   go beyond the range of a u32, so changing the type should be
   sufficient."

Please investigate that and submit v2.

-- 
Kalle Valo

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] ath10k: Fill the channel survey results for WCN3990 correctly
@ 2018-10-12 15:53     ` Kalle Valo
  0 siblings, 0 replies; 11+ messages in thread
From: Kalle Valo @ 2018-10-12 15:53 UTC (permalink / raw)
  To: Rakesh Pillai; +Cc: linux-wireless, ath10k, Surabhi Vishnoi

Kalle Valo <kvalo@codeaurora.org> writes:

> Rakesh Pillai <pillair@codeaurora.org> wrote:
>
>> The host driver currently expects the channel info event to be
>> received in pairs for all the channels, i.e. the first
>> chan_info event for a particular channel will not have the
>> COMPLETE flag set and the second chan_info event for the
>> same channel will have the COMPLETE flag set.
>> 
>> The HL2.0 firmware sends only one channel info event per channel
>> which is scanned without the COMPLETE flag set. After sending the
>> chan_info_event for all the channels, the HL2.0 firmware sends a
>> chan_info_event with COMPLETE flag set to indicate the completion
>> of the channel info event.
>> 
>> The firmware does not indicate this behavior with any service bitmap
>> and hence a new firmware feature flag is used to handle the modified
>> parsing of the channel info events, in the host driver, for the
>> firmware which sends single channel info event per scanned channel.
>> 
>> Tested HW: WCN3990
>> Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
>> 
>> Co-developed-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
>> Signed-off-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
>> Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
>> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
>
> Kbuild bot reported some errors:
>
>>> ERROR: "__udivdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] undefined!
>>> ERROR: "__divdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] undefined!
>
> Need to investigate those if they are valid or problem with the bot.

Arnd explained the problem in the other thread:

  "I think the problem is that 'clock_freq' is a 'u64', which means we
   can't use a normal 32-bit division. It looks like it cannot actually
   go beyond the range of a u32, so changing the type should be
   sufficient."

Please investigate that and submit v2.

-- 
Kalle Valo

_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] ath10k: Fill the channel survey results for WCN3990 correctly
  2018-10-12 15:53     ` Kalle Valo
@ 2018-10-17 11:21       ` Rakesh Pillai
  -1 siblings, 0 replies; 11+ messages in thread
From: Rakesh Pillai @ 2018-10-17 11:21 UTC (permalink / raw)
  To: Kalle Valo; +Cc: linux-wireless, ath10k, Surabhi Vishnoi

Hi Kalle,

I have removed the clk_freq variable and now there will be u32 division 
only.
This change has been sent in v2.

Thanks,
Rakesh Pillai.

On 2018-10-12 21:23, Kalle Valo wrote:
> Kalle Valo <kvalo@codeaurora.org> writes:
> 
>> Rakesh Pillai <pillair@codeaurora.org> wrote:
>> 
>>> The host driver currently expects the channel info event to be
>>> received in pairs for all the channels, i.e. the first
>>> chan_info event for a particular channel will not have the
>>> COMPLETE flag set and the second chan_info event for the
>>> same channel will have the COMPLETE flag set.
>>> 
>>> The HL2.0 firmware sends only one channel info event per channel
>>> which is scanned without the COMPLETE flag set. After sending the
>>> chan_info_event for all the channels, the HL2.0 firmware sends a
>>> chan_info_event with COMPLETE flag set to indicate the completion
>>> of the channel info event.
>>> 
>>> The firmware does not indicate this behavior with any service bitmap
>>> and hence a new firmware feature flag is used to handle the modified
>>> parsing of the channel info events, in the host driver, for the
>>> firmware which sends single channel info event per scanned channel.
>>> 
>>> Tested HW: WCN3990
>>> Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
>>> 
>>> Co-developed-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
>>> Signed-off-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
>>> Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
>>> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
>> 
>> Kbuild bot reported some errors:
>> 
>>>> ERROR: "__udivdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] 
>>>> undefined!
>>>> ERROR: "__divdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] 
>>>> undefined!
>> 
>> Need to investigate those if they are valid or problem with the bot.
> 
> Arnd explained the problem in the other thread:
> 
>   "I think the problem is that 'clock_freq' is a 'u64', which means we
>    can't use a normal 32-bit division. It looks like it cannot actually
>    go beyond the range of a u32, so changing the type should be
>    sufficient."
> 
> Please investigate that and submit v2.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] ath10k: Fill the channel survey results for WCN3990 correctly
@ 2018-10-17 11:21       ` Rakesh Pillai
  0 siblings, 0 replies; 11+ messages in thread
From: Rakesh Pillai @ 2018-10-17 11:21 UTC (permalink / raw)
  To: Kalle Valo; +Cc: linux-wireless, ath10k, Surabhi Vishnoi

Hi Kalle,

I have removed the clk_freq variable and now there will be u32 division 
only.
This change has been sent in v2.

Thanks,
Rakesh Pillai.

On 2018-10-12 21:23, Kalle Valo wrote:
> Kalle Valo <kvalo@codeaurora.org> writes:
> 
>> Rakesh Pillai <pillair@codeaurora.org> wrote:
>> 
>>> The host driver currently expects the channel info event to be
>>> received in pairs for all the channels, i.e. the first
>>> chan_info event for a particular channel will not have the
>>> COMPLETE flag set and the second chan_info event for the
>>> same channel will have the COMPLETE flag set.
>>> 
>>> The HL2.0 firmware sends only one channel info event per channel
>>> which is scanned without the COMPLETE flag set. After sending the
>>> chan_info_event for all the channels, the HL2.0 firmware sends a
>>> chan_info_event with COMPLETE flag set to indicate the completion
>>> of the channel info event.
>>> 
>>> The firmware does not indicate this behavior with any service bitmap
>>> and hence a new firmware feature flag is used to handle the modified
>>> parsing of the channel info events, in the host driver, for the
>>> firmware which sends single channel info event per scanned channel.
>>> 
>>> Tested HW: WCN3990
>>> Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
>>> 
>>> Co-developed-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
>>> Signed-off-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
>>> Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
>>> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
>> 
>> Kbuild bot reported some errors:
>> 
>>>> ERROR: "__udivdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] 
>>>> undefined!
>>>> ERROR: "__divdi3" [drivers/net/wireless/ath/ath10k/ath10k_core.ko] 
>>>> undefined!
>> 
>> Need to investigate those if they are valid or problem with the bot.
> 
> Arnd explained the problem in the other thread:
> 
>   "I think the problem is that 'clock_freq' is a 'u64', which means we
>    can't use a normal 32-bit division. It looks like it cannot actually
>    go beyond the range of a u32, so changing the type should be
>    sufficient."
> 
> Please investigate that and submit v2.

_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] ath10k: fill the channel survey results for WCN3990 correctly
  2019-03-08 11:30 ` Rakesh Pillai
@ 2019-03-11  0:12   ` Greg Ungerer
  0 siblings, 0 replies; 11+ messages in thread
From: Greg Ungerer @ 2019-03-11  0:12 UTC (permalink / raw)
  To: Rakesh Pillai; +Cc: ath10k, Kalle Valo, Surabhi Vishnoi

Hi Rakesh,

On 8/3/19 9:30 pm, Rakesh Pillai wrote:
> Yes, the commit 13104929d2ec ("[PATCH]ath10k: fill the channel survey results for WCN3990 correctly") causes a regression for the non-tlv targets since the common wmi channel info structure  was extended in this particular commit. The -EPROTO error is a result of this, since the wmi event for channel info has a size check which will fail due to the extension of the wmi_chan_info_event structure.
> 
> I have raised a fix for this
> https://patchwork.kernel.org/patch/10844513/

Works for me, thanks.

Tested-by: Greg Ungerer <gerg@kernel.org>

Regards
Greg



> On 2019-03-07 18:36, Greg Ungerer wrote:
>> Hi Rakesh, Surabhi,
>>
>> This patch, which is in the linux kernel as commit 13104929d2ec ("[PATCH]
>> ath10k: fill the channel survey results for WCN3990 correctly"), is causing
>> me problems when running linux-5.0 kernel.
>>
>> I see messages like this on the console:
>>
>>   ath10k_pci 0000:01:00.0: failed to parse chan info event: -71
>>
>> They come out in bunches every few seconds. This same hardware and setup
>> works again if I revert out this patch.
>>
>> For reference the hardware platform is a Mediatek MT7621 (quad core
>> MIPS at 880MHz). The the ath10k hardware is a mini PCIe device.
>>
>> The dmesg init trace for the ath10k modules is this:
>>
>> <6>ath10k_pci 0000:01:00.0: enabling device (0000 -> 0002)^M
>> <6>ath10k_pci 0000:01:00.0: pci irq legacy oper_irq_mode 1 irq_mode 0
>> reset_mode 0^M
>> <6>ath10k_pci 0000:01:00.0: qca988x hw2.0 target 0x4100016c chip_id
>> 0x043222ff sub 0000:0000^M
>> <6>ath10k_pci 0000:01:00.0: kconfig debug 0 debugfs 0 tracing 0 dfs 1
>> testmode 0^M
>> <6>ath10k_pci 0000:01:00.0: firmware ver 10.2.4-1.0-00043 api 5
>> features no-p2p,raw-mode,mfp,allows-mesh-bcast crc32 ed0aafd8^M
>> <6>ath10k_pci 0000:01:00.0: board_file api 1 bmi_id N/A crc32 bebc7c08^M
>> <4>ath10k_pci 0000:01:00.0: unsupported HTC service id: 1536^M
>> <6>ath10k_pci 0000:01:00.0: htt-ver 2.1 wmi-op 5 htt-op 2 cal otp
>> max-sta 128 raw 0 hwcrypto 1^M
>> <7>ath: EEPROM regdomain: 0x0^M
>> <7>ath: EEPROM indicates default country code should be used^M
>> <7>ath: doing EEPROM country->regdmn map search^M
>> <7>ath: country maps to regdmn code: 0x3a^M
>> <7>ath: Country alpha2 being used: US^M
>> <7>ath: Regpair used: 0x3a^M
>>
>> I am using hostapd-2.7 and the linux-firmware package is the very latest from
>> their git repository.
>>
>> This looks a lot like the problem reported by Justin Capella (thread at
>> http://lists.infradead.org/pipermail/ath10k/2019-February/012900.html).
>>
>> Anyway, thoughts?
>>
>> Regards
>> Greg
> 

_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] ath10k: fill the channel survey results for WCN3990 correctly
  2019-03-07 13:06 [PATCH] ath10k: fill " Greg Ungerer
@ 2019-03-08 11:30 ` Rakesh Pillai
  2019-03-11  0:12   ` Greg Ungerer
  0 siblings, 1 reply; 11+ messages in thread
From: Rakesh Pillai @ 2019-03-08 11:30 UTC (permalink / raw)
  To: Greg Ungerer; +Cc: ath10k, Kalle Valo, Surabhi Vishnoi

Hi Greg,

Yes, the commit 13104929d2ec ("[PATCH]ath10k: fill the channel survey 
results for WCN3990 correctly") causes a regression for the non-tlv 
targets since the common wmi channel info structure  was extended in 
this particular commit. The -EPROTO error is a result of this, since the 
wmi event for channel info has a size check which will fail due to the 
extension of the wmi_chan_info_event structure.

I have raised a fix for this
https://patchwork.kernel.org/patch/10844513/


Thanks,
Rakesh

On 2019-03-07 18:36, Greg Ungerer wrote:
> Hi Rakesh, Surabhi,
> 
> This patch, which is in the linux kernel as commit 13104929d2ec 
> ("[PATCH]
> ath10k: fill the channel survey results for WCN3990 correctly"), is 
> causing
> me problems when running linux-5.0 kernel.
> 
> I see messages like this on the console:
> 
>   ath10k_pci 0000:01:00.0: failed to parse chan info event: -71
> 
> They come out in bunches every few seconds. This same hardware and 
> setup
> works again if I revert out this patch.
> 
> For reference the hardware platform is a Mediatek MT7621 (quad core
> MIPS at 880MHz). The the ath10k hardware is a mini PCIe device.
> 
> The dmesg init trace for the ath10k modules is this:
> 
> <6>ath10k_pci 0000:01:00.0: enabling device (0000 -> 0002)^M
> <6>ath10k_pci 0000:01:00.0: pci irq legacy oper_irq_mode 1 irq_mode 0
> reset_mode 0^M
> <6>ath10k_pci 0000:01:00.0: qca988x hw2.0 target 0x4100016c chip_id
> 0x043222ff sub 0000:0000^M
> <6>ath10k_pci 0000:01:00.0: kconfig debug 0 debugfs 0 tracing 0 dfs 1
> testmode 0^M
> <6>ath10k_pci 0000:01:00.0: firmware ver 10.2.4-1.0-00043 api 5
> features no-p2p,raw-mode,mfp,allows-mesh-bcast crc32 ed0aafd8^M
> <6>ath10k_pci 0000:01:00.0: board_file api 1 bmi_id N/A crc32 
> bebc7c08^M
> <4>ath10k_pci 0000:01:00.0: unsupported HTC service id: 1536^M
> <6>ath10k_pci 0000:01:00.0: htt-ver 2.1 wmi-op 5 htt-op 2 cal otp
> max-sta 128 raw 0 hwcrypto 1^M
> <7>ath: EEPROM regdomain: 0x0^M
> <7>ath: EEPROM indicates default country code should be used^M
> <7>ath: doing EEPROM country->regdmn map search^M
> <7>ath: country maps to regdmn code: 0x3a^M
> <7>ath: Country alpha2 being used: US^M
> <7>ath: Regpair used: 0x3a^M
> 
> I am using hostapd-2.7 and the linux-firmware package is the very 
> latest from
> their git repository.
> 
> This looks a lot like the problem reported by Justin Capella (thread at
> http://lists.infradead.org/pipermail/ath10k/2019-February/012900.html).
> 
> Anyway, thoughts?
> 
> Regards
> Greg

_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] ath10k: fill the channel survey results for WCN3990 correctly
@ 2019-03-07 13:06 Greg Ungerer
  2019-03-08 11:30 ` Rakesh Pillai
  0 siblings, 1 reply; 11+ messages in thread
From: Greg Ungerer @ 2019-03-07 13:06 UTC (permalink / raw)
  To: Rakesh Pillai, Surabhi Vishnoi; +Cc: ath10k, Kalle Valo

Hi Rakesh, Surabhi,

This patch, which is in the linux kernel as commit 13104929d2ec ("[PATCH]
ath10k: fill the channel survey results for WCN3990 correctly"), is causing
me problems when running linux-5.0 kernel.

I see messages like this on the console:

   ath10k_pci 0000:01:00.0: failed to parse chan info event: -71

They come out in bunches every few seconds. This same hardware and setup
works again if I revert out this patch.

For reference the hardware platform is a Mediatek MT7621 (quad core
MIPS at 880MHz). The the ath10k hardware is a mini PCIe device.

The dmesg init trace for the ath10k modules is this:

<6>ath10k_pci 0000:01:00.0: enabling device (0000 -> 0002)^M
<6>ath10k_pci 0000:01:00.0: pci irq legacy oper_irq_mode 1 irq_mode 0 reset_mode 0^M
<6>ath10k_pci 0000:01:00.0: qca988x hw2.0 target 0x4100016c chip_id 0x043222ff sub 0000:0000^M
<6>ath10k_pci 0000:01:00.0: kconfig debug 0 debugfs 0 tracing 0 dfs 1 testmode 0^M
<6>ath10k_pci 0000:01:00.0: firmware ver 10.2.4-1.0-00043 api 5 features no-p2p,raw-mode,mfp,allows-mesh-bcast crc32 ed0aafd8^M
<6>ath10k_pci 0000:01:00.0: board_file api 1 bmi_id N/A crc32 bebc7c08^M
<4>ath10k_pci 0000:01:00.0: unsupported HTC service id: 1536^M
<6>ath10k_pci 0000:01:00.0: htt-ver 2.1 wmi-op 5 htt-op 2 cal otp max-sta 128 raw 0 hwcrypto 1^M
<7>ath: EEPROM regdomain: 0x0^M
<7>ath: EEPROM indicates default country code should be used^M
<7>ath: doing EEPROM country->regdmn map search^M
<7>ath: country maps to regdmn code: 0x3a^M
<7>ath: Country alpha2 being used: US^M
<7>ath: Regpair used: 0x3a^M

I am using hostapd-2.7 and the linux-firmware package is the very latest from
their git repository.

This looks a lot like the problem reported by Justin Capella (thread at
http://lists.infradead.org/pipermail/ath10k/2019-February/012900.html).

Anyway, thoughts?

Regards
Greg



_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2019-03-11  0:12 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-03 10:57 [PATCH] ath10k: Fill the channel survey results for WCN3990 correctly Rakesh Pillai
2018-10-03 10:57 ` Rakesh Pillai
2018-10-12 14:34 ` Kalle Valo
2018-10-12 14:34 ` Kalle Valo
2018-10-12 15:53   ` Kalle Valo
2018-10-12 15:53     ` Kalle Valo
2018-10-17 11:21     ` Rakesh Pillai
2018-10-17 11:21       ` Rakesh Pillai
2019-03-07 13:06 [PATCH] ath10k: fill " Greg Ungerer
2019-03-08 11:30 ` Rakesh Pillai
2019-03-11  0:12   ` Greg Ungerer

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.