blob: 7238522628c50e4e9f1401ba8ea53a927219231f [file] [log] [blame]
developerebda9012024-02-22 13:42:45 +08001From 2d4f946641ceeac9fa1bd7d23124e590bec8233d Mon Sep 17 00:00:00 2001
developerd243af02023-12-21 14:49:33 +08002From: "Henry.Yen" <henry.yen@mediatek.com>
3Date: Mon, 11 Dec 2023 16:01:55 +0800
developerebda9012024-02-22 13:42:45 +08004Subject: [PATCH 1044/1048] wifi: mt76: mt7915 add mt7981 efuse variants
5 support
developerd243af02023-12-21 14:49:33 +08006
7---
8 mt7915/eeprom.c | 22 ++++++++++++++++++++++
9 mt7915/mt7915.h | 7 ++++++-
10 2 files changed, 28 insertions(+), 1 deletion(-)
11
12diff --git a/mt7915/eeprom.c b/mt7915/eeprom.c
developerebda9012024-02-22 13:42:45 +080013index 96b1ea3..79d6fe9 100644
developerd243af02023-12-21 14:49:33 +080014--- a/mt7915/eeprom.c
15+++ b/mt7915/eeprom.c
developerebda9012024-02-22 13:42:45 +080016@@ -179,6 +179,21 @@ static int mt7915_eeprom_load(struct mt7915_dev *dev)
developerd243af02023-12-21 14:49:33 +080017 return mt7915_check_eeprom(dev);
18 }
19
20+static int mt7915_eeprom_parse_efuse_hw_cap(struct mt7915_dev *dev)
21+{
22+#define WTBL_SIZE_GROUP GENMASK(1, 0)
23+ u32 buf;
24+ int ret;
25+
26+ ret = mt76_get_of_data_from_nvmem(&dev->mt76, &buf, "variant", 4);
27+ if (ret)
28+ return ret;
29+
30+ dev->limited_wtbl_size = buf & WTBL_SIZE_GROUP;
31+
32+ return 0;
33+}
34+
35 static void mt7915_eeprom_parse_band_config(struct mt7915_phy *phy)
36 {
37 struct mt7915_dev *dev = phy->dev;
developerebda9012024-02-22 13:42:45 +080038@@ -229,6 +244,13 @@ void mt7915_eeprom_parse_hw_cap(struct mt7915_dev *dev,
developerd243af02023-12-21 14:49:33 +080039 u8 path, nss, nss_max = 4, *eeprom = dev->mt76.eeprom.data;
40 struct mt76_phy *mphy = phy->mt76;
41 u8 band = phy->mt76->band_idx;
42+ int ret;
43+
44+ if (is_mt7981(&dev->mt76)) {
45+ ret = mt7915_eeprom_parse_efuse_hw_cap(dev);
46+ if (ret)
47+ dev->limited_wtbl_size = true;
48+ }
49
50 mt7915_eeprom_parse_band_config(phy);
51
52diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
developerebda9012024-02-22 13:42:45 +080053index f3d9ee5..45e04af 100644
developerd243af02023-12-21 14:49:33 +080054--- a/mt7915/mt7915.h
55+++ b/mt7915/mt7915.h
developerebda9012024-02-22 13:42:45 +080056@@ -399,6 +399,7 @@ struct mt7915_dev {
developerd243af02023-12-21 14:49:33 +080057
58 u32 hw_pattern;
59
60+ bool limited_wtbl_size;
61 bool dbdc_support;
62 bool flash_mode;
63 bool bin_file_mode;
developerebda9012024-02-22 13:42:45 +080064@@ -667,7 +668,11 @@ void mt7915_tm_rf_test_event(struct mt7915_dev *dev, struct sk_buff *skb);
developerd243af02023-12-21 14:49:33 +080065
66 static inline u16 mt7915_wtbl_size(struct mt7915_dev *dev)
67 {
68- return is_mt7915(&dev->mt76) ? MT7915_WTBL_SIZE : MT7916_WTBL_SIZE;
69+ if (is_mt7915(&dev->mt76) ||
70+ (is_mt7981(&dev->mt76) && dev->limited_wtbl_size))
71+ return MT7915_WTBL_SIZE;
72+
73+ return MT7916_WTBL_SIZE;
74 }
75
76 static inline u16 mt7915_eeprom_size(struct mt7915_dev *dev)
77--
782.18.0
79