mt76: add workaround for corrupted e2p on mt7996

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
Tianling Shen
2025-05-04 14:45:10 +08:00
parent 61e8c94bfc
commit 5ba2f5f9ce

View File

@@ -0,0 +1,70 @@
From aaf90b24fde77a38ee9f0a60d7097ded6a94ad1f Mon Sep 17 00:00:00 2001
From: Ivan Mironov <mironov.ivan@gmail.com>
Date: Mon, 17 Mar 2025 01:31:11 +0100
Subject: [PATCH] wifi: mt76: mt7996: Use tx_power from default fw if EEPROM
contains 0s
Some Banana Pi BPI-R4-NIC-BE14 WiFi modules are sold with zeros instead
of usable tx_power values in EEPROM for 2.4 GHz and 5 GHz bands.
This patch replaces tx_power zeros with default values from firmware
files while keeping the rest of the EEPROM data intact (including valid
6 GHz tx_power table).
Signed-off-by: Ivan Mironov <mironov.ivan@gmail.com>
Cc: stable@vger.kernel.org
Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Closes: https://github.com/openwrt/openwrt/issues/17489
Link: https://github.com/openwrt/mt76/pull/954
---
mt7996/eeprom.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
--- a/mt7996/eeprom.c
+++ b/mt7996/eeprom.c
@@ -93,6 +93,36 @@ mt7996_eeprom_parse_stream(const u8 *eep
}
}
+static void
+mt7996_eeprom_fixup_tx_power(struct mt7996_dev *dev, const u8 *def)
+{
+ u8 *eeprom = dev->mt76.eeprom.data;
+ int i;
+ bool zeros_detected = false;
+
+ if (!eeprom[MT_EE_TX0_POWER_2G]) {
+ eeprom[MT_EE_TX0_POWER_2G] = def[MT_EE_TX0_POWER_2G];
+ zeros_detected = true;
+ }
+
+ for (i = MT_EE_TX0_POWER_5G; i < MT_EE_TX0_POWER_5G + 5; ++i) {
+ if (!eeprom[i]) {
+ eeprom[i] = def[i];
+ zeros_detected = true;
+ }
+ }
+
+ for (i = MT_EE_TX0_POWER_6G; i < MT_EE_TX0_POWER_6G + 8; ++i) {
+ if (!eeprom[i]) {
+ eeprom[i] = def[i];
+ zeros_detected = true;
+ }
+ }
+
+ if (zeros_detected)
+ dev_warn(dev->mt76.dev, "eeprom tx_power zeros detected, using defaults\n");
+}
+
static bool mt7996_eeprom_variant_valid(struct mt7996_dev *dev, const u8 *def)
{
#define FEM_INT 0
@@ -148,6 +178,8 @@ mt7996_eeprom_check_or_use_default(struc
goto out;
}
+ mt7996_eeprom_fixup_tx_power(dev, fw->data);
+
if (!use_default && mt7996_eeprom_variant_valid(dev, fw->data))
goto out;