[rdkb][common][bsp][Refactor and sync wifi from openwrt]
[Description]
ced8594f [MAC80211][WiFi6][Misc][Fix the MT76 WiFi6 Makefile]
7221999e [MAC80211][WiFi7][Misc][Correct the MAC80211 WiFi7 Makefile.]
9d87794a [MAC80211][WiFi7][Misc][Correct the MT76 WiFi7 Makefile.]
ff24e1b2 [openwrt-24][Mac80211][Fix patch conflict with upstream openwrt]
3a6c13e2 [mac80211][misc][fix patch fail due to openwrt update]
05763faa [MAC80211][WiFi7][misc][fix patch failed of wifi-scripts]
f34fd014 [mac80211][misc][fix patch fail due to openwrt update]
f6796660 [openwrt-24][Release][Fix build fail of Wi-Fi7 MT76]
7076d96c [MAC80211][WiFi7][Misc][Fix release build fail because of mt76 version upgradation]
1f748b17 [mac80211][misc][fix patch fail due to openwrt update]
95ba6722 [mac80211][misc][fix patch fail due to openwrt update]
17680d7f [MAC80211][WiFi7][misc][Rename eeprom of eFEM variants]
b97cefa1 [MAC80211][WiFi7][app][Add Griffin support for atenl/iwpriv]
6de718a4 [MAC80211][WiFi7][misc][fix wifi-scripts patch failed]
9f1ace86 [MAC80211][WiFi7][misc][fix hostapd Makefile patch]
e4d0d28e [MAC80211][Misc][Add MT7990 Firmware OpenWrt config]
f3a8a8f7 [MAC80211][Release][Fix build fail of Wi-Fi6 MT76]
dabe8eae [openwrt-24][common][bsp][Fix line ending]
6d438a9d [openwrt-24][common][bsp][Use zstd to compress rootfs debug symbols for unified autobuild]
c268e47e [openwrt][common][bsp][Change SMC ID of wdt nonrst reg of reset-boot-count to 0x570]
c6819fbc [openwrt-24][Release][Update release note for Filogic 880 alpha release]
6897b4de [openwrt-24][common][bsp][Adjust unified autobuild for internal build detection]
fb9b9762 [MAC80211][WiFi6/7][app][Add ext eeprom write back cmd support]
d42b42a3 [openwrt-24][common][bsp][Add kernel6.6 Filogic880 BE19000/BE14000]
3806f047 [MAC80211][misc][Add Bpi-R4 support]
ddbda753 [MAC80211][WiFi7][Misc][Fix build fail because of mt76 version upgradation]
90959b08 [MAC80211][WiFi6][mt76][Rebase mt76 pathes]
728a3362 [MAC80211][WiFi6][mt76][Refactor Qos Map]
b46277b5 [MAC80211][WiFi6][mt76][Fix add ba issue on tid not equal to zero]
c084ee8b [MAC80211][WiFi7][mt76][split mt76 Makefile patch]
bbaec094 [MAC80211][Release][Update Filogic 830/820/630 firmware]
5ce2eece [MAC80211][wifi6][MT76][Fix build fail]
5ac1121f [MAC80211][wifi6][MT76][Fix mt76 version to 2024-07-13]
485f92b1 [MAC80211][WiFi7][misc][synchronize PP bitmap when association]
84db8818 [MAC80211][WiFi6/7][app][Add ATETXNSS in iwpriv wrapper]
cc5a4605 [MAC80211][WiFi7][mt76][fix patch failed of Makefile]
[Release-log]
Change-Id: I06704c04c4b5571af4ffd189d636c1fc9f0567fd
diff --git a/recipes-wifi/atenl/files/src/atenl.h b/recipes-wifi/atenl/files/src/atenl.h
index a6695c9..6f4f0f5 100644
--- a/recipes-wifi/atenl/files/src/atenl.h
+++ b/recipes-wifi/atenl/files/src/atenl.h
@@ -285,7 +285,10 @@
MT_EE_EAGLE_BAND_SEL_2GHZ,
MT_EE_EAGLE_BAND_SEL_5GHZ,
MT_EE_EAGLE_BAND_SEL_6GHZ,
- MT_EE_EAGLE_BAND_SEL_5GHZ_6GHZ,
+ MT_EE_EAGLE_BAND_SEL_5GHZ_LOW,
+ MT_EE_EAGLE_BAND_SEL_5GHZ_HIGH,
+ MT_EE_EAGLE_BAND_SEL_6GHZ_LOW,
+ MT_EE_EAGLE_BAND_SEL_6GHZ_HIGH,
};
#define MT_EE_WIFI_CONF 0x190
@@ -391,39 +394,67 @@
PREK_CLEAN_DPD,
};
+#define MT7916_EEPROM_CHIP_ID 0x7916
+
+/* Wi-Fi6 device id */
+#define MT7915_DEVICE_ID 0x7915
+#define MT7915_DEVICE_ID_2 0x7916
+#define MT7916_DEVICE_ID 0x7906
+#define MT7916_DEVICE_ID_2 0x790a
+#define MT7981_DEVICE_ID 0x7981
+#define MT7986_DEVICE_ID 0x7986
+
+/* Wi-Fi7 device id */
+#define MT7996_DEVICE_ID 0x7990
+#define MT7996_DEVICE_ID_2 0x7991
+#define MT7992_DEVICE_ID 0x7992
+#define MT7992_DEVICE_ID_2 0x799a
+#define MT7990_DEVICE_ID 0x7993
+#define MT7990_DEVICE_ID_2 0x799b
+
static inline bool is_mt7915(struct atenl *an)
{
- return an->chip_id == 0x7915;
+ return an->chip_id == MT7915_DEVICE_ID;
}
static inline bool is_mt7916(struct atenl *an)
{
- return (an->chip_id == 0x7916) || (an->chip_id == 0x7906);
+ /* Merlin is special case:
+ * pcie id is 0x7906/0x790a but eeprom chip id use 0x7916,
+ * since 0x7916 is already used by the second pcie of Harrier.
+ */
+ return (an->chip_id == MT7916_EEPROM_CHIP_ID) ||
+ (an->chip_id == MT7916_DEVICE_ID);
}
static inline bool is_mt7981(struct atenl *an)
{
- return an->chip_id == 0x7981;
+ return an->chip_id == MT7981_DEVICE_ID;
}
static inline bool is_mt7986(struct atenl *an)
{
- return an->chip_id == 0x7986;
+ return an->chip_id == MT7986_DEVICE_ID;
}
static inline bool is_mt7996(struct atenl *an)
{
- return an->chip_id == 0x7990;
+ return an->chip_id == MT7996_DEVICE_ID;
}
static inline bool is_mt7992(struct atenl *an)
{
- return an->chip_id == 0x7992;
+ return an->chip_id == MT7992_DEVICE_ID;
}
+static inline bool is_mt7990(struct atenl *an)
+{
+ return an->chip_id == MT7990_DEVICE_ID;
+}
+
static inline bool is_connac3(struct atenl *an)
{
- return is_mt7996(an) || is_mt7992(an);
+ return is_mt7996(an) || is_mt7992(an) || is_mt7990(an);
}
int atenl_eth_init(struct atenl *an);
@@ -435,6 +466,7 @@
int atenl_nl_check_mtd(struct atenl *an);
int atenl_nl_write_eeprom(struct atenl *an, u32 offset, u8 *val, int len);
int atenl_nl_write_efuse_all(struct atenl *an);
+int atenl_nl_write_ext_eeprom_all(struct atenl *an);
int atenl_nl_update_buffer_mode(struct atenl *an);
int atenl_nl_set_state(struct atenl *an, u8 band,
enum mt76_testmode_state state);
diff --git a/recipes-wifi/atenl/files/src/eeprom.c b/recipes-wifi/atenl/files/src/eeprom.c
index b3a652a..6dd4113 100644
--- a/recipes-wifi/atenl/files/src/eeprom.c
+++ b/recipes-wifi/atenl/files/src/eeprom.c
@@ -151,6 +151,8 @@
/* TODO: parse info if required */
} else if (is_mt7992(an)) {
/* TODO: parse info if required */
+ } else if (is_mt7990(an)) {
+ /* TODO: parse info if required */
}
}
@@ -158,19 +160,20 @@
atenl_eeprom_init_max_size(struct atenl *an)
{
switch (an->chip_id) {
- case 0x7915:
+ case MT7915_DEVICE_ID:
an->eeprom_size = 3584;
an->eeprom_prek_offs = 0x62;
break;
- case 0x7906:
- case 0x7916:
- case 0x7981:
- case 0x7986:
+ case MT7916_EEPROM_CHIP_ID:
+ case MT7916_DEVICE_ID:
+ case MT7981_DEVICE_ID:
+ case MT7986_DEVICE_ID:
an->eeprom_size = 4096;
an->eeprom_prek_offs = 0x19a;
break;
- case 0x7990:
- case 0x7992:
+ case MT7996_DEVICE_ID:
+ case MT7992_DEVICE_ID:
+ case MT7990_DEVICE_ID:
an->eeprom_size = 7680;
an->eeprom_prek_offs = 0x1a5;
default:
@@ -255,20 +258,21 @@
case MT_EE_EAGLE_BAND_SEL_2GHZ:
anb->cap = BAND_TYPE_2G;
break;
+ case MT_EE_EAGLE_BAND_SEL_5GHZ_LOW:
+ case MT_EE_EAGLE_BAND_SEL_5GHZ_HIGH:
case MT_EE_EAGLE_BAND_SEL_5GHZ:
anb->cap = BAND_TYPE_5G;
break;
+ case MT_EE_EAGLE_BAND_SEL_6GHZ_LOW:
+ case MT_EE_EAGLE_BAND_SEL_6GHZ_HIGH:
case MT_EE_EAGLE_BAND_SEL_6GHZ:
anb->cap = BAND_TYPE_6G;
break;
- case MT_EE_EAGLE_BAND_SEL_5GHZ_6GHZ:
- anb->cap = BAND_TYPE_5G_6G;
- break;
default:
break;
}
}
- } else if (is_mt7992(an)) {
+ } else if (is_mt7992(an) || is_mt7990(an)) {
struct atenl_band *anb;
u8 val, band_sel;
u8 band_sel_mask[2] = {EAGLE_BAND_SEL(0), EAGLE_BAND_SEL(1)};
@@ -284,15 +288,16 @@
case MT_EE_EAGLE_BAND_SEL_2GHZ:
anb->cap = BAND_TYPE_2G;
break;
+ case MT_EE_EAGLE_BAND_SEL_5GHZ_LOW:
+ case MT_EE_EAGLE_BAND_SEL_5GHZ_HIGH:
case MT_EE_EAGLE_BAND_SEL_5GHZ:
anb->cap = BAND_TYPE_5G;
break;
+ case MT_EE_EAGLE_BAND_SEL_6GHZ_LOW:
+ case MT_EE_EAGLE_BAND_SEL_6GHZ_HIGH:
case MT_EE_EAGLE_BAND_SEL_6GHZ:
anb->cap = BAND_TYPE_6G;
break;
- case MT_EE_EAGLE_BAND_SEL_5GHZ_6GHZ:
- anb->cap = BAND_TYPE_5G_6G;
- break;
default:
break;
}
@@ -304,7 +309,7 @@
atenl_eeprom_init_antenna_cap(struct atenl *an)
{
switch (an->chip_id) {
- case 0x7915:
+ case MT7915_DEVICE_ID:
if (an->anb[0].cap == BAND_TYPE_2G_5G)
an->anb[0].chainmask = 0xf;
else {
@@ -312,28 +317,34 @@
an->anb[1].chainmask = 0xc;
}
break;
- case 0x7906:
- case 0x7916:
+ case MT7916_EEPROM_CHIP_ID:
+ case MT7916_DEVICE_ID:
an->anb[0].chainmask = 0x3;
an->anb[1].chainmask = 0x3;
break;
- case 0x7981:
+ case MT7981_DEVICE_ID:
an->anb[0].chainmask = 0x3;
an->anb[1].chainmask = 0x7;
break;
- case 0x7986:
+ case MT7986_DEVICE_ID:
an->anb[0].chainmask = 0xf;
an->anb[1].chainmask = 0xf;
break;
- case 0x7990:
+ case MT7996_DEVICE_ID:
+ /* TODO: handle 4T5R */
an->anb[0].chainmask = 0xf;
an->anb[1].chainmask = 0xf;
an->anb[2].chainmask = 0xf;
break;
- case 0x7992:
+ case MT7992_DEVICE_ID:
+ /* TODO: handle BE7200 2i5i 5T5R */
an->anb[0].chainmask = 0xf;
an->anb[1].chainmask = 0xf;
break;
+ case MT7990_DEVICE_ID:
+ an->anb[0].chainmask = 0x3;
+ an->anb[1].chainmask = 0x7;
+ break;
default:
break;
}
@@ -484,7 +495,7 @@
return ret;
}
-/* Update all eeprom values to driver before writing efuse */
+/* Update all eeprom values to driver before writing efuse or ext eeprom */
static void
atenl_eeprom_sync_to_driver(struct atenl *an)
{
@@ -548,6 +559,9 @@
} else if (!strncmp(s, "to efuse", 8)) {
atenl_eeprom_sync_to_driver(an);
atenl_nl_write_efuse_all(an);
+ } else if (!strncmp(s, "to ext", 6)) {
+ atenl_eeprom_sync_to_driver(an);
+ atenl_nl_write_ext_eeprom_all(an);
}
} else if (!strncmp(s, "read", 4)) {
u32 offset;
diff --git a/recipes-wifi/atenl/files/src/nl.c b/recipes-wifi/atenl/files/src/nl.c
index baf2944..9982231 100644
--- a/recipes-wifi/atenl/files/src/nl.c
+++ b/recipes-wifi/atenl/files/src/nl.c
@@ -1305,6 +1305,36 @@
return 0;
}
+int atenl_nl_write_ext_eeprom_all(struct atenl *an)
+{
+ struct atenl_nl_priv nl_priv = {};
+ struct nl_msg *msg;
+ void *ptr;
+
+ if (unl_genl_init(&nl_priv.unl, "nl80211") < 0) {
+ atenl_err("Failed to connect to nl80211\n");
+ return 2;
+ }
+
+ msg = unl_genl_msg(&nl_priv.unl, NL80211_CMD_TESTMODE, false);
+ nla_put_u32(msg, NL80211_ATTR_WIPHY, get_band_val(an, 0, phy_idx));
+
+ ptr = nla_nest_start(msg, NL80211_ATTR_TESTDATA);
+ if (!ptr)
+ return -ENOMEM;
+
+ nla_put_u8(msg, MT76_TM_ATTR_EEPROM_ACTION,
+ MT76_TM_EEPROM_ACTION_WRITE_TO_EXT_EEPROM);
+
+ nla_nest_end(msg, ptr);
+
+ unl_genl_request(&nl_priv.unl, msg, NULL, NULL);
+
+ unl_free(&nl_priv.unl);
+
+ return 0;
+}
+
int atenl_nl_update_buffer_mode(struct atenl *an)
{
struct atenl_nl_priv nl_priv = {};
diff --git a/recipes-wifi/atenl/files/src/nl.h b/recipes-wifi/atenl/files/src/nl.h
index b580a01..bd0aee7 100644
--- a/recipes-wifi/atenl/files/src/nl.h
+++ b/recipes-wifi/atenl/files/src/nl.h
@@ -267,11 +267,13 @@
* eeprom data block
* @MT76_TM_EEPROM_ACTION_UPDATE_BUFFER_MODE: send updated eeprom data to fw
* @MT76_TM_EEPROM_ACTION_WRITE_TO_EFUSE: write eeprom data back to efuse
+ * @MT76_TM_EEPROM_ACTION_WRITE_TO_EXT_EEPROM: write eeprom data back to external eeprom
*/
enum mt76_testmode_eeprom_action {
MT76_TM_EEPROM_ACTION_UPDATE_DATA,
MT76_TM_EEPROM_ACTION_UPDATE_BUFFER_MODE,
MT76_TM_EEPROM_ACTION_WRITE_TO_EFUSE,
+ MT76_TM_EEPROM_ACTION_WRITE_TO_EXT_EEPROM,
/* keep last */
NUM_MT76_TM_EEPROM_ACTION,