qualcommax: ipq50xx: split firmware variants and refactor QCN6122 support
authorGeorge Moussalem <[email protected]>
Thu, 23 Oct 2025 11:16:21 +0000 (15:16 +0400)
committerRobert Marko <[email protected]>
Fri, 28 Nov 2025 09:27:53 +0000 (10:27 +0100)
IPQ5018 based boards come in multiple wireless architectures.
The SOC itself provides 2.4G wifi while 5G wifi is added by either an
IPQ5018-specific QCN6122 (2x2) solution or by the more generally
available PCIe-based QCN9074 (4x4) wifi chip.

On IPQ5018/QCN6122-based boards, both QCN6122 and IPQ5018 wifi is
initialized by IPQ5018 firmware which comes in different versions:
- IPQ5018: firmware files to initialize WCSS and the internal wifi chip
- IPQ5018/QCN6122: above + additional firmware segments to initialize
the QCN6122 chip incl. (de-)assertion of resets and clocks enablement

OpenWrt currently packages the combined IPQ5018/QCN6122 firmware for
both architectures. As such, let's switch to using IPQ5018-only firmware
for boards not packed with QCN6122 chip(s) and keep using the shared
firmware for devices that do have QCN6122(s) chips.
This helps us move to using upstreamed IPQ5018 firmware while using the
legacy repo for IPQ5018/QCN6122 firmware and rule out any initialization
conflicts/issues caused by loading QCN6122 on IPQ5018-only boards.

While at it, default to the secure WCSS remoteproc driver sent upstream
for review, move QCN6122 wifi nodes to a separate dtsi, override the Q6
node to load the multi-PD-based architecture remoteproc driver for
needed only by IPQ5018/QCN6122 designs, reference said dtsi in
boards packed with QCN6122 wifi chip(s), and add provision for migrating
the radio path as the wifi nodes now adhere to linux device tree naming
conventions.

Signed-off-by: George Moussalem <[email protected]>
Link: https://github.com/openwrt/openwrt/pull/20928
Signed-off-by: Robert Marko <[email protected]>
22 files changed:
package/firmware/ath11k-firmware/Makefile
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax830.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax850.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-gl-b3000.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mr5500.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx-base.dtsi
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx2000.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx5500.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-pz-l8.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-qcn6122.dtsi [new file with mode: 0644]
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-spnmx56.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wn-dax3000gr.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wrc-x3000gs2.dts
target/linux/qualcommax/image/ipq50xx.mk
target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/ieee80211/05-wifi-migrate
target/linux/qualcommax/ipq50xx/target.mk
target/linux/qualcommax/patches-6.12/0189-arm64-dts-qcom-ipq5018-add-nodes-to-bringup-q6.patch [new file with mode: 0644]
target/linux/qualcommax/patches-6.12/0306-arm64-dts-qcom-ipq5018-Add-PWM-node.patch
target/linux/qualcommax/patches-6.12/0715-arm64-dts-qcom-ipq5018-add-vendor-compatible-to-mdio-node.patch
target/linux/qualcommax/patches-6.12/0816-arm64-dts-qcom-ipq5018-add-wifi-support.patch

index cfc364215f35e98936b5a93aabd6415cd7e43473..0ef80b3719519897bcdc35a51cc9d25612e2c47a 100644 (file)
@@ -52,6 +52,11 @@ $(Package/ath11k-firmware-default)
   TITLE:=IPQ5018 ath11k firmware
 endef
 
+define Package/ath11k-firmware-ipq5018-qcn6122
+$(Package/ath11k-firmware-default)
+  TITLE:=IPQ5018/QCN6122 ath11k firmware
+endef
+
 define Package/ath11k-firmware-ipq6018
 $(Package/ath11k-firmware-default)
   TITLE:=IPQ6018 ath11k firmware
@@ -62,12 +67,6 @@ $(Package/ath11k-firmware-default)
   TITLE:=IPQ8074 ath11k firmware
 endef
 
-define Package/ath11k-firmware-qcn6122
-$(Package/ath11k-firmware-default)
-  TITLE:=QCN6122 ath11k firmware
-  DEPENDS:=ath11k-firmware-ipq5018
-endef
-
 define Package/ath11k-firmware-qcn9074
 $(Package/ath11k-firmware-default)
   TITLE:=QCN9074 ath11k firmware
@@ -93,10 +92,21 @@ define Build/Compile
 endef
 
 define Package/ath11k-firmware-ipq5018/install
