[openwrt/openwrt] qualcommax: ipq50xx: remove ipq5018 and qcn6122 wifi m3 fw
LEDE Commits
lede-commits at lists.infradead.org
Wed Dec 24 01:36:35 PST 2025
robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/423cda97f9e5152c6e9ad210d7a6b089d3664f28
commit 423cda97f9e5152c6e9ad210d7a6b089d3664f28
Author: George Moussalem <george.moussalem at outlook.com>
AuthorDate: Tue Dec 9 15:47:06 2025 +0400
qualcommax: ipq50xx: remove ipq5018 and qcn6122 wifi m3 fw
The current ath11k driver does not support loading m3 firmware for
IPQ5018 and QCN6122 wifi. Although m3 firmware entries are specified
in Q6 WCSS nodes, the driver actually skips loading them. Editing the
driver to force loading m3 results in Q6 crashes and non-functioning
wifi. As such, remove m3 firmware entries for all boards until there's
proper support in the ath11k driver.
Signed-off-by: George Moussalem <george.moussalem at outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21110
Signed-off-by: Robert Marko <robimarko at gmail.com>
---
.../arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts | 3 +-
.../arch/arm64/boot/dts/qcom/ipq5018-ax850.dts | 3 +-
.../arch/arm64/boot/dts/qcom/ipq5018-mr5500.dts | 3 +-
.../arch/arm64/boot/dts/qcom/ipq5018-mx5500.dts | 3 +-
.../arch/arm64/boot/dts/qcom/ipq5018-qcn6122.dtsi | 4 +-
.../arch/arm64/boot/dts/qcom/ipq5018-spnmx56.dts | 3 +-
...-qcom-wcss-sec-add-split-firmware-support.patch | 102 ---------------------
7 files changed, 6 insertions(+), 115 deletions(-)
diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts
index 4782101483..a0b94bd2f7 100644
--- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts
+++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts
@@ -572,8 +572,7 @@
};
&q6v5_wcss {
- firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
- "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
+ firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
};
&wifi {
diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax850.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax850.dts
index 592fc84c5b..0593c955e0 100644
--- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax850.dts
+++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax850.dts
@@ -399,8 +399,7 @@
};
&q6v5_wcss {
- firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
- "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
+ firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
};
&wifi {
diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mr5500.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mr5500.dts
index 77be190dc4..07fc612b2a 100644
--- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mr5500.dts
+++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mr5500.dts
@@ -321,8 +321,7 @@
};
&q6v5_wcss {
- firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
- "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
+ firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
};
&wifi {
diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx5500.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx5500.dts
index 2883a466f3..2dc77594c1 100644
--- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx5500.dts
+++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx5500.dts
@@ -168,8 +168,7 @@
};
&q6v5_wcss {
- firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
- "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
+ firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
};
&wifi {
diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-qcn6122.dtsi b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-qcn6122.dtsi
index a59c6ceda3..ceb03b00a3 100644
--- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-qcn6122.dtsi
+++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-qcn6122.dtsi
@@ -12,9 +12,7 @@
&q6v5_wcss {
compatible = "qcom,ipq5018-q6-mpd";
- firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
- "ath11k/IPQ5018/hw1.0/m3_fw.mdt",
- "ath11k/QCN6122/hw1.0/m3_fw.mdt";
+ firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
// IPQ5018
q6_wcss_pd1: pd-1 {
diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-spnmx56.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-spnmx56.dts
index 6ee86d6029..423a3f0535 100644
--- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-spnmx56.dts
+++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-spnmx56.dts
@@ -179,8 +179,7 @@
};
&q6v5_wcss {
- firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
- "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
+ firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
};
&wifi {
diff --git a/target/linux/qualcommax/patches-6.12/0808-remoteproc-qcom-wcss-sec-add-split-firmware-support.patch b/target/linux/qualcommax/patches-6.12/0808-remoteproc-qcom-wcss-sec-add-split-firmware-support.patch
deleted file mode 100644
index 29644e3fdb..0000000000
--- a/target/linux/qualcommax/patches-6.12/0808-remoteproc-qcom-wcss-sec-add-split-firmware-support.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From: George Moussalem <george.moussalem at outlook.com>
-Date: Tue, 21 Oct 2025 15:26:31 +0400
-Subject: [PATCH] remoteproc: qcom: wcss-sec: add split firmware support
-
-The driver currently expects only one firmware file to be loaded as part
-of bringing up WCSS. For IPQ5018 and QCN6122, multiple firmware files are
-required, both the q6 and m3 firmware files. As such, add support for
-loading up to 3 firmware files.
-
-Signed-off-by: George Moussalem <george.moussalem at outlook.com>
----
---- a/drivers/remoteproc/qcom_q6v5_wcss_sec.c
-+++ b/drivers/remoteproc/qcom_q6v5_wcss_sec.c
-@@ -25,6 +25,8 @@
-
- #define Q6_WAIT_TIMEOUT (5 * HZ)
-
-+#define MAX_FIRMWARE 3
-+
- struct wcss_sec {
- struct device *dev;
- struct qcom_rproc_glink glink_subdev;
-@@ -35,6 +37,7 @@ struct wcss_sec {
- void *mem_region;
- size_t mem_size;
- const struct wcss_data *desc;
-+ const char **firmware;
-
- struct mbox_client mbox_client;
- struct mbox_chan *mbox_chan;
-@@ -137,7 +140,8 @@ static int wcss_sec_load(struct rproc *r
- {
- struct wcss_sec *wcss = rproc->priv;
- struct device *dev = wcss->dev;
-- int ret;
-+ const struct firmware *fw_hdl;
-+ int i, ret;
-
- if (wcss->desc->use_tmelcom) {
- wcss->metadata = qcom_mdt_read_metadata(fw, &wcss->metadata_len,
-@@ -161,6 +165,28 @@ static int wcss_sec_load(struct rproc *r
- wcss->mem_phys, wcss->mem_size, &wcss->mem_reloc);
- if (ret)
- return ret;
-+
-+ for (i = 1; i < MAX_FIRMWARE; i++) {
-+ if (!wcss->firmware[i])
-+ continue;
-+
-+ ret = request_firmware(&fw_hdl, wcss->firmware[i], dev);
-+
-+ if (ret)
-+ continue;
-+
-+ ret = qcom_mdt_load_no_init(dev, fw_hdl, wcss->firmware[i], 0,
-+ wcss->mem_region, wcss->mem_phys,
-+ wcss->mem_size, &wcss->mem_reloc);
-+
-+ release_firmware(fw_hdl);
-+
-+ if (ret) {
-+ dev_err(dev, "error %d loading firmware %s\n",
-+ ret, wcss->firmware[i]);
-+ return ret;
-+ }
-+ }
- }
-
- qcom_pil_info_store("wcss", wcss->mem_phys, wcss->mem_size);
-@@ -291,17 +317,20 @@ static int wcss_sec_probe(struct platfor
- struct wcss_sec *wcss;
- struct clk *sleep_clk;
- struct clk *int_clk;
-- const char *fw_name = NULL;
-+ const char **firmware = NULL;
- const struct wcss_data *desc = of_device_get_match_data(&pdev->dev);
- int ret;
-
-- ret = of_property_read_string(pdev->dev.of_node, "firmware-name",
-- &fw_name);
-+ firmware = devm_kcalloc(&pdev->dev, MAX_FIRMWARE,
-+ sizeof(*firmware), GFP_KERNEL);
-+
-+ ret = of_property_read_string_array(pdev->dev.of_node, "firmware-name",
-+ firmware, MAX_FIRMWARE);
- if (ret < 0)
- return ret;
-
- rproc = devm_rproc_alloc(&pdev->dev, desc->ss_name, &wcss_sec_ops,
-- fw_name, sizeof(*wcss));
-+ firmware[0], sizeof(*wcss));
- if (!rproc) {
- dev_err(&pdev->dev, "failed to allocate rproc\n");
- return -ENOMEM;
-@@ -310,6 +339,7 @@ static int wcss_sec_probe(struct platfor
- wcss = rproc->priv;
- wcss->dev = &pdev->dev;
- wcss->desc = desc;
-+ wcss->firmware = firmware;
-
- ret = wcss_sec_alloc_memory_region(wcss);
- if (ret)
More information about the lede-commits
mailing list