--- /dev/null
+/dts-v1/;
+
+#include "ipq5018.dtsi"
+#include "ipq5018-mx-base.dtsi"
+
+/ {
+ model = "Linksys SPNMX56";
+ compatible = "linksys,spnmx56", "qcom,ipq5018";
+};
+
+/*
+* =================================================================
+* _______________________ _______________________
+* | IPQ5018 | | QCA8337 |
+* | +------+ +--------+ | | +--------+ +------+ |
+* | | MAC0 |---| GE Phy |-+--- MDI ---+ | Phy4 |---| MAC5 | |
+* | +------+ +--------+ | | +--------+ +------+ |
+* | | |_______________________|
+* | | _______________________
+* | | | QCA8081 |
+* | +------+ +--------+ | | +--------+ +------+ |
+* | | MAC1 |---| Uniphy |-+-- SGMII+--+ | Phy |---| MAC | |
+* | +------+ +--------+ | | +--------+ +------+ |
+* |_______________________| |_______________________|
+*
+* =================================================================
+*/
+
+&switch {
+ status = "okay";
+
+ switch_mac_mode = <MAC_MODE_SGMII_CHANNEL0>;
+
+ qcom,port_phyinfo {
+ // MAC0 -> GE Phy --- MDI --- QCA8337 Switch
+ port@0 {
+ port_id = <1>;
+ mdiobus = <&mdio0>;
+ phy_address = <7>;
+ phy_dac = <0x10 0x10>;
+ };
+
+ // MAC1 -> Uniphy --- SGMII --- QCA8081
+ port@1 {
+ port_id = <2>;
+ mdiobus = <&mdio1>;
+ phy_address = <28>;
+ port_mac_sel = "QGMAC_PORT";
+ };
+ };
+};
+
+// MAC0 -> GE Phy
+&dp1 {
+ status = "okay";
+};
+
+// MAC1 ---SGMII---> QCA8081
+&dp2 {
+ status = "okay";
+
+ label = "wan";
+ phy-handle = <&qca8081>;
+};
+
+&mdio0 {
+ status = "okay";
+};
+
+// IPQ5018 GE Phy -> QCA8337 PHY4
+&ge_phy {
+ qcom,dac = <0x10 0x10>;
+};
+
+&mdio1 {
+ status = "okay";
+
+ pinctrl-0 = <&mdio1_pins>;
+ pinctrl-names = "default";
+ reset-gpios = <&tlmm 39 GPIO_ACTIVE_LOW>;
+
+ // Not connected
+ qca8337_0: ethernet-phy@0 {
+ reg = <0>;
+ };
+
+ // QCA8337 Phy1 -> LAN1
+ qca8337_1: ethernet-phy@1 {
+ reg = <1>;
+ };
+
+ // QCA8337 Phy2 -> LAN2
+ qca8337_2: ethernet-phy@2 {
+ reg = <2>;
+ };
+
+ // QCA8337 Phy3 -> LAN3
+ qca8337_3: ethernet-phy@3 {
+ reg = <3>;
+ };
+
+ // QCA8337 Phy4 -> MDI -> IPQ5018 GE PHY
+ qca8337_4: ethernet-phy@4 {
+ reg = <4>;
+ };
+
+ // QCA8081 Phy -> WAN
+ qca8081: ethernet-phy@28 {
+ compatible = "ethernet-phy-id004d.d101";
+ reg = <28>;
+ reset-deassert-us = <10000>;
+ reset-gpios = <&tlmm 24 GPIO_ACTIVE_LOW>;
+ };
+
+ // QCA8337 switch
+ switch1: ethernet-switch@17 {
+ compatible = "qca,qca8337";
+ reg = <17>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@2 {
+ reg = <2>;
+ label = "lan3";
+ phy-handle = <&qca8337_1>;
+ };
+
+ port@3 {
+ reg = <3>;
+ label = "lan2";
+ phy-handle = <&qca8337_2>;
+ };
+
+ port@4 {
+ reg = <4>;
+ label = "lan1";
+ phy-handle = <&qca8337_3>;
+ };
+
+ port@5 {
+ reg = <5>;
+ phy-handle = <&qca8337_4>;
+ phy-mode = "gmii";
+ ethernet = <&dp1>;
+ };
+ };
+ };
+};
+
+&pcie0_phy {
+ status = "okay";
+};
+
+&pcie0 {
+ status = "okay";
+
+ perst-gpios = <&tlmm 15 GPIO_ACTIVE_LOW>;
+
+ bridge@0,0 {
+ reg = <0x00000000 0 0 0 0>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+
+ wifi@1,0 {
+ status = "okay";
+
+ /* QCN9074: ath11k lacks DT compatible for PCI cards */
+ compatible = "pci17cb,1104";
+ reg = <0x00010000 0 0 0 0>;
+
+ qcom,ath11k-calibration-variant = "Linksys-SPNMX56";
+ };
+ };
+};
+
+&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>;
+ qcom,ath11k-calibration-variant = "Linksys-SPNMX56";
+ qcom,ath11k-fw-memory-mode = <2>;
+ qcom,bdf-addr = <0x4c400000>;
+
+ status = "okay";
+};