+       $(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ5018/hw1.0
+       $(INSTALL_DATA) \
+               $(PKG_BUILD_DIR)/IPQ5018/hw1.0/2.6.0.1/WLAN.HK.2.6.0.1-01291-QCAHKSWPL_SILICONZ-1/* \
+               $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/
+endef
+
+define Package/ath11k-firmware-ipq5018-qcn6122/install
        $(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ5018/hw1.0
        $(INSTALL_DATA) \
                $(BUILD_DIR)/$(ATH11K_LEGACY_FW_SUBDIR)/ath11k-firmware/IPQ5018_QCN6122_QCN6122/hw1.0/2.7.0.1/WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1/*.* \
                $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/
+       $(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN6122/hw1.0
+       $(INSTALL_DATA) \
+               $(BUILD_DIR)/$(ATH11K_LEGACY_FW_SUBDIR)/ath11k-firmware/IPQ5018_QCN6122_QCN6122/hw1.0/2.7.0.1/WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1/qcn6122/*.* \
+               $(1)/lib/firmware/ath11k/QCN6122/hw1.0/
 endef
 
 define Package/ath11k-firmware-ipq6018/install
@@ -113,13 +123,6 @@ define Package/ath11k-firmware-ipq8074/install
                $(1)/lib/firmware/IPQ8074/
 endef
 
-define Package/ath11k-firmware-qcn6122/install
-       $(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN6122/hw1.0
-       $(INSTALL_DATA) \
-               $(BUILD_DIR)/$(ATH11K_LEGACY_FW_SUBDIR)/ath11k-firmware/IPQ5018_QCN6122_QCN6122/hw1.0/2.7.0.1/WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1/qcn6122/* \
-               $(1)/lib/firmware/ath11k/QCN6122/hw1.0/
-endef
-
 define Package/ath11k-firmware-qcn9074/install
        $(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN9074/hw1.0
        $(INSTALL_DATA) \
@@ -130,7 +133,7 @@ define Package/ath11k-firmware-qcn9074/install
 endef
 
 $(eval $(call BuildPackage,ath11k-firmware-ipq5018))
+$(eval $(call BuildPackage,ath11k-firmware-ipq5018-qcn6122))
 $(eval $(call BuildPackage,ath11k-firmware-ipq6018))
 $(eval $(call BuildPackage,ath11k-firmware-ipq8074))
-$(eval $(call BuildPackage,ath11k-firmware-qcn6122))
 $(eval $(call BuildPackage,ath11k-firmware-qcn9074))
index f43da507118a1ef4f21361f96b3b822c2fd2dd2b..bfe9589ecd0c5f20c4876bede6b59eecb7f10e6c 100644 (file)
                        gpios = <&tlmm 28 GPIO_ACTIVE_HIGH>;
                };
        };
-
-       reserved-memory {
-               q6_mem_regions: q6_mem_regions@4b000000 {
-                       no-map;
-                       reg = <0x0 0x4b000000 0x0 0x3000000>;
-               };
-       };
 };
 
 &sleep_clk {
 };
 
 &q6v5_wcss {
-       status = "okay";
-
-       memory-region = <&q6_mem_regions>;
        firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
                        "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
-
-       // IPQ5018
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 0>,
-                       <&wcss_smp2p_in 9 0>,
-                       <&wcss_smp2p_in 12 0>,
-                       <&wcss_smp2p_in 11 0>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
 };
 
-&wifi0 {
+&wifi {
        status = "okay";
 
-       qcom,rproc = <&q6_wcss_pd1>;
+       qcom,rproc = <&q6v5_wcss>;
        qcom,ath11k-calibration-variant = "Xiaomi-AX6000";
        qcom,ath11k-fw-memory-mode = <1>;
-       qcom,bdf-addr = <0x4c400000>;
 };
index 4043597981286bf8c8b45764a05471ca6e6e9ffb..8f9f027fd31fe7ea1c5093c9a8beb600e2ca7e31 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "ipq5018.dtsi"
 #include "ipq5018-ess.dtsi"
+#include "ipq5018-qcn6122.dtsi"
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
                };
        };
 
-       reserved-memory {
-               q6_mem_regions: q6_mem_regions@4b000000 {
-                       no-map;
-                       reg = <0x0 0x4b000000 0x0 0x3000000>;
-               };
-       };
-
        gpio-watchdog {
                compatible = "linux,wdt-gpio";
                gpios = <&tlmm 27 GPIO_ACTIVE_LOW>;
        };
 };
 
-&q6v5_wcss {
+&wifi {
        status = "okay";
 
-       memory-region = <&q6_mem_regions>;
-       firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
-                       "ath11k/IPQ5018/hw1.0/m3_fw.mdt",
-                       "ath11k/QCN6122/hw1.0/m3_fw.mdt";
-
-       // IPQ5018
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 9 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 12 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 11 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
-
-       // QCN6122 5G
-       q6_wcss_pd3: pd-3 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 24 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 25 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 28 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 27 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 24>,
-                       <&wcss_smp2p_out 25>,
-                       <&wcss_smp2p_out 26>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
-};
-
-&wifi0 {
-       // IPQ5018
-       status = "okay";
        qcom,rproc = <&q6_wcss_pd1>;
        qcom,ath11k-calibration-variant = "Yuncore-AX830";
        qcom,ath11k-fw-memory-mode = <1>;
 };
 
 &wifi1 {
-       // QCN6122 5G
        status = "okay";
+
        qcom,rproc = <&q6_wcss_pd3>;
        qcom,userpd-subsys-name = "q6v5_wcss_userpd3";
        qcom,ath11k-calibration-variant = "Yuncore-AX830";
index 30945e63321550603a7cc71dfdda16bb834e4b52..f81e5171d0dd6c697d1326cd34b7ea42d5167e54 100644 (file)
                };
        };
 
-       reserved-memory {
-               q6_mem_regions: q6_mem_regions@4b000000 {
-                       no-map;
-                       reg = <0x0 0x4b000000 0x0 0x3000000>;
-               };
-       };
-
        gpio-watchdog {
                compatible = "linux,wdt-gpio";
                gpios = <&tlmm 27 GPIO_ACTIVE_LOW>;
        status = "okay";
 };
 
-&q6v5_wcss {
-       status = "okay";
-
-       memory-region = <&q6_mem_regions>;
-       firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
-                       "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
-
-       // IPQ5018
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 9 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 12 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 11 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
-};
-
-&wifi0 {
-       // IPQ5018
-       status = "okay";
-       qcom,rproc = <&q6_wcss_pd1>;
-       qcom,ath11k-calibration-variant = "Yuncore-AX850";
-       qcom,ath11k-fw-memory-mode = <1>;
-       qcom,bdf-addr = <0x4c400000>;
-};
-
 &pcie0_phy {
        status = "okay";
 };
                };
        };
 };
+
+&q6v5_wcss {
+       firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
+                       "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
+};
+
+&wifi {
+       status = "okay";
+
+       qcom,rproc = <&q6v5_wcss>;
+       qcom,ath11k-calibration-variant = "Yuncore-AX850";
+       qcom,ath11k-fw-memory-mode = <1>;
+};
index cd4f270632b241ecb018325e5d65b49f5edbebd1..4094867a11b0d70d9736be319b757b34db5986f7 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "ipq5018.dtsi"
 #include "ipq5018-ess.dtsi"
+#include "ipq5018-qcn6122.dtsi"
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
                        gpios = <&tlmm 23 GPIO_ACTIVE_HIGH>;
                };
        };
-
-       reserved-memory {
-               q6_mem_regions: q6_mem_regions@4b000000 {
-                       no-map;
-                       reg = <0x0 0x4b000000 0x0 0x3000000>;
-               };
-       };
 };
 
 &switch {
 };
 
 &q6v5_wcss {
-       status = "okay";
-
-       memory-region = <&q6_mem_regions>;
-       firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
-                       "ath11k/IPQ5018/hw1.0/m3_fw.mdt",
-                       "ath11k/QCN6122/hw1.0/m3_fw.mdt";
-
        /* B3000 currently doesn't support passing bootargs */
        /*boot-args = <                                 */
                        /*       type:  0x1  PCIE0      */
                        /*      PD id:  3               */
                        /* reset GPIO:  15              */
                        /*   reserved:  0 0>;           */
-
-       // IPQ5018
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               // qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>;
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 9 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 12 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 11 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
-
-       // QCN6102 5G
-       q6_wcss_pd3: pd-3 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 24 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 25 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 28 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 27 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 24>,
-                       <&wcss_smp2p_out 25>,
-                       <&wcss_smp2p_out 26>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
 };
 
