* [PATCH v3 ath-current 0/2] wifi: ath11k: add usecase firmware handling based on device compatible
@ 2026-01-19 14:02 Miaoqing Pan
2026-01-19 14:02 ` [PATCH v3 ath-current 1/2] " Miaoqing Pan
2026-01-19 14:02 ` [PATCH v3 ath-current 2/2] dt-bindings: net: wireless: ath11k-pci: deprecate 'firmware-name' property Miaoqing Pan
0 siblings, 2 replies; 7+ messages in thread
From: Miaoqing Pan @ 2026-01-19 14:02 UTC (permalink / raw)
To: jjohnson, johannes, robh, krzk+dt, conor+dt
Cc: ath11k, linux-wireless, linux-kernel, devicetree, krzk,
Miaoqing Pan
The 'firmware-name' property was introduced to allow end-users and
integrators to select use-case-specific firmware for the WCN6855.
But for M.2 WLAN chips, there is no suitable DTS node to specify
the 'firmware-name' property. In addition, assigning firmware for
the M.2 PCIe interface causes chips that do not use use-case-specific
firmware to fail. Therefore, abandoning the approach of specifying
firmware in DTS. As an alternative, propose a static lookup table
mapping device compatible to firmware names.
---
v2:
- Drops `firmware-name` from completely.
- Updates the commit message to clearly state that the property is
obsolete and the change is ABI-breaking but safe for upstream.
v3:
- Deprecate 'firmware-name' property instead of obsolete.
- Keep the ABI backwards compatible.
---
Miaoqing Pan (2):
wifi: ath11k: add usecase firmware handling based on device compatible
dt-bindings: net: wireless: ath11k-pci: deprecate 'firmware-name'
property
.../net/wireless/qcom,ath11k-pci.yaml | 1 +
drivers/net/wireless/ath/ath11k/core.c | 36 +++++++++++++++++++
drivers/net/wireless/ath/ath11k/core.h | 4 +++
3 files changed, 41 insertions(+)
base-commit: d8e1f4a193101a72235416f189b01131a57e26e9
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 ath-current 1/2] wifi: ath11k: add usecase firmware handling based on device compatible
2026-01-19 14:02 [PATCH v3 ath-current 0/2] wifi: ath11k: add usecase firmware handling based on device compatible Miaoqing Pan
@ 2026-01-19 14:02 ` Miaoqing Pan
2026-01-19 15:56 ` Jonas Gorski
2026-01-19 14:02 ` [PATCH v3 ath-current 2/2] dt-bindings: net: wireless: ath11k-pci: deprecate 'firmware-name' property Miaoqing Pan
1 sibling, 1 reply; 7+ messages in thread
From: Miaoqing Pan @ 2026-01-19 14:02 UTC (permalink / raw)
To: jjohnson, johannes, robh, krzk+dt, conor+dt
Cc: ath11k, linux-wireless, linux-kernel, devicetree, krzk,
Miaoqing Pan
For M.2 WLAN chips, there is no suitable DTS node to specify the
firmware-name property. In addition, assigning firmware for the
M.2 PCIe interface causes chips that do not use usecase specific
firmware to fail. Therefore, abandoning the approach of specifying
firmware in DTS. As an alternative, propose a static lookup table
mapping device compatible to firmware names. Currently, only WCN6855
HW2.1 requires this.
However, support for the firmware-name property is retained to keep
the ABI backwards compatible.
For details on usecase specific firmware, see:
https://lore.kernel.org/all/20250522013444.1301330-3-miaoqing.pan@oss.qualcomm.com/.
Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-04685-QCAHSPSWPL_V1_V2_SILICONZ_IOE-1
Fixes: edbbc647c4f3 ("wifi: ath11k: support usercase-specific firmware overrides")
Signed-off-by: Miaoqing Pan <miaoqing.pan@oss.qualcomm.com>
---
drivers/net/wireless/ath/ath11k/core.c | 36 ++++++++++++++++++++++++++
drivers/net/wireless/ath/ath11k/core.h | 4 +++
2 files changed, 40 insertions(+)
diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c
index de84906d1b27..1cf7f4e601c3 100644
--- a/drivers/net/wireless/ath/ath11k/core.c
+++ b/drivers/net/wireless/ath/ath11k/core.c
@@ -1044,6 +1044,42 @@ static const struct dmi_system_id ath11k_pm_quirk_table[] = {
{}
};
+static const struct __ath11k_core_usecase_firmware_table {
+ u32 hw_rev;
+ const char *compatible;
+ const char *firmware_name;
+} ath11k_core_usecase_firmware_table[] = {
+ { ATH11K_HW_WCN6855_HW21, "qcom,lemans-evk", "nfa765"},
+ { ATH11K_HW_WCN6855_HW21, "qcom,monaco-evk", "nfa765"},
+ { ATH11K_HW_WCN6855_HW21, "qcom,hamoa-iot-evk", "nfa765"},
+ { /* Sentinel */ }
+};
+
+const char *ath11k_core_get_usecase_firmware(struct ath11k_base *ab)
+{
+ struct device_node *root __free(device_node) = of_find_node_by_path("/");
+ const struct __ath11k_core_usecase_firmware_table *entry = NULL;
+ int i, count = of_property_count_strings(root, "compatible");
+ const char *compatible = NULL;
+
+ for (i = 0; i < count; i++) {
+ if (of_property_read_string_index(root, "compatible", i,
+ &compatible) < 0)
+ continue;
+
+ entry = ath11k_core_usecase_firmware_table;
+ while (entry->compatible) {
+ if (ab->hw_rev == entry->hw_rev &&
+ !strcmp(entry->compatible, compatible))
+ return entry->firmware_name;
+ entry++;
+ }
+ }
+
+ return NULL;
+}
+EXPORT_SYMBOL(ath11k_core_get_usecase_firmware);
+
void ath11k_fw_stats_pdevs_free(struct list_head *head)
{
struct ath11k_fw_stats_pdev *i, *tmp;
diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h
index 3f41e6569a78..a0d725923ef2 100644
--- a/drivers/net/wireless/ath/ath11k/core.h
+++ b/drivers/net/wireless/ath/ath11k/core.h
@@ -1292,6 +1292,7 @@ bool ath11k_core_coldboot_cal_support(struct ath11k_base *ab);
const struct firmware *ath11k_core_firmware_request(struct ath11k_base *ab,
const char *filename);
+const char *ath11k_core_get_usecase_firmware(struct ath11k_base *ab);
static inline const char *ath11k_scan_state_str(enum ath11k_scan_state state)
{
@@ -1346,6 +1347,9 @@ static inline void ath11k_core_create_firmware_path(struct ath11k_base *ab,
of_property_read_string(ab->dev->of_node, "firmware-name", &fw_name);
+ if (!fw_name)
+ fw_name = ath11k_core_get_usecase_firmware(ab);
+
if (fw_name && strncmp(filename, "board", 5))
snprintf(buf, buf_len, "%s/%s/%s/%s", ATH11K_FW_DIR,
ab->hw_params.fw.dir, fw_name, filename);
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 ath-current 2/2] dt-bindings: net: wireless: ath11k-pci: deprecate 'firmware-name' property
2026-01-19 14:02 [PATCH v3 ath-current 0/2] wifi: ath11k: add usecase firmware handling based on device compatible Miaoqing Pan
2026-01-19 14:02 ` [PATCH v3 ath-current 1/2] " Miaoqing Pan
@ 2026-01-19 14:02 ` Miaoqing Pan
2026-01-19 14:48 ` Krzysztof Kozlowski
1 sibling, 1 reply; 7+ messages in thread
From: Miaoqing Pan @ 2026-01-19 14:02 UTC (permalink / raw)
To: jjohnson, johannes, robh, krzk+dt, conor+dt
Cc: ath11k, linux-wireless, linux-kernel, devicetree, krzk,
Miaoqing Pan
The firmware-name property was originally introduced to allow end-users
and integrators to select use-case-specific firmware for the WCN6855.
However, specifying firmware for an M.2 WLAN module in the Device Tree
is not appropriate. Instead, this functionality will be handled within
the ath11k driver. Therefore, the firmware-name property is now
deprecated.
Signed-off-by: Miaoqing Pan <miaoqing.pan@oss.qualcomm.com>
---
.../devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml b/Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml
index e34d42a30192..0162e365798b 100644
--- a/Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml
+++ b/Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml
@@ -37,6 +37,7 @@ properties:
firmware-name:
maxItems: 1
+ deprecated: true
description:
If present, a board or platform specific string used to lookup
usecase-specific firmware files for the device.
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 ath-current 2/2] dt-bindings: net: wireless: ath11k-pci: deprecate 'firmware-name' property
2026-01-19 14:02 ` [PATCH v3 ath-current 2/2] dt-bindings: net: wireless: ath11k-pci: deprecate 'firmware-name' property Miaoqing Pan
@ 2026-01-19 14:48 ` Krzysztof Kozlowski
2026-01-20 1:31 ` Miaoqing Pan
0 siblings, 1 reply; 7+ messages in thread
From: Krzysztof Kozlowski @ 2026-01-19 14:48 UTC (permalink / raw)
To: Miaoqing Pan, jjohnson, johannes, robh, krzk+dt, conor+dt
Cc: ath11k, linux-wireless, linux-kernel, devicetree
On 19/01/2026 15:02, Miaoqing Pan wrote:
> The firmware-name property was originally introduced to allow end-users
> and integrators to select use-case-specific firmware for the WCN6855.
> However, specifying firmware for an M.2 WLAN module in the Device Tree
> is not appropriate. Instead, this functionality will be handled within
> the ath11k driver. Therefore, the firmware-name property is now
> deprecated.
>
> Signed-off-by: Miaoqing Pan <miaoqing.pan@oss.qualcomm.com>
Is this the same patch as the one which received review/tag?
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 ath-current 1/2] wifi: ath11k: add usecase firmware handling based on device compatible
2026-01-19 14:02 ` [PATCH v3 ath-current 1/2] " Miaoqing Pan
@ 2026-01-19 15:56 ` Jonas Gorski
2026-01-20 1:31 ` Miaoqing Pan
0 siblings, 1 reply; 7+ messages in thread
From: Jonas Gorski @ 2026-01-19 15:56 UTC (permalink / raw)
To: Miaoqing Pan
Cc: jjohnson, johannes, robh, krzk+dt, conor+dt, ath11k,
linux-wireless, linux-kernel, devicetree, krzk
Hi,
On Mon, Jan 19, 2026 at 3:04 PM Miaoqing Pan
<miaoqing.pan@oss.qualcomm.com> wrote:
>
> For M.2 WLAN chips, there is no suitable DTS node to specify the
> firmware-name property. In addition, assigning firmware for the
> M.2 PCIe interface causes chips that do not use usecase specific
> firmware to fail. Therefore, abandoning the approach of specifying
> firmware in DTS. As an alternative, propose a static lookup table
> mapping device compatible to firmware names. Currently, only WCN6855
> HW2.1 requires this.
>
> However, support for the firmware-name property is retained to keep
> the ABI backwards compatible.
>
> For details on usecase specific firmware, see:
> https://lore.kernel.org/all/20250522013444.1301330-3-miaoqing.pan@oss.qualcomm.com/.
>
> Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-04685-QCAHSPSWPL_V1_V2_SILICONZ_IOE-1
>
> Fixes: edbbc647c4f3 ("wifi: ath11k: support usercase-specific firmware overrides")
> Signed-off-by: Miaoqing Pan <miaoqing.pan@oss.qualcomm.com>
> ---
> drivers/net/wireless/ath/ath11k/core.c | 36 ++++++++++++++++++++++++++
> drivers/net/wireless/ath/ath11k/core.h | 4 +++
> 2 files changed, 40 insertions(+)
>
> diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c
> index de84906d1b27..1cf7f4e601c3 100644
> --- a/drivers/net/wireless/ath/ath11k/core.c
> +++ b/drivers/net/wireless/ath/ath11k/core.c
> @@ -1044,6 +1044,42 @@ static const struct dmi_system_id ath11k_pm_quirk_table[] = {
> {}
> };
>
> +static const struct __ath11k_core_usecase_firmware_table {
> + u32 hw_rev;
> + const char *compatible;
> + const char *firmware_name;
> +} ath11k_core_usecase_firmware_table[] = {
> + { ATH11K_HW_WCN6855_HW21, "qcom,lemans-evk", "nfa765"},
> + { ATH11K_HW_WCN6855_HW21, "qcom,monaco-evk", "nfa765"},
> + { ATH11K_HW_WCN6855_HW21, "qcom,hamoa-iot-evk", "nfa765"},
> + { /* Sentinel */ }
> +};
> +
> +const char *ath11k_core_get_usecase_firmware(struct ath11k_base *ab)
> +{
> + struct device_node *root __free(device_node) = of_find_node_by_path("/");
> + const struct __ath11k_core_usecase_firmware_table *entry = NULL;
> + int i, count = of_property_count_strings(root, "compatible");
> + const char *compatible = NULL;
> +
> + for (i = 0; i < count; i++) {
> + if (of_property_read_string_index(root, "compatible", i,
> + &compatible) < 0)
> + continue;
> +
> + entry = ath11k_core_usecase_firmware_table;
> + while (entry->compatible) {
> + if (ab->hw_rev == entry->hw_rev &&
> + !strcmp(entry->compatible, compatible))
You should be able to replace most of this code by using
of_machine_is_compatible(entry->compatible) instead.
> + return entry->firmware_name;
> + entry++;
> + }
> + }
> +
> + return NULL;
> +}
> +EXPORT_SYMBOL(ath11k_core_get_usecase_firmware);
> +
> void ath11k_fw_stats_pdevs_free(struct list_head *head)
> {
Best regards,
Jonas
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 ath-current 2/2] dt-bindings: net: wireless: ath11k-pci: deprecate 'firmware-name' property
2026-01-19 14:48 ` Krzysztof Kozlowski
@ 2026-01-20 1:31 ` Miaoqing Pan
0 siblings, 0 replies; 7+ messages in thread
From: Miaoqing Pan @ 2026-01-20 1:31 UTC (permalink / raw)
To: Krzysztof Kozlowski, jjohnson, johannes, robh, krzk+dt, conor+dt
Cc: ath11k, linux-wireless, linux-kernel, devicetree
On 1/19/2026 10:48 PM, Krzysztof Kozlowski wrote:
> On 19/01/2026 15:02, Miaoqing Pan wrote:
>> The firmware-name property was originally introduced to allow end-users
>> and integrators to select use-case-specific firmware for the WCN6855.
>> However, specifying firmware for an M.2 WLAN module in the Device Tree
>> is not appropriate. Instead, this functionality will be handled within
>> the ath11k driver. Therefore, the firmware-name property is now
>> deprecated.
>>
>> Signed-off-by: Miaoqing Pan <miaoqing.pan@oss.qualcomm.com>
>
>
> Is this the same patch as the one which received review/tag?
>
> Best regards,
> Krzysztof
Do you mean adding back the tag
‘Acked-by: Rob Herring (Arm) <robh@kernel.org>’ because the patch had no
changes when that review/tag was given?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 ath-current 1/2] wifi: ath11k: add usecase firmware handling based on device compatible
2026-01-19 15:56 ` Jonas Gorski
@ 2026-01-20 1:31 ` Miaoqing Pan
0 siblings, 0 replies; 7+ messages in thread
From: Miaoqing Pan @ 2026-01-20 1:31 UTC (permalink / raw)
To: Jonas Gorski
Cc: jjohnson, johannes, robh, krzk+dt, conor+dt, ath11k,
linux-wireless, linux-kernel, devicetree, krzk
On 1/19/2026 11:56 PM, Jonas Gorski wrote:
> Hi,
>
> On Mon, Jan 19, 2026 at 3:04 PM Miaoqing Pan
> <miaoqing.pan@oss.qualcomm.com> wrote:
>>
>> For M.2 WLAN chips, there is no suitable DTS node to specify the
>> firmware-name property. In addition, assigning firmware for the
>> M.2 PCIe interface causes chips that do not use usecase specific
>> firmware to fail. Therefore, abandoning the approach of specifying
>> firmware in DTS. As an alternative, propose a static lookup table
>> mapping device compatible to firmware names. Currently, only WCN6855
>> HW2.1 requires this.
>>
>> However, support for the firmware-name property is retained to keep
>> the ABI backwards compatible.
>>
>> For details on usecase specific firmware, see:
>> https://lore.kernel.org/all/20250522013444.1301330-3-miaoqing.pan@oss.qualcomm.com/.
>>
>> Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-04685-QCAHSPSWPL_V1_V2_SILICONZ_IOE-1
>>
>> Fixes: edbbc647c4f3 ("wifi: ath11k: support usercase-specific firmware overrides")
>> Signed-off-by: Miaoqing Pan <miaoqing.pan@oss.qualcomm.com>
>> ---
>> drivers/net/wireless/ath/ath11k/core.c | 36 ++++++++++++++++++++++++++
>> drivers/net/wireless/ath/ath11k/core.h | 4 +++
>> 2 files changed, 40 insertions(+)
>>
>> diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c
>> index de84906d1b27..1cf7f4e601c3 100644
>> --- a/drivers/net/wireless/ath/ath11k/core.c
>> +++ b/drivers/net/wireless/ath/ath11k/core.c
>> @@ -1044,6 +1044,42 @@ static const struct dmi_system_id ath11k_pm_quirk_table[] = {
>> {}
>> };
>>
>> +static const struct __ath11k_core_usecase_firmware_table {
>> + u32 hw_rev;
>> + const char *compatible;
>> + const char *firmware_name;
>> +} ath11k_core_usecase_firmware_table[] = {
>> + { ATH11K_HW_WCN6855_HW21, "qcom,lemans-evk", "nfa765"},
>> + { ATH11K_HW_WCN6855_HW21, "qcom,monaco-evk", "nfa765"},
>> + { ATH11K_HW_WCN6855_HW21, "qcom,hamoa-iot-evk", "nfa765"},
>> + { /* Sentinel */ }
>> +};
>> +
>> +const char *ath11k_core_get_usecase_firmware(struct ath11k_base *ab)
>> +{
>> + struct device_node *root __free(device_node) = of_find_node_by_path("/");
>> + const struct __ath11k_core_usecase_firmware_table *entry = NULL;
>> + int i, count = of_property_count_strings(root, "compatible");
>> + const char *compatible = NULL;
>> +
>> + for (i = 0; i < count; i++) {
>> + if (of_property_read_string_index(root, "compatible", i,
>> + &compatible) < 0)
>> + continue;
>> +
>> + entry = ath11k_core_usecase_firmware_table;
>> + while (entry->compatible) {
>> + if (ab->hw_rev == entry->hw_rev &&
>> + !strcmp(entry->compatible, compatible))
>
> You should be able to replace most of this code by using
> of_machine_is_compatible(entry->compatible) instead.
>
Thanks, will update.
>> + return entry->firmware_name;
>> + entry++;
>> + }
>> + }
>> +
>> + return NULL;
>> +}
>> +EXPORT_SYMBOL(ath11k_core_get_usecase_firmware);
>> +
>> void ath11k_fw_stats_pdevs_free(struct list_head *head)
>> {
>
> Best regards,
> Jonas
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-01-20 1:31 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-19 14:02 [PATCH v3 ath-current 0/2] wifi: ath11k: add usecase firmware handling based on device compatible Miaoqing Pan
2026-01-19 14:02 ` [PATCH v3 ath-current 1/2] " Miaoqing Pan
2026-01-19 15:56 ` Jonas Gorski
2026-01-20 1:31 ` Miaoqing Pan
2026-01-19 14:02 ` [PATCH v3 ath-current 2/2] dt-bindings: net: wireless: ath11k-pci: deprecate 'firmware-name' property Miaoqing Pan
2026-01-19 14:48 ` Krzysztof Kozlowski
2026-01-20 1:31 ` Miaoqing Pan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox