qualcommax: ipq50xx: remove ipq5018 and qcn6122 wifi m3 fw
authorGeorge Moussalem <george.moussalem@outlook.com>
Tue, 9 Dec 2025 11:47:06 +0000 (15:47 +0400)
committerRobert Marko <robimarko@gmail.com>
Wed, 24 Dec 2025 09:36:31 +0000 (10:36 +0100)
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@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21110
Signed-off-by: Robert Marko <robimarko@gmail.com>
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax850.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mr5500.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx5500.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-qcn6122.dtsi
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-spnmx56.dts
target/linux/qualcommax/patches-6.12/0808-remoteproc-qcom-wcss-sec-add-split-firmware-support.patch [deleted file]

index 4782101483b7ab9ba7360df7b450a368775fcfc8..a0b94bd2f79f0318b0b65d4a10e7f50b96dcc373 100644 (file)
 };
 
 &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 {
index 592fc84c5bccb2288b810e4c5df339ac555a49b6..0593c955e01e3d451d1f0c8ab453ac50d0f79fd3 100644 (file)
 };
 
 &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 {
index 77be190dc4c42490f52c8a35195f716870ef0411..07fc612b2a9fb3743a6de46887d38ec3b309ce74 100644 (file)
 };
 
 &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 {
index 2883a466f366be305b0f8013af76ef60338c8005..2dc77594c1827a367cebd5727cbb805072218aaf 100644 (file)
 };
 
 &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 {
index a59c6ceda36a04c50c67e32c0576b18774eedcd1..ceb03b00a35fccfe773140fe2f5ca979938e374d 100644 (file)
@@ -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 {
index 6ee86d60293d16f05e33941faaae1847f59f4c48..423a3f05350f3f049ae60d6d7c8728ed10ed037b 100644 (file)
 };
 
 &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 (file)
index 29644e3..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-From: George Moussalem <george.moussalem@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@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)