mt76: mt7603: add upper limit for dynamic sensitivity minimum receive power
authorFelix Fietkau <nbd@nbd.name>
Sat, 22 Feb 2020 09:02:21 +0000 (10:02 +0100)
committerFelix Fietkau <nbd@nbd.name>
Tue, 17 Mar 2020 16:13:59 +0000 (17:13 +0100)
If the minimum power is raised too much, it can make it impossible for weaker
clients to connect, and there are some scenarios where the false detects will
not go down no matter how much the sensitivity is adjusted.
Fixes connectivity issues in some rare cases

Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7603/debugfs.c
drivers/net/wireless/mediatek/mt76/mt7603/init.c
drivers/net/wireless/mediatek/mt76/mt7603/mac.c
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h

index 47c85a9..a84e801 100644 (file)
@@ -121,4 +121,6 @@ void mt7603_init_debugfs(struct mt7603_dev *dev)
                                    mt7603_reset_read);
        debugfs_create_devm_seqfile(dev->mt76.dev, "radio", dir,
                                    mt7603_radio_read);
+       debugfs_create_u8("sensitivity_limit", 0600, dir,
+                           &dev->sensitivity_limit);
 }
index 9e40e81..97ba5dd 100644 (file)
@@ -540,6 +540,7 @@ int mt7603_register_device(struct mt7603_dev *dev)
                dev->mphy.antenna_mask = 1;
 
        dev->slottime = 9;
+       dev->sensitivity_limit = 28;
 
        ret = mt7603_init_hardware(dev);
        if (ret)
index 8f5ca92..a3daae4 100644 (file)
@@ -1750,7 +1750,8 @@ mt7603_false_cca_check(struct mt7603_dev *dev)
        min_signal -= 15;
 
        false_cca = dev->false_cca_ofdm + dev->false_cca_cck;
-       if (false_cca > 600) {
+       if (false_cca > 600 &&
+           dev->sensitivity < -100 + dev->sensitivity_limit) {
                if (!dev->sensitivity)
                        dev->sensitivity = -92;
                else
index ef37464..831a269 100644 (file)
@@ -143,6 +143,7 @@ struct mt7603_dev {
        u8 ed_strong_signal;
 
        s8 sensitivity;
+       u8 sensitivity_limit;
 
        u8 beacon_check;
        u8 tx_hang_check;