wifi: iwlwifi: mvm: work around A-MSDU size problem
authorJohannes Berg <johannes.berg@intel.com>
Thu, 8 Feb 2024 16:58:36 +0000 (18:58 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 12 Feb 2024 20:24:51 +0000 (21:24 +0100)
The firmware will now start with 1500 byte A-MSDU size
rather than 3500 as before, and that seems to cause some
really hard to debug problems. Keep A-MSDU disabled if
the size is less than 2000 to disable this for now.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240208185302.3dcd0a1767d0.I450d35f3085b3b04a96dd1e1e7d8c27bda9ce8f5@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c

index 71d92635d6d7547357c7831028cdd4b3b27ccd1a..00860feefa7afbe9ffdbf5cd46df20b6e3948a83 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
 /*
  * Copyright (C) 2017 Intel Deutschland GmbH
- * Copyright (C) 2018-2023 Intel Corporation
+ * Copyright (C) 2018-2024 Intel Corporation
  */
 #include "rs.h"
 #include "fw-api.h"
@@ -479,9 +479,15 @@ void iwl_mvm_tlc_update_notif(struct iwl_mvm *mvm,
        }
 
        if (flags & IWL_TLC_NOTIF_FLAG_AMSDU && !mvm_link_sta->orig_amsdu_len) {
+               u32 enabled = le32_to_cpu(notif->amsdu_enabled);
                u16 size = le32_to_cpu(notif->amsdu_size);
                int i;
 
+               if (size < 2000) {
+                       size = 0;
+                       enabled = 0;
+               }
+
                if (link_sta->agg.max_amsdu_len < size) {
                        /*
                         * In debug link_sta->agg.max_amsdu_len < size
@@ -492,7 +498,7 @@ void iwl_mvm_tlc_update_notif(struct iwl_mvm *mvm,
                        goto out;
                }
 
-               mvmsta->amsdu_enabled = le32_to_cpu(notif->amsdu_enabled);
+               mvmsta->amsdu_enabled = enabled;
                mvmsta->max_amsdu_len = size;
                link_sta->agg.max_rc_amsdu_len = mvmsta->max_amsdu_len;