linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/17] staging: wfx: misc fixes
@ 2020-04-27 13:40 Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 01/17] staging: wfx: fix (future) TDLS support Jerome Pouiller
                   ` (16 more replies)
  0 siblings, 17 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

Nothing very exciting in this series. It supports the case where device
reports to be too hot, fixes a few corner cases and makes some cosmetic
changes.

Jérôme Pouiller (17):
  staging: wfx: fix (future) TDLS support
  staging: wfx: change the field chip_frozen into a boolean
  staging: wfx: mark chip frozen on error indication
  staging: wfx: fix support for AP that do not support PS-Poll
  staging: wfx: fix CAB sent at the wrong time
  staging: wfx: add support for 'device too hot' indication
  staging: wfx: add an explicit warning when chip detect too high
    temperature
  staging: wfx: fix highest Rx value declared in
    ieee80211_supported_band
  staging: wfx: fix overflow in frame counters
  staging: wfx: fix the warning "inconsistent notification"
  staging: wfx: fix double init of tx_policy_upload_work
  staging: wfx: show counters of all interfaces
  staging: wfx: also show unnamed counters fields
  staging: wfx: update list of known messages in tracepoints
  staging: wfx: fix messages names in tracepoints
  staging: wfx: fix display of exception indication
  staging: wfx: update list of errors

 drivers/staging/wfx/data_tx.c         |  18 ++-
 drivers/staging/wfx/data_tx.h         |   1 +
 drivers/staging/wfx/debug.c           |  31 ++++--
 drivers/staging/wfx/hif_api_general.h |  39 ++++---
 drivers/staging/wfx/hif_rx.c          | 151 +++++++++++++++++---------
 drivers/staging/wfx/hif_tx.c          |   2 +-
 drivers/staging/wfx/hif_tx_mib.c      |   6 +-
 drivers/staging/wfx/hif_tx_mib.h      |   2 +-
 drivers/staging/wfx/main.c            |   4 +-
 drivers/staging/wfx/queue.c           |   2 +-
 drivers/staging/wfx/sta.c             |  51 +++++++--
 drivers/staging/wfx/sta.h             |   4 +-
 drivers/staging/wfx/traces.h          |  15 ++-
 drivers/staging/wfx/wfx.h             |   5 +-
 14 files changed, 228 insertions(+), 103 deletions(-)

-- 
2.26.1


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

* [PATCH 01/17] staging: wfx: fix (future) TDLS support
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 02/17] staging: wfx: change the field chip_frozen into a boolean Jerome Pouiller
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

The device does not expect that the AP to have a link-id. However, TDLS
peers should have a a link-id.

The driver does not yet declare itself as supporting TDLS.
Notwithstanding, fix the code in anticipation of the support of TDLS.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/sta.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c
index f3e106f7eeac..2262e1de37f6 100644
--- a/drivers/staging/wfx/sta.c
+++ b/drivers/staging/wfx/sta.c
@@ -384,9 +384,8 @@ int wfx_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 	spin_lock_init(&sta_priv->lock);
 	sta_priv->vif_id = wvif->id;
 
-	// FIXME: in station mode, the current API interprets new link-id as a
-	// tdls peer.
-	if (vif->type == NL80211_IFTYPE_STATION)
+	// In station mode, the firmware interprets new link-id as a TDLS peer.
+	if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls)
 		return 0;
 	sta_priv->link_id = ffz(wvif->link_id_map);
 	wvif->link_id_map |= BIT(sta_priv->link_id);
@@ -408,8 +407,8 @@ int wfx_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		if (sta_priv->buffered[i])
 			dev_warn(wvif->wdev->dev, "release station while %d pending frame on queue %d",
 				 sta_priv->buffered[i], i);
-	// FIXME: see note in wfx_sta_add()
-	if (vif->type == NL80211_IFTYPE_STATION)
+	// See note in wfx_sta_add()
+	if (!sta_priv->link_id)
 		return 0;
 	// FIXME add a mutex?
 	hif_map_link(wvif, sta->addr, 1, sta_priv->link_id);
-- 
2.26.1


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

* [PATCH 02/17] staging: wfx: change the field chip_frozen into a boolean
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 01/17] staging: wfx: fix (future) TDLS support Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 03/17] staging: wfx: mark chip frozen on error indication Jerome Pouiller
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

The field chip_frozen is declared as an integer, but it is only used as
a boolean. So, convert it into a boolean.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/hif_rx.c | 2 +-
 drivers/staging/wfx/hif_tx.c | 2 +-
 drivers/staging/wfx/queue.c  | 2 +-
 drivers/staging/wfx/wfx.h    | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/wfx/hif_rx.c b/drivers/staging/wfx/hif_rx.c
index b8d570256498..b56138fef0bb 100644
--- a/drivers/staging/wfx/hif_rx.c
+++ b/drivers/staging/wfx/hif_rx.c
@@ -316,7 +316,7 @@ static int hif_exception_indication(struct wfx_dev *wdev,
 
 	dev_err(wdev->dev, "firmware exception\n");
 	print_hex_dump_bytes("Dump: ", DUMP_PREFIX_NONE, buf, len);
-	wdev->chip_frozen = 1;
+	wdev->chip_frozen = true;
 
 	return -1;
 }
diff --git a/drivers/staging/wfx/hif_tx.c b/drivers/staging/wfx/hif_tx.c
index 17721cf9e2a3..e8f3c5f9ce7b 100644
--- a/drivers/staging/wfx/hif_tx.c
+++ b/drivers/staging/wfx/hif_tx.c
@@ -91,7 +91,7 @@ int wfx_cmd_send(struct wfx_dev *wdev, struct hif_msg *request, void *reply,
 	if (!ret) {
 		dev_err(wdev->dev, "chip did not answer\n");
 		wfx_pending_dump_old_frames(wdev, 3000);
-		wdev->chip_frozen = 1;
+		wdev->chip_frozen = true;
 		reinit_completion(&wdev->hif_cmd.done);
 		ret = -ETIMEDOUT;
 	} else {
diff --git a/drivers/staging/wfx/queue.c b/drivers/staging/wfx/queue.c
index 2f6f9faf15be..0c799cedd101 100644
--- a/drivers/staging/wfx/queue.c
+++ b/drivers/staging/wfx/queue.c
@@ -52,7 +52,7 @@ void wfx_tx_flush(struct wfx_dev *wdev)
 			 wdev->hif.tx_buffers_used);
 		wfx_pending_dump_old_frames(wdev, 3000);
 		// FIXME: drop pending frames here
-		wdev->chip_frozen = 1;
+		wdev->chip_frozen = true;
 	}
 	mutex_unlock(&wdev->hif_cmd.lock);
 	wfx_tx_unlock(wdev);
diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h
index 706e95cd1092..77bb6c617546 100644
--- a/drivers/staging/wfx/wfx.h
+++ b/drivers/staging/wfx/wfx.h
@@ -45,7 +45,7 @@ struct wfx_dev {
 	struct hif_ind_startup	hw_caps;
 	struct wfx_hif		hif;
 	struct sl_context	sl;
-	int			chip_frozen;
+	bool			chip_frozen;
 	struct mutex		conf_mutex;
 
 	struct wfx_hif_cmd	hif_cmd;
-- 
2.26.1


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

* [PATCH 03/17] staging: wfx: mark chip frozen on error indication
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 01/17] staging: wfx: fix (future) TDLS support Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 02/17] staging: wfx: change the field chip_frozen into a boolean Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 04/17] staging: wfx: fix support for AP that do not support PS-Poll Jerome Pouiller
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

When the driver receive an error indication, it means the chip won't
answer to any command anymore. Therefore, mark the chip frozen when it
happens (as when the driver receive an exception indication).

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/hif_rx.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/staging/wfx/hif_rx.c b/drivers/staging/wfx/hif_rx.c
index b56138fef0bb..6dbe289a368f 100644
--- a/drivers/staging/wfx/hif_rx.c
+++ b/drivers/staging/wfx/hif_rx.c
@@ -276,6 +276,7 @@ static int hif_error_indication(struct wfx_dev *wdev,
 			body->type);
 		break;
 	}
+	wdev->chip_frozen = true;
 	return 0;
 }
 
-- 
2.26.1


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

* [PATCH 04/17] staging: wfx: fix support for AP that do not support PS-Poll
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (2 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 03/17] staging: wfx: mark chip frozen on error indication Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 05/17] staging: wfx: fix CAB sent at the wrong time Jerome Pouiller
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

When multiple virtual interfaces (on different channels) are in use, the
device ask to activate Power Save on station interfaces. The device
developers recommends to use legacy PS-Poll in this case since it is the
mode that disturb the less the other interface. However, some AP start
to not answer anymore to PS-Poll. The device is able to detect this case
and return a special warning in this case.

So, this commit catch the warning and force usage of FastPS in this
case.

In order to confuse the less possible the other interface a small FastPS
period is used (30ms).

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/hif_rx.c |  8 +++++++-
 drivers/staging/wfx/sta.c    | 16 +++++++++++++++-
 drivers/staging/wfx/wfx.h    |  2 ++
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/wfx/hif_rx.c b/drivers/staging/wfx/hif_rx.c
index 6dbe289a368f..a2ac6c098163 100644
--- a/drivers/staging/wfx/hif_rx.c
+++ b/drivers/staging/wfx/hif_rx.c
@@ -176,7 +176,13 @@ static int hif_event_indication(struct wfx_dev *wdev,
 		dev_dbg(wdev->dev, "ignore BSSREGAINED indication\n");
 		break;
 	case HIF_EVENT_IND_PS_MODE_ERROR:
-		dev_warn(wdev->dev, "error while processing power save request\n");
+		dev_warn(wdev->dev, "error while processing power save request: %d\n",
+			 body->event_data.ps_mode_error);
+		if (body->event_data.ps_mode_error ==
+		    HIF_PS_ERROR_AP_NOT_RESP_TO_POLL) {
+			wvif->bss_not_support_ps_poll = true;
+			schedule_work(&wvif->update_pm_work);
+		}
 		break;
 	default:
 		dev_warn(wdev->dev, "unhandled event indication: %.2x\n",
diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c
index 2262e1de37f6..77d5ff17a59a 100644
--- a/drivers/staging/wfx/sta.c
+++ b/drivers/staging/wfx/sta.c
@@ -205,7 +205,10 @@ static int wfx_update_pm(struct wfx_vif *wvif)
 	if (chan0 && chan1 && chan0->hw_value != chan1->hw_value &&
 	    wvif->vif->type != NL80211_IFTYPE_AP) {
 		ps = true;
-		ps_timeout = 0;
+		if (wvif->bss_not_support_ps_poll)
+			ps_timeout = 30;
+		else
+			ps_timeout = 0;
 	}
 
 	if (!wait_for_completion_timeout(&wvif->set_pm_mode_complete,
@@ -215,6 +218,14 @@ static int wfx_update_pm(struct wfx_vif *wvif)
 	return hif_set_pm(wvif, ps, ps_timeout);
 }
 
+static void wfx_update_pm_work(struct work_struct *work)
+{
+	struct wfx_vif *wvif = container_of(work, struct wfx_vif,
+					    update_pm_work);
+
+	wfx_update_pm(wvif);
+}
+
 int wfx_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		   u16 queue, const struct ieee80211_tx_queue_params *params)
 {
@@ -293,6 +304,7 @@ static void wfx_do_unjoin(struct wfx_vif *wvif)
 	if (wvif_count(wvif->wdev) <= 1)
 		hif_set_block_ack_policy(wvif, 0xFF, 0xFF);
 	wfx_tx_unlock(wvif->wdev);
+	wvif->bss_not_support_ps_poll = false;
 	cancel_delayed_work_sync(&wvif->beacon_loss_work);
 }
 
@@ -453,6 +465,7 @@ void wfx_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
 	wfx_tx_policy_init(wvif);
 	if (wvif_count(wvif->wdev) <= 1)
 		hif_set_block_ack_policy(wvif, 0xFF, 0xFF);
+	wvif->bss_not_support_ps_poll = false;
 }
 
 static void wfx_join_finalize(struct wfx_vif *wvif,
@@ -737,6 +750,7 @@ int wfx_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
 
 	init_completion(&wvif->set_pm_mode_complete);
 	complete(&wvif->set_pm_mode_complete);
+	INIT_WORK(&wvif->update_pm_work, wfx_update_pm_work);
 	INIT_WORK(&wvif->tx_policy_upload_work, wfx_tx_policy_upload_work);
 
 	mutex_init(&wvif->scan_lock);
diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h
index 77bb6c617546..c7a58ab3beaa 100644
--- a/drivers/staging/wfx/wfx.h
+++ b/drivers/staging/wfx/wfx.h
@@ -89,6 +89,8 @@ struct wfx_vif {
 	bool			scan_abort;
 	struct ieee80211_scan_request *scan_req;
 
+	bool			bss_not_support_ps_poll;
+	struct work_struct	update_pm_work;
 	struct completion	set_pm_mode_complete;
 };
 
-- 
2.26.1


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

* [PATCH 05/17] staging: wfx: fix CAB sent at the wrong time
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (3 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 04/17] staging: wfx: fix support for AP that do not support PS-Poll Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 06/17] staging: wfx: add support for 'device too hot' indication Jerome Pouiller
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

wfx_suspend_resume_mc() is called when the device is about to sent a
DTIM. This is the right moment to enqueue Content After DTIM Beacon
(CAB).

However, wfx_suspend_resume_mc() is also called when the DTIM period
ends. Until now, this event did also trig CAB.

Note this issue did not have too much impact since when a CAB is sent
outside of DTIM window, an error is reported by the firmware and
mac80211 retries to send the data.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/sta.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c
index 77d5ff17a59a..5132c19e0367 100644
--- a/drivers/staging/wfx/sta.c
+++ b/drivers/staging/wfx/sta.c
@@ -641,6 +641,8 @@ int wfx_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta, bool set)
 
 void wfx_suspend_resume_mc(struct wfx_vif *wvif, enum sta_notify_cmd notify_cmd)
 {
+	if (notify_cmd != STA_NOTIFY_AWAKE)
+		return;
 	WARN(!wfx_tx_queues_has_cab(wvif), "incorrect sequence");
 	WARN(wvif->after_dtim_tx_allowed, "incorrect sequence");
 	wvif->after_dtim_tx_allowed = true;
-- 
2.26.1


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

* [PATCH 06/17] staging: wfx: add support for 'device too hot' indication
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (4 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 05/17] staging: wfx: fix CAB sent at the wrong time Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 07/17] staging: wfx: add an explicit warning when chip detect too high temperature Jerome Pouiller
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

Device is able to detect a high temperature. In this case, the traffic
is not allowed to be sent until the temperature decrease.

This patch detects the warnings raised by the device and stop the
traffic accordingly. It also add a delayed task as safeguard in case the
chip would never send the indication that the temperature decrease.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/hif_rx.c | 20 ++++++++++++++------
 drivers/staging/wfx/main.c   |  2 ++
 drivers/staging/wfx/sta.c    | 23 +++++++++++++++++++++++
 drivers/staging/wfx/sta.h    |  2 ++
 drivers/staging/wfx/wfx.h    |  1 +
 5 files changed, 42 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/wfx/hif_rx.c b/drivers/staging/wfx/hif_rx.c
index a2ac6c098163..6de210139d8a 100644
--- a/drivers/staging/wfx/hif_rx.c
+++ b/drivers/staging/wfx/hif_rx.c
@@ -235,12 +235,20 @@ static int hif_suspend_resume_indication(struct wfx_dev *wdev,
 	struct wfx_vif *wvif = wdev_to_wvif(wdev, hif->interface);
 	const struct hif_ind_suspend_resume_tx *body = buf;
 
-	WARN_ON(!wvif);
-	WARN(!body->suspend_resume_flags.bc_mc_only, "unsupported suspend/resume notification");
-	if (body->suspend_resume_flags.resume)
-		wfx_suspend_resume_mc(wvif, STA_NOTIFY_AWAKE);
-	else
-		wfx_suspend_resume_mc(wvif, STA_NOTIFY_SLEEP);
+	if (body->suspend_resume_flags.bc_mc_only) {
+		WARN_ON(!wvif);
+		if (body->suspend_resume_flags.resume)
+			wfx_suspend_resume_mc(wvif, STA_NOTIFY_AWAKE);
+		else
+			wfx_suspend_resume_mc(wvif, STA_NOTIFY_SLEEP);
+	} else {
+		WARN(body->peer_sta_set, "misunderstood indication");
+		WARN(hif->interface != 2, "misunderstood indication");
+		if (body->suspend_resume_flags.resume)
+			wfx_suspend_hot_dev(wdev, STA_NOTIFY_AWAKE);
+		else
+			wfx_suspend_hot_dev(wdev, STA_NOTIFY_SLEEP);
+	}
 
 	return 0;
 }
diff --git a/drivers/staging/wfx/main.c b/drivers/staging/wfx/main.c
index cc7f924f3106..1093584373ad 100644
--- a/drivers/staging/wfx/main.c
+++ b/drivers/staging/wfx/main.c
@@ -341,6 +341,8 @@ struct wfx_dev *wfx_init_common(struct device *dev,
 	mutex_init(&wdev->conf_mutex);
 	mutex_init(&wdev->rx_stats_lock);
 	init_completion(&wdev->firmware_ready);
+	INIT_DELAYED_WORK(&wdev->cooling_timeout_work,
+			  wfx_cooling_timeout_work);
 	wfx_init_hif_cmd(&wdev->hif_cmd);
 	wfx_tx_queues_init(wdev);
 
diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c
index 5132c19e0367..67eb4a6e176b 100644
--- a/drivers/staging/wfx/sta.c
+++ b/drivers/staging/wfx/sta.c
@@ -38,6 +38,29 @@ u32 wfx_rate_mask_to_hw(struct wfx_dev *wdev, u32 rates)
 	return ret;
 }
 
+void wfx_cooling_timeout_work(struct work_struct *work)
+{
+	struct wfx_dev *wdev = container_of(to_delayed_work(work),
+					    struct wfx_dev,
+					    cooling_timeout_work);
+
+	wdev->chip_frozen = true;
+	wfx_tx_unlock(wdev);
+}
+
+void wfx_suspend_hot_dev(struct wfx_dev *wdev, enum sta_notify_cmd cmd)
+{
+	if (cmd == STA_NOTIFY_AWAKE) {
+		// Device recover normal temperature
+		if (cancel_delayed_work(&wdev->cooling_timeout_work))
+			wfx_tx_unlock(wdev);
+	} else {
+		// Device is too hot
+		schedule_delayed_work(&wdev->cooling_timeout_work, 10 * HZ);
+		wfx_tx_lock(wdev);
+	}
+}
+
 static void wfx_filter_beacon(struct wfx_vif *wvif, bool filter_beacon)
 {
 	const struct hif_ie_table_entry filter_ies[] = {
diff --git a/drivers/staging/wfx/sta.h b/drivers/staging/wfx/sta.h
index e814fe743b7d..f7e876d1b031 100644
--- a/drivers/staging/wfx/sta.h
+++ b/drivers/staging/wfx/sta.h
@@ -67,6 +67,8 @@ void wfx_unassign_vif_chanctx(struct ieee80211_hw *hw,
 			      struct ieee80211_chanctx_conf *conf);
 
 // WSM Callbacks
+void wfx_cooling_timeout_work(struct work_struct *work);
+void wfx_suspend_hot_dev(struct wfx_dev *wdev, enum sta_notify_cmd cmd);
 void wfx_suspend_resume_mc(struct wfx_vif *wvif, enum sta_notify_cmd cmd);
 void wfx_event_report_rssi(struct wfx_vif *wvif, u8 raw_rcpi_rssi);
 
diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h
index c7a58ab3beaa..09bbb5da4f06 100644
--- a/drivers/staging/wfx/wfx.h
+++ b/drivers/staging/wfx/wfx.h
@@ -45,6 +45,7 @@ struct wfx_dev {
 	struct hif_ind_startup	hw_caps;
 	struct wfx_hif		hif;
 	struct sl_context	sl;
+	struct delayed_work	cooling_timeout_work;
 	bool			chip_frozen;
 	struct mutex		conf_mutex;
 
-- 
2.26.1


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

* [PATCH 07/17] staging: wfx: add an explicit warning when chip detect too high temperature
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (5 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 06/17] staging: wfx: add support for 'device too hot' indication Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 08/17] staging: wfx: fix highest Rx value declared in ieee80211_supported_band Jerome Pouiller
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

Device is able to measure its temperature and raise warning when this
one is too high. If the the temperature is even higher, the chipis also
able to send an error just before to stop responding.

Until now, the error message was "asynchronous error: unknown (6)".

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/hif_rx.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/staging/wfx/hif_rx.c b/drivers/staging/wfx/hif_rx.c
index 6de210139d8a..e6daac36f5c8 100644
--- a/drivers/staging/wfx/hif_rx.c
+++ b/drivers/staging/wfx/hif_rx.c
@@ -280,6 +280,10 @@ static int hif_error_indication(struct wfx_dev *wdev,
 		dev_err(wdev->dev, "asynchronous error: out-of-range overvoltage: %#.8x\n",
 			*pStatus);
 		break;
+	case HIF_ERROR_OOR_TEMPERATURE:
+		dev_err(wdev->dev, "asynchronous error: out-of-range temperature: %#.8x\n",
+			*pStatus);
+		break;
 	case HIF_ERROR_PDS_VERSION:
 		dev_err(wdev->dev,
 			"asynchronous error: wrong PDS payload or version: %#.8x\n",
-- 
2.26.1


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

* [PATCH 08/17] staging: wfx: fix highest Rx value declared in ieee80211_supported_band
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (6 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 07/17] staging: wfx: add an explicit warning when chip detect too high temperature Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 09/17] staging: wfx: fix overflow in frame counters Jerome Pouiller
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

The highest Rx value declared in ieee80211_supported_band had two
problems:
    1. The value should be little endian
    2. ShortGI was not taken into account. So value should be 72 instead
       of 65.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/wfx/main.c b/drivers/staging/wfx/main.c
index 1093584373ad..742a286c9207 100644
--- a/drivers/staging/wfx/main.c
+++ b/drivers/staging/wfx/main.c
@@ -106,7 +106,7 @@ static const struct ieee80211_supported_band wfx_band_2ghz = {
 		.ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE,
 		.mcs = {
 			.rx_mask = { 0xFF }, // MCS0 to MCS7
-			.rx_highest = 65,
+			.rx_highest = cpu_to_le16(72),
 			.tx_params = IEEE80211_HT_MCS_TX_DEFINED,
 		},
 	},
-- 
2.26.1


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

* [PATCH 09/17] staging: wfx: fix overflow in frame counters
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (7 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 08/17] staging: wfx: fix highest Rx value declared in ieee80211_supported_band Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 10/17] staging: wfx: fix the warning "inconsistent notification" Jerome Pouiller
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

It has been reported that trying to send small packets of data could
produce a "inconsistent notification" warning.

It seems that in some circumstances, the number of frame queued in the
driver could greatly increase and exceed UCHAR_MAX. So the field
"buffered" from struct sta_priv can overflow.

Just increase the size of "bueffered" to fix the problem.

Fixes: 7d2d2bfdeb82 ("staging: wfx: relocate "buffered" information to sta_priv")
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/sta.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/wfx/sta.h b/drivers/staging/wfx/sta.h
index f7e876d1b031..a0e025c18341 100644
--- a/drivers/staging/wfx/sta.h
+++ b/drivers/staging/wfx/sta.h
@@ -18,7 +18,7 @@ struct wfx_vif;
 struct wfx_sta_priv {
 	int link_id;
 	int vif_id;
-	u8 buffered[IEEE80211_NUM_TIDS];
+	int buffered[IEEE80211_NUM_TIDS];
 	// Ensure atomicity of "buffered" and calls to ieee80211_sta_set_buffered()
 	spinlock_t lock;
 };
-- 
2.26.1


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

* [PATCH 10/17] staging: wfx: fix the warning "inconsistent notification"
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (8 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 09/17] staging: wfx: fix overflow in frame counters Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 11/17] staging: wfx: fix double init of tx_policy_upload_work Jerome Pouiller
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

In some circumstances, Tx traffic is sent without associated station but
the station exists when the Tx status is received. Beside that, the
driver keep a counter associated to each station. So, in this case, the
counter is not incremented, but is decremented. In this case a warning
"inconsistent notification" appears:

   ------------[ cut here ]------------
   WARNING: CPU: 3 PID: 82 at /home/jerome/wfx/data_tx.c:469 wfx_skb_dtor+0x1a4/0x1d4 [wfx]
   inconsistent notification
   Modules linked in: [...]
   CPU: 3 PID: 82 Comm: kworker/3:1H Tainted: G         C O      4.19.57-v7l+ #1244
   Hardware name: BCM2835
   Workqueue: events_highpri bh_work [wfx]
   [<c0212c8c>] (unwind_backtrace) from [<c020d49c>] (show_stack+0x20/0x24)
   [<c020d49c>] (show_stack) from [<c0976220>] (dump_stack+0xd4/0x118)
   [<c0976220>] (dump_stack) from [<c0222270>] (__warn+0x104/0x11c)
   [<c0222270>] (__warn) from [<c02222e0>] (warn_slowpath_fmt+0x58/0x74)
   [<c02222e0>] (warn_slowpath_fmt) from [<bf497b48>] (wfx_skb_dtor+0x1a4/0x1d4 [wfx])
   [<bf497b48>] (wfx_skb_dtor [wfx]) from [<bf4988b4>] (wfx_tx_confirm_cb+0x198/0x2f0 [wfx])
   [<bf4988b4>] (wfx_tx_confirm_cb [wfx]) from [<bf49d054>] (hif_tx_confirm+0x50/0x70 [wfx])
   [<bf49d054>] (hif_tx_confirm [wfx]) from [<bf49d42c>] (wfx_handle_rx+0x128/0x22c [wfx])
   [<bf49d42c>] (wfx_handle_rx [wfx]) from [<bf4953cc>] (bh_work+0x3cc/0x964 [wfx])
   [<bf4953cc>] (bh_work [wfx]) from [<c023dab8>] (process_one_work+0x170/0x458)
   [<c023dab8>] (process_one_work) from [<c023ddfc>] (worker_thread+0x5c/0x5a4)
   [<c023ddfc>] (worker_thread) from [<c02440e8>] (kthread+0x138/0x168)
   [<c02440e8>] (kthread) from [<c02010ac>] (ret_from_fork+0x14/0x28)
   Exception stack(0xee199fb0 to 0xee199ff8)
   9fa0:                                     00000000 00000000 00000000 00000000
   9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
   9fe0: 00000000 00000000 00000000 00000000 00000013 00000000
   ---[ end trace 64b9e754e12ef7de ]---

This patch fix this race between the station creation and the Tx data.

Fixes: 7d2d2bfdeb82 ("staging: wfx: relocate "buffered" information to sta_priv")
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/data_tx.c | 18 +++++++++++++-----
 drivers/staging/wfx/data_tx.h |  1 +
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/wfx/data_tx.c b/drivers/staging/wfx/data_tx.c
index 9c1a91207dd8..f8812079d801 100644
--- a/drivers/staging/wfx/data_tx.c
+++ b/drivers/staging/wfx/data_tx.c
@@ -224,6 +224,7 @@ static void wfx_tx_manage_pm(struct wfx_vif *wvif, struct ieee80211_hdr *hdr,
 	int tid = ieee80211_get_tid(hdr);
 
 	if (sta) {
+		tx_priv->has_sta = true;
 		sta_priv = (struct wfx_sta_priv *)&sta->drv_priv;
 		spin_lock_bh(&sta_priv->lock);
 		sta_priv->buffered[tid]++;
@@ -469,7 +470,8 @@ static void wfx_notify_buffered_tx(struct wfx_vif *wvif, struct sk_buff *skb)
 	rcu_read_unlock();
 }
 
-static void wfx_skb_dtor(struct wfx_dev *wdev, struct sk_buff *skb)
+static void wfx_skb_dtor(struct wfx_dev *wdev,
+			 struct sk_buff *skb, bool has_sta)
 {
 	struct hif_msg *hif = (struct hif_msg *)skb->data;
 	struct hif_req_tx *req = (struct hif_req_tx *)hif->body;
@@ -480,7 +482,8 @@ static void wfx_skb_dtor(struct wfx_dev *wdev, struct sk_buff *skb)
 
 	WARN_ON(!wvif);
 	skb_pull(skb, offset);
-	wfx_notify_buffered_tx(wvif, skb);
+	if (has_sta)
+		wfx_notify_buffered_tx(wvif, skb);
 	wfx_tx_policy_put(wvif, req->tx_flags.retry_policy_index);
 	ieee80211_tx_status_irqsafe(wdev->hw, skb);
 }
@@ -493,6 +496,7 @@ void wfx_tx_confirm_cb(struct wfx_vif *wvif, const struct hif_cnf_tx *arg)
 	struct ieee80211_tx_rate *rate;
 	struct ieee80211_tx_info *tx_info;
 	const struct wfx_tx_priv *tx_priv;
+	bool has_sta;
 
 	skb = wfx_pending_get(wvif->wdev, arg->packet_id);
 	if (!skb) {
@@ -503,6 +507,7 @@ void wfx_tx_confirm_cb(struct wfx_vif *wvif, const struct hif_cnf_tx *arg)
 	}
 	tx_info = IEEE80211_SKB_CB(skb);
 	tx_priv = wfx_skb_tx_priv(skb);
+	has_sta = tx_priv->has_sta;
 	_trace_tx_stats(arg, skb,
 			wfx_pending_get_pkt_us_delay(wvif->wdev, skb));
 
@@ -561,12 +566,13 @@ void wfx_tx_confirm_cb(struct wfx_vif *wvif, const struct hif_cnf_tx *arg)
 		}
 		tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
 	}
-	wfx_skb_dtor(wvif->wdev, skb);
+	wfx_skb_dtor(wvif->wdev, skb, has_sta);
 }
 
 void wfx_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 	       u32 queues, bool drop)
 {
+	const struct wfx_tx_priv *tx_priv;
 	struct wfx_dev *wdev = hw->priv;
 	struct sk_buff_head dropped;
 	struct wfx_queue *queue;
@@ -593,7 +599,9 @@ void wfx_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 	wfx_tx_flush(wdev);
 	if (wdev->chip_frozen)
 		wfx_pending_drop(wdev, &dropped);
-	while ((skb = skb_dequeue(&dropped)) != NULL)
-		wfx_skb_dtor(wdev, skb);
+	while ((skb = skb_dequeue(&dropped)) != NULL) {
+		tx_priv = wfx_skb_tx_priv(skb);
+		wfx_skb_dtor(wdev, skb, tx_priv->has_sta);
+	}
 }
 
diff --git a/drivers/staging/wfx/data_tx.h b/drivers/staging/wfx/data_tx.h
index a308af3d68ad..54fff24508fb 100644
--- a/drivers/staging/wfx/data_tx.h
+++ b/drivers/staging/wfx/data_tx.h
@@ -36,6 +36,7 @@ struct tx_policy_cache {
 struct wfx_tx_priv {
 	ktime_t xmit_timestamp;
 	struct ieee80211_key_conf *hw_key;
+	bool has_sta;
 } __packed;
 
 void wfx_tx_policy_init(struct wfx_vif *wvif);
-- 
2.26.1


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

* [PATCH 11/17] staging: wfx: fix double init of tx_policy_upload_work
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (9 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 10/17] staging: wfx: fix the warning "inconsistent notification" Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 12/17] staging: wfx: show counters of all interfaces Jerome Pouiller
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

The work_struct tx_policy_upload_work was initialized twice.

Fixes: 99879121bfbb ("staging: wfx: fix the cache of rate policies on interface reset")
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/sta.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c
index 67eb4a6e176b..74ec0b604085 100644
--- a/drivers/staging/wfx/sta.c
+++ b/drivers/staging/wfx/sta.c
@@ -782,7 +782,6 @@ int wfx_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
 	init_completion(&wvif->scan_complete);
 	INIT_WORK(&wvif->scan_work, wfx_hw_scan_work);
 
-	INIT_WORK(&wvif->tx_policy_upload_work, wfx_tx_policy_upload_work);
 	mutex_unlock(&wdev->conf_mutex);
 
 	hif_set_macaddr(wvif, vif->addr);
-- 
2.26.1


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

* [PATCH 12/17] staging: wfx: show counters of all interfaces
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (10 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 11/17] staging: wfx: fix double init of tx_policy_upload_work Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 13/17] staging: wfx: also show unnamed counters fields Jerome Pouiller
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

The device keep up to date three series of stats. One for each
virtual interface and one for the whole device.

Until to now, the stats for the whole device were unavailable. Moreover,
it is interesting to retrieve counters for all interfaces even if they
are not awake.

Change the counters available in debugfs in order to retrieve stats
from all interfaces.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/debug.c      | 25 ++++++++++++++++---------
 drivers/staging/wfx/hif_tx_mib.c |  6 +++---
 drivers/staging/wfx/hif_tx_mib.h |  2 +-
 3 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/drivers/staging/wfx/debug.c b/drivers/staging/wfx/debug.c
index 1164aba118a1..4dc4f6a0b92b 100644
--- a/drivers/staging/wfx/debug.c
+++ b/drivers/staging/wfx/debug.c
@@ -61,19 +61,26 @@ const char *get_reg_name(unsigned long id)
 
 static int wfx_counters_show(struct seq_file *seq, void *v)
 {
-	int ret;
+	int ret, i;
 	struct wfx_dev *wdev = seq->private;
-	struct hif_mib_extended_count_table counters;
+	struct hif_mib_extended_count_table counters[3];
 
-	ret = hif_get_counters_table(wdev, &counters);
-	if (ret < 0)
-		return ret;
-	if (ret > 0)
-		return -EIO;
+	for (i = 0; i < ARRAY_SIZE(counters); i++) {
+		ret = hif_get_counters_table(wdev, i, counters + i);
+		if (ret < 0)
+			return ret;
+		if (ret > 0)
+			return -EIO;
+	}
+
+	seq_printf(seq, "%-24s %12s %12s %12s\n",
+		   "", "global", "iface 0", "iface 1");
 
 #define PUT_COUNTER(name) \
-	seq_printf(seq, "%24s %d\n", #name ":",\
-		   le32_to_cpu(counters.count_##name))
+	seq_printf(seq, "%-24s %12d %12d %12d\n", #name, \
+		   le32_to_cpu(counters[2].count_##name), \
+		   le32_to_cpu(counters[0].count_##name), \
+		   le32_to_cpu(counters[1].count_##name))
 
 	PUT_COUNTER(tx_packets);
 	PUT_COUNTER(tx_multicast_frames);
diff --git a/drivers/staging/wfx/hif_tx_mib.c b/drivers/staging/wfx/hif_tx_mib.c
index 16f4908055af..6fdde5a4c9a1 100644
--- a/drivers/staging/wfx/hif_tx_mib.c
+++ b/drivers/staging/wfx/hif_tx_mib.c
@@ -64,16 +64,16 @@ int hif_set_rcpi_rssi_threshold(struct wfx_vif *wvif,
 			     HIF_MIB_ID_RCPI_RSSI_THRESHOLD, &arg, sizeof(arg));
 }
 
-int hif_get_counters_table(struct wfx_dev *wdev,
+int hif_get_counters_table(struct wfx_dev *wdev, int vif_id,
 			   struct hif_mib_extended_count_table *arg)
 {
 	if (wfx_api_older_than(wdev, 1, 3)) {
 		// extended_count_table is wider than count_table
 		memset(arg, 0xFF, sizeof(*arg));
-		return hif_read_mib(wdev, 0, HIF_MIB_ID_COUNTERS_TABLE,
+		return hif_read_mib(wdev, vif_id, HIF_MIB_ID_COUNTERS_TABLE,
 				    arg, sizeof(struct hif_mib_count_table));
 	} else {
-		return hif_read_mib(wdev, 0,
+		return hif_read_mib(wdev, vif_id,
 				    HIF_MIB_ID_EXTENDED_COUNTERS_TABLE, arg,
 				sizeof(struct hif_mib_extended_count_table));
 	}
diff --git a/drivers/staging/wfx/hif_tx_mib.h b/drivers/staging/wfx/hif_tx_mib.h
index bb7c104a03d8..b72770a4ba12 100644
--- a/drivers/staging/wfx/hif_tx_mib.h
+++ b/drivers/staging/wfx/hif_tx_mib.h
@@ -20,7 +20,7 @@ int hif_set_beacon_wakeup_period(struct wfx_vif *wvif,
 				 unsigned int listen_interval);
 int hif_set_rcpi_rssi_threshold(struct wfx_vif *wvif,
 				int rssi_thold, int rssi_hyst);
-int hif_get_counters_table(struct wfx_dev *wdev,
+int hif_get_counters_table(struct wfx_dev *wdev, int vif_id,
 			   struct hif_mib_extended_count_table *arg);
 int hif_set_macaddr(struct wfx_vif *wvif, u8 *mac);
 int hif_set_rx_filter(struct wfx_vif *wvif,
-- 
2.26.1


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

* [PATCH 13/17] staging: wfx: also show unnamed counters fields
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (11 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 12/17] staging: wfx: show counters of all interfaces Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 14/17] staging: wfx: update list of known messages in tracepoints Jerome Pouiller
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

The struct hif_mib_extended_count_table contains some debug information
accessible from the debugfs. The struct contains not yet used fields at
the end. In order to support future firmware versions, this patch also
show these not yet named fields.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/debug.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/staging/wfx/debug.c b/drivers/staging/wfx/debug.c
index 4dc4f6a0b92b..2fae6c913b01 100644
--- a/drivers/staging/wfx/debug.c
+++ b/drivers/staging/wfx/debug.c
@@ -112,6 +112,12 @@ static int wfx_counters_show(struct seq_file *seq, void *v)
 
 #undef PUT_COUNTER
 
+	for (i = 0; i < ARRAY_SIZE(counters[0].reserved); i++)
+		seq_printf(seq, "reserved[%02d]%12s %12d %12d %12d\n", i, "",
+			   le32_to_cpu(counters[2].reserved[i]),
+			   le32_to_cpu(counters[0].reserved[i]),
+			   le32_to_cpu(counters[1].reserved[i]));
+
 	return 0;
 }
 DEFINE_SHOW_ATTRIBUTE(wfx_counters);
-- 
2.26.1


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

* [PATCH 14/17] staging: wfx: update list of known messages in tracepoints
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (12 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 13/17] staging: wfx: also show unnamed counters fields Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 15/17] staging: wfx: fix messages names " Jerome Pouiller
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

Some messages are missing from the list of symbolic messages defined in
traces.h. Add them.

Also sort the list in order to simplify next changes.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/traces.h | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/wfx/traces.h b/drivers/staging/wfx/traces.h
index 30c6a13f0e22..7b25e9511b00 100644
--- a/drivers/staging/wfx/traces.h
+++ b/drivers/staging/wfx/traces.h
@@ -104,8 +104,10 @@ hif_msg_list_enum
 	hif_mib_name(ARP_KEEP_ALIVE_PERIOD)          \
 	hif_mib_name(BEACON_FILTER_ENABLE)           \
 	hif_mib_name(BEACON_FILTER_TABLE)            \
+	hif_mib_name(BEACON_STATS)                   \
 	hif_mib_name(BEACON_WAKEUP_PERIOD)           \
 	hif_mib_name(BLOCK_ACK_POLICY)               \
+	hif_mib_name(CCA_CONFIG)                     \
 	hif_mib_name(CONFIG_DATA_FILTER)             \
 	hif_mib_name(COUNTERS_TABLE)                 \
 	hif_mib_name(CURRENT_TX_POWER_LEVEL)         \
@@ -114,29 +116,32 @@ hif_msg_list_enum
 	hif_mib_name(DOT11_MAX_TRANSMIT_MSDU_LIFETIME) \
 	hif_mib_name(DOT11_RTS_THRESHOLD)            \
 	hif_mib_name(DOT11_WEP_DEFAULT_KEY_ID)       \
+	hif_mib_name(ETHERTYPE_DATAFRAME_CONDITION)  \
+	hif_mib_name(EXTENDED_COUNTERS_TABLE)        \
 	hif_mib_name(GL_BLOCK_ACK_INFO)              \
 	hif_mib_name(GL_OPERATIONAL_POWER_MODE)      \
 	hif_mib_name(GL_SET_MULTI_MSG)               \
+	hif_mib_name(GRP_SEQ_COUNTER)                \
 	hif_mib_name(INACTIVITY_TIMER)               \
 	hif_mib_name(INTERFACE_PROTECTION)           \
 	hif_mib_name(IPV4_ADDR_DATAFRAME_CONDITION)  \
 	hif_mib_name(IPV6_ADDR_DATAFRAME_CONDITION)  \
 	hif_mib_name(KEEP_ALIVE_PERIOD)              \
 	hif_mib_name(MAC_ADDR_DATAFRAME_CONDITION)   \
+	hif_mib_name(MAGIC_DATAFRAME_CONDITION)      \
+	hif_mib_name(MAX_TX_POWER_LEVEL)             \
 	hif_mib_name(NON_ERP_PROTECTION)             \
 	hif_mib_name(NS_IP_ADDRESSES_TABLE)          \
 	hif_mib_name(OVERRIDE_INTERNAL_TX_RATE)      \
+	hif_mib_name(PORT_DATAFRAME_CONDITION)       \
 	hif_mib_name(PROTECTED_MGMT_POLICY)          \
-	hif_mib_name(RX_FILTER)                      \
 	hif_mib_name(RCPI_RSSI_THRESHOLD)            \
+	hif_mib_name(RX_FILTER)                      \
 	hif_mib_name(SET_ASSOCIATION_MODE)           \
 	hif_mib_name(SET_DATA_FILTERING)             \
-	hif_mib_name(ETHERTYPE_DATAFRAME_CONDITION)  \
 	hif_mib_name(SET_HT_PROTECTION)              \
-	hif_mib_name(MAGIC_DATAFRAME_CONDITION)      \
 	hif_mib_name(SET_TX_RATE_RETRY_POLICY)       \
 	hif_mib_name(SET_UAPSD_INFORMATION)          \
-	hif_mib_name(PORT_DATAFRAME_CONDITION)       \
 	hif_mib_name(SLOT_TIME)                      \
 	hif_mib_name(STATISTICS_TABLE)               \
 	hif_mib_name(TEMPLATE_FRAME)                 \
-- 
2.26.1


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

* [PATCH 15/17] staging: wfx: fix messages names in tracepoints
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (13 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 14/17] staging: wfx: update list of known messages in tracepoints Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 16/17] staging: wfx: fix display of exception indication Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 17/17] staging: wfx: update list of errors Jerome Pouiller
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

The names of the hardware interface messages are not displayed correctly
in tracepoints. Thus, REQ_JOIN is displayed JOIN_REQ. Fix that in order
to get the names as defined in headers of HIF API.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/traces.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/wfx/traces.h b/drivers/staging/wfx/traces.h
index 7b25e9511b00..bb9f7e9e7d21 100644
--- a/drivers/staging/wfx/traces.h
+++ b/drivers/staging/wfx/traces.h
@@ -198,8 +198,8 @@ DECLARE_EVENT_CLASS(hif_data,
 	TP_printk("%d:%d:%s_%s%s%s: %s%s (%d bytes)",
 		__entry->tx_fill_level,
 		__entry->if_id,
-		__print_symbolic(__entry->msg_id, hif_msg_list),
 		__entry->msg_type,
+		__print_symbolic(__entry->msg_id, hif_msg_list),
 		__entry->mib != -1 ? "/" : "",
 		__entry->mib != -1 ? __print_symbolic(__entry->mib, hif_mib_list) : "",
 		__print_hex(__entry->buf, __entry->buf_len),
-- 
2.26.1


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

* [PATCH 16/17] staging: wfx: fix display of exception indication
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (14 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 15/17] staging: wfx: fix messages names " Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  2020-04-27 13:40 ` [PATCH 17/17] staging: wfx: update list of errors Jerome Pouiller
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