-&wifi0 {
-       // IPQ5018
+&wifi {
        status = "okay";
 
        qcom,rproc = <&q6_wcss_pd1>;
 };
 
 &wifi1 {
-       // QCN6102 5G
        status = "okay";
 
        qcom,rproc = <&q6_wcss_pd3>;
index e86e296be4bf161d9d815959674e95d9e75ceda5..77be190dc4c42490f52c8a35195f716870ef0411 100644 (file)
 };
 
 &q6v5_wcss {
-       status = "okay";
-
-       memory-region = <&q6_mem_regions>;
        firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
                        "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
-
-       // IPQ5018
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 0>,
-                       <&wcss_smp2p_in 9 0>,
-                       <&wcss_smp2p_in 12 0>,
-                       <&wcss_smp2p_in 11 0>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
 };
 
-&wifi0 {
-       // IPQ5018
-       qcom,rproc = <&q6_wcss_pd1>;
+&wifi {
+       status = "okay";
+
+       qcom,rproc = <&q6v5_wcss>;
        qcom,ath11k-calibration-variant = "Linksys-MR5500";
        qcom,ath11k-fw-memory-mode = <1>;
-       qcom,bdf-addr = <0x4c400000>;
-
-       status = "okay";
 };
index add929f2176a76b881f8f761c2f17959a116e03e..6644263545d88057231ca2abcf1bd6f098f457b5 100644 (file)
                        max-brightness = <255>;
                };
        };
-
-       reserved-memory {
-               q6_mem_regions: q6_mem_regions@4b000000 {
-                       no-map;
-                       reg = <0x0 0x4b000000 0x0 0x3000000>;
-               };
-       };
 };
 
 &sleep_clk {
index 5eaa84e3e640de0ae60bf91569e9a81a981ccd5e..f6b58d2cbc0dde61cda73e630c94ca4996163266 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "ipq5018.dtsi"
 #include "ipq5018-mx-base.dtsi"
+#include "ipq5018-qcn6122.dtsi"
 
 / {
        model = "Linksys MX2000";
 };
 
 &q6v5_wcss {
-       status = "okay";
-
-       memory-region = <&q6_mem_regions>;
-       firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
-                       "ath11k/IPQ5018/hw1.0/m3_fw.mdt",
-                       "ath11k/QCN6122/hw1.0/m3_fw.mdt";
-
        /* The QCN6102 radio should map to UPD ID 2. Without       */
        /* bootargs, the firmware will expect it to be on UPD ID 3 */
        boot-args = <
                        /*     UPD ID:  */      2
                        /* reset GPIO:  */      15
                        /*   reserved:  */      0 0>;
-
-       // IPQ5018
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               // qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>;
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 9 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 12 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 11 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-               status = "okay";
-       };
-
-       // QCN6102 5G
-       q6_wcss_pd2: pd-2 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 16 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 17 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 20 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 19 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 16>,
-                       <&wcss_smp2p_out 17>,
-                       <&wcss_smp2p_out 18>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-               status = "okay";
-       };
 };
 
-&wifi0 {
-       // IPQ5018
+&wifi {
+       status = "okay";
+
        qcom,rproc = <&q6_wcss_pd1>;
        qcom,ath11k-calibration-variant = "Linksys-MX2000";
        qcom,ath11k-fw-memory-mode = <1>;
        qcom,bdf-addr = <0x4c400000>;
-
-       status = "okay";
 };
 
 &wifi1 {
-       // QCN6102 5G
+       status = "okay";
+
        qcom,rproc = <&q6_wcss_pd2>;
        qcom,userpd-subsys-name = "q6v5_wcss_userpd2";
        qcom,ath11k-calibration-variant = "Linksys-MX2000";
        qcom,ath11k-fw-memory-mode = <1>;
        qcom,bdf-addr = <0x4d100000>;
        qcom,m3-dump-addr = <0x4df00000>;
-
-       status = "okay";
 };
index 535f0ec10e4be028a80b92eddcf26188816ff0bb..2883a466f366be305b0f8013af76ef60338c8005 100644 (file)
 };
 
 &q6v5_wcss {
-       status = "okay";
-
-       memory-region = <&q6_mem_regions>;
        firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
                        "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
-
-       // IPQ5018
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 0>,
-                       <&wcss_smp2p_in 9 0>,
-                       <&wcss_smp2p_in 12 0>,
-                       <&wcss_smp2p_in 11 0>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-               status = "okay";
-       };
 };
 
-&wifi0 {
-       // IPQ5018
-       qcom,rproc = <&q6_wcss_pd1>;
+&wifi {
+       qcom,rproc = <&q6v5_wcss>;
        qcom,ath11k-calibration-variant = "Linksys-MX5500";
        qcom,ath11k-fw-memory-mode = <1>;
-       qcom,bdf-addr = <0x4c400000>;
 
        status = "okay";
 };
index 4857e3d4f9640859675dd75aeccf1f54d3218d09..a90c6ca8b04b607c771afc7d5b17d49a8bb427f4 100644 (file)
@@ -4,6 +4,7 @@
 
 #include "ipq5018.dtsi"
 #include "ipq5018-ess.dtsi"
+#include "ipq5018-qcn6122.dtsi"
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
                        function = LED_FUNCTION_LAN;
                };
        };
-
-       reserved-memory {
-               q6_mem_regions: q6_mem_regions@4b000000 {
-                       no-map;
-                       reg = <0x0 0x4b000000 0x0 0x3000000>;
-                       status = "disabled";
-               };
-       };
 };
 
 &sleep_clk {
  */
 &q6v5_wcss {
        status = "disabled";
-
-       memory-region = <&q6_mem_regions>;
-       firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
-                       "ath11k/IPQ5018/hw1.0/m3_fw.mdt",
-                       "ath11k/QCN6122/hw1.0/m3_fw.mdt";
-
-       /* The QCN6102 radio should map to UPD ID 2. Without       */
-       /* bootargs, the firmware will expect it to be on UPD ID 3 */
-       boot-args = <0x2 4 2 27 0 0>; /* pcie:2, len:4, updid:2, reset:gpio27 */
-
-       // IPQ5018
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 9 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 12 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 11 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-
-               status = "disabled";
-       };
-
-       // QCN6102 5G
-       q6_wcss_pd2: pd-2 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 16 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 17 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 20 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 19 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 16>,
-                       <&wcss_smp2p_out 17>,
-                       <&wcss_smp2p_out 18>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-
-               status = "disabled";
-       };
 };
 
-&wifi0 {
+&wifi {
        // IPQ5018
        qcom,rproc = <&q6_wcss_pd1>;
-       qcom,userpd-subsys-name = "q6v5_wcss_userpd1";
        qcom,ath11k-calibration-variant = "CMCC-PZ-L8";
        qcom,ath11k-fw-memory-mode = <1>;
        qcom,bdf-addr = <0x4c400000>;
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
new file mode 100644 (file)
index 0000000..a59c6ce
--- /dev/null
@@ -0,0 +1,135 @@
+// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
+/*
+ * IPQ5018 SoC device tree source extension for QCN6122 wifi
+ *
+ * Copyright (c) 2023-2025 The Linux Foundation. All rights reserved.
+ */
+
+&q6_region {
+       reg = <0x0 0x4b000000 0x0 0x3000000>;
+};
+
+&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";
+
+       // IPQ5018
+       q6_wcss_pd1: pd-1 {
+               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
+
+               interrupts-extended =
+                       <&wcss_smp2p_in 8 IRQ_TYPE_NONE>,
+                       <&wcss_smp2p_in 9 IRQ_TYPE_NONE>,
+                       <&wcss_smp2p_in 12 IRQ_TYPE_NONE>,
+                       <&wcss_smp2p_in 11 IRQ_TYPE_NONE>;
+               interrupt-names =
+                       "fatal",
+                       "ready",
+                       "spawn-ack",
+                       "stop-ack";
+
+               qcom,smem-states =
+                       <&wcss_smp2p_out 8>,
+                       <&wcss_smp2p_out 9>,
+                       <&wcss_smp2p_out 10>;
+               qcom,smem-state-names =
+                       "shutdown",
+                       "stop",
+                       "spawn";
+       };
+
+       // QCN6122
+       q6_wcss_pd2: pd-2 {
+               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
+
+               interrupts-extended =
+                       <&wcss_smp2p_in 16 IRQ_TYPE_NONE>,
+                       <&wcss_smp2p_in 17 IRQ_TYPE_NONE>,
+                       <&wcss_smp2p_in 20 IRQ_TYPE_NONE>,
+                       <&wcss_smp2p_in 19 IRQ_TYPE_NONE>;
+               interrupt-names =
+                       "fatal",
+                       "ready",
+                       "spawn-ack",
+                       "stop-ack";
+
+               qcom,smem-states =
+                       <&wcss_smp2p_out 16>,
+                       <&wcss_smp2p_out 17>,
+                       <&wcss_smp2p_out 18>;
+               qcom,smem-state-names =
+                       "shutdown",
+                       "stop",
+                       "spawn";
+       };
+
+       // QCN6122
+       q6_wcss_pd3: pd-3 {
+               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
+
+               interrupts-extended =
+                       <&wcss_smp2p_in 24 IRQ_TYPE_NONE>,
+                       <&wcss_smp2p_in 25 IRQ_TYPE_NONE>,
+                       <&wcss_smp2p_in 28 IRQ_TYPE_NONE>,
+                       <&wcss_smp2p_in 27 IRQ_TYPE_NONE>;
+               interrupt-names =
+                       "fatal",
+                       "ready",
+                       "spawn-ack",
+                       "stop-ack";
+
+               qcom,smem-states =
+                       <&wcss_smp2p_out 24>,
+                       <&wcss_smp2p_out 25>,
+                       <&wcss_smp2p_out 26>;
+               qcom,smem-state-names =
+                       "shutdown",
+                       "stop",
+                       "spawn";
+       };
+};
+
+&soc {
+       //QCN6122: 1st instance
+       wifi1: wifi@b00a040 {
+               reg = <0x0b00a040 0x0>;
+               compatible = "qcom,qcn6122-wifi";
+               interrupts = <GIC_SPI 416 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 417 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 418 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 419 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 420 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 421 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 422 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 423 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 424 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 425 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 426 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 427 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 428 IRQ_TYPE_EDGE_RISING>;
+               status = "disabled";
+       };
+
+       //QCN6122: 2nd instance
+       wifi2: wifi@b00b040 {
+               reg = <0x0b00b040 0x0>;
+               compatible = "qcom,qcn6122-wifi";
+               interrupts = <GIC_SPI 448 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 449 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 450 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 451 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 452 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 453 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 454 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 455 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 456 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 457 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 458 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 459 IRQ_TYPE_EDGE_RISING>,
+                            <GIC_SPI 460 IRQ_TYPE_EDGE_RISING>;
+               status = "disabled";
+       };
+};
index 7984f3f57a7e54ba1b121e3e03b0cd438367b44e..6ee86d60293d16f05e33941faaae1847f59f4c48 100644 (file)
 };
 
 &q6v5_wcss {
-       status = "okay";
-
-       memory-region = <&q6_mem_regions>;
        firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
                        "ath11k/IPQ5018/hw1.0/m3_fw.mdt";
-
-       // IPQ5018
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 0>,
-                       <&wcss_smp2p_in 9 0>,
-                       <&wcss_smp2p_in 12 0>,
-                       <&wcss_smp2p_in 11 0>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
 };
 
