diff --git a/package/firmware/ath11k-firmware/Makefile b/package/firmware/ath11k-firmware/Makefile index cfc364215f..0ef80b3719 100644 --- a/package/firmware/ath11k-firmware/Makefile +++ b/package/firmware/ath11k-firmware/Makefile @@ -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)) 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 f43da50711..bfe9589ecd 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 @@ -84,13 +84,6 @@ gpios = <&tlmm 28 GPIO_ACTIVE_HIGH>; }; }; - - reserved-memory { - q6_mem_regions: q6_mem_regions@4b000000 { - no-map; - reg = <0x0 0x4b000000 0x0 0x3000000>; - }; - }; }; &sleep_clk { @@ -576,61 +569,14 @@ }; &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>; }; diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax830.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax830.dts index 4043597981..8f9f027fd3 100644 --- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax830.dts +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax830.dts @@ -7,6 +7,7 @@ #include "ipq5018.dtsi" #include "ipq5018-ess.dtsi" +#include "ipq5018-qcn6122.dtsi" #include #include @@ -65,13 +66,6 @@ }; }; - 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>; @@ -381,86 +375,9 @@ }; }; -&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>; @@ -468,8 +385,8 @@ }; &wifi1 { - // QCN6122 5G status = "okay"; + qcom,rproc = <&q6_wcss_pd3>; qcom,userpd-subsys-name = "q6v5_wcss_userpd3"; qcom,ath11k-calibration-variant = "Yuncore-AX830"; 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 30945e6332..f81e5171d0 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 @@ -65,13 +65,6 @@ }; }; - 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>; @@ -384,66 +377,6 @@ 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"; }; @@ -468,3 +401,16 @@ }; }; }; + +&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>; +}; diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-gl-b3000.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-gl-b3000.dts index cd4f270632..4094867a11 100644 --- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-gl-b3000.dts +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-gl-b3000.dts @@ -2,6 +2,7 @@ #include "ipq5018.dtsi" #include "ipq5018-ess.dtsi" +#include "ipq5018-qcn6122.dtsi" #include #include @@ -55,13 +56,6 @@ gpios = <&tlmm 23 GPIO_ACTIVE_HIGH>; }; }; - - reserved-memory { - q6_mem_regions: q6_mem_regions@4b000000 { - no-map; - reg = <0x0 0x4b000000 0x0 0x3000000>; - }; - }; }; &switch { @@ -308,13 +302,6 @@ }; &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 */ @@ -322,79 +309,9 @@ /* 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>; @@ -405,7 +322,6 @@ }; &wifi1 { - // QCN6102 5G status = "okay"; qcom,rproc = <&q6_wcss_pd3>; 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 e86e296be4..77be190dc4 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,62 +321,14 @@ }; &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"; }; diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx-base.dtsi b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx-base.dtsi index add929f217..6644263545 100644 --- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx-base.dtsi +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx-base.dtsi @@ -62,13 +62,6 @@ max-brightness = <255>; }; }; - - reserved-memory { - q6_mem_regions: q6_mem_regions@4b000000 { - no-map; - reg = <0x0 0x4b000000 0x0 0x3000000>; - }; - }; }; &sleep_clk { diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx2000.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx2000.dts index 5eaa84e3e6..f6b58d2cbc 100644 --- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx2000.dts +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx2000.dts @@ -2,6 +2,7 @@ #include "ipq5018.dtsi" #include "ipq5018-mx-base.dtsi" +#include "ipq5018-qcn6122.dtsi" / { model = "Linksys MX2000"; @@ -146,13 +147,6 @@ }; &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 = < @@ -161,97 +155,24 @@ /* 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"; }; 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 535f0ec10e..2883a466f3 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,63 +168,14 @@ }; &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"; }; diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-pz-l8.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-pz-l8.dts index 4857e3d4f9..a90c6ca8b0 100644 --- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-pz-l8.dts +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-pz-l8.dts @@ -4,6 +4,7 @@ #include "ipq5018.dtsi" #include "ipq5018-ess.dtsi" +#include "ipq5018-qcn6122.dtsi" #include #include @@ -63,14 +64,6 @@ function = LED_FUNCTION_LAN; }; }; - - reserved-memory { - q6_mem_regions: q6_mem_regions@4b000000 { - no-map; - reg = <0x0 0x4b000000 0x0 0x3000000>; - status = "disabled"; - }; - }; }; &sleep_clk { @@ -367,93 +360,11 @@ */ &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 index 0000000000..a59c6ceda3 --- /dev/null +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-qcn6122.dtsi @@ -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 = , + , + , + , + , + , + , + , + , + , + , + , + ; + status = "disabled"; + }; + + //QCN6122: 2nd instance + wifi2: wifi@b00b040 { + reg = <0x0b00b040 0x0>; + compatible = "qcom,qcn6122-wifi"; + interrupts = , + , + , + , + , + , + , + , + , + , + , + , + ; + status = "disabled"; + }; +}; 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 7984f3f57a..6ee86d6029 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,62 +179,14 @@ }; &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"; }; diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wn-dax3000gr.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wn-dax3000gr.dts index a4c8201b8f..de6d415314 100644 --- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wn-dax3000gr.dts +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wn-dax3000gr.dts @@ -4,6 +4,7 @@ #include "ipq5018.dtsi" #include "ipq5018-ess.dtsi" +#include "ipq5018-qcn6122.dtsi" #include #include @@ -113,13 +114,6 @@ function = LED_FUNCTION_WAN; }; }; - - reserved-memory { - q6_mem_regions: q6_mem_regions@4b000000 { - no-map; - reg = <0x0 0x4b000000 0x0 0x3000000>; - }; - }; }; &sleep_clk { @@ -395,83 +389,10 @@ }; &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>; diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wrc-x3000gs2.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wrc-x3000gs2.dts index 0c358f1667..1b6018dbef 100644 --- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wrc-x3000gs2.dts +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wrc-x3000gs2.dts @@ -4,6 +4,7 @@ #include "ipq5018.dtsi" #include "ipq5018-ess.dtsi" +#include "ipq5018-qcn6122.dtsi" #include #include @@ -107,14 +108,6 @@ function = LED_FUNCTION_WAN; }; }; - - reserved-memory { - q6_mem_regions: q6_mem_regions@4b000000 { - no-map; - reg = <0x0 0x4b000000 0x0 0x3000000>; - status = "disabled"; - }; - }; }; &sleep_clk { @@ -397,81 +390,12 @@ &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"; @@ -479,11 +403,11 @@ 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"; @@ -492,6 +416,4 @@ qcom,m3-dump-addr = <0x4df00000>; ieee80211-freq-limit = <5150000 5730000>; - - status = "disabled"; }; diff --git a/target/linux/qualcommax/image/ipq50xx.mk b/target/linux/qualcommax/image/ipq50xx.mk index 65d134c4a8..6a6a50d6f7 100644 --- a/target/linux/qualcommax/image/ipq50xx.mk +++ b/target/linux/qualcommax/image/ipq50xx.mk @@ -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 := config@mp03.1 - 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 := config@mp03.5-c1 - 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 := config@mp03.1 - 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 := config@mp03.1 - 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 := config@mp03.5-c1 - 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 := config@mp03.1 - DEVICE_PACKAGES := kmod-ath11k-pci \ - ath11k-firmware-ipq5018 \ + DEVICE_PACKAGES := ath11k-firmware-ipq5018 \ + kmod-ath11k-pci \ ath11k-firmware-qcn9074 \ ipq-wifi-yuncore_ax850 endef diff --git a/target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata b/target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata index 00591ab8b5..c34aadf7d4 100644 --- a/target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata +++ b/target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata @@ -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) diff --git a/target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/ieee80211/05-wifi-migrate b/target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/ieee80211/05-wifi-migrate index d3ad319a31..d3460db582 100644 --- a/target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/ieee80211/05-wifi-migrate +++ b/target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/ieee80211/05-wifi-migrate @@ -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) diff --git a/target/linux/qualcommax/ipq50xx/target.mk b/target/linux/qualcommax/ipq50xx/target.mk index 2e68329265..62b05a7fc3 100644 --- a/target/linux/qualcommax/ipq50xx/target.mk +++ b/target/linux/qualcommax/ipq50xx/target.mk @@ -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 index 0000000000..6667e1c081 --- /dev/null +++ b/target/linux/qualcommax/patches-6.12/0189-arm64-dts-qcom-ipq5018-add-nodes-to-bringup-q6.patch @@ -0,0 +1,101 @@ +From 553461c1f1ae9b2ac50bce5ed5de15092cc04d29 Mon Sep 17 00:00:00 2001 +From: George Moussalem +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: <20251021-ipq5018-wifi-v6-5-c55c547df6fc@outlook.com> + +Enable nodes required for q6 remoteproc bring up. + +Signed-off-by: George Moussalem +--- + 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 = ; ++ label = "rtr"; ++ qcom,remote-pid = <1>; ++ mboxes = <&apcs_glb 8>; ++ }; ++ }; ++ + pcie1: pcie@80000000 { + compatible = "qcom,pcie-ipq5018"; + reg = <0x80000000 0xf1d>, +@@ -991,4 +1031,28 @@ + , + ; + }; ++ ++ wcss: smp2p-wcss { ++ compatible = "qcom,smp2p"; ++ qcom,smem = <435>, <428>; ++ ++ interrupt-parent = <&intc>; ++ interrupts = ; ++ ++ 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>; ++ }; ++ }; + }; diff --git a/target/linux/qualcommax/patches-6.12/0306-arm64-dts-qcom-ipq5018-Add-PWM-node.patch b/target/linux/qualcommax/patches-6.12/0306-arm64-dts-qcom-ipq5018-Add-PWM-node.patch index 74b82ea0a0..5272a57465 100644 --- a/target/linux/qualcommax/patches-6.12/0306-arm64-dts-qcom-ipq5018-Add-PWM-node.patch +++ b/target/linux/qualcommax/patches-6.12/0306-arm64-dts-qcom-ipq5018-Add-PWM-node.patch @@ -8,7 +8,7 @@ Signed-off-by: George Moussalem --- --- 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>; }; diff --git a/target/linux/qualcommax/patches-6.12/0715-arm64-dts-qcom-ipq5018-add-vendor-compatible-to-mdio-node.patch b/target/linux/qualcommax/patches-6.12/0715-arm64-dts-qcom-ipq5018-add-vendor-compatible-to-mdio-node.patch index 18272f3d9a..7250f93424 100644 --- a/target/linux/qualcommax/patches-6.12/0715-arm64-dts-qcom-ipq5018-add-vendor-compatible-to-mdio-node.patch +++ b/target/linux/qualcommax/patches-6.12/0715-arm64-dts-qcom-ipq5018-add-vendor-compatible-to-mdio-node.patch @@ -9,7 +9,7 @@ aren't upstreamed, add the vendor compatible. Signed-off-by: George Moussalem --- 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 { diff --git a/target/linux/qualcommax/patches-6.12/0816-arm64-dts-qcom-ipq5018-add-wifi-support.patch b/target/linux/qualcommax/patches-6.12/0816-arm64-dts-qcom-ipq5018-add-wifi-support.patch index c4575e6c91..d3e5c58940 100644 --- a/target/linux/qualcommax/patches-6.12/0816-arm64-dts-qcom-ipq5018-add-wifi-support.patch +++ b/target/linux/qualcommax/patches-6.12/0816-arm64-dts-qcom-ipq5018-add-wifi-support.patch @@ -13,67 +13,66 @@ Signed-off-by: George Moussalem --- --- 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 = , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ ; -+ ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ ; + interrupt-names = "misc-pulse1", + "misc-latch", + "sw-exception", @@ -130,112 +129,6 @@ Signed-off-by: George Moussalem + status = "disabled"; + }; + -+ //QCN6102 5G -+ wifi1: wifi1@c000000 { -+ reg = <0x0b00a040 0x0>; -+ compatible = "qcom,qcn6122-wifi"; -+ interrupts = , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ ; -+ status = "disabled"; -+ }; -+ -+ //QCN6122 5G/6G -+ wifi2: wifi2@c000000 { -+ reg = <0x0b00a040 0x0>; -+ compatible = "qcom,qcn6122-wifi"; -+ interrupts = , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ , -+ ; -+ 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 = ; -+ 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 = ; -+ -+ 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>;