diff --git a/package/boot/uboot-envtools/files/qualcommax b/package/boot/uboot-envtools/files/qualcommax index 581f58b58..d449a3032 100644 --- a/package/boot/uboot-envtools/files/qualcommax +++ b/package/boot/uboot-envtools/files/qualcommax @@ -19,7 +19,8 @@ dynalink,dl-wrx36|\ netgear,rax120v2|\ netgear,wax218|\ netgear,wax620|\ -netgear,wax630) +netgear,wax630|\ +zn,m2) idx="$(find_mtd_index 0:appsblenv)" [ -n "$idx" ] && \ ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x40000" "0x20000" "2" diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile index d890f8a0f..9394f05a5 100644 --- a/package/firmware/ipq-wifi/Makefile +++ b/package/firmware/ipq-wifi/Makefile @@ -51,6 +51,7 @@ ALLWIFIBOARDS:= \ xiaomi_ax9000 \ xiaomi_rm1800 \ yuncore_ax880 \ + zn_m2 \ zte_mf269 \ zte_mf289f \ zte_mf287 \ @@ -154,6 +155,7 @@ $(eval $(call generate-ipq-wifi-package,xiaomi_ax3600,Xiaomi AX3600)) $(eval $(call generate-ipq-wifi-package,xiaomi_ax9000,Xiaomi AX9000)) $(eval $(call generate-ipq-wifi-package,xiaomi_rm1800,Xiaomi RM1800)) $(eval $(call generate-ipq-wifi-package,yuncore_ax880,Yuncore AX880)) +$(eval $(call generate-ipq-wifi-package,zn_m2,ZN M2)) $(eval $(call generate-ipq-wifi-package,zte_mf269,ZTE MF269)) $(eval $(call generate-ipq-wifi-package,zte_mf289f,ZTE MF289F)) $(eval $(call generate-ipq-wifi-package,zte_mf287,ZTE MF287)) diff --git a/package/firmware/ipq-wifi/src/board-zn_m2.ipq6018 b/package/firmware/ipq-wifi/src/board-zn_m2.ipq6018 new file mode 100644 index 000000000..5436c2c3f Binary files /dev/null and b/package/firmware/ipq-wifi/src/board-zn_m2.ipq6018 differ diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-cmiot.dtsi b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-cmiot.dtsi new file mode 100644 index 000000000..5688f94d7 --- /dev/null +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-cmiot.dtsi @@ -0,0 +1,201 @@ +// SPDX-License-Identifier: (GPL-2.0+) + +/dts-v1/; + +#include "ipq6018-256m.dtsi" +#include "ipq6018-ess.dtsi" +#include "ipq6018-opp.dtsi" + + +#include +#include + +/ { + aliases { + serial0 = &blsp1_uart3; + + /* Aliases as required by u-boot to patch MAC addresses */ + ethernet0 = &dp1; + ethernet1 = &dp2; + ethernet2 = &dp3; + ethernet3 = &dp4; + }; + + /delete-node/ rpm-glink; + + chosen { + bootargs-append = " root=/dev/ubiblock0_1 swiotlb=1"; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + gpios = <&tlmm 60 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + + wps { + label = "wps"; + gpios = <&tlmm 9 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; +}; + +&blsp1_uart3 { + pinctrl-0 = <&serial_3_pins>; + pinctrl-names = "default"; + status = "okay"; +}; + +&tlmm { + mdio_pins: mdio-pins { + mdc { + pins = "gpio64"; + function = "mdc"; + drive-strength = <8>; + bias-pull-up; + }; + + mdio { + pins = "gpio65"; + function = "mdio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + button_pins: button_pins { + wps_button { + pins = "gpio9"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + + reset_button { + pins = "gpio60"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + }; +}; + +&switch { + status = "okay"; + + switch_cpu_bmp = <0x1>; /* cpu port bitmap */ + switch_lan_bmp = <0xe>; /* lan port bitmap */ + switch_wan_bmp = <0x10>; /* wan port bitmap */ + switch_inner_bmp = <0xc0>; /*inner port bitmap*/ + switch_mac_mode = <0x0>; /* mac mode for uniphy 0*/ + switch_mac_mode1 = <0xff>; /* mac mode for uniphy 1*/ + switch_mac_mode2 = <0xff>; /* mac mode for uniphy 2*/ + + qcom,port_phyinfo { + port@0 { + port_id = <1>; + phy_address = <0>; + }; + port@1 { + port_id = <2>; + phy_address = <1>; + }; + port@2 { + port_id = <3>; + phy_address = <2>; + }; + port@3 { + port_id = <4>; + phy_address = <3>; + }; + }; +}; + +&edma { + status = "okay"; +}; + +&qpic_nand { + status = "okay"; + + nand@0 { + reg = <0>; + + nand-ecc-strength = <4>; + nand-ecc-step-size = <512>; + nand-bus-width = <8>; + }; +}; + +&qusb_phy_0 { + status = "okay"; +}; + +&ssphy_0 { + status = "okay"; +}; + +&usb3 { + status = "okay"; +}; + +&mdio { + status = "okay"; + + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + reset-gpios = <&tlmm 75 GPIO_ACTIVE_LOW>; + + qca8075_0: ethernet-phy@0 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <0>; + }; + + qca8075_1: ethernet-phy@1 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <1>; + }; + + qca8075_2: ethernet-phy@2 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <2>; + }; + + qca8075_3: ethernet-phy@3 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <3>; + }; +}; + +&dp1 { + status = "okay"; + phy-handle = <&qca8075_0>; + label = "wan"; +}; + +&dp2 { + status = "okay"; + phy-handle = <&qca8075_1>; + label = "lan1"; +}; + +&dp3 { + status = "okay"; + phy-handle = <&qca8075_2>; + label = "lan2"; +}; + +&dp4 { + status = "okay"; + phy-handle = <&qca8075_3>; + label = "lan3"; +}; + +&wifi { + status = "okay"; + qcom,ath11k-fw-memory-mode = <2>; + }; diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-m2.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-m2.dts new file mode 100644 index 000000000..44e9e6d21 --- /dev/null +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-m2.dts @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: (GPL-2.0+) + +/dts-v1/; + +#include "ipq6000-cmiot.dtsi" + +/ { + model = "ZN M2"; + compatible = "zn,m2", "qcom,ipq6018"; + + aliases { + led-boot = &led_power; + led-failsafe = &led_power; + led-running = &led_power; + led-upgrade = &led_power; + }; + + leds { + compatible = "gpio-leds"; + pinctrl-0 = <&leds_pins>; + pinctrl-names = "default"; + + led_power: power { + label = "m2:blue:power"; + gpio = <&tlmm 58 GPIO_ACTIVE_HIGH>; + }; + + mesh { + label = "m2:blue:mesh"; + gpio = <&tlmm 73 GPIO_ACTIVE_HIGH>; + }; + + lan { + label = "m2:blue:lan"; + gpio = <&tlmm 74 GPIO_ACTIVE_HIGH>; + }; + + wan { + label = "m2:blue:wan"; + gpio = <&tlmm 37 GPIO_ACTIVE_HIGH>; + }; + + wlan5g { + label = "m2:blue:wlan5g"; + gpio = <&tlmm 35 GPIO_ACTIVE_HIGH>; + }; + + wlan2g { + label = "m2:blue:wlan2g"; + gpio = <&tlmm 70 GPIO_ACTIVE_HIGH>; + }; + }; +}; + +&tlmm { + leds_pins: leds_pins { + mux { + pins = "gpio35", "gpio37", + "gpio58", "gpio70", + "gpio73", "gpio74"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + }; +}; + +&wifi { + qcom,ath11k-calibration-variant = "ZN-M2"; +}; diff --git a/target/linux/qualcommax/image/ipq60xx.mk b/target/linux/qualcommax/image/ipq60xx.mk index eaa91e443..dc98fb750 100644 --- a/target/linux/qualcommax/image/ipq60xx.mk +++ b/target/linux/qualcommax/image/ipq60xx.mk @@ -85,3 +85,16 @@ define Device/xiaomi_rm1800 DEVICE_PACKAGES := ipq-wifi-xiaomi_rm1800 endef TARGET_DEVICES += xiaomi_rm1800 + +define Device/zn_m2 + $(call Device/FitImage) + $(call Device/UbiFit) + DEVICE_VENDOR := ZN + DEVICE_MODEL := M2 + BLOCKSIZE := 128k + PAGESIZE := 2048 + DEVICE_DTS_CONFIG := config@cp03-c1 + SOC := ipq6000 + DEVICE_PACKAGES := ipq-wifi-zn_m2 +endef +TARGET_DEVICES += zn_m2 diff --git a/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/01_leds b/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/01_leds new file mode 100644 index 000000000..5ace220c3 --- /dev/null +++ b/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/01_leds @@ -0,0 +1,21 @@ + +. /lib/functions/uci-defaults.sh + +board_config_update + +board=$(board_name) + +case "$board" in + xiaomi,rm1800) + ucidef_set_led_netdev "internet" "Internet" "blue:network" "wan" + ;; + zn,m2) + ucidef_set_led_netdev "wan" "WAN" "blue:wan" "eth0" + ucidef_set_led_netdev "wlan2g" "WLAN2G" "blue:wlan2g" "wlan1" + ucidef_set_led_netdev "wlan5g" "WLAN5G" "blue:wlan5g" "wlan0" + ;; +esac + +board_config_flush + +exit 0 diff --git a/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network b/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network index 75f2be164..792fe1438 100644 --- a/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network +++ b/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network @@ -19,7 +19,8 @@ ipq60xx_setup_interfaces() ucidef_set_interfaces_lan_wan "lan1 lan2" "wan" ;; qihoo,360v6|\ - xiaomi,rm1800) + xiaomi,rm1800|\ + zn,m2) ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan" ;; *) diff --git a/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata b/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata index 779099214..fbabf6999 100644 --- a/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata +++ b/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata @@ -12,7 +12,8 @@ case "$FIRMWARE" in glinet,gl-ax1800|\ glinet,gl-axt1800|\ linksys,mr7350|\ - qihoo,360v6) + qihoo,360v6|\ + zn,m2) caldata_extract "0:art" 0x1000 0x20000 ;; esac