-&wifi0 {
-       // IPQ5018
-       qcom,rproc = <&q6_wcss_pd1>;
+&wifi {
+       status = "okay";
+
+       qcom,rproc = <&q6v5_wcss>;
        qcom,ath11k-calibration-variant = "Linksys-SPNMX56";
        qcom,ath11k-fw-memory-mode = <1>;
-       qcom,bdf-addr = <0x4c400000>;
-
-       status = "okay";
 };
index a4c8201b8fd6c3f82e8cee83b2e74810db865947..de6d4153143092d4f8e252f73142ece426637311 100644 (file)
@@ -4,6 +4,7 @@
 
 #include "ipq5018.dtsi"
 #include "ipq5018-ess.dtsi"
+#include "ipq5018-qcn6122.dtsi"
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
                        function = LED_FUNCTION_WAN;
                };
        };
-
-       reserved-memory {
-               q6_mem_regions: q6_mem_regions@4b000000 {
-                       no-map;
-                       reg = <0x0 0x4b000000 0x0 0x3000000>;
-               };
-       };
 };
 
 &sleep_clk {
 };
 
 &q6v5_wcss {
-       status = "okay";
-
-       memory-region = <&q6_mem_regions>;
-       firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
-                       "ath11k/IPQ5018/hw1.0/m3_fw.mdt",
-                       "ath11k/QCN6122/hw1.0/m3_fw.mdt";
-
        boot-args = <0x2 4 2 18 0 0>; /* pcie:1, len:4, updid:2, reset:gpio18 */
-
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 9 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 12 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 11 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
-
-       q6_wcss_pd2: pd-2 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 16 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 17 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 20 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 19 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 16>,
-                       <&wcss_smp2p_out 17>,
-                       <&wcss_smp2p_out 18>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
 };
 
-&wifi0 {
+&wifi {
        status = "okay";
 
        qcom,rproc = <&q6_wcss_pd1>;
index 0c358f16676d77184f50964bd36d5c309ef04ee8..1b6018dbef8591f1270bf3f793252e17a0d1dee2 100644 (file)
@@ -4,6 +4,7 @@
 
 #include "ipq5018.dtsi"
 #include "ipq5018-ess.dtsi"
+#include "ipq5018-qcn6122.dtsi"
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
                        function = LED_FUNCTION_WAN;
                };
        };
-
-       reserved-memory {
-               q6_mem_regions: q6_mem_regions@4b000000 {
-                       no-map;
-                       reg = <0x0 0x4b000000 0x0 0x3000000>;
-                       status = "disabled";
-               };
-       };
 };
 
 &sleep_clk {
 &q6v5_wcss {
        status = "disabled";
 
-       memory-region = <&q6_mem_regions>;
-       firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
-                       "ath11k/IPQ5018/hw1.0/m3_fw.mdt",
-                       "ath11k/QCN6122/hw1.0/m3_fw.mdt";
-
        boot-args = <0x2 4 2 18 0 0>; /* pcie:1, len:4, updid:2, reset:gpio18 */
-
-       q6_wcss_pd1: pd-1 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               resets =
-                       <&gcc GCC_WCSSAON_RESET>,
-                       <&gcc GCC_WCSS_BCR>,
-                       <&gcc GCC_CE_BCR>;
-               reset-names =
-                       "wcss_aon_reset",
-                       "wcss_reset",
-                       "ce_reset";
-
-               clocks =
-                       <&gcc GCC_WCSS_AHB_S_CLK>,
-                       <&gcc GCC_WCSS_ACMT_CLK>,
-                       <&gcc GCC_WCSS_AXI_M_CLK>;
-               clock-names =
-                       "gcc_wcss_ahb_s_clk",
-                       "gcc_wcss_acmt_clk",
-                       "gcc_wcss_axi_m_clk";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 8 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 9 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 12 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 11 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 8>,
-                       <&wcss_smp2p_out 9>,
-                       <&wcss_smp2p_out 10>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
-
-       q6_wcss_pd2: pd-2 {
-               firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-
-               interrupts-extended =
-                       <&wcss_smp2p_in 16 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 17 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 20 IRQ_TYPE_NONE>,
-                       <&wcss_smp2p_in 19 IRQ_TYPE_NONE>;
-               interrupt-names =
-                       "fatal",
-                       "ready",
-                       "spawn-ack",
-                       "stop-ack";
-
-               qcom,smem-states =
-                       <&wcss_smp2p_out 16>,
-                       <&wcss_smp2p_out 17>,
-                       <&wcss_smp2p_out 18>;
-               qcom,smem-state-names =
-                       "shutdown",
-                       "stop",
-                       "spawn";
-       };
 };
 
-&wifi0 {
+&wifi {
+       status = "disabled";
+
        qcom,rproc = <&q6_wcss_pd1>;
        qcom,userpd-subsys-name = "q6v5_wcss_userpd1";
        qcom,ath11k-calibration-variant = "ELECOM-WRC-X3000GS2";
        qcom,bdf-addr = <0x4c400000>;
 
        ieee80211-freq-limit = <2400000 2483000>;
-
-       status = "disabled";
 };
 
 &wifi1 {
+       status = "disabled";
+
        qcom,rproc = <&q6_wcss_pd2>;
        qcom,userpd-subsys-name = "q6v5_wcss_userpd2";
        qcom,ath11k-calibration-variant = "ELECOM-WRC-X3000GS2";
        qcom,m3-dump-addr = <0x4df00000>;
 
        ieee80211-freq-limit = <5150000 5730000>;
-
-       status = "disabled";
 };
index 65d134c4a88ff274874cadf9c9dd6050d7cf2bd8..6a6a50d6f7b0c1ced2ba4aa3ac5f0ae7101a86ca 100644 (file)
@@ -46,7 +46,8 @@ define Device/elecom_wrc-x3000gs2
        IMAGES += factory.bin
        IMAGE/factory.bin := append-ubi | qsdk-ipq-factory-nand | \
                mstc-header 4.04(XZF.0)b90 | elecom-product-header WRC-X3000GS2
-       DEVICE_PACKAGES := ath11k-firmware-qcn6122 ipq-wifi-elecom_wrc-x3000gs2
+       DEVICE_PACKAGES := ath11k-firmware-ipq5018-qcn6122 \
+               ipq-wifi-elecom_wrc-x3000gs2
 endef
 TARGET_DEVICES += elecom_wrc-x3000gs2
 
@@ -65,7 +66,7 @@ define Device/glinet_gl-b3000
        IMAGES := factory.img sysupgrade.bin
        IMAGE/factory.img := append-ubi | gl-qsdk-factory | append-metadata
        DEVICE_PACKAGES := \
-               ath11k-firmware-qcn6122 \
+               ath11k-firmware-ipq5018-qcn6122 \
                ipq-wifi-glinet_gl-b3000 \
                dumpimage
 endef
@@ -85,7 +86,8 @@ define Device/iodata_wn-dax3000gr
        IMAGES += factory.bin
        IMAGE/factory.bin := append-ubi | qsdk-ipq-factory-nand | \
                mstc-header 4.04(XZH.1)b90 0x480
-       DEVICE_PACKAGES := ath11k-firmware-qcn6122 ipq-wifi-iodata_wn-dax3000gr
+       DEVICE_PACKAGES := ath11k-firmware-ipq5018-qcn6122 \
+               ipq-wifi-iodata_wn-dax3000gr
 endef
 TARGET_DEVICES += iodata_wn-dax3000gr
 
@@ -106,7 +108,8 @@ define Device/linksys_mr5500
        $(call Device/linksys_ipq50xx_mx_base)
        DEVICE_MODEL := MR5500
        DEVICE_DTS_CONFIG := [email protected]
-       DEVICE_PACKAGES := kmod-ath11k-pci \
+       DEVICE_PACKAGES := ath11k-firmware-ipq5018 \
+               kmod-ath11k-pci \
                ath11k-firmware-qcn9074 \
                ipq-wifi-linksys_mr5500 \
                kmod-usb-ledtrig-usbport
@@ -117,7 +120,7 @@ define Device/linksys_mx2000
        $(call Device/linksys_ipq50xx_mx_base)
        DEVICE_MODEL := MX2000
        DEVICE_DTS_CONFIG := [email protected]
-       DEVICE_PACKAGES := ath11k-firmware-qcn6122 \
+       DEVICE_PACKAGES := ath11k-firmware-ipq5018-qcn6122 \
                ipq-wifi-linksys_mx2000
 endef
 TARGET_DEVICES += linksys_mx2000
@@ -126,7 +129,8 @@ define Device/linksys_mx5500
        $(call Device/linksys_ipq50xx_mx_base)
        DEVICE_MODEL := MX5500
        DEVICE_DTS_CONFIG := [email protected]
-       DEVICE_PACKAGES := kmod-ath11k-pci \
+       DEVICE_PACKAGES := ath11k-firmware-ipq5018 \
+               kmod-ath11k-pci \
                ath11k-firmware-qcn9074 \
                ipq-wifi-linksys_mx5500
 endef
@@ -136,7 +140,8 @@ define Device/linksys_spnmx56
        $(call Device/linksys_ipq50xx_mx_base)
        DEVICE_MODEL := SPNMX56
        DEVICE_DTS_CONFIG := [email protected]
-       DEVICE_PACKAGES := kmod-ath11k-pci \
+       DEVICE_PACKAGES := ath11k-firmware-ipq5018 \
+               kmod-ath11k-pci \
                ath11k-firmware-qcn9074 \
                ipq-wifi-linksys_spnmx56
 endef
@@ -153,7 +158,8 @@ define Device/xiaomi_ax6000
        SOC := ipq5018
        KERNEL_SIZE := 36864k
        NAND_SIZE := 128m
-       DEVICE_PACKAGES := kmod-ath11k-pci \
+       DEVICE_PACKAGES := ath11k-firmware-ipq5018 \
+               kmod-ath11k-pci \
                ath11k-firmware-qcn9074 \
                kmod-ath10k-ct-smallbuffers \
                ath10k-firmware-qca9887-ct \
@@ -174,8 +180,7 @@ define Device/yuncore_ax830
        PAGESIZE := 2048
        SOC := ipq5018
        DEVICE_DTS_CONFIG := [email protected]
-       DEVICE_PACKAGES := ath11k-firmware-ipq5018 \
-               ath11k-firmware-qcn6122 \
+       DEVICE_PACKAGES := ath11k-firmware-ipq5018-qcn6122 \
                ipq-wifi-yuncore_ax830
 endef
 TARGET_DEVICES += yuncore_ax830
@@ -189,8 +194,8 @@ define Device/yuncore_ax850
        PAGESIZE := 2048
        SOC := ipq5018
        DEVICE_DTS_CONFIG := [email protected]
-       DEVICE_PACKAGES := kmod-ath11k-pci \
-               ath11k-firmware-ipq5018 \
+       DEVICE_PACKAGES := ath11k-firmware-ipq5018 \
+               kmod-ath11k-pci \
                ath11k-firmware-qcn9074 \
                ipq-wifi-yuncore_ax850
 endef
index 00591ab8b5ae18b8f4de11eb33dcb3be6b3ea592..c34aadf7d43f4702922732edfd91ab5f328a1f2a 100644 (file)
@@ -44,7 +44,7 @@ case "$FIRMWARE" in
                ;;
        esac
        ;;
-"ath11k/QCN6122/hw1.0/cal-ahb-b00a040.wifi1.bin")
+"ath11k/QCN6122/hw1.0/cal-ahb-b00a040.wifi.bin")
        case "$board" in
        elecom,wrc-x3000gs2|\
        iodata,wn-dax3000gr)
index d3ad319a315451f2f7e12e4370cd624ea6134719..d3460db582588eefeef0031c9b85277a7869bfdc 100644 (file)
@@ -48,6 +48,13 @@ migrate_radio()
 WIRELESS_CHANGED=false
 
 case "$(board_name)" in
