* [PATCH v3 0/3] Add support for Qualcomm WCN3610
@ 2026-03-06 0:43 Kerigan Creighton
2026-03-06 0:43 ` [PATCH v3 1/3] dt-bindings: remoteproc: qcom,wcnss-pil: Add wcn3610 compatible Kerigan Creighton
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Kerigan Creighton @ 2026-03-06 0:43 UTC (permalink / raw)
To: linux-wireless
Cc: loic.poulain, wcn36xx, andersson, mathieu.poirier,
linux-remoteproc, linux-arm-msm, robh, krzk+dt, conor+dt,
devicetree, linux-kernel, Kerigan Creighton
The WCN3610 is a 2.4GHz-only WLAN/BT combo chip used in some
cheaper Android and Windows phones such as the Lumia 550, and
IoT devices like the Anki Vector robot. It shares a lot in
common with the WCN3620.
This series adds support for the WCN3610 across the necessary
subsystems:
* Document the new compatible string (patch 1).
* Add compatible string in qcom_wcnss_iris (patch 2).
* Add rf_id and CFGs for the WCN3610 in wcn36xx, disable
powersave for this specific chip, ensure it is 2.4GHz-only
(patch 3).
Tested on an Anki Vector 1.0 and 2.0 robot. Support for other
WCN36xx chips has not been affected.
Changes in v2:
- Move the Documentation patch to the beginning of the patch set.
- Move remoteproc compatible string addition to the middle of
the patch set.
- Add Reviewed-by Dmitry (thanks!) to remoteproc compatible patch.
- Move wcn36xx driver changes to the end of the patch set.
Changes in v3:
- Describe the hardware rather than the driver in the
dt-bindings patch [Krzysztof].
- Describe why we need a new compatible in the remoteproc
patch [Krzysztof].
- Describe where the CFG values came from in the wcn36xx
driver patch [Konrad].
Kerigan Creighton (3):
dt-bindings: remoteproc: qcom,wcnss-pil: Add wcn3610 compatible
remoteproc: qcom_wcnss_iris: Add support for WCN3610
wifi: wcn36xx: Add support for WCN3610
.../bindings/remoteproc/qcom,wcnss-pil.yaml | 1 +
drivers/net/wireless/ath/wcn36xx/main.c | 4 +-
drivers/net/wireless/ath/wcn36xx/smd.c | 61 ++++++++++++++++++-
drivers/net/wireless/ath/wcn36xx/wcn36xx.h | 1 +
drivers/remoteproc/qcom_wcnss_iris.c | 1 +
5 files changed, 66 insertions(+), 2 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 1/3] dt-bindings: remoteproc: qcom,wcnss-pil: Add wcn3610 compatible
2026-03-06 0:43 [PATCH v3 0/3] Add support for Qualcomm WCN3610 Kerigan Creighton
@ 2026-03-06 0:43 ` Kerigan Creighton
2026-03-06 7:26 ` Krzysztof Kozlowski
2026-03-06 0:43 ` [PATCH v3 2/3] remoteproc: qcom_wcnss_iris: Add support for WCN3610 Kerigan Creighton
2026-03-06 0:43 ` [PATCH v3 3/3] wifi: wcn36xx: " Kerigan Creighton
2 siblings, 1 reply; 8+ messages in thread
From: Kerigan Creighton @ 2026-03-06 0:43 UTC (permalink / raw)
To: linux-wireless
Cc: loic.poulain, wcn36xx, andersson, mathieu.poirier,
linux-remoteproc, linux-arm-msm, robh, krzk+dt, conor+dt,
devicetree, linux-kernel, Kerigan Creighton
The Qualcomm WCN3610 is a 2.4GHz-only WLAN/BT combo chip.
It's similar to the WCN3620, though more basic. Add a
wcn3610 compatible for use in device trees.
It needs its own compatible because of chip-specific
configuration done in wcn36xx.
Signed-off-by: Kerigan Creighton <kerigancreighton@gmail.com>
---
Changes in v2:
- Move the Documentation patch to the beginning of the patch set.
Changes in v3:
- Describe the hardware rather than the driver in the
dt-bindings patch [Krzysztof].
---
Documentation/devicetree/bindings/remoteproc/qcom,wcnss-pil.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/remoteproc/qcom,wcnss-pil.yaml b/Documentation/devicetree/bindings/remoteproc/qcom,wcnss-pil.yaml
index 117fb4d0c4..018cdf5177 100644
--- a/Documentation/devicetree/bindings/remoteproc/qcom,wcnss-pil.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/qcom,wcnss-pil.yaml
@@ -109,6 +109,7 @@ properties:
properties:
compatible:
enum:
+ - qcom,wcn3610
- qcom,wcn3620
- qcom,wcn3660
- qcom,wcn3660b
--
2.53.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 2/3] remoteproc: qcom_wcnss_iris: Add support for WCN3610
2026-03-06 0:43 [PATCH v3 0/3] Add support for Qualcomm WCN3610 Kerigan Creighton
2026-03-06 0:43 ` [PATCH v3 1/3] dt-bindings: remoteproc: qcom,wcnss-pil: Add wcn3610 compatible Kerigan Creighton
@ 2026-03-06 0:43 ` Kerigan Creighton
2026-03-06 7:25 ` Krzysztof Kozlowski
2026-03-06 0:43 ` [PATCH v3 3/3] wifi: wcn36xx: " Kerigan Creighton
2 siblings, 1 reply; 8+ messages in thread
From: Kerigan Creighton @ 2026-03-06 0:43 UTC (permalink / raw)
To: linux-wireless
Cc: loic.poulain, wcn36xx, andersson, mathieu.poirier,
linux-remoteproc, linux-arm-msm, robh, krzk+dt, conor+dt,
devicetree, linux-kernel, Kerigan Creighton, Dmitry Baryshkov
WCN3610 has the same regulator requirements as
WCN3620, so in qcom_wcnss_iris, we can use wcn3620_data.
A separate compatible is needed for WCN3610 because the
wcn36xx driver uses it for chip-specific configuration.
Specifically, it sets BTC (Bluetooth Coexistence) CFGs,
disables ENABLE_DYNAMIC_RA_START_RATE, and disables
STA_POWERSAVE for this specific chip for stable
functionality.
Signed-off-by: Kerigan Creighton <kerigancreighton@gmail.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
Changes in v2:
- Move remoteproc compatible string addition to the middle of
the patch set.
- Add Reviewed-by Dmitry (thanks!)
Changes in v3:
- Describe why we need a new compatible in the remoteproc
patch [Krzysztof].
---
drivers/remoteproc/qcom_wcnss_iris.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/remoteproc/qcom_wcnss_iris.c b/drivers/remoteproc/qcom_wcnss_iris.c
index 2b89b4db6c..e58b59355f 100644
--- a/drivers/remoteproc/qcom_wcnss_iris.c
+++ b/drivers/remoteproc/qcom_wcnss_iris.c
@@ -95,6 +95,7 @@ void qcom_iris_disable(struct qcom_iris *iris)
}
static const struct of_device_id iris_of_match[] = {
+ { .compatible = "qcom,wcn3610", .data = &wcn3620_data },
{ .compatible = "qcom,wcn3620", .data = &wcn3620_data },
{ .compatible = "qcom,wcn3660", .data = &wcn3660_data },
{ .compatible = "qcom,wcn3660b", .data = &wcn3680_data },
--
2.53.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 3/3] wifi: wcn36xx: Add support for WCN3610
2026-03-06 0:43 [PATCH v3 0/3] Add support for Qualcomm WCN3610 Kerigan Creighton
2026-03-06 0:43 ` [PATCH v3 1/3] dt-bindings: remoteproc: qcom,wcnss-pil: Add wcn3610 compatible Kerigan Creighton
2026-03-06 0:43 ` [PATCH v3 2/3] remoteproc: qcom_wcnss_iris: Add support for WCN3610 Kerigan Creighton
@ 2026-03-06 0:43 ` Kerigan Creighton
2026-03-06 8:41 ` Loic Poulain
2 siblings, 1 reply; 8+ messages in thread
From: Kerigan Creighton @ 2026-03-06 0:43 UTC (permalink / raw)
To: linux-wireless
Cc: loic.poulain, wcn36xx, andersson, mathieu.poirier,
linux-remoteproc, linux-arm-msm, robh, krzk+dt, conor+dt,
devicetree, linux-kernel, Kerigan Creighton
The WCN3610 has a lot in common with the other wcn36xx
chips, so much of that code was reused.
The WCN3610 requires specific configuration values for
stable Wi-Fi. Without these values, there's packet loss.
An extra CFG table was made so other chips are not affected.
ENABLE_DYNAMIC_RA_START_RATE=0 was discovered from the
downstream prima driver. That brought it from 95% to 5%
packet loss. The rest of the CFG values came from my own
observations and experimentation. The current settings
allow for 0% packet loss.
STA_POWERSAVE resulted in BMPS errors and unstable
functionality, thus it has been disabled for just this
chip.
Tested on an Anki Vector 1.0 and 2.0 robot with 3
different APs. Support for other WCN36xx chips has not
been affected.
Signed-off-by: Kerigan Creighton <kerigancreighton@gmail.com>
---
Changes in v2:
- Move wcn36xx driver changes to the end of the patch set.
Changes in v3:
- Describe where the CFG values came from in the wcn36xx
driver patch [Konrad].
---
drivers/net/wireless/ath/wcn36xx/main.c | 4 +-
drivers/net/wireless/ath/wcn36xx/smd.c | 61 +++++++++++++++++++++-
drivers/net/wireless/ath/wcn36xx/wcn36xx.h | 1 +
3 files changed, 64 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
index c3f0860873..6c90c13251 100644
--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -1438,7 +1438,7 @@ static int wcn36xx_init_ieee80211(struct wcn36xx *wcn)
BIT(NL80211_IFTYPE_MESH_POINT);
wcn->hw->wiphy->bands[NL80211_BAND_2GHZ] = &wcn_band_2ghz;
- if (wcn->rf_id != RF_IRIS_WCN3620)
+ if (wcn->rf_id != RF_IRIS_WCN3620 && wcn->rf_id != RF_IRIS_WCN3610)
wcn->hw->wiphy->bands[NL80211_BAND_5GHZ] = &wcn_band_5ghz;
if (wcn->rf_id == RF_IRIS_WCN3680)
@@ -1535,6 +1535,8 @@ static int wcn36xx_platform_get_resources(struct wcn36xx *wcn,
/* External RF module */
iris_node = of_get_child_by_name(mmio_node, "iris");
if (iris_node) {
+ if (of_device_is_compatible(iris_node, "qcom,wcn3610"))
+ wcn->rf_id = RF_IRIS_WCN3610;
if (of_device_is_compatible(iris_node, "qcom,wcn3620"))
wcn->rf_id = RF_IRIS_WCN3620;
if (of_device_is_compatible(iris_node, "qcom,wcn3660") ||
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index 813553edcb..8d5a746de7 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -83,6 +83,61 @@ static struct wcn36xx_cfg_val wcn36xx_cfg_vals[] = {
WCN36XX_CFG_VAL(LINK_FAIL_TX_CNT, 1000),
};
+static struct wcn36xx_cfg_val wcn3610_cfg_vals[] = {
+ WCN36XX_CFG_VAL(CURRENT_TX_ANTENNA, 1),
+ WCN36XX_CFG_VAL(CURRENT_RX_ANTENNA, 1),
+ WCN36XX_CFG_VAL(LOW_GAIN_OVERRIDE, 0),
+ WCN36XX_CFG_VAL(POWER_STATE_PER_CHAIN, 785),
+ WCN36XX_CFG_VAL(CAL_PERIOD, 5),
+ WCN36XX_CFG_VAL(CAL_CONTROL, 1),
+ WCN36XX_CFG_VAL(PROXIMITY, 0),
+ WCN36XX_CFG_VAL(NETWORK_DENSITY, 3),
+ WCN36XX_CFG_VAL(MAX_MEDIUM_TIME, 6000),
+ WCN36XX_CFG_VAL(MAX_MPDUS_IN_AMPDU, 64),
+ WCN36XX_CFG_VAL(RTS_THRESHOLD, 2347),
+ WCN36XX_CFG_VAL(SHORT_RETRY_LIMIT, 15),
+ WCN36XX_CFG_VAL(LONG_RETRY_LIMIT, 15),
+ WCN36XX_CFG_VAL(FRAGMENTATION_THRESHOLD, 8000),
+ WCN36XX_CFG_VAL(DYNAMIC_THRESHOLD_ZERO, 5),
+ WCN36XX_CFG_VAL(DYNAMIC_THRESHOLD_ONE, 10),
+ WCN36XX_CFG_VAL(DYNAMIC_THRESHOLD_TWO, 15),
+ WCN36XX_CFG_VAL(FIXED_RATE, 0),
+ WCN36XX_CFG_VAL(RETRYRATE_POLICY, 4),
+ WCN36XX_CFG_VAL(RETRYRATE_SECONDARY, 131),
+ WCN36XX_CFG_VAL(RETRYRATE_TERTIARY, 129),
+ WCN36XX_CFG_VAL(FORCE_POLICY_PROTECTION, 5),
+ WCN36XX_CFG_VAL(FIXED_RATE_MULTICAST_24GHZ, 1),
+ WCN36XX_CFG_VAL(FIXED_RATE_MULTICAST_5GHZ, 5),
+ WCN36XX_CFG_VAL(DEFAULT_RATE_INDEX_5GHZ, 5),
+ WCN36XX_CFG_VAL(DEFAULT_RATE_INDEX_24GHZ, 6),
+ WCN36XX_CFG_VAL(MAX_BA_SESSIONS, 40),
+ WCN36XX_CFG_VAL(PS_DATA_INACTIVITY_TIMEOUT, 200),
+ WCN36XX_CFG_VAL(PS_ENABLE_BCN_FILTER, 1),
+ WCN36XX_CFG_VAL(PS_ENABLE_RSSI_MONITOR, 1),
+ WCN36XX_CFG_VAL(NUM_BEACON_PER_RSSI_AVERAGE, 20),
+ WCN36XX_CFG_VAL(STATS_PERIOD, 10),
+ WCN36XX_CFG_VAL(CFP_MAX_DURATION, 30000),
+ WCN36XX_CFG_VAL(FRAME_TRANS_ENABLED, 0),
+ WCN36XX_CFG_VAL(BA_THRESHOLD_HIGH, 128),
+ WCN36XX_CFG_VAL(MAX_BA_BUFFERS, 2560),
+ WCN36XX_CFG_VAL(DYNAMIC_PS_POLL_VALUE, 0),
+ WCN36XX_CFG_VAL(TX_PWR_CTRL_ENABLE, 1),
+ WCN36XX_CFG_VAL(ENABLE_CLOSE_LOOP, 1),
+ WCN36XX_CFG_VAL(ENABLE_LPWR_IMG_TRANSITION, 0),
+ WCN36XX_CFG_VAL(BTC_EXECUTION_MODE, 2),
+ WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN, 90000),
+ WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN, 60000),
+ WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN, 30000),
+ WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_IDLE_BT_LEN, 120000),
+ WCN36XX_CFG_VAL(BTC_FAST_WLAN_CONN_PREF, 1),
+ WCN36XX_CFG_VAL(BTC_STATIC_LEN_LE_BT, 120000),
+ WCN36XX_CFG_VAL(BTC_STATIC_LEN_LE_WLAN, 30000),
+ WCN36XX_CFG_VAL(MAX_ASSOC_LIMIT, 10),
+ WCN36XX_CFG_VAL(ENABLE_MCC_ADAPTIVE_SCHEDULER, 0),
+ WCN36XX_CFG_VAL(ENABLE_DYNAMIC_RA_START_RATE, 0),
+ WCN36XX_CFG_VAL(LINK_FAIL_TX_CNT, 1000),
+};
+
static struct wcn36xx_cfg_val wcn3680_cfg_vals[] = {
WCN36XX_CFG_VAL(CURRENT_TX_ANTENNA, 1),
WCN36XX_CFG_VAL(CURRENT_RX_ANTENNA, 1),
@@ -632,6 +687,9 @@ int wcn36xx_smd_start(struct wcn36xx *wcn)
if (wcn->rf_id == RF_IRIS_WCN3680) {
cfg_vals = wcn3680_cfg_vals;
cfg_elements = ARRAY_SIZE(wcn3680_cfg_vals);
+ } else if (wcn->rf_id == RF_IRIS_WCN3610) {
+ cfg_vals = wcn3610_cfg_vals;
+ cfg_elements = ARRAY_SIZE(wcn3610_cfg_vals);
} else {
cfg_vals = wcn36xx_cfg_vals;
cfg_elements = ARRAY_SIZE(wcn36xx_cfg_vals);
@@ -2380,7 +2438,8 @@ int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn)
mutex_lock(&wcn->hal_mutex);
INIT_HAL_MSG(msg_body, WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_REQ);
- wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, STA_POWERSAVE);
+ if (wcn->rf_id != RF_IRIS_WCN3610)
+ wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, STA_POWERSAVE);
if (wcn->rf_id == RF_IRIS_WCN3680) {
wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, DOT11AC);
wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, WLAN_CH144);
diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
index 7ee79593cd..cb409d48f7 100644
--- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
+++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
@@ -96,6 +96,7 @@ enum wcn36xx_ampdu_state {
#define WCN36XX_MAX_POWER(__wcn) (__wcn->hw->conf.chandef.chan->max_power)
#define RF_UNKNOWN 0x0000
+#define RF_IRIS_WCN3610 0x3610
#define RF_IRIS_WCN3620 0x3620
#define RF_IRIS_WCN3660 0x3660
#define RF_IRIS_WCN3680 0x3680
--
2.53.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 2/3] remoteproc: qcom_wcnss_iris: Add support for WCN3610
2026-03-06 0:43 ` [PATCH v3 2/3] remoteproc: qcom_wcnss_iris: Add support for WCN3610 Kerigan Creighton
@ 2026-03-06 7:25 ` Krzysztof Kozlowski
0 siblings, 0 replies; 8+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-06 7:25 UTC (permalink / raw)
To: Kerigan Creighton, linux-wireless
Cc: loic.poulain, wcn36xx, andersson, mathieu.poirier,
linux-remoteproc, linux-arm-msm, robh, krzk+dt, conor+dt,
devicetree, linux-kernel, Dmitry Baryshkov
On 06/03/2026 01:43, Kerigan Creighton wrote:
> WCN3610 has the same regulator requirements as
> WCN3620, so in qcom_wcnss_iris, we can use wcn3620_data.
>
> A separate compatible is needed for WCN3610 because the
> wcn36xx driver uses it for chip-specific configuration.
> Specifically, it sets BTC (Bluetooth Coexistence) CFGs,
> disables ENABLE_DYNAMIC_RA_START_RATE, and disables
> STA_POWERSAVE for this specific chip for stable
> functionality.
This goes to the binding description where you describe the hardware,
how I asked.
Please wrap commit message according to Linux coding style / submission
process (neither too early nor over the limit):
https://elixir.bootlin.com/linux/v6.4-rc1/source/Documentation/process/submitting-patches.rst#L597
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: remoteproc: qcom,wcnss-pil: Add wcn3610 compatible
2026-03-06 0:43 ` [PATCH v3 1/3] dt-bindings: remoteproc: qcom,wcnss-pil: Add wcn3610 compatible Kerigan Creighton
@ 2026-03-06 7:26 ` Krzysztof Kozlowski
0 siblings, 0 replies; 8+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-06 7:26 UTC (permalink / raw)
To: Kerigan Creighton, linux-wireless
Cc: loic.poulain, wcn36xx, andersson, mathieu.poirier,
linux-remoteproc, linux-arm-msm, robh, krzk+dt, conor+dt,
devicetree, linux-kernel
On 06/03/2026 01:43, Kerigan Creighton wrote:
> The Qualcomm WCN3610 is a 2.4GHz-only WLAN/BT combo chip.
> It's similar to the WCN3620, though more basic. Add a
> wcn3610 compatible for use in device trees.
>
> It needs its own compatible because of chip-specific
> configuration done in wcn36xx.
Please wrap commit message according to Linux coding style / submission
process (neither too early nor over the limit):
https://elixir.bootlin.com/linux/v6.4-rc1/source/Documentation/process/submitting-patches.rst#L597
With the changes from patch 2:
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 3/3] wifi: wcn36xx: Add support for WCN3610
2026-03-06 0:43 ` [PATCH v3 3/3] wifi: wcn36xx: " Kerigan Creighton
@ 2026-03-06 8:41 ` Loic Poulain
2026-03-06 18:05 ` Kerigan Creighton
0 siblings, 1 reply; 8+ messages in thread
From: Loic Poulain @ 2026-03-06 8:41 UTC (permalink / raw)
To: Kerigan Creighton
Cc: linux-wireless, wcn36xx, andersson, mathieu.poirier,
linux-remoteproc, linux-arm-msm, robh, krzk+dt, conor+dt,
devicetree, linux-kernel
On Fri, Mar 6, 2026 at 1:44 AM Kerigan Creighton
<kerigancreighton@gmail.com> wrote:
>
> The WCN3610 has a lot in common with the other wcn36xx
> chips, so much of that code was reused.
>
> The WCN3610 requires specific configuration values for
> stable Wi-Fi. Without these values, there's packet loss.
> An extra CFG table was made so other chips are not affected.
>
> ENABLE_DYNAMIC_RA_START_RATE=0 was discovered from the
> downstream prima driver. That brought it from 95% to 5%
> packet loss. The rest of the CFG values came from my own
> observations and experimentation. The current settings
> allow for 0% packet loss.
>
> STA_POWERSAVE resulted in BMPS errors and unstable
> functionality, thus it has been disabled for just this
> chip.
>
> Tested on an Anki Vector 1.0 and 2.0 robot with 3
> different APs. Support for other WCN36xx chips has not
> been affected.
>
> Signed-off-by: Kerigan Creighton <kerigancreighton@gmail.com>
STA_POWERSAVE is disabled, but the interface still enters BMPS mode as
controlled by mac80211. If you get the opportunity, It would be useful
to air-capture the power‑save entry and exit events when this occurs,
so we can verify that the transitions behave as expected.
Reviewed-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
> ---
> Changes in v2:
> - Move wcn36xx driver changes to the end of the patch set.
>
> Changes in v3:
> - Describe where the CFG values came from in the wcn36xx
> driver patch [Konrad].
> ---
> drivers/net/wireless/ath/wcn36xx/main.c | 4 +-
> drivers/net/wireless/ath/wcn36xx/smd.c | 61 +++++++++++++++++++++-
> drivers/net/wireless/ath/wcn36xx/wcn36xx.h | 1 +
> 3 files changed, 64 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
> index c3f0860873..6c90c13251 100644
> --- a/drivers/net/wireless/ath/wcn36xx/main.c
> +++ b/drivers/net/wireless/ath/wcn36xx/main.c
> @@ -1438,7 +1438,7 @@ static int wcn36xx_init_ieee80211(struct wcn36xx *wcn)
> BIT(NL80211_IFTYPE_MESH_POINT);
>
> wcn->hw->wiphy->bands[NL80211_BAND_2GHZ] = &wcn_band_2ghz;
> - if (wcn->rf_id != RF_IRIS_WCN3620)
> + if (wcn->rf_id != RF_IRIS_WCN3620 && wcn->rf_id != RF_IRIS_WCN3610)
> wcn->hw->wiphy->bands[NL80211_BAND_5GHZ] = &wcn_band_5ghz;
>
> if (wcn->rf_id == RF_IRIS_WCN3680)
> @@ -1535,6 +1535,8 @@ static int wcn36xx_platform_get_resources(struct wcn36xx *wcn,
> /* External RF module */
> iris_node = of_get_child_by_name(mmio_node, "iris");
> if (iris_node) {
> + if (of_device_is_compatible(iris_node, "qcom,wcn3610"))
> + wcn->rf_id = RF_IRIS_WCN3610;
> if (of_device_is_compatible(iris_node, "qcom,wcn3620"))
> wcn->rf_id = RF_IRIS_WCN3620;
> if (of_device_is_compatible(iris_node, "qcom,wcn3660") ||
> diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
> index 813553edcb..8d5a746de7 100644
> --- a/drivers/net/wireless/ath/wcn36xx/smd.c
> +++ b/drivers/net/wireless/ath/wcn36xx/smd.c
> @@ -83,6 +83,61 @@ static struct wcn36xx_cfg_val wcn36xx_cfg_vals[] = {
> WCN36XX_CFG_VAL(LINK_FAIL_TX_CNT, 1000),
> };
>
> +static struct wcn36xx_cfg_val wcn3610_cfg_vals[] = {
> + WCN36XX_CFG_VAL(CURRENT_TX_ANTENNA, 1),
> + WCN36XX_CFG_VAL(CURRENT_RX_ANTENNA, 1),
> + WCN36XX_CFG_VAL(LOW_GAIN_OVERRIDE, 0),
> + WCN36XX_CFG_VAL(POWER_STATE_PER_CHAIN, 785),
> + WCN36XX_CFG_VAL(CAL_PERIOD, 5),
> + WCN36XX_CFG_VAL(CAL_CONTROL, 1),
> + WCN36XX_CFG_VAL(PROXIMITY, 0),
> + WCN36XX_CFG_VAL(NETWORK_DENSITY, 3),
> + WCN36XX_CFG_VAL(MAX_MEDIUM_TIME, 6000),
> + WCN36XX_CFG_VAL(MAX_MPDUS_IN_AMPDU, 64),
> + WCN36XX_CFG_VAL(RTS_THRESHOLD, 2347),
> + WCN36XX_CFG_VAL(SHORT_RETRY_LIMIT, 15),
> + WCN36XX_CFG_VAL(LONG_RETRY_LIMIT, 15),
> + WCN36XX_CFG_VAL(FRAGMENTATION_THRESHOLD, 8000),
> + WCN36XX_CFG_VAL(DYNAMIC_THRESHOLD_ZERO, 5),
> + WCN36XX_CFG_VAL(DYNAMIC_THRESHOLD_ONE, 10),
> + WCN36XX_CFG_VAL(DYNAMIC_THRESHOLD_TWO, 15),
> + WCN36XX_CFG_VAL(FIXED_RATE, 0),
> + WCN36XX_CFG_VAL(RETRYRATE_POLICY, 4),
> + WCN36XX_CFG_VAL(RETRYRATE_SECONDARY, 131),
> + WCN36XX_CFG_VAL(RETRYRATE_TERTIARY, 129),
> + WCN36XX_CFG_VAL(FORCE_POLICY_PROTECTION, 5),
> + WCN36XX_CFG_VAL(FIXED_RATE_MULTICAST_24GHZ, 1),
> + WCN36XX_CFG_VAL(FIXED_RATE_MULTICAST_5GHZ, 5),
> + WCN36XX_CFG_VAL(DEFAULT_RATE_INDEX_5GHZ, 5),
> + WCN36XX_CFG_VAL(DEFAULT_RATE_INDEX_24GHZ, 6),
> + WCN36XX_CFG_VAL(MAX_BA_SESSIONS, 40),
> + WCN36XX_CFG_VAL(PS_DATA_INACTIVITY_TIMEOUT, 200),
> + WCN36XX_CFG_VAL(PS_ENABLE_BCN_FILTER, 1),
> + WCN36XX_CFG_VAL(PS_ENABLE_RSSI_MONITOR, 1),
> + WCN36XX_CFG_VAL(NUM_BEACON_PER_RSSI_AVERAGE, 20),
> + WCN36XX_CFG_VAL(STATS_PERIOD, 10),
> + WCN36XX_CFG_VAL(CFP_MAX_DURATION, 30000),
> + WCN36XX_CFG_VAL(FRAME_TRANS_ENABLED, 0),
> + WCN36XX_CFG_VAL(BA_THRESHOLD_HIGH, 128),
> + WCN36XX_CFG_VAL(MAX_BA_BUFFERS, 2560),
> + WCN36XX_CFG_VAL(DYNAMIC_PS_POLL_VALUE, 0),
> + WCN36XX_CFG_VAL(TX_PWR_CTRL_ENABLE, 1),
> + WCN36XX_CFG_VAL(ENABLE_CLOSE_LOOP, 1),
> + WCN36XX_CFG_VAL(ENABLE_LPWR_IMG_TRANSITION, 0),
> + WCN36XX_CFG_VAL(BTC_EXECUTION_MODE, 2),
> + WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN, 90000),
> + WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN, 60000),
> + WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN, 30000),
> + WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_IDLE_BT_LEN, 120000),
> + WCN36XX_CFG_VAL(BTC_FAST_WLAN_CONN_PREF, 1),
> + WCN36XX_CFG_VAL(BTC_STATIC_LEN_LE_BT, 120000),
> + WCN36XX_CFG_VAL(BTC_STATIC_LEN_LE_WLAN, 30000),
> + WCN36XX_CFG_VAL(MAX_ASSOC_LIMIT, 10),
> + WCN36XX_CFG_VAL(ENABLE_MCC_ADAPTIVE_SCHEDULER, 0),
> + WCN36XX_CFG_VAL(ENABLE_DYNAMIC_RA_START_RATE, 0),
> + WCN36XX_CFG_VAL(LINK_FAIL_TX_CNT, 1000),
> +};
> +
> static struct wcn36xx_cfg_val wcn3680_cfg_vals[] = {
> WCN36XX_CFG_VAL(CURRENT_TX_ANTENNA, 1),
> WCN36XX_CFG_VAL(CURRENT_RX_ANTENNA, 1),
> @@ -632,6 +687,9 @@ int wcn36xx_smd_start(struct wcn36xx *wcn)
> if (wcn->rf_id == RF_IRIS_WCN3680) {
> cfg_vals = wcn3680_cfg_vals;
> cfg_elements = ARRAY_SIZE(wcn3680_cfg_vals);
> + } else if (wcn->rf_id == RF_IRIS_WCN3610) {
> + cfg_vals = wcn3610_cfg_vals;
> + cfg_elements = ARRAY_SIZE(wcn3610_cfg_vals);
> } else {
> cfg_vals = wcn36xx_cfg_vals;
> cfg_elements = ARRAY_SIZE(wcn36xx_cfg_vals);
> @@ -2380,7 +2438,8 @@ int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn)
> mutex_lock(&wcn->hal_mutex);
> INIT_HAL_MSG(msg_body, WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_REQ);
>
> - wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, STA_POWERSAVE);
> + if (wcn->rf_id != RF_IRIS_WCN3610)
> + wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, STA_POWERSAVE);
> if (wcn->rf_id == RF_IRIS_WCN3680) {
> wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, DOT11AC);
> wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, WLAN_CH144);
> diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
> index 7ee79593cd..cb409d48f7 100644
> --- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
> +++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
> @@ -96,6 +96,7 @@ enum wcn36xx_ampdu_state {
> #define WCN36XX_MAX_POWER(__wcn) (__wcn->hw->conf.chandef.chan->max_power)
>
> #define RF_UNKNOWN 0x0000
> +#define RF_IRIS_WCN3610 0x3610
> #define RF_IRIS_WCN3620 0x3620
> #define RF_IRIS_WCN3660 0x3660
> #define RF_IRIS_WCN3680 0x3680
> --
> 2.53.0
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 3/3] wifi: wcn36xx: Add support for WCN3610
2026-03-06 8:41 ` Loic Poulain
@ 2026-03-06 18:05 ` Kerigan Creighton
0 siblings, 0 replies; 8+ messages in thread
From: Kerigan Creighton @ 2026-03-06 18:05 UTC (permalink / raw)
To: Loic Poulain
Cc: linux-wireless, wcn36xx, andersson, mathieu.poirier,
linux-remoteproc, linux-arm-msm, robh, krzk+dt, conor+dt,
devicetree, linux-kernel
On Fri, Mar 6, 2026 at 2:41 AM Loic Poulain
<loic.poulain@oss.qualcomm.com> wrote:
>
> > STA_POWERSAVE resulted in BMPS errors and unstable
> > functionality, thus it has been disabled for just this
> > chip.
> >
> > Tested on an Anki Vector 1.0 and 2.0 robot with 3
> > different APs. Support for other WCN36xx chips has not
> > been affected.
> >
> > Signed-off-by: Kerigan Creighton <kerigancreighton@gmail.com>
>
> STA_POWERSAVE is disabled, but the interface still enters BMPS mode as
> controlled by mac80211. If you get the opportunity, It would be useful
> to air-capture the power‑save entry and exit events when this occurs,
> so we can verify that the transitions behave as expected.
>
> Reviewed-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
[re-sent with full cc list]
I only had the chance to test it with one AP, but wireshark does show
clean power-save entry and exit transitions. Once I do more testing,
I will make a v4 which:
- Adds these power-save findings to the patch 3 commit message
- Amends all commit messages so they are wrapped better
- Amends patch 1 to include a better description of the hardware
Thanks for the review,
- Kerigan
On Fri, Mar 6, 2026 at 2:41 AM Loic Poulain
<loic.poulain@oss.qualcomm.com> wrote:
>
> On Fri, Mar 6, 2026 at 1:44 AM Kerigan Creighton
> <kerigancreighton@gmail.com> wrote:
> >
> > The WCN3610 has a lot in common with the other wcn36xx
> > chips, so much of that code was reused.
> >
> > The WCN3610 requires specific configuration values for
> > stable Wi-Fi. Without these values, there's packet loss.
> > An extra CFG table was made so other chips are not affected.
> >
> > ENABLE_DYNAMIC_RA_START_RATE=0 was discovered from the
> > downstream prima driver. That brought it from 95% to 5%
> > packet loss. The rest of the CFG values came from my own
> > observations and experimentation. The current settings
> > allow for 0% packet loss.
> >
> > STA_POWERSAVE resulted in BMPS errors and unstable
> > functionality, thus it has been disabled for just this
> > chip.
> >
> > Tested on an Anki Vector 1.0 and 2.0 robot with 3
> > different APs. Support for other WCN36xx chips has not
> > been affected.
> >
> > Signed-off-by: Kerigan Creighton <kerigancreighton@gmail.com>
>
> STA_POWERSAVE is disabled, but the interface still enters BMPS mode as
> controlled by mac80211. If you get the opportunity, It would be useful
> to air-capture the power‑save entry and exit events when this occurs,
> so we can verify that the transitions behave as expected.
>
> Reviewed-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
>
>
>
> > ---
> > Changes in v2:
> > - Move wcn36xx driver changes to the end of the patch set.
> >
> > Changes in v3:
> > - Describe where the CFG values came from in the wcn36xx
> > driver patch [Konrad].
> > ---
> > drivers/net/wireless/ath/wcn36xx/main.c | 4 +-
> > drivers/net/wireless/ath/wcn36xx/smd.c | 61 +++++++++++++++++++++-
> > drivers/net/wireless/ath/wcn36xx/wcn36xx.h | 1 +
> > 3 files changed, 64 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
> > index c3f0860873..6c90c13251 100644
> > --- a/drivers/net/wireless/ath/wcn36xx/main.c
> > +++ b/drivers/net/wireless/ath/wcn36xx/main.c
> > @@ -1438,7 +1438,7 @@ static int wcn36xx_init_ieee80211(struct wcn36xx *wcn)
> > BIT(NL80211_IFTYPE_MESH_POINT);
> >
> > wcn->hw->wiphy->bands[NL80211_BAND_2GHZ] = &wcn_band_2ghz;
> > - if (wcn->rf_id != RF_IRIS_WCN3620)
> > + if (wcn->rf_id != RF_IRIS_WCN3620 && wcn->rf_id != RF_IRIS_WCN3610)
> > wcn->hw->wiphy->bands[NL80211_BAND_5GHZ] = &wcn_band_5ghz;
> >
> > if (wcn->rf_id == RF_IRIS_WCN3680)
> > @@ -1535,6 +1535,8 @@ static int wcn36xx_platform_get_resources(struct wcn36xx *wcn,
> > /* External RF module */
> > iris_node = of_get_child_by_name(mmio_node, "iris");
> > if (iris_node) {
> > + if (of_device_is_compatible(iris_node, "qcom,wcn3610"))
> > + wcn->rf_id = RF_IRIS_WCN3610;
> > if (of_device_is_compatible(iris_node, "qcom,wcn3620"))
> > wcn->rf_id = RF_IRIS_WCN3620;
> > if (of_device_is_compatible(iris_node, "qcom,wcn3660") ||
> > diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
> > index 813553edcb..8d5a746de7 100644
> > --- a/drivers/net/wireless/ath/wcn36xx/smd.c
> > +++ b/drivers/net/wireless/ath/wcn36xx/smd.c
> > @@ -83,6 +83,61 @@ static struct wcn36xx_cfg_val wcn36xx_cfg_vals[] = {
> > WCN36XX_CFG_VAL(LINK_FAIL_TX_CNT, 1000),
> > };
> >
> > +static struct wcn36xx_cfg_val wcn3610_cfg_vals[] = {
> > + WCN36XX_CFG_VAL(CURRENT_TX_ANTENNA, 1),
> > + WCN36XX_CFG_VAL(CURRENT_RX_ANTENNA, 1),
> > + WCN36XX_CFG_VAL(LOW_GAIN_OVERRIDE, 0),
> > + WCN36XX_CFG_VAL(POWER_STATE_PER_CHAIN, 785),
> > + WCN36XX_CFG_VAL(CAL_PERIOD, 5),
> > + WCN36XX_CFG_VAL(CAL_CONTROL, 1),
> > + WCN36XX_CFG_VAL(PROXIMITY, 0),
> > + WCN36XX_CFG_VAL(NETWORK_DENSITY, 3),
> > + WCN36XX_CFG_VAL(MAX_MEDIUM_TIME, 6000),
> > + WCN36XX_CFG_VAL(MAX_MPDUS_IN_AMPDU, 64),
> > + WCN36XX_CFG_VAL(RTS_THRESHOLD, 2347),
> > + WCN36XX_CFG_VAL(SHORT_RETRY_LIMIT, 15),
> > + WCN36XX_CFG_VAL(LONG_RETRY_LIMIT, 15),
> > + WCN36XX_CFG_VAL(FRAGMENTATION_THRESHOLD, 8000),
> > + WCN36XX_CFG_VAL(DYNAMIC_THRESHOLD_ZERO, 5),
> > + WCN36XX_CFG_VAL(DYNAMIC_THRESHOLD_ONE, 10),
> > + WCN36XX_CFG_VAL(DYNAMIC_THRESHOLD_TWO, 15),
> > + WCN36XX_CFG_VAL(FIXED_RATE, 0),
> > + WCN36XX_CFG_VAL(RETRYRATE_POLICY, 4),
> > + WCN36XX_CFG_VAL(RETRYRATE_SECONDARY, 131),
> > + WCN36XX_CFG_VAL(RETRYRATE_TERTIARY, 129),
> > + WCN36XX_CFG_VAL(FORCE_POLICY_PROTECTION, 5),
> > + WCN36XX_CFG_VAL(FIXED_RATE_MULTICAST_24GHZ, 1),
> > + WCN36XX_CFG_VAL(FIXED_RATE_MULTICAST_5GHZ, 5),
> > + WCN36XX_CFG_VAL(DEFAULT_RATE_INDEX_5GHZ, 5),
> > + WCN36XX_CFG_VAL(DEFAULT_RATE_INDEX_24GHZ, 6),
> > + WCN36XX_CFG_VAL(MAX_BA_SESSIONS, 40),
> > + WCN36XX_CFG_VAL(PS_DATA_INACTIVITY_TIMEOUT, 200),
> > + WCN36XX_CFG_VAL(PS_ENABLE_BCN_FILTER, 1),
> > + WCN36XX_CFG_VAL(PS_ENABLE_RSSI_MONITOR, 1),
> > + WCN36XX_CFG_VAL(NUM_BEACON_PER_RSSI_AVERAGE, 20),
> > + WCN36XX_CFG_VAL(STATS_PERIOD, 10),
> > + WCN36XX_CFG_VAL(CFP_MAX_DURATION, 30000),
> > + WCN36XX_CFG_VAL(FRAME_TRANS_ENABLED, 0),
> > + WCN36XX_CFG_VAL(BA_THRESHOLD_HIGH, 128),
> > + WCN36XX_CFG_VAL(MAX_BA_BUFFERS, 2560),
> > + WCN36XX_CFG_VAL(DYNAMIC_PS_POLL_VALUE, 0),
> > + WCN36XX_CFG_VAL(TX_PWR_CTRL_ENABLE, 1),
> > + WCN36XX_CFG_VAL(ENABLE_CLOSE_LOOP, 1),
> > + WCN36XX_CFG_VAL(ENABLE_LPWR_IMG_TRANSITION, 0),
> > + WCN36XX_CFG_VAL(BTC_EXECUTION_MODE, 2),
> > + WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN, 90000),
> > + WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN, 60000),
> > + WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN, 30000),
> > + WCN36XX_CFG_VAL(BTC_STATIC_OPP_WLAN_IDLE_BT_LEN, 120000),
> > + WCN36XX_CFG_VAL(BTC_FAST_WLAN_CONN_PREF, 1),
> > + WCN36XX_CFG_VAL(BTC_STATIC_LEN_LE_BT, 120000),
> > + WCN36XX_CFG_VAL(BTC_STATIC_LEN_LE_WLAN, 30000),
> > + WCN36XX_CFG_VAL(MAX_ASSOC_LIMIT, 10),
> > + WCN36XX_CFG_VAL(ENABLE_MCC_ADAPTIVE_SCHEDULER, 0),
> > + WCN36XX_CFG_VAL(ENABLE_DYNAMIC_RA_START_RATE, 0),
> > + WCN36XX_CFG_VAL(LINK_FAIL_TX_CNT, 1000),
> > +};
> > +
> > static struct wcn36xx_cfg_val wcn3680_cfg_vals[] = {
> > WCN36XX_CFG_VAL(CURRENT_TX_ANTENNA, 1),
> > WCN36XX_CFG_VAL(CURRENT_RX_ANTENNA, 1),
> > @@ -632,6 +687,9 @@ int wcn36xx_smd_start(struct wcn36xx *wcn)
> > if (wcn->rf_id == RF_IRIS_WCN3680) {
> > cfg_vals = wcn3680_cfg_vals;
> > cfg_elements = ARRAY_SIZE(wcn3680_cfg_vals);
> > + } else if (wcn->rf_id == RF_IRIS_WCN3610) {
> > + cfg_vals = wcn3610_cfg_vals;
> > + cfg_elements = ARRAY_SIZE(wcn3610_cfg_vals);
> > } else {
> > cfg_vals = wcn36xx_cfg_vals;
> > cfg_elements = ARRAY_SIZE(wcn36xx_cfg_vals);
> > @@ -2380,7 +2438,8 @@ int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn)
> > mutex_lock(&wcn->hal_mutex);
> > INIT_HAL_MSG(msg_body, WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_REQ);
> >
> > - wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, STA_POWERSAVE);
> > + if (wcn->rf_id != RF_IRIS_WCN3610)
> > + wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, STA_POWERSAVE);
> > if (wcn->rf_id == RF_IRIS_WCN3680) {
> > wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, DOT11AC);
> > wcn36xx_firmware_set_feat_caps(msg_body.feat_caps, WLAN_CH144);
> > diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
> > index 7ee79593cd..cb409d48f7 100644
> > --- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
> > +++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
> > @@ -96,6 +96,7 @@ enum wcn36xx_ampdu_state {
> > #define WCN36XX_MAX_POWER(__wcn) (__wcn->hw->conf.chandef.chan->max_power)
> >
> > #define RF_UNKNOWN 0x0000
> > +#define RF_IRIS_WCN3610 0x3610
> > #define RF_IRIS_WCN3620 0x3620
> > #define RF_IRIS_WCN3660 0x3660
> > #define RF_IRIS_WCN3680 0x3680
> > --
> > 2.53.0
> >
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-03-06 18:06 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-06 0:43 [PATCH v3 0/3] Add support for Qualcomm WCN3610 Kerigan Creighton
2026-03-06 0:43 ` [PATCH v3 1/3] dt-bindings: remoteproc: qcom,wcnss-pil: Add wcn3610 compatible Kerigan Creighton
2026-03-06 7:26 ` Krzysztof Kozlowski
2026-03-06 0:43 ` [PATCH v3 2/3] remoteproc: qcom_wcnss_iris: Add support for WCN3610 Kerigan Creighton
2026-03-06 7:25 ` Krzysztof Kozlowski
2026-03-06 0:43 ` [PATCH v3 3/3] wifi: wcn36xx: " Kerigan Creighton
2026-03-06 8:41 ` Loic Poulain
2026-03-06 18:05 ` Kerigan Creighton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox