From a91ab8bc05b737d7e14976aaf929a71ea37fa1c6 Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Tue, 23 Nov 2021 09:10:14 +0100 Subject: [PATCH] ipq40xx: add support for ZTE MF286D ZTE MF286D is a LTE router with four gigabit ethernet ports and integrated QMI mPCIE modem. Hardware specification: - CPU: IPQ4019 - RAM: 256MB - Flash: NAND 128MB + NOR 2MB - WLAN1: Qualcomm Atheros QCA4019 2.4GHz 802.11bgn 2x2:2 - WLAN2: Qualcomm Atheros QCA4019 5GHz 802.11anac 2x2:2 - LTE: mPCIe cat 12 card (Modem chipset MDM9250) - LAN: 4 Gigabit Ports - USB: 1x USB2.0 (regular port). 1x USB3.0 (mpcie - used by the modem) - Serial console: X8 connector 115200 8n1 Known issues: - Many LEDs are driven by the modem. Only internal LEDs and wifi LEDs are driven by cpu. - Wifi LED is triggered by phy0tpt only - No VoIP support - LAN1/WAN port is configured as WAN - ZTE gives only one MAC per device. Use +1/+2/+3 increment for WAN and WLAN0/1 Opening the case: 1. Take of battery lid (no battery support for this model, battery cage is dummy). 2. Unscrew screw placed behind battery lid. 3. Take off back cover. It attached with multiple plastic clamps. 4. Unscrew four more screws hidden behind back case. 5. Remove front panel from blue chassis. There are more plastic clamps. 6. Unscrew two boards, which secures the PCB in the chassis. 7. Extract board from blue chassis. Console connection (X8 connector): 1. Parameters: 115200 8N1 2. Pin description: (from closest pin to X8 descriptor to farthest) - VCC (3.3V) - TX - RX - GND Install Instructions: Serial + initramfs: 1. Place OpenWrt initramfs image for the device on a TFTP in the server's root. This example uses Server IP: 192.168.1.3 2. Connect serial console (115200,8n1) to X8 connector. 3. Connect TFTP server to RJ-45 port. 4. Stop in u-Boot and run u-Boot commands: setenv serverip 192.168.1.3 setenv ipaddr 192.168.1.72 set fdt_high 0x85000000 tftp openwrt-ipq40xx-generic-zte_mf286d-initramfs-fit-zImage.itb bootm $loadaddr 5. Please make backup of original partitions, if you think about revert to stock. 6. Login via ssh or serial and remove stock partitions: ubiattach -m 9 ubirmvol /dev/ubi0 -N ubi_rootfs ubirmvol /dev/ubi0 -N ubi_rootfs_data 7. Install image via "sysupgrade -n". Signed-off-by: Pawel Dembicki (cosmetic changes to the commit message) Signed-off-by: Christian Lamparter --- package/firmware/ipq-wifi/Makefile | 4 +- .../ipq-wifi/board-zte_mf286d.qca4019 | Bin 0 -> 24308 bytes .../ipq40xx/base-files/etc/board.d/02_network | 5 + .../base-files/etc/board.d/03_gpio_switches | 3 + .../base-files/lib/upgrade/platform.sh | 26 +- target/linux/ipq40xx/config-5.10 | 1 + .../arch/arm/boot/dts/qcom-ipq4019-mf286d.dts | 435 ++++++++++++++++++ target/linux/ipq40xx/image/generic.mk | 13 + .../901-arm-boot-add-dts-files.patch | 3 +- 9 files changed, 487 insertions(+), 3 deletions(-) create mode 100644 package/firmware/ipq-wifi/board-zte_mf286d.qca4019 create mode 100644 target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-mf286d.dts diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile index 8e1dcec20f0..9842725be29 100644 --- a/package/firmware/ipq-wifi/Makefile +++ b/package/firmware/ipq-wifi/Makefile @@ -55,7 +55,8 @@ ALLWIFIBOARDS:= \ plasmacloud_pa1200 \ plasmacloud_pa2200 \ qxwlan_e2600ac \ - teltonika_rutx + teltonika_rutx \ + zte_mf286d ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD)) @@ -147,5 +148,6 @@ $(eval $(call generate-ipq-wifi-package,plasmacloud_pa1200,Plasma Cloud PA1200)) $(eval $(call generate-ipq-wifi-package,plasmacloud_pa2200,Plasma Cloud PA2200)) $(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac,Qxwlan E2600AC)) $(eval $(call generate-ipq-wifi-package,teltonika_rutx,Teltonika RUTX)) +$(eval $(call generate-ipq-wifi-package,zte_mf286d,ZTE MF286D)) $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE)))) diff --git a/package/firmware/ipq-wifi/board-zte_mf286d.qca4019 b/package/firmware/ipq-wifi/board-zte_mf286d.qca4019 new file mode 100644 index 0000000000000000000000000000000000000000..348cf954d75d93f5dcf00afa65603d6c0b4c7783 GIT binary patch literal 24308 zcmeHPdr(tX8b5>}>SE!B5E0@fgzyMLfIu}!l&6$O3KkU!um}{8q(*s#hoK90d{Bsp zU@aITXc?48Q$)t%17fkZc1D@~WB=IMnQc4!=+3OWwyWJ~XLc9&+#5ndNZJI#G{F7B zIp;g)p6{IR{O%#SH{UP!jriE$*!@Xip{c=f>9H9JKq8RTtj#m{2NlLi9?L~IbmI23MgzWgE zogJ`mphRS1V+QsDJCF~+Mn|j$02Kh2a9ktfxnag;GqIrn2oDec{`qq|K6M@V@z3X? zwaFe1ut>RYXxFBh3A}^?kImL*i$25N+PX71!H5O131r|h`_dl4eAMc?GJ5eI>jr_^ zMtt4}kDUNx_5~Xm`dz3L{aQ5D(b3Vt!NFcn0GPm5YNoise)@?9>-x#eVdlCyLz%0r zaHXtu7~3|pGJi3X!-|%=;_TF9-sDY1N1Y^le{$U9pyEt(h3Jjs?UO@Ls}yAQ9Tg3U63!vFxQW5?uEa9|74G?6LpfcMXBd^P1^vwh(#S%;eOr_7 zwH>YBBMQoK+x^)<-TUchIF(!9yfakO^?FNi4ZURSY-#Q8Vs<7Hc^CFe5OZ=|cVFul zbtW}$tMM$o{b6-aNP}0IYyQeYiSSm7fP>?PUu|+mT-`Qr@!YC?!`CaZ_t>8jI1aoZ z!ZH$xWQXPU_V8nQ-K;oXZ_EmHfAscVF3Mv0z&~H6x3>?|o5{>1uh(9aXni5dnV$c{Q3FV?( z4)-w^*@^Dt>=cBep$HG1b3%F5xH{((pFignp)NQ-=0M_#x;}G7JW)@Mryw4Ue-@9V zqN$uzK{y)zEF6hKqc~9l%}LPD@u@V>FME#d-LiL;!}`g0iK6$>VpKKu|FYP&)o@Kp ztihbKPoPAgWC8(VYnT9LUh|qnX&wSZg+PEnfIxsifIxsiU=1U%nY$VBqP)g^4N0f$ z;O;=8DeJWYG78(Tjy}-OwYUD3l?&(CpcSjlv4&3}v2+U&c(Fh%9ALS+W1$6e#N2-7 zjAcW81i7X1u_pk)vR2+Z_QbH{1P28L1qQGfsBLP{xxl~xKj@#0YS6t||7=pTp{;1t zl^B2k*KgR30E7WQ$OQ6&iRA*LGcaLg8zl@zYUp%butuX@fb9!gnatb{7U1*j!1u=h z$X|y5k{fAbE-YPK@F1g6ABe`)iNMPdCn||l1S1eIx=bRke;>*fDB9JILs?3jAPc^^ z_KtmFs`U5sW&MS>pG>NL?g!QTB@x%ow<^0o_|-MxL+heyW7Cq8-j#S_a9=*96Y zyK-GIy#XEv6;PVAkx)DaDu`>+MnUoTr-0j}jeuGXqDhO@kM4@u2CK_ab7ID6nRz9x z7ccj#ZmB;vrLQhjbgQAxP!T#x=gg2v7k>AV>faGZ6?M<#YIg2&>&+>t?k? zqj6~nN=f7Vk|dTsFS_O~c6y`1Xc}P1H4%ag6tFif@l1`lcG*yW={0 z2l5>A9e`UeEv4aa#0NFt+v`t+{gy#btibc9QmFt-TA|Ts083i2u)Yb3)^xEY6Ra~~ z8bj@+{+4>*jX~Q>Yov|nyfo3@u=yVv`P8s|e!aVUdb+#U$!R_nW_}+_YHKo#ODx)) zEnxi-``oEgKvy)9}>dhU5;_8dS~s?nIwyuhDVHG-xe*j_qB2u05tNk#6rR$ilwlo_I3< z4ntQn_Wz>a_T{Mhg0fncDGd4YwpyXAm*ok0>RZZ-vT|V}&sROF>XXaFLLMFajo7{W z{s90QbSR~=147R9i0Zujm^eeoQ;jKm#bRL^FG&5dvRx(-#_<@K!NiomKft?*WtpJV67e4O4b@d;Gc-<9-IaHVtCNxfJk{gM_i&fI zFqiH>2w(%a)E?D2rBt2|T~aDf$;)Lz)eU8jSdtXW3z@#Fx+<>|ALMyx4A_3y8rqe| zqeaUCH|p3>2g z5@pKyZNKq6cCI(GHS9P;?40)5z>)TtMqkO6Jo(6h9^QGcdWyJdAg`Ny8kJHC$FG-P zjCqG$K{@bXP}C9K=ySw9uYTyj<=`fd>Q@Q|M`}KZX$`2~Tq;+joeHaRJGg1j?SaDf zoehk)+;Tp>EgMW%_@AIjR5zqoqner3ltay3>8B&A-Gxp`H-`?r$9u<1;+EI167?jU zV@Q$wfuTwz{}i*_ML5<|(HdVLB%x(I`Y5F(sBTM%%fW$>!@Y^^tmD*@&cUOXqnrI| zsRh@%L`}P;frnjF`>!9n6m`<4f|_?}pr9+Z#k-P{ccEW&iGSLs(lz&N>%q4p#LOH@ z%;;ccciP#28u#KgyK#tx69}vV1eW^r4fqT!ofyGmq$!{0f. + +#include "qcom-ipq4019.dtsi" +#include +#include +#include +#include + +/ { + model = "ZTE MF286D"; + compatible = "zte,mf286d"; + + aliases { + led-boot = &led_internal; + led-failsafe = &led_internal; + led-running = &led_internal; + led-upgrade = &led_internal; + }; + + chosen { + /* + * bootargs forced by u-boot bootipq command: + * 'ubi.mtd=rootfs root=mtd:ubi_rootfs rootfstype=squashfs rootwait' + */ + bootargs-append = " root=/dev/ubiblock0_1"; + }; + + gpio-restart { + compatible = "gpio-restart"; + gpios = <&tlmm 8 GPIO_ACTIVE_HIGH>; + }; + + leds { + compatible = "gpio-leds"; + + led_internal: led-0 { + function = LED_FUNCTION_STATUS; + color = ; + gpios = <&tlmm 10 GPIO_ACTIVE_LOW>; + label = "blue:internal_led"; + default-state = "keep"; + }; + + led-1 { + function = LED_FUNCTION_WLAN; + color = ; + gpios = <&tlmm 61 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy0tpt"; + }; + }; + + keys { + compatible = "gpio-keys"; + + wifi { + label = "wifi"; + linux,code = ; + gpios = <&tlmm 11 GPIO_ACTIVE_LOW>; + }; + + reset { + label = "reset"; + linux,code = ; + gpios = <&tlmm 18 GPIO_ACTIVE_LOW>; + }; + + wps { + label = "wps"; + linux,code = ; + gpios = <&tlmm 68 GPIO_ACTIVE_LOW>; + }; + }; + + soc { + rng@22000 { + status = "okay"; + }; + + mdio@90000 { + status = "okay"; + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + reset-gpios = <&tlmm 47 GPIO_ACTIVE_LOW>; + reset-delay-us = <2000>; + }; + + ess-psgmii@98000 { + status = "okay"; + }; + + tcsr@1949000 { + compatible = "qcom,tcsr"; + reg = <0x1949000 0x100>; + qcom,wifi_glb_cfg = ; + }; + + tcsr@194b000 { + /* select hostmode */ + compatible = "qcom,tcsr"; + reg = <0x194b000 0x100>; + qcom,usb-hsphy-mode-select = ; + status = "okay"; + }; + + ess_tcsr@1953000 { + compatible = "qcom,tcsr"; + reg = <0x1953000 0x1000>; + qcom,ess-interface-select = ; + }; + + tcsr@1957000 { + compatible = "qcom,tcsr"; + reg = <0x1957000 0x100>; + qcom,wifi_noc_memtype_m0_m2 = ; + }; + + usb2@60f8800 { + status = "okay"; + }; + + usb3@8af8800 { + status = "okay"; + }; + + crypto@8e3a000 { + status = "okay"; + }; + + watchdog@b017000 { + status = "okay"; + }; + + ess-switch@c000000 { + status = "okay"; + }; + + edma@c080000 { + status = "okay"; + }; + }; +}; + +&blsp_dma { + status = "okay"; +}; + +&blsp1_spi1 { + pinctrl-0 = <&spi_0_pins>; + pinctrl-names = "default"; + status = "okay"; + cs-gpios = <&tlmm 12 GPIO_ACTIVE_HIGH>; + + flash@0 { + /* u-boot is looking for "n25q128a11" property */ + compatible = "jedec,spi-nor", "n25q128a11"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0>; + spi-max-frequency = <24000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "0:SBL1"; + reg = <0x0 0x40000>; + read-only; + }; + + partition@40000 { + label = "0:MIBIB"; + reg = <0x40000 0x20000>; + read-only; + }; + + partition@60000 { + label = "0:QSEE"; + reg = <0x60000 0x60000>; + read-only; + }; + + partition@c0000 { + label = "0:CDT"; + reg = <0xc0000 0x10000>; + read-only; + }; + + partition@d0000 { + label = "0:DDRPARAMS"; + reg = <0xd0000 0x10000>; + read-only; + }; + + partition@e0000 { + label = "0:APPSBLENV"; + reg = <0xe0000 0x10000>; + read-only; + }; + + partition@f0000 { + label = "0:APPSBL"; + reg = <0xf0000 0xc0000>; + read-only; + }; + + partition@1b0000 { + label = "0:reserved1"; + reg = <0x1b0000 0x50000>; + read-only; + }; + }; + }; +}; + +&blsp1_uart1 { + pinctrl-0 = <&serial_pins>; + pinctrl-names = "default"; + status = "okay"; +}; + +&cryptobam { + status = "okay"; +}; + +&gmac0 { + nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_config_0>; +}; + +&gmac1 { + nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_config_0>; + mac-address-increment = <1>; +}; + +&nand { + pinctrl-0 = <&nand_pins>; + pinctrl-names = "default"; + status = "okay"; + + nand@0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "fota-flag"; + reg = <0x0 0xa0000>; + read-only; + }; + + partition@a0000 { + label = "ART"; + reg = <0xa0000 0x80000>; + read-only; + compatible = "nvmem-cells"; + #address-cells = <1>; + #size-cells = <1>; + + precal_art_1000: precal@1000 { + reg = <0x1000 0x2f20>; + }; + + precal_art_5000: precal@5000 { + reg = <0x5000 0x2f20>; + }; + }; + + partition@120000 { + label = "mac"; + reg = <0x120000 0x80000>; + read-only; + compatible = "nvmem-cells"; + #address-cells = <1>; + #size-cells = <1>; + + macaddr_config_0: macaddr@0 { + reg = <0x0 0x6>; + }; + }; + + partition@1a0000 { + label = "reserved2"; + reg = <0x1a0000 0xc0000>; + read-only; + }; + + partition@260000 { + label = "cfg-param"; + reg = <0x260000 0x400000>; + read-only; + }; + + partition@660000 { + label = "log"; + reg = <0x660000 0x400000>; + }; + + partition@a60000 { + label = "oops"; + reg = <0xa60000 0xa0000>; + }; + + partition@b00000 { + label = "reserved3"; + reg = <0xb00000 0x500000>; + read-only; + }; + + partition@1000000 { + label = "web"; + reg = <0x1000000 0x800000>; + }; + + partition@1800000 { + label = "rootfs"; + reg = <0x1800000 0x1d00000>; + }; + + partition@3500000 { + label = "data"; + reg = <0x3500000 0x1900000>; + }; + + partition@4e00000 { + label = "fota"; + reg = <0x4e00000 0x3200000>; + }; + }; + }; +}; + +&qpic_bam { + status = "okay"; +}; + +&tlmm { + i2c_0_pins: i2c_0_pinmux { + mux { + pins = "gpio20", "gpio21"; + function = "blsp_i2c0"; + bias-disable; + }; + }; + + mdio_pins: mdio_pinmux { + mux_1 { + pins = "gpio6"; + function = "mdio"; + bias-pull-up; + }; + + mux_2 { + pins = "gpio7"; + function = "mdc"; + bias-pull-up; + }; + }; + + nand_pins: nand_pins { + pullups { + pins = "gpio52", "gpio53", "gpio58", + "gpio59"; + function = "qpic"; + bias-pull-up; + }; + + pulldowns { + pins = "gpio54", "gpio55", "gpio56", + "gpio57", "gpio60", + "gpio62", "gpio63", "gpio64", + "gpio65", "gpio66", "gpio67", + "gpio69"; + function = "qpic"; + bias-pull-down; + }; + }; + + serial_pins: serial_pinmux { + mux { + pins = "gpio16", "gpio17"; + function = "blsp_uart0"; + bias-disable; + }; + }; + + spi_0_pins: spi_0_pinmux { + pinmux { + function = "blsp_spi0"; + pins = "gpio13", "gpio14", "gpio15"; + drive-strength = <12>; + bias-disable; + }; + + pinmux_cs { + function = "gpio"; + pins = "gpio12"; + drive-strength = <2>; + bias-disable; + output-high; + }; + }; +}; + +&usb2_hs_phy { + status = "okay"; +}; + +&usb3_ss_phy { + status = "okay"; +}; + +&usb3_hs_phy { + status = "okay"; +}; + +&wifi0 { + status = "okay"; + nvmem-cell-names = "pre-calibration", "mac-address"; + nvmem-cells = <&precal_art_1000>, <&macaddr_config_0>; + mac-address-increment = <2>; + qcom,ath10k-calibration-variant = "zte,mf286d"; +}; + +&wifi1 { + status = "okay"; + nvmem-cell-names = "pre-calibration", "mac-address"; + nvmem-cells = <&precal_art_5000>, <&macaddr_config_0>; + mac-address-increment = <3>; + qcom,ath10k-calibration-variant = "zte,mf286d"; +}; diff --git a/target/linux/ipq40xx/image/generic.mk b/target/linux/ipq40xx/image/generic.mk index b22d261d659..15e9a24544b 100644 --- a/target/linux/ipq40xx/image/generic.mk +++ b/target/linux/ipq40xx/image/generic.mk @@ -977,6 +977,19 @@ define Device/unielec_u4019-32m endef TARGET_DEVICES += unielec_u4019-32m +define Device/zte_mf286d + $(call Device/FitzImage) + DEVICE_VENDOR := ZTE + DEVICE_MODEL := MF286D + SOC := qcom-ipq4019 + DEVICE_DTS_CONFIG := config@ap.dk04.1-c1 + BLOCKSIZE := 128k + PAGESIZE := 2048 + KERNEL_IN_UBI := 1 + DEVICE_PACKAGES := ipq-wifi-zte_mf286d kmod-usb-net-qmi-wwan kmod-usb-serial-option uqmi +endef +TARGET_DEVICES += zte_mf286d + define Device/zyxel_nbg6617 $(call Device/FitImageLzma) DEVICE_VENDOR := ZyXEL diff --git a/target/linux/ipq40xx/patches-5.10/901-arm-boot-add-dts-files.patch b/target/linux/ipq40xx/patches-5.10/901-arm-boot-add-dts-files.patch index 09ea4efddde..c8229f28d73 100644 --- a/target/linux/ipq40xx/patches-5.10/901-arm-boot-add-dts-files.patch +++ b/target/linux/ipq40xx/patches-5.10/901-arm-boot-add-dts-files.patch @@ -10,7 +10,7 @@ Signed-off-by: John Crispin --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -902,11 +902,73 @@ dtb-$(CONFIG_ARCH_QCOM) += \ +@@ -902,11 +902,74 @@ dtb-$(CONFIG_ARCH_QCOM) += \ qcom-apq8074-dragonboard.dtb \ qcom-apq8084-ifc6540.dtb \ qcom-apq8084-mtp.dtb \ @@ -60,6 +60,7 @@ Signed-off-by: John Crispin + qcom-ipq4019-hap-ac3.dtb \ + qcom-ipq4019-map-ac2200.dtb \ + qcom-ipq4019-lhgg-60ad.dtb \ ++ qcom-ipq4019-mf286d.dtb \ + qcom-ipq4019-mr8300.dtb \ + qcom-ipq4019-pa2200.dtb \ + qcom-ipq4019-r619ac-64m.dtb \