+elecom,wrc-x3000gs2|\
+glinet,gl-b3000|\
+iodata,wn-dax3000gr|\
+linksys,mx2000|\
+yuncore,ax830)
+       migrate_radio 'platform/soc@0/b00a040.wifi1' 'platform/soc@0/b00a040.wifi'
+       ;;
 linksys,mr5500|\
 linksys,mx5500|\
 linksys,spnmx56)
index 2e68329265449b48d8acea30e83e6cf54e2aab79..62b05a7fc30c0bbfb0c2a00ad96b06c7b2e1be13 100644 (file)
@@ -1,6 +1,5 @@
 SUBTARGET:=ipq50xx
 BOARDNAME:=Qualcomm Atheros IPQ50xx
-DEFAULT_PACKAGES += ath11k-firmware-ipq5018
 
 define Target/Description
        Build firmware images for Qualcomm Atheros IPQ50xx based boards.
diff --git a/target/linux/qualcommax/patches-6.12/0189-arm64-dts-qcom-ipq5018-add-nodes-to-bringup-q6.patch b/target/linux/qualcommax/patches-6.12/0189-arm64-dts-qcom-ipq5018-add-nodes-to-bringup-q6.patch
new file mode 100644 (file)
index 0000000..6667e1c
--- /dev/null
@@ -0,0 +1,101 @@
+From 553461c1f1ae9b2ac50bce5ed5de15092cc04d29 Mon Sep 17 00:00:00 2001
+From: George Moussalem <[email protected]>
+Date: Tue, 21 Oct 2025 15:38:32 +0400
+Subject: [PATCH v6 5/8] arm64: dts: qcom: ipq5018: add nodes to bringup q6
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 7bit
+Message-Id: <[email protected]>
+
+Enable nodes required for q6 remoteproc bring up.
+
+Signed-off-by: George Moussalem <[email protected]>
+---
+ arch/arm64/boot/dts/qcom/ipq5018.dtsi | 62 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 62 insertions(+)
+
+--- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
++++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
+@@ -158,6 +158,11 @@
+                       reg = <0x0 0x4ac00000 0x0 0x200000>;
+                       no-map;
+               };
++
++              q6_region: wcss@4b000000 {
++                      reg = <0x0 0x4b000000 0x0 0x1b00000>;
++                      no-map;
++              };
+       };
+       soc: soc@0 {
+@@ -717,6 +722,41 @@
+                       };
+               };
++              q6v5_wcss: remoteproc@cd00000 {
++                      compatible = "qcom,ipq5018-wcss-sec-pil";
++                      reg = <0x0cd00000 0x10000>;
++                      firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mbn";
++                      interrupts-extended = <&intc GIC_SPI 291 IRQ_TYPE_EDGE_RISING>,
++                                            <&wcss_smp2p_in 0 IRQ_TYPE_NONE>,
++                                            <&wcss_smp2p_in 1 IRQ_TYPE_NONE>,
++                                            <&wcss_smp2p_in 2 IRQ_TYPE_NONE>,
++                                            <&wcss_smp2p_in 3 IRQ_TYPE_NONE>;
++                      interrupt-names = "wdog",
++                                        "fatal",
++                                        "ready",
++                                        "handover",
++                                        "stop-ack";
++
++                      clocks = <&gcc GCC_SLEEP_CLK_SRC>,
++                               <&gcc GCC_SYS_NOC_WCSS_AHB_CLK>;
++                      clock-names = "sleep",
++                                    "interconnect";
++
++                      qcom,smem-states = <&wcss_smp2p_out 0>,
++                                         <&wcss_smp2p_out 1>;
++                      qcom,smem-state-names = "shutdown",
++                                              "stop";
++
++                      memory-region = <&q6_region>;
++
++                      glink-edge {
++                              interrupts = <GIC_SPI 179 IRQ_TYPE_EDGE_RISING>;
++                              label = "rtr";
++                              qcom,remote-pid = <1>;
++                              mboxes = <&apcs_glb 8>;
++                      };
++              };
++
+               pcie1: pcie@80000000 {
+                       compatible = "qcom,pcie-ipq5018";
+                       reg = <0x80000000 0xf1d>,
+@@ -991,4 +1031,28 @@
+                            <GIC_PPI 4 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
+                            <GIC_PPI 1 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
+       };
++
++      wcss: smp2p-wcss {
++              compatible = "qcom,smp2p";
++              qcom,smem = <435>, <428>;
++
++              interrupt-parent = <&intc>;
++              interrupts = <GIC_SPI 177 IRQ_TYPE_EDGE_RISING>;
++
++              mboxes = <&apcs_glb 9>;
++
++              qcom,local-pid = <0>;
++              qcom,remote-pid = <1>;
++
++              wcss_smp2p_out: master-kernel {
++                      qcom,entry-name = "master-kernel";
++                      #qcom,smem-state-cells = <1>;
++              };
++
++              wcss_smp2p_in: slave-kernel {
++                      qcom,entry-name = "slave-kernel";
++                      interrupt-controller;
++                      #interrupt-cells = <2>;
++              };
++      };
+ };
index 74b82ea0a06f7fef47031a27cae0ccada515d4cc..5272a57465723db64ca777540e2f6bd0682f4830 100644 (file)
@@ -8,7 +8,7 @@ Signed-off-by: George Moussalem <[email protected]>
 ---
 --- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
 +++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-@@ -453,6 +453,16 @@
+@@ -458,6 +458,16 @@
                        reg = <0x01937000 0x21000>;
                };
  
index 18272f3d9a3cbe291aff8b891497d75aae23c048..7250f93424974b457c0fe65dba8d5a14e7d07b68 100644 (file)
@@ -9,7 +9,7 @@ aren't upstreamed, add the vendor compatible.
 Signed-off-by: George Moussalem <[email protected]>
 --- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
 +++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-@@ -214,7 +214,7 @@
+@@ -219,7 +219,7 @@
                };
  
                mdio0: mdio@88000 {
index c4575e6c9118608b641e279e6c6acdebac3b892f..d3e5c589408603dfd55289e3aec4d5c1228c5952 100644 (file)
@@ -13,67 +13,66 @@ Signed-off-by: George Moussalem <[email protected]>
 ---
 --- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
 +++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-@@ -727,6 +727,225 @@
+@@ -732,6 +732,118 @@
                        };
                };
  
-+              wifi0: wifi@c000000 {
++              wifi: wifi@c000000 {
 +                      compatible = "qcom,ipq5018-wifi";
-+                      reg = <0xc000000 0x1000000>;
++                      reg = <0x0c000000 0x1000000>;
 +
 +                      interrupts = <GIC_SPI 288 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 289 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 290 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 291 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 292 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 293 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 294 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 295 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 296 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 297 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 298 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 299 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 300 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 301 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 302 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 303 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 304 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 305 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 306 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 307 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 308 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 309 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 310 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 311 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 312 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 313 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 314 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 315 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 316 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 317 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 318 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 319 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 320 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 321 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 322 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 323 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 324 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 325 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 326 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 327 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 328 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 329 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 330 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 331 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 332 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 333 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 334 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 335 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 336 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 337 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 338 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 339 IRQ_TYPE_EDGE_RISING>;
-+
++                                   <GIC_SPI 289 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 290 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 291 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 292 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 293 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 294 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 295 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 296 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 297 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 298 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 299 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 300 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 301 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 302 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 303 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 304 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 305 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 306 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 307 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 308 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 309 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 310 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 311 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 312 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 313 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 314 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 315 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 316 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 317 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 318 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 319 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 320 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 321 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 322 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 323 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 324 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 325 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 326 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 327 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 328 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 329 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 330 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 331 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 332 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 333 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 334 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 335 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 336 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 337 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 338 IRQ_TYPE_EDGE_RISING>,
++                                   <GIC_SPI 339 IRQ_TYPE_EDGE_RISING>;
 +                      interrupt-names = "misc-pulse1",
 +                                        "misc-latch",
 +                                        "sw-exception",
@@ -130,112 +129,6 @@ Signed-off-by: George Moussalem <[email protected]>
 +                      status = "disabled";
 +              };
 +
-+              //QCN6102 5G
-+              wifi1: wifi1@c000000 {
-+                      reg = <0x0b00a040 0x0>;
-+                      compatible = "qcom,qcn6122-wifi";
-+                      interrupts = <GIC_SPI 416 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 417 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 418 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 419 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 420 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 421 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 422 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 423 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 424 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 425 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 426 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 427 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 428 IRQ_TYPE_EDGE_RISING>;
-+                      status = "disabled";
-+              };
-+
-+              //QCN6122 5G/6G
-+              wifi2: wifi2@c000000 {
-+                      reg = <0x0b00a040 0x0>;
-+                      compatible = "qcom,qcn6122-wifi";
-+                      interrupts = <GIC_SPI 448 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 449 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 450 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 451 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 452 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 453 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 454 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 455 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 456 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 457 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 458 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 459 IRQ_TYPE_EDGE_RISING>,
-+                              <GIC_SPI 460 IRQ_TYPE_EDGE_RISING>;
-+                      status = "disabled";
-+              };
-+
-+              q6v5_wcss: remoteproc@cd00000 {
-+                      compatible = "qcom,ipq5018-q6-mpd";
-+                      reg = <0x0cd00000 0x4040>;
-+                      #address-cells = <1>;
-+                      #size-cells = <1>;
-+                      ranges;
-+
-+                      clocks = <&gcc GCC_XO_CLK>,
-+                               <&gcc GCC_SLEEP_CLK_SRC>,
-+                               <&gcc GCC_SYS_NOC_WCSS_AHB_CLK>;
-+
-+                      interrupts-extended = <&intc GIC_SPI 291 IRQ_TYPE_EDGE_RISING>,
-+                                            <&wcss_smp2p_in 0 IRQ_TYPE_NONE>,
-+                                            <&wcss_smp2p_in 1 IRQ_TYPE_NONE>,
-+                                            <&wcss_smp2p_in 2 IRQ_TYPE_NONE>,
-+                                            <&wcss_smp2p_in 3 IRQ_TYPE_NONE>;
-+                      interrupt-names = "wdog",
-+                                        "fatal",
-+                                        "ready",
-+                                        "handover",
-+                                        "stop-ack";
-+
-+                      qcom,smem-states = <&wcss_smp2p_out 0>,
-+                                         <&wcss_smp2p_out 1>;
-+                      qcom,smem-state-names = "shutdown",
-+                                              "stop";
-+
-+                      status = "disabled";
-+
-+                      glink-edge {
-+                              interrupts = <GIC_SPI 179 IRQ_TYPE_EDGE_RISING>;
-+                              label = "rtr";
-+                              qcom,remote-pid = <1>;
-+                              mboxes = <&apcs_glb 8>;
-+
-+                              qrtr_requests {
-+                                      qcom,glink-channels = "IPCRTR";
-+                              };
-+                      };
-+              };
-+
-+              wcss: smp2p-wcss {
-+                      compatible = "qcom,smp2p";
-+                      qcom,smem = <435>, <428>;
-+
-+                      interrupt-parent = <&intc>;
-+                      interrupts = <GIC_SPI 177 IRQ_TYPE_EDGE_RISING>;
-+
-+                      mboxes = <&apcs_glb 9>;
-+
-+                      qcom,local-pid = <0>;
-+                      qcom,remote-pid = <1>;
-+
-+                      wcss_smp2p_out: master-kernel {
-+                              qcom,entry-name = "master-kernel";
-+                              qcom,smp2p-feature-ssr-ack;
-+                              #qcom,smem-state-cells = <1>;
-+                      };
-+
-+                      wcss_smp2p_in: slave-kernel {
-+                              qcom,entry-name = "slave-kernel";
-+                              interrupt-controller;
-+                              #interrupt-cells = <2>;
-+                      };
-+              };
-+
-               pcie1: pcie@80000000 {
-                       compatible = "qcom,pcie-ipq5018";
-                       reg = <0x80000000 0xf1d>,
+               q6v5_wcss: remoteproc@cd00000 {
+                       compatible = "qcom,ipq5018-wcss-sec-pil";
+                       reg = <0x0cd00000 0x10000>;