iw61x wireless: update to 'lf-6.6.52-2.2.0' release
Also, add the wifi driver patch and binaries included in NXP's incremental release to fix the issues on release 'lf-6.6.52-2.2.0'. https://onedigi.atlassian.net/browse/DEL-9417 Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
This commit is contained in:
parent
e6dc064126
commit
e357cc066a
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,9 +1,17 @@
|
|||
# Copyright (C) 2024, Digi International Inc.
|
||||
# Copyright (C) 2024, 2025, Digi International Inc.
|
||||
|
||||
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=ca53281cc0caa7e320d4945a896fb837"
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
|
||||
|
||||
SRCBRANCH = "lf-6.6.36_2.1.0"
|
||||
SRCREV = "1b26d19284d202b1531837ce37a05afc49ad1d98"
|
||||
SRC_URI:append = " \
|
||||
file://sd_w61x_v1.bin.se \
|
||||
file://sduart_nw61x_v1.bin.se \
|
||||
file://uartspi_n61x_v1.bin.se \
|
||||
"
|
||||
|
||||
FILES:${PN}-nxp8997-common += "${nonarch_base_libdir}/firmware/nxp/uart8997_bt_v4.bin"
|
||||
FILES:${PN}-nxp9098-common += "${nonarch_base_libdir}/firmware/nxp/uart9098_bt_v1.bin"
|
||||
do_install:append() {
|
||||
install -d ${D}${nonarch_base_libdir}/firmware/nxp
|
||||
|
||||
install -m 0644 ${WORKDIR}/sd_w61x_v1.bin.se ${D}${nonarch_base_libdir}/firmware/nxp/
|
||||
install -m 0644 ${WORKDIR}/sduart_nw61x_v1.bin.se ${D}${nonarch_base_libdir}/firmware/nxp/
|
||||
install -m 0644 ${WORKDIR}/uartspi_n61x_v1.bin.se ${D}${nonarch_base_libdir}/firmware/nxp/
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,227 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Mon, 21 Oct 2024 10:34:34 +0200
|
||||
Subject: [PATCH] issue fix: wlan_src_driver_patch_release_base_version_437.p30
|
||||
|
||||
Patch from Wireless_Patch_Release_W9098_IW612_W8997_W8987_IW416_v0.1.
|
||||
incremental patch release based on the Q3-2024 release "lf-6.6.36-2.1.0"
|
||||
|
||||
[Patch Description]
|
||||
- Wi-Fi driver patch based on driver base version 437.p30 to fix the issues observed on version 437.p28.
|
||||
|
||||
https://onedigi.atlassian.net/browse/DEL-9306
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
Makefile | 2 +-
|
||||
mlan/mlan_cfp.c | 95 +++++++++++++++++++++++++++++++++-----
|
||||
mlinux/moal_init.c | 6 +++
|
||||
mlinux/moal_sta_cfg80211.c | 12 +----
|
||||
4 files changed, 93 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index af1a9e5de535..66b690f032f9 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -186,7 +186,7 @@ APPDIR= $(shell if test -d "mapp"; then echo mapp; fi)
|
||||
#############################################################################
|
||||
|
||||
ccflags-y += -I$(KERNELDIR)/include
|
||||
- ccflags-y += -DMLAN_RELEASE_VERSION='"437.p30"'
|
||||
+ ccflags-y += -DMLAN_RELEASE_VERSION='"437.p31"'
|
||||
|
||||
ccflags-y += -DFPNUM='"92"'
|
||||
|
||||
diff --git a/mlan/mlan_cfp.c b/mlan/mlan_cfp.c
|
||||
index 0fdb12b4a70c..191d567871de 100644
|
||||
--- a/mlan/mlan_cfp.c
|
||||
+++ b/mlan/mlan_cfp.c
|
||||
@@ -3232,8 +3232,9 @@ static void wlan_sort_cfp_otp_table(mlan_adapter *pmadapter)
|
||||
*/
|
||||
static void wlan_set_otp_cfp_max_tx_pwr(mlan_adapter *pmadapter, t_bool is6g)
|
||||
{
|
||||
- t_u8 i, j;
|
||||
+ t_u8 i, j, k, n;
|
||||
t_u8 rows, cols, max = 0;
|
||||
+ t_u8 bonded_chan_count = 0;
|
||||
|
||||
if (!pmadapter->otp_region)
|
||||
return;
|
||||
@@ -3243,20 +3244,48 @@ static void wlan_set_otp_cfp_max_tx_pwr(mlan_adapter *pmadapter, t_bool is6g)
|
||||
cols = pmadapter->tx_power_table_bg_cols;
|
||||
if (pmadapter->tx_power_table_bg_size < (rows * cols))
|
||||
goto table_a;
|
||||
+ max = 0;
|
||||
for (i = 0; i < rows; i++) {
|
||||
- max = 0;
|
||||
if ((pmadapter->cfp_otp_bg + i)->dynamic.flags &
|
||||
NXP_CHANNEL_DISABLED)
|
||||
continue;
|
||||
/* get the max value among all mod group for this
|
||||
* channel */
|
||||
- for (j = 1; j < cols; j++)
|
||||
+ for (j = 1; j < cols; j++) {
|
||||
max = MAX(
|
||||
max,
|
||||
pmadapter->tx_power_table_bg[i * cols +
|
||||
j]);
|
||||
+ }
|
||||
|
||||
- (pmadapter->cfp_otp_bg + i)->max_tx_power = max;
|
||||
+ bonded_chan_count++;
|
||||
+ /* As the BG band allows overlapping 40MHz
|
||||
+ * bonded groups, keep comparing the max value
|
||||
+ * with the next consecutive 40Mhz channel, if
|
||||
+ * all of below 4 cases are true:
|
||||
+ * 1. this is not the last row
|
||||
+ * 2. this channel suports 40 MHz
|
||||
+ * 3. the next channel also supports 40MHz
|
||||
+ * 4. the next channel is not disabled
|
||||
+ */
|
||||
+ if ((i < (rows - 1)) &&
|
||||
+ (!((pmadapter->cfp_otp_bg + i)->dynamic.flags &
|
||||
+ NXP_CHANNEL_NOHT40)) &&
|
||||
+ (!((pmadapter->cfp_otp_bg + i + 1)->dynamic.flags &
|
||||
+ NXP_CHANNEL_NOHT40)) &&
|
||||
+ (!((pmadapter->cfp_otp_bg + i + 1)->dynamic.flags &
|
||||
+ NXP_CHANNEL_DISABLED))) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ /* Apply the max power value to all channels in this
|
||||
+ * bonded group
|
||||
+ */
|
||||
+ for (k = 0; k < bonded_chan_count; k++) {
|
||||
+ (pmadapter->cfp_otp_bg + i - k)->max_tx_power =
|
||||
+ max;
|
||||
+ }
|
||||
+ max = 0;
|
||||
+ bonded_chan_count = 0;
|
||||
}
|
||||
}
|
||||
table_a:
|
||||
@@ -3265,19 +3294,64 @@ table_a:
|
||||
cols = pmadapter->tx_power_table_a_cols;
|
||||
if (pmadapter->tx_power_table_a_size < (rows * cols))
|
||||
return;
|
||||
+ max = 0;
|
||||
+ bonded_chan_count = 0;
|
||||
for (i = 0; i < rows; i++) {
|
||||
- max = 0;
|
||||
if ((pmadapter->cfp_otp_a + i)->dynamic.flags &
|
||||
NXP_CHANNEL_DISABLED)
|
||||
continue;
|
||||
- /* get the max value among all mod group for this
|
||||
- * channel */
|
||||
+
|
||||
+ /* The 5G cfp table is sorted based on the channel num
|
||||
+ * and may contain 4G and 5.9G channels. As the cfp
|
||||
+ * table index may not match the 5G powertable channel
|
||||
+ * index, get the corresponding channel row from
|
||||
+ * powertable
|
||||
+ */
|
||||
+ n = 0;
|
||||
+ while (n < pmadapter->tx_power_table_a_rows) {
|
||||
+ if (pmadapter->tx_power_table_a[n * cols] ==
|
||||
+ (pmadapter->cfp_otp_a + i)->channel)
|
||||
+ break;
|
||||
+ n++;
|
||||
+ }
|
||||
+ /* Get the max value among all mod groups for this chan
|
||||
+ */
|
||||
+
|
||||
for (j = 1; j < cols; j++)
|
||||
max = MAX(max,
|
||||
- pmadapter->tx_power_table_a[i * cols +
|
||||
+ pmadapter->tx_power_table_a[n * cols +
|
||||
j]);
|
||||
|
||||
- (pmadapter->cfp_otp_a + i)->max_tx_power = max;
|
||||
+ bonded_chan_count++;
|
||||
+
|
||||
+ if ((i < (rows - 1)) &&
|
||||
+ !((pmadapter->cfp_otp_a + i + 1)->dynamic.flags &
|
||||
+ NXP_CHANNEL_DISABLED)) {
|
||||
+ /* Compare the max power value with the next
|
||||
+ * chan in this bonded group, unless this is the
|
||||
+ * last or the next one is disabled
|
||||
+ */
|
||||
+ if (!((pmadapter->cfp_otp_a + i)->dynamic.flags &
|
||||
+ NXP_CHANNEL_NOHT80)) {
|
||||
+ if (bonded_chan_count < 4)
|
||||
+ continue;
|
||||
+ } else if (!((pmadapter->cfp_otp_a + i)
|
||||
+ ->dynamic.flags &
|
||||
+ NXP_CHANNEL_NOHT40)) {
|
||||
+ if (bonded_chan_count < 2)
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* Apply the max power value to all channels in this
|
||||
+ * bonded group
|
||||
+ */
|
||||
+ for (k = 0; k < bonded_chan_count; k++)
|
||||
+ (pmadapter->cfp_otp_a + i - k)->max_tx_power =
|
||||
+ max;
|
||||
+ max = 0;
|
||||
+ bonded_chan_count = 0;
|
||||
+
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3612,8 +3686,6 @@ void wlan_add_fw_cfp_tables(pmlan_private pmpriv, t_u8 *buf, t_u16 buf_left)
|
||||
if (!pmadapter->cfp_otp_bg || !pmadapter->tx_power_table_bg)
|
||||
goto out;
|
||||
|
||||
- wlan_set_otp_cfp_max_tx_pwr(pmadapter, MFALSE);
|
||||
-
|
||||
/* Set remaining flags for BG */
|
||||
rows = pmadapter->tx_power_table_bg_rows;
|
||||
cols = pmadapter->tx_power_table_bg_cols;
|
||||
@@ -3637,6 +3709,7 @@ void wlan_add_fw_cfp_tables(pmlan_private pmpriv, t_u8 *buf, t_u16 buf_left)
|
||||
}
|
||||
if (pmadapter->cfp_otp_a)
|
||||
wlan_sort_cfp_otp_table(pmadapter);
|
||||
+ wlan_set_otp_cfp_max_tx_pwr(pmadapter, MFALSE);
|
||||
out:
|
||||
LEAVE();
|
||||
}
|
||||
diff --git a/mlinux/moal_init.c b/mlinux/moal_init.c
|
||||
index 6bfbfd0138d5..a1e66d2d1188 100644
|
||||
--- a/mlinux/moal_init.c
|
||||
+++ b/mlinux/moal_init.c
|
||||
@@ -454,6 +454,12 @@ static t_size parse_cfg_get_line(t_u8 *data, t_size size, t_u8 *line_pos)
|
||||
else
|
||||
src++;
|
||||
pos++;
|
||||
+ if ((dest - line_pos) >= (MAX_LINE_LEN - 1)) {
|
||||
+ PRINTM(MERROR,
|
||||
+ "error: input data size exceeds the dest buff limit\n");
|
||||
+ LEAVE();
|
||||
+ return -1;
|
||||
+ }
|
||||
}
|
||||
/* parse new line */
|
||||
pos++;
|
||||
diff --git a/mlinux/moal_sta_cfg80211.c b/mlinux/moal_sta_cfg80211.c
|
||||
index 3a487b4b9401..e7689ea924f4 100644
|
||||
--- a/mlinux/moal_sta_cfg80211.c
|
||||
+++ b/mlinux/moal_sta_cfg80211.c
|
||||
@@ -3937,16 +3937,8 @@ create_custom_regdomain(moal_private *priv,
|
||||
new_rule = true;
|
||||
}
|
||||
if (!new_rule && pwr != prev_pwr) {
|
||||
- if (band == IEEE80211_BAND_2GHZ &&
|
||||
- !(chflags & NXP_CHANNEL_NOHT40)) {
|
||||
- /* skip adding new pwr rule for 40 MHz 2G
|
||||
- * overlapping bonded channels, as max tx
|
||||
- * power value may differ
|
||||
- */
|
||||
- } else {
|
||||
- valid_rules++;
|
||||
- new_rule = true;
|
||||
- }
|
||||
+ valid_rules++;
|
||||
+ new_rule = true;
|
||||
}
|
||||
|
||||
rule = ®d->reg_rules[valid_rules - 1];
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,16 +1,13 @@
|
|||
# Copyright (C) 2023,2024 Digi International Inc.
|
||||
# Copyright (C) 2023-2025 Digi International Inc.
|
||||
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
SRC_URI:append = " \
|
||||
file://81-iw612-wifi.rules \
|
||||
file://load_iw612.sh \
|
||||
file://0001-issue-fix-wlan_src_driver_patch_release_base_version.patch \
|
||||
file://0001-issue-fix-wlan_src_driver_patch_release_lf-6.6.52-2..patch \
|
||||
"
|
||||
|
||||
SRCBRANCH = "lf-6.6.36_2.1.0"
|
||||
SRCREV = "e5c9a169d7b7a441a20d2cf10a9752e249b71cff"
|
||||
|
||||
do_install:append () {
|
||||
install -d ${D}${sysconfdir}/udev/rules.d
|
||||
install -m 0644 ${WORKDIR}/81-iw612-wifi.rules ${D}${sysconfdir}/udev/rules.d/
|
||||
|
|
|
|||
Loading…
Reference in New Issue