From d8011a7e99302249ae7be3bfe6322a31cacc4837 Mon Sep 17 00:00:00 2001 From: hzy Date: Mon, 22 Jul 2024 23:46:39 +0800 Subject: [PATCH] ipq50xx: Add CMCC RAX3000Q support --- package/boot/uboot-envtools/files/ipq50xx | 1 + package/firmware/ipq-wifi/Makefile | 2 + .../ipq-wifi/src/board-cmcc_rax3000q.ipq5018 | Bin 0 -> 131156 bytes .../ipq-wifi/src/board-cmcc_rax3000q.qcn6122 | Bin 0 -> 131156 bytes .../ipq50xx/base-files/etc/board.d/02_network | 6 + .../etc/hotplug.d/firmware/11-ath11k-caldata | 2 + target/linux/ipq50xx/dts/ipq5000-rax3000q.dts | 541 ++++++++++++++++++ target/linux/ipq50xx/image/Makefile | 17 + 8 files changed, 569 insertions(+) create mode 100644 package/firmware/ipq-wifi/src/board-cmcc_rax3000q.ipq5018 create mode 100644 package/firmware/ipq-wifi/src/board-cmcc_rax3000q.qcn6122 create mode 100644 target/linux/ipq50xx/dts/ipq5000-rax3000q.dts diff --git a/package/boot/uboot-envtools/files/ipq50xx b/package/boot/uboot-envtools/files/ipq50xx index 97e70f2c0e..ed186537fa 100644 --- a/package/boot/uboot-envtools/files/ipq50xx +++ b/package/boot/uboot-envtools/files/ipq50xx @@ -9,6 +9,7 @@ touch /etc/config/ubootenv board=$(board_name) case "$board" in + cmcc,rax3000q|\ redmi,ax3000|\ xiaomi,cr881x) ubootenv_add_uci_config "/dev/mtd10" "0x0" "0x10000" "0x20000" diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile index 35ca2d15b5..330c7b48da 100644 --- a/package/firmware/ipq-wifi/Makefile +++ b/package/firmware/ipq-wifi/Makefile @@ -29,6 +29,7 @@ endef ALLWIFIBOARDS:= \ buffalo_wxr-5950ax12 \ + cmcc_rax3000q \ compex_wpq873 \ dynalink_dl-wrx36 \ edgecore_eap102 \ @@ -124,6 +125,7 @@ endef # Add $(eval $(call generate-ipq-wifi-package,,)) $(eval $(call generate-ipq-wifi-package,buffalo_wxr-5950ax12,Buffalo WXR-5950AX12)) +$(eval $(call generate-ipq-wifi-package,cmcc_rax3000q,CMCC RAX3000Q)) $(eval $(call generate-ipq-wifi-package,compex_wpq873,Compex WPQ-873)) $(eval $(call generate-ipq-wifi-package,dynalink_dl-wrx36,Dynalink DL-WRX36)) $(eval $(call generate-ipq-wifi-package,edgecore_eap102,Edgecore EAP102)) diff --git a/package/firmware/ipq-wifi/src/board-cmcc_rax3000q.ipq5018 b/package/firmware/ipq-wifi/src/board-cmcc_rax3000q.ipq5018 new file mode 100644 index 0000000000000000000000000000000000000000..7411a41d4bf76ed44144c84c0d82e5916a9772db GIT binary patch literal 131156 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%0APtKBDY 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 literal 0 HcmV?d00001 diff --git a/target/linux/ipq50xx/base-files/etc/board.d/02_network b/target/linux/ipq50xx/base-files/etc/board.d/02_network index 8f604b15ce..c30bac0304 100755 --- a/target/linux/ipq50xx/base-files/etc/board.d/02_network +++ b/target/linux/ipq50xx/base-files/etc/board.d/02_network @@ -18,6 +18,12 @@ ipq50xx_setup_interfaces() "0:lan:1" "1:lan:2" "2:lan:3" \ "3:wan" ;; + cmcc,rax3000q) + ucidef_add_switch "switch1" \ + "6u@eth1" "3u@eth0" \ + "2:lan:1" "4:lan:2" "5:lan:3" \ + "1:wan" + ;; esac } diff --git a/target/linux/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata b/target/linux/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata index 8e92d95284..0b2f58626c 100644 --- a/target/linux/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata +++ b/target/linux/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata @@ -9,6 +9,7 @@ board=$(board_name) case "$FIRMWARE" in "ath11k/IPQ5018/hw1.0/caldata.bin") case "$board" in + cmcc,rax3000q|\ redmi,ax3000|\ xiaomi,cr881x) caldata_extract "0:ART" 0x1000 0x20000 @@ -17,6 +18,7 @@ case "$FIRMWARE" in ;; "ath11k/qcn6122/hw1.0/caldata_1.bin") case "$board" in + cmcc,rax3000q|\ redmi,ax3000|\ xiaomi,cr881x) caldata_extract "0:ART" 0x26800 0x20000 diff --git a/target/linux/ipq50xx/dts/ipq5000-rax3000q.dts b/target/linux/ipq50xx/dts/ipq5000-rax3000q.dts new file mode 100644 index 0000000000..a7b7b60ce2 --- /dev/null +++ b/target/linux/ipq50xx/dts/ipq5000-rax3000q.dts @@ -0,0 +1,541 @@ +// SPDX-License-Identifier: (GPL-2.0+) + +/dts-v1/; + +#include "ipq5018.dtsi" +#include +#include + +/ { + model = "CMCC RAX3000Q"; + compatible = "cmcc,rax3000q", "qcom,ipq5018"; + + #address-cells = <2>; + #size-cells = <2>; + interrupt-parent = <&intc>; + + aliases { + serial0 = &blsp1_uart1; + + ethernet0 = &mac0; + ethernet1 = &mac1; + + led-boot = &led_status_green; + led-failsafe = &led_status_red; + led-running = &led_status_green; + led-upgrade = &led_status_blue; + }; + + chosen { + // Override the root parameter from u-boot + // Increase coherent_pool size for WiFi + bootargs-append = " root=/dev/ubiblock0_1 coherent_pool=2M"; + stdout-path = "serial0:115200n8"; + }; + + reserved-memory { + // Not sure why but without this, WiFi will crash + tz_apps@4a400000 { + no-map; + // The size is incorrent, but it works + reg = <0x0 0x4a400000 0x0 0x700000>; + }; + + q6_mem_regions: q6_mem_regions@4b000000 { + no-map; + // reg = <0x0 0x4b000000 0x0 0x3b00000>; + reg = <0x0 0x4b000000 0x0 0x3000000>; + }; + }; + + thermal-zones { + status = "ok"; + }; +}; + +&tlmm { + blsp_uart0_pins: blsp_uart0_pins { + pins = + "gpio28", // RX + "gpio29"; // TX + function = "blsp0_uart1"; + drive-strength = <8>; + bias-disable; + }; + + qspi_nand_pins: qspi_nand_pins { + clock { + pins = "gpio9"; + function = "qspi_clk"; + drive-strength = <8>; + bias-disable; + }; + + cs { + pins = "gpio8"; + function = "qspi_cs"; + drive-strength = <8>; + bias-disable; + }; + + data0 { + pins = "gpio7"; + function = "qspi0"; + drive-strength = <8>; + bias-disable; + }; + + data1 { + pins = "gpio6"; + function = "qspi1"; + drive-strength = <8>; + bias-disable; + }; + + data2 { + pins = "gpio5"; + function = "qspi2"; + drive-strength = <8>; + bias-disable; + }; + + data3 { + pins = "gpio4"; + function = "qspi3"; + drive-strength = <8>; + bias-disable; + }; + }; + + mdio1_pins: mdio1_pins { + mdc { + pins = "gpio36"; + function = "mdc"; + drive-strength = <8>; + bias-pull-up; + }; + + mdio { + pins = "gpio37"; + function = "mdio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + leds_pins: leds_pins { + led_status_red { + pins = "gpio24"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + + led_status_green { + pins = "gpio19"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + + led_status_blue { + pins = "gpio17"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + button_pins: button_pins { + button_reset { + pins = "gpio23"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + + button_mesh { + pins = "gpio38"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + }; +}; + +&blsp1_uart1 { + pinctrl-0 = <&blsp_uart0_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&qpic_bam { + status = "ok"; +}; + +&nand { + pinctrl-0 = <&qspi_nand_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&soc { + leds { + compatible = "gpio-leds"; + pinctrl-0 = <&leds_pins>; + pinctrl-names = "default"; + + led_status_red: led_status_red { + label = "blue:system"; + gpio = <&tlmm 24 GPIO_ACTIVE_HIGH>; + default-state = "on"; + }; + + led_status_green: led_status_green { + label = "yellow:system"; + gpio = <&tlmm 19 GPIO_ACTIVE_HIGH>; + }; + + led_status_blue: led_status_blue { + label = "blue:internet"; + gpio = <&tlmm 17 GPIO_ACTIVE_HIGH>; + }; + }; + + button { + compatible = "gpio-keys"; + pinctrl-0 = <&button_pins>; + pinctrl-names = "default"; + + button_reset { + label = "reset"; + gpios = <&tlmm 23 GPIO_ACTIVE_LOW>; + linux,input-type = ; + linux,code = ; + debounce-interval = <60>; + }; + + button_mesh { + label = "mesh"; + gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; + linux,input-type = ; + linux,code = ; + debounce-interval = <60>; + }; + }; + + ess-instance { + num_devices = <2>; + + // Dummy switch, to describe how the external ports connects to the MAC + // For example, some chips have PSGMII ports which combine 5 MAC into + // 1 external port. + // For IPQ50xx, this is used to choose SGMII or SGMII-plus + ess-switch@0x39c00000 { + compatible = "qcom,ess-switch-ipq50xx"; + device_id = <0>; + + cmnblk_clk = "internal_96MHz"; + + // MAC1 Mode + // switch_mac_mode = <0xc>; // PORT_WRAPPER_SGMII_PLUS + switch_mac_mode = <0xf>; // PORT_WRAPPER_SGMII_CHANNEL0 + + qcom,port_phyinfo { + // MAC0 -> GE Phy -> QCA8337 Phy2 + port@0 { + port_id = <1>; + + mdiobus = <&mdio0>; + phy_address = <7>; + + phy_dac = <0x10 0x10>; + }; + + // MAC1 ---SGMII---> QCA8337 SerDes + port@1 { + port_id = <2>; + + forced-speed = <1000>; + forced-duplex = <1>; + }; + }; + }; + + // QCA8337 + ess-switch1@1 { + compatible = "qcom,ess-switch-qca83xx"; + device_id = <1>; + + reset_gpio = <26>; + + switch_access_mode = "mdio"; + mdio-bus = <&mdio1>; + + qca,ar8327-initvals = < + 0x000c 0x00000080 // PAD6_MODE = MAC6_SGMII_EN + 0x0010 0x002613a0 // PWS_REG = DEFAULT_VALUE | SERDES_AEN + 0x0094 0x000010ce // PORT6_STATUS = DEFAULT_VALUE | DUPLEX_MODE_6 | RXMAC_EN_6 | + // TXMAC_EN_6 | SPEED_6(1000M) + 0x00e0 0xc74164de // SGMII_CTRL = DEFAULT_VALUE | MODE_CTRL_25M(SGMII_PHY) | SGMII_EN_SD | + // SGMII_EN_TX | SGMII_EN_RX | SGMII_EN_PLL + >; + + switch_cpu_bmp = <0x48>; // CPU port bitmap: 3 6 + switch_lan_bmp = <0x34>; // LAN port bitmap: 2 4 5 + switch_wan_bmp = <0x02>; // WAN port bitmap: 1 + + qcom,port_phyinfo { + // MAC1 -> Phy0 -> WAN + port@1 { + port_id = <1>; + phy_address = <0>; + }; + + // MAC2 -> Phy1 -> LAN1 + port@2 { + port_id = <2>; + phy_address = <1>; + }; + + // MAC3 -> Phy2 -> IPQ5000 GE Phy + port@3 { + port_id = <3>; + phy_address = <2>; + }; + + // MAC4 -> Phy3 -> LAN2 + port@4 { + port_id = <4>; + phy_address = <3>; + }; + + // MAC5 -> Phy4 -> LAN3 + port@5 { + port_id = <5>; + phy_address = <4>; + }; + + // MAC6 ---SGMII---> IPQ5000 MAC1 + port@6 { + port_id = <6>; + + forced-speed = <1000>; + forced-duplex = <1>; + }; + }; + }; + }; + + // MAC0 -> GE Phy + mac0: dp1 { + compatible = "qcom,nss-dp"; + device_type = "network"; + qcom,id = <1>; + + reg = <0x39C00000 0x10000>; + interrupts = ; + clocks = <&gcc GCC_SNOC_GMAC0_AXI_CLK>; + clock-names = "nss-snoc-gmac-axi-clk"; + + qcom,mactype = <2>; // GMAC_HAL_TYPE_SYN_GMAC + local-mac-address = [000000000000]; + phy-handle = <&ge_phy>; + phy-mode = "internal"; + }; + + // MAC1 ---SGMII---> QCA8337 SerDes + mac1: dp2 { + compatible = "qcom,nss-dp"; + device_type = "network"; + qcom,id = <2>; + + reg = <0x39D00000 0x10000>; + interrupts = ; + clocks = <&gcc GCC_SNOC_GMAC1_AXI_CLK>; + clock-names = "nss-snoc-gmac-axi-clk"; + + qcom,mactype = <2>; // GMAC_HAL_TYPE_SYN_GMAC + local-mac-address = [000000000000]; + phy-mode = "sgmii"; + }; +}; + +&mdio0 { + status = "ok"; + + resets = <&gcc GCC_GEPHY_MDC_SW_ARES>; + reset-names = "phy"; + + // IPQ5018 GE Phy -> QCA8337 Phy2 + ge_phy: ethernet-phy@0 { + reg = <7>; + }; +}; + +&mdio1 { + pinctrl-0 = <&mdio1_pins>; + pinctrl-names = "default"; + status = "ok"; + + reset-gpios = <&tlmm 26 GPIO_ACTIVE_LOW>; + + // QCA8337 Phy0 -> WAN + ethernet-phy@0 { + reg = <0>; + }; + + // QCA8337 Phy1 -> LAN1 + ethernet-phy@1 { + reg = <1>; + }; + + // QCA8337 Phy2 -> IPQ5018 GE Phy + ethernet-phy@2 { + reg = <2>; + }; + + // QCA8337 Phy3 -> LAN2 + ethernet-phy@3 { + reg = <3>; + }; + + // QCA8337 Phy4 -> LAN3 + ethernet-phy@4 { + reg = <4>; + }; +}; + +&q6v5_wcss { + memory-region = <&q6_mem_regions>; + + qcom,rproc = <&q6v5_wcss>; + firmware = "IPQ5018/q6_fw.mdt"; + + qcom,bootargs_smem = <507>; + boot-args = ; + + status = "ok"; + + // IPQ5018 + q6_wcss_pd1: remoteproc_pd1@4ab000 { + compatible = "qcom,ipq5018-wcss-ahb-mpd"; + + 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"; + + reg = <0x4ab000 0x20>; + reg-names = "rmb"; + + // qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>; + + 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"; + + firmware = "IPQ5018/q6_fw.mdt"; + m3_firmware = "IPQ5018/m3_fw.mdt"; + }; + + // QCN6102 + q6_wcss_pd2: remoteproc_pd2 { + compatible = "qcom,ipq5018-wcss-pcie-mpd"; + + interrupts-extended = + <&wcss_smp2p_in 16 0>, + <&wcss_smp2p_in 17 0>, + <&wcss_smp2p_in 20 0>, + <&wcss_smp2p_in 19 0>; + 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"; + + firmware = "IPQ5018/q6_fw.mdt"; + m3_firmware = "qcn6122/m3_fw.mdt"; + }; +}; + +&wifi0 { + // IPQ5000 + qcom,multipd_arch; + qcom,rproc = <&q6_wcss_pd1>; + qcom,userpd-subsys-name = "q6v5_wcss_userpd1"; + + qcom,board_id = <0x24>; + + // qcom,ath11k-fw-memory-mode = <0>; + // qcom,bdf-addr = <0x4c400000>; + // qcom,caldb-addr = <0x4d200000>; + // qcom,m3-dump-addr = <0x4d400000>; + + qcom,ath11k-fw-memory-mode = <2>; + qcom,bdf-addr = <0x4c400000>; + + status = "ok"; +}; + +&wifi1 { + // QCN6102 + qcom,multipd_arch; + qcom,rproc = <&q6_wcss_pd2>; + qcom,userpd-subsys-name = "q6v5_wcss_userpd2"; + + qcom,board_id = <0x60>; + + // qcom,ath11k-fw-memory-mode = <0>; + // qcom,bdf-addr = <0x4d500000>; + // qcom,caldb-addr = <0x4e500000>; + // qcom,m3-dump-addr = <0x4ea00000>; + + qcom,ath11k-fw-memory-mode = <2>; + qcom,bdf-addr = <0x4d100000>; + qcom,m3-dump-addr = <0x4df00000>; + + status = "ok"; +}; diff --git a/target/linux/ipq50xx/image/Makefile b/target/linux/ipq50xx/image/Makefile index 0615756fe6..701a62d9ef 100644 --- a/target/linux/ipq50xx/image/Makefile +++ b/target/linux/ipq50xx/image/Makefile @@ -31,6 +31,23 @@ define Device/UbiFit IMAGE/nand-sysupgrade.bin := sysupgrade-tar | append-metadata endef +define Device/cmcc_rax3000q + $(call Device/FitImage) + $(call Device/UbiFit) + SOC := ipq5000 + DEVICE_VENDOR := CMCC + DEVICE_MODEL := RAX3000Q + BLOCKSIZE := 128k + PAGESIZE := 2048 + DEVICE_DTS_CONFIG := config@mp02.1 + IMAGES := nand-factory.ubi + DEVICE_PACKAGES := \ + ath11k-firmware-ipq5018 \ + ath11k-firmware-qcn6122 \ + ipq-wifi-cmcc_rax3000q +endef +TARGET_DEVICES += cmcc_rax3000q + define Device/redmi_ax3000 $(call Device/FitImage) $(call Device/UbiFit)