diff mbox

mt7601u: remove warning when avg_rssi is zero

Message ID 20180609101043.GA28502@redhat.com (mailing list archive)
State Accepted
Commit 92963318a255fd5df94159767cd4750e55d98cb0
Delegated to: Kalle Valo
Headers show

Commit Message

Stanislaw Gruszka June 9, 2018, 10:10 a.m. UTC
It turned out that we can run calibration without already received
frames with RSSI data. In such case just don't update AGC register
and don't print the warning.

Fixes: b305a6ab0247 ("mt7601u: use EWMA to calculate avg_rssi")
Reported-by: Adam Borowski <kilobyte@angband.pl>
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
 drivers/net/wireless/mediatek/mt7601u/phy.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Adam Borowski June 9, 2018, 4:18 p.m. UTC | #1
On Sat, Jun 09, 2018 at 12:10:44PM +0200, Stanislaw Gruszka wrote:
> It turned out that we can run calibration without already received
> frames with RSSI data. In such case just don't update AGC register
> and don't print the warning.
> 
> Fixes: b305a6ab0247 ("mt7601u: use EWMA to calculate avg_rssi")

The patch is quite obvious, but still had to be tested, at least out of
principle.  And unsurprisingly, no Earth-shattering kaboom.

> Reported-by: Adam Borowski <kilobyte@angband.pl>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> ---
>  drivers/net/wireless/mediatek/mt7601u/phy.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wireless/mediatek/mt7601u/phy.c b/drivers/net/wireless/mediatek/mt7601u/phy.c
> index d440c550bdb1..3ffc8d19285b 100644
> --- a/drivers/net/wireless/mediatek/mt7601u/phy.c
> +++ b/drivers/net/wireless/mediatek/mt7601u/phy.c
> @@ -985,13 +985,15 @@ static void mt7601u_agc_tune(struct mt7601u_dev *dev)
>  	 */
>  	spin_lock_bh(&dev->con_mon_lock);
>  	avg_rssi = ewma_rssi_read(&dev->avg_rssi);
> -	WARN_ON_ONCE(avg_rssi == 0);
> +	spin_unlock_bh(&dev->con_mon_lock);
> +	if (avg_rssi == 0)
> +		return;
> +
>  	avg_rssi = -avg_rssi;
>  	if (avg_rssi <= -70)
>  		val -= 0x20;
>  	else if (avg_rssi <= -60)
>  		val -= 0x10;
> -	spin_unlock_bh(&dev->con_mon_lock);
>  
>  	if (val != mt7601u_bbp_rr(dev, 66))
>  		mt7601u_bbp_wr(dev, 66, val);
> -- 
> 1.9.3


Meow!
Jakub Kicinski June 11, 2018, 9:59 p.m. UTC | #2
On Sat, 9 Jun 2018 12:10:44 +0200, Stanislaw Gruszka wrote:
> It turned out that we can run calibration without already received
> frames with RSSI data. In such case just don't update AGC register
> and don't print the warning.
> 
> Fixes: b305a6ab0247 ("mt7601u: use EWMA to calculate avg_rssi")
> Reported-by: Adam Borowski <kilobyte@angband.pl>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>

Acked-by: Jakub Kicinski <kubakici@wp.pl>
Kalle Valo June 18, 2018, 2:47 p.m. UTC | #3
Stanislaw Gruszka <sgruszka@redhat.com> wrote:

> It turned out that we can run calibration without already received
> frames with RSSI data. In such case just don't update AGC register
> and don't print the warning.
> 
> Fixes: b305a6ab0247 ("mt7601u: use EWMA to calculate avg_rssi")
> Reported-by: Adam Borowski <kilobyte@angband.pl>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> Acked-by: Jakub Kicinski <kubakici@wp.pl>

As the first release for b305a6ab0247 was v4.18-rc1, I'll queue this to 4.18.
Kalle Valo June 24, 2018, 5:02 p.m. UTC | #4
Stanislaw Gruszka <sgruszka@redhat.com> wrote:

> It turned out that we can run calibration without already received
> frames with RSSI data. In such case just don't update AGC register
> and don't print the warning.
> 
> Fixes: b305a6ab0247 ("mt7601u: use EWMA to calculate avg_rssi")
> Reported-by: Adam Borowski <kilobyte@angband.pl>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> Acked-by: Jakub Kicinski <kubakici@wp.pl>

Patch applied to wireless-drivers.git, thanks.

92963318a255 mt7601u: remove warning when avg_rssi is zero
diff mbox

Patch

diff --git a/drivers/net/wireless/mediatek/mt7601u/phy.c b/drivers/net/wireless/mediatek/mt7601u/phy.c
index d440c550bdb1..3ffc8d19285b 100644
--- a/drivers/net/wireless/mediatek/mt7601u/phy.c
+++ b/drivers/net/wireless/mediatek/mt7601u/phy.c
@@ -985,13 +985,15 @@  static void mt7601u_agc_tune(struct mt7601u_dev *dev)
 	 */
 	spin_lock_bh(&dev->con_mon_lock);
 	avg_rssi = ewma_rssi_read(&dev->avg_rssi);
-	WARN_ON_ONCE(avg_rssi == 0);
+	spin_unlock_bh(&dev->con_mon_lock);
+	if (avg_rssi == 0)
+		return;
+
 	avg_rssi = -avg_rssi;
 	if (avg_rssi <= -70)
 		val -= 0x20;
 	else if (avg_rssi <= -60)
 		val -= 0x10;
-	spin_unlock_bh(&dev->con_mon_lock);
 
 	if (val != mt7601u_bbp_rr(dev, 66))
 		mt7601u_bbp_wr(dev, 66, val);