Until now, the exception received from the chip was only displayed if
driver was compiled with DEBUG enabled. It was not very convenient to
help users. We prefer to show the exception unconditionally.

In add, this patch provides the semantic of the first bytes of the
struct.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/hif_api_general.h | 11 +++++------
 drivers/staging/wfx/hif_rx.c          | 12 +++++++++---
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/wfx/hif_api_general.h b/drivers/staging/wfx/hif_api_general.h
index 275354eb6b6a..1c010f15c6d0 100644
--- a/drivers/staging/wfx/hif_api_general.h
+++ b/drivers/staging/wfx/hif_api_general.h
@@ -223,12 +223,6 @@ struct hif_ind_generic {
 	union hif_indication_data indication_data;
 } __packed;
 
-
-struct hif_ind_exception {
-	u8     data[124];
-} __packed;
-
-
 enum hif_error {
 	HIF_ERROR_FIRMWARE_ROLLBACK       = 0x0,
 	HIF_ERROR_FIRMWARE_DEBUG_ENABLED  = 0x1,
@@ -248,6 +242,11 @@ struct hif_ind_error {
 	u8     data[];
 } __packed;
 
+struct hif_ind_exception {
+	__le32 type;
+	u8     data[];
+} __packed;
+
 enum hif_secure_link_state {
 	SEC_LINK_UNAVAILABLE = 0x0,
 	SEC_LINK_RESERVED    = 0x1,
diff --git a/drivers/staging/wfx/hif_rx.c b/drivers/staging/wfx/hif_rx.c
index e6daac36f5c8..783f301d58a8 100644
--- a/drivers/staging/wfx/hif_rx.c
+++ b/drivers/staging/wfx/hif_rx.c
@@ -331,10 +331,16 @@ static int hif_generic_indication(struct wfx_dev *wdev,
 static int hif_exception_indication(struct wfx_dev *wdev,
 				    const struct hif_msg *hif, const void *buf)
 {
-	size_t len = hif->len - 4; // drop header
+	const struct hif_ind_exception *body = buf;
+	int type = le32_to_cpu(body->type);
 
-	dev_err(wdev->dev, "firmware exception\n");
-	print_hex_dump_bytes("Dump: ", DUMP_PREFIX_NONE, buf, len);
+	if (type == 4)
+		dev_err(wdev->dev, "firmware assert %d\n",
+			le32_to_cpup((__le32 *)body->data));
+	else
+		dev_err(wdev->dev, "firmware exception\n");
+	print_hex_dump(KERN_INFO, "hif: ", DUMP_PREFIX_OFFSET,
+		       16, 1, hif, hif->len, false);
 	wdev->chip_frozen = true;
 
 	return -1;
-- 
2.26.1


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

* [PATCH 17/17] staging: wfx: update list of errors
  2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
                   ` (15 preceding siblings ...)
  2020-04-27 13:40 ` [PATCH 16/17] staging: wfx: fix display of exception indication Jerome Pouiller
@ 2020-04-27 13:40 ` Jerome Pouiller
  16 siblings, 0 replies; 18+ messages in thread
From: Jerome Pouiller @ 2020-04-27 13:40 UTC (permalink / raw)
  To: devel, linux-wireless
  Cc: netdev, linux-kernel, Greg Kroah-Hartman, Kalle Valo,
	David S . Miller, Jérôme Pouiller

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

The device raises error indications when it thinks there is a bug in the
driver and it can't recover it (while it raises exception when a bug is
detected in the device).

The current list of of errors was a bit dated.

This patch cleans up the list of errors and the associated message. It
is also the right time to clean up the way the error indications are
handled. Replace the switch..case with a clean loop over an array.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/hif_api_general.h |  28 ++++---
 drivers/staging/wfx/hif_rx.c          | 114 ++++++++++++++++----------
 2 files changed, 86 insertions(+), 56 deletions(-)

diff --git a/drivers/staging/wfx/hif_api_general.h b/drivers/staging/wfx/hif_api_general.h
index 1c010f15c6d0..f0135d27120c 100644
--- a/drivers/staging/wfx/hif_api_general.h
+++ b/drivers/staging/wfx/hif_api_general.h
@@ -224,17 +224,23 @@ struct hif_ind_generic {
 } __packed;
 
 enum hif_error {
-	HIF_ERROR_FIRMWARE_ROLLBACK       = 0x0,
-	HIF_ERROR_FIRMWARE_DEBUG_ENABLED  = 0x1,
-	HIF_ERROR_OUTDATED_SESSION_KEY    = 0x2,
-	HIF_ERROR_INVALID_SESSION_KEY     = 0x3,
-	HIF_ERROR_OOR_VOLTAGE             = 0x4,
-	HIF_ERROR_PDS_VERSION             = 0x5,
-	HIF_ERROR_OOR_TEMPERATURE         = 0x6,
-	HIF_ERROR_REQ_DURING_KEY_EXCHANGE = 0x7,
-	HIF_ERROR_MULTI_TX_CNF_SECURELINK = 0x8,
-	HIF_ERROR_SECURELINK_OVERFLOW     = 0x9,
-	HIF_ERROR_SECURELINK_DECRYPTION   = 0xa
+	HIF_ERROR_FIRMWARE_ROLLBACK           = 0x00,
+	HIF_ERROR_FIRMWARE_DEBUG_ENABLED      = 0x01,
+	HIF_ERROR_SLK_OUTDATED_SESSION_KEY    = 0x02,
+	HIF_ERROR_SLK_SESSION_KEY             = 0x03,
+	HIF_ERROR_OOR_VOLTAGE                 = 0x04,
+	HIF_ERROR_PDS_PAYLOAD                 = 0x05,
+	HIF_ERROR_OOR_TEMPERATURE             = 0x06,
+	HIF_ERROR_SLK_REQ_DURING_KEY_EXCHANGE = 0x07,
+	HIF_ERROR_SLK_MULTI_TX_UNSUPPORTED    = 0x08,
+	HIF_ERROR_SLK_OVERFLOW                = 0x09,
+	HIF_ERROR_SLK_DECRYPTION              = 0x0a,
+	HIF_ERROR_SLK_WRONG_ENCRYPTION_STATE  = 0x0b,
+	HIF_ERROR_HIF_BUS_FREQUENCY_TOO_LOW   = 0x0c,
+	HIF_ERROR_HIF_RX_DATA_TOO_LARGE       = 0x0e,
+	HIF_ERROR_HIF_TX_QUEUE_FULL           = 0x0d,
+	HIF_ERROR_HIF_BUS                     = 0x0f,
+	HIF_ERROR_PDS_TESTFEATURE             = 0x10,
 };
 
 struct hif_ind_error {
diff --git a/drivers/staging/wfx/hif_rx.c b/drivers/staging/wfx/hif_rx.c
index 783f301d58a8..b786714a8755 100644
--- a/drivers/staging/wfx/hif_rx.c
+++ b/drivers/staging/wfx/hif_rx.c
@@ -253,51 +253,6 @@ static int hif_suspend_resume_indication(struct wfx_dev *wdev,
 	return 0;
 }
 
-static int hif_error_indication(struct wfx_dev *wdev,
-				const struct hif_msg *hif, const void *buf)
-{
-	const struct hif_ind_error *body = buf;
-	u8 *pRollback = (u8 *) body->data;
-	u32 *pStatus = (u32 *) body->data;
-
-	switch (body->type) {
-	case HIF_ERROR_FIRMWARE_ROLLBACK:
-		dev_err(wdev->dev,
-			"asynchronous error: firmware rollback error %d\n",
-			*pRollback);
-		break;
-	case HIF_ERROR_FIRMWARE_DEBUG_ENABLED:
-		dev_err(wdev->dev, "asynchronous error: firmware debug feature enabled\n");
-		break;
-	case HIF_ERROR_OUTDATED_SESSION_KEY:
-		dev_err(wdev->dev, "asynchronous error: secure link outdated key: %#.8x\n",
-			*pStatus);
-		break;
-	case HIF_ERROR_INVALID_SESSION_KEY:
-		dev_err(wdev->dev, "asynchronous error: invalid session key\n");
-		break;
-	case HIF_ERROR_OOR_VOLTAGE:
-		dev_err(wdev->dev, "asynchronous error: out-of-range overvoltage: %#.8x\n",
-			*pStatus);
-		break;
-	case HIF_ERROR_OOR_TEMPERATURE:
-		dev_err(wdev->dev, "asynchronous error: out-of-range temperature: %#.8x\n",
-			*pStatus);
-		break;
-	case HIF_ERROR_PDS_VERSION:
-		dev_err(wdev->dev,
-			"asynchronous error: wrong PDS payload or version: %#.8x\n",
-			*pStatus);
-		break;
-	default:
-		dev_err(wdev->dev, "asynchronous error: unknown (%d)\n",
-			body->type);
-		break;
-	}
-	wdev->chip_frozen = true;
-	return 0;
-}
-
 static int hif_generic_indication(struct wfx_dev *wdev,
 				  const struct hif_msg *hif, const void *buf)
 {
@@ -328,6 +283,75 @@ static int hif_generic_indication(struct wfx_dev *wdev,
 	}
 }
 
+static const struct {
+	int val;
+	const char *str;
+	bool has_param;
+} hif_errors[] = {
+	{ HIF_ERROR_FIRMWARE_ROLLBACK,
+		"rollback status" },
+	{ HIF_ERROR_FIRMWARE_DEBUG_ENABLED,
+		"debug feature enabled" },
+	{ HIF_ERROR_PDS_PAYLOAD,
+		"PDS version is not supported" },
+	{ HIF_ERROR_PDS_TESTFEATURE,
+		"PDS ask for an unknown test mode" },
+	{ HIF_ERROR_OOR_VOLTAGE,
+		"out-of-range power supply voltage", true },
+	{ HIF_ERROR_OOR_TEMPERATURE,
+		"out-of-range temperature", true },
+	{ HIF_ERROR_SLK_REQ_DURING_KEY_EXCHANGE,
+		"secure link does not expect request during key exchange" },
+	{ HIF_ERROR_SLK_SESSION_KEY,
+		"secure link session key is invalid" },
+	{ HIF_ERROR_SLK_OVERFLOW,
+		"secure link overflow" },
+	{ HIF_ERROR_SLK_WRONG_ENCRYPTION_STATE,
+		"secure link messages list does not match message encryption" },
+	{ HIF_ERROR_HIF_BUS_FREQUENCY_TOO_LOW,
+		"bus clock is too slow (<1kHz)" },
+	{ HIF_ERROR_HIF_RX_DATA_TOO_LARGE,
+		"HIF message too large" },
+	// Following errors only exists in old firmware versions:
+	{ HIF_ERROR_HIF_TX_QUEUE_FULL,
+		"HIF messages queue is full" },
+	{ HIF_ERROR_HIF_BUS,
+		"HIF bus" },
+	{ HIF_ERROR_SLK_MULTI_TX_UNSUPPORTED,
+		"secure link does not support multi-tx confirmations" },
+	{ HIF_ERROR_SLK_OUTDATED_SESSION_KEY,
+		"secure link session key is outdated" },
+	{ HIF_ERROR_SLK_DECRYPTION,
+		"secure link params (nonce or tag) mismatch" },
+};
+
+static int hif_error_indication(struct wfx_dev *wdev,
+				const struct hif_msg *hif, const void *buf)
+{
+	const struct hif_ind_error *body = buf;
+	int type = le32_to_cpu(body->type);
+	int param = (s8)body->data[0];
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(hif_errors); i++)
+		if (type == hif_errors[i].val)
+			break;
+	if (i < ARRAY_SIZE(hif_errors))
+		if (hif_errors[i].has_param)
+			dev_err(wdev->dev, "asynchronous error: %s: %d\n",
+				hif_errors[i].str, param);
+		else
+			dev_err(wdev->dev, "asynchronous error: %s\n",
+				hif_errors[i].str);
+	else
+		dev_err(wdev->dev, "asynchronous error: unknown: %08x\n", type);
+	print_hex_dump(KERN_INFO, "hif: ", DUMP_PREFIX_OFFSET,
+		       16, 1, hif, hif->len, false);
+	wdev->chip_frozen = true;
+
+	return 0;
+};
+
 static int hif_exception_indication(struct wfx_dev *wdev,
 				    const struct hif_msg *hif, const void *buf)
 {
-- 
2.26.1


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

end of thread, other threads:[~2020-04-27 13:43 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-27 13:40 [PATCH 00/17] staging: wfx: misc fixes Jerome Pouiller
2020-04-27 13:40 ` [PATCH 01/17] staging: wfx: fix (future) TDLS support Jerome Pouiller
2020-04-27 13:40 ` [PATCH 02/17] staging: wfx: change the field chip_frozen into a boolean Jerome Pouiller
2020-04-27 13:40 ` [PATCH 03/17] staging: wfx: mark chip frozen on error indication Jerome Pouiller
2020-04-27 13:40 ` [PATCH 04/17] staging: wfx: fix support for AP that do not support PS-Poll Jerome Pouiller
2020-04-27 13:40 ` [PATCH 05/17] staging: wfx: fix CAB sent at the wrong time Jerome Pouiller
2020-04-27 13:40 ` [PATCH 06/17] staging: wfx: add support for 'device too hot' indication Jerome Pouiller
2020-04-27 13:40 ` [PATCH 07/17] staging: wfx: add an explicit warning when chip detect too high temperature Jerome Pouiller
2020-04-27 13:40 ` [PATCH 08/17] staging: wfx: fix highest Rx value declared in ieee80211_supported_band Jerome Pouiller
2020-04-27 13:40 ` [PATCH 09/17] staging: wfx: fix overflow in frame counters Jerome Pouiller
2020-04-27 13:40 ` [PATCH 10/17] staging: wfx: fix the warning "inconsistent notification" Jerome Pouiller
2020-04-27 13:40 ` [PATCH 11/17] staging: wfx: fix double init of tx_policy_upload_work Jerome Pouiller
2020-04-27 13:40 ` [PATCH 12/17] staging: wfx: show counters of all interfaces Jerome Pouiller
2020-04-27 13:40 ` [PATCH 13/17] staging: wfx: also show unnamed counters fields Jerome Pouiller
2020-04-27 13:40 ` [PATCH 14/17] staging: wfx: update list of known messages in tracepoints Jerome Pouiller
2020-04-27 13:40 ` [PATCH 15/17] staging: wfx: fix messages names " Jerome Pouiller
2020-04-27 13:40 ` [PATCH 16/17] staging: wfx: fix display of exception indication Jerome Pouiller
2020-04-27 13:40 ` [PATCH 17/17] staging: wfx: update list of errors Jerome Pouiller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).