ipq40xx: add support for EZVIZ CS-W3-WD1200G EUP
authorTom Brouwer <tombrouwer@outlook.com>
Sun, 12 Jan 2020 12:13:30 +0000 (13:13 +0100)
committerChristian Lamparter <chunkeey@gmail.com>
Sun, 12 Jan 2020 14:57:58 +0000 (15:57 +0100)
Hardware:
SOC:    Qualcomm IPQ4018
RAM: 128 MB Nanya NT5CC64M16GP-DI
FLASH:  16 MB Macronix MX25L12805D
ETH:    Qualcomm QCA8075 (4 Gigabit ports, 3xLAN, 1xWAN)
WLAN:   Qualcomm IPQ4018 (2.4 & 5 Ghz)
BUTTON: Shared WPS/Reset button
LED:    RGB Status/Power LED
SERIAL: Header J8 (UART, Left side of board). Numbered from
        top to bottom:
        (1) GND, (2) TX, (3) RX, (4) VCC (White triangle
        next to it).
        3.3v, 115200, 8N1

Tested/Working:
* Ethernet
* WiFi (2.4 and 5GHz)
* Status LED
* Reset Button (See note below)

Implementation notes:
* The shared WPS/Reset button is implemented as a Reset button
* I could not find a original firmware image to reverse engineer, meaning
currently it's not possible to flash OpenWrt through the Web GUI.

Installation (Through Serial console & TFTP):
1. Set your PC to fixed IP 192.168.1.12, Netmask 255.255.255.0, and connect to
one of the LAN ports
2. Rename the initramfs image to 'C0A8010B.img' and enable a TFTP server on
your pc, to serve the image
2. Connect to the router through serial (See connection properties above)
3. Hit a key during startup, to pause startup
4. type `setenv serverip 192.168.1.12`, to set the tftp server address
5. type `tftpboot`, to load the image from the laptop through tftp
6. type `bootm` to run the loaded image from memory
6. (If you want to return to stock firmware later, create an full MTD backup,
e.g. using instructions here https://openwrt.org/docs/guide-user/installation/generic.backup#create_full_mtd_backup)
7. Transfer the 'sysupgrade' OpenWrt firmware image from PC to router, e.g.:
`scp xxx-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/upgrade.bin`
8. Run sysupgrade to permanently install OpenWrt to flash: `sysupgrade -n /tmp/upgrade.bin`

Revert to stock:
To revert to stock, you need the MTD backup from step 6 above:
1. Unpack the MTD backup archive
2. Transfer the 'firmware' partition image to the router (e.g. mtd8_firmware.backup)
3. On the router, do `mtd write mtd8_firmware.backup firmware`

Signed-off-by: Tom Brouwer <tombrouwer@outlook.com>
[removed BOARD_NAME, OpenWRT->OpenWrt, changed LED device name to board name]
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
package/firmware/ipq-wifi/Makefile
package/firmware/ipq-wifi/board-ezviz_cs-w3-wd1200g-eup.qca4019 [new file with mode: 0644]
target/linux/ipq40xx/base-files/etc/board.d/02_network
target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh
target/linux/ipq40xx/base-files/lib/preinit/06_set_preinit_iface_ipq40xx.sh
target/linux/ipq40xx/files-4.19/arch/arm/boot/dts/qcom-ipq4018-cs-w3-wd1200g-eup.dts [new file with mode: 0644]
target/linux/ipq40xx/image/Makefile
target/linux/ipq40xx/patches-4.19/901-arm-boot-add-dts-files.patch

index 906f11ac962ab61528f954fe2dd8d517aafde898..161954fa1f3e759a4b60cd920237b985be522a03 100644 (file)
@@ -26,6 +26,7 @@ endef
 ALLWIFIBOARDS:= \
        aruba_ap-303 \
        avm_fritzrepeater-1200 \
+       ezviz_cs-w3-wd1200g-eup \
        linksys_ea8300 \
        qxwlan_e2600ac
 
@@ -92,6 +93,7 @@ endef
 
 $(eval $(call generate-ipq-wifi-package,aruba_ap-303,Aruba AP-303))
 $(eval $(call generate-ipq-wifi-package,avm_fritzrepeater-1200,AVM FRITZRepeater 1200))
+$(eval $(call generate-ipq-wifi-package,ezviz_cs-w3-wd1200g-eup,EZVIZ CS-W3-WD1200G EUP))
 $(eval $(call generate-ipq-wifi-package,linksys_ea8300,Linksys EA8300))
 $(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac,Qxwlan E2600AC))
 
diff --git a/package/firmware/ipq-wifi/board-ezviz_cs-w3-wd1200g-eup.qca4019 b/package/firmware/ipq-wifi/board-ezviz_cs-w3-wd1200g-eup.qca4019
new file mode 100644 (file)
index 0000000..987e34c
Binary files /dev/null and b/package/firmware/ipq-wifi/board-ezviz_cs-w3-wd1200g-eup.qca4019 differ
index ae8cb2efe79e5fb8d28f02a71354e1fa4be36062..57caa88c85865c4368865d720736f0d0aa242114 100755 (executable)
@@ -54,6 +54,11 @@ ipq40xx_setup_interfaces()
        compex,wpj428)
                ucidef_set_interface_lan "eth0 eth1"
                ;;
+       ezviz,cs-w3-wd1200g-eup)
+               ucidef_set_interfaces_lan_wan "eth0" "eth1"
+               ucidef_add_switch "switch0" \
+                       "0u@eth0" "2:lan:3" "3:lan:2" "4:lan:1" "0u@eth1" "5:wan"
+               ;;
        glinet,gl-b1300)
                ucidef_set_interfaces_lan_wan "eth0" "eth1"
                ucidef_add_switch "switch0" \
@@ -97,6 +102,9 @@ ipq40xx_setup_macs()
                wan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
                lan_mac=$(macaddr_add "$wan_mac" 1)
                ;;
+       ezviz,cs-w3-wd1200g-eup)
+               label_mac=$(mtd_get_mac_binary "ART" 0x6)
+               ;;
        linksys,ea6350v3)
                wan_mac=$(mtd_get_mac_ascii devinfo hw_mac_addr)
                lan_mac=$(macaddr_add "$wan_mac" 1)
index 8b6abc4ff7a08e3099cd036410afd7d3bfd2684a..3616bff578e8f3e4d46734d8540efe1152d16626 100644 (file)
@@ -46,6 +46,7 @@ case "$FIRMWARE" in
        8dev,jalapeno |\
        alfa-network,ap120c-ac |\
        cilab,meshpoint-one |\
+       ezviz,cs-w3-wd1200g-eup |\
        glinet,gl-b1300 |\
        linksys,ea6350v3 |\
        qcom,ap-dk01.1-c1)
@@ -115,6 +116,7 @@ case "$FIRMWARE" in
        8dev,jalapeno |\
        alfa-network,ap120c-ac |\
        cilab,meshpoint-one |\
+       ezviz,cs-w3-wd1200g-eup |\
        glinet,gl-b1300 |\
        linksys,ea6350v3 |\
        qcom,ap-dk01.1-c1)
index 192488f3778fe97d2e6c48fc3738e6f7aa6def22..1bca152a382e23a5e9ef6ecb1ebe7504bb73e491 100644 (file)
@@ -9,6 +9,10 @@ preinit_set_mac_address() {
                ip link set dev eth0 address $(macaddr_add "$base_mac" +1)
                ip link set dev eth1 address $(macaddr_add "$base_mac" +3)
                ;;
+       ezviz,cs-w3-wd1200g-eup)
+               ip link set dev eth0 address $(mtd_get_mac_binary "ART" 0x6)
+               ip link set dev eth1 address $(mtd_get_mac_binary "ART" 0x0)
+               ;;
        linksys,ea8300)
                base_mac=$(mtd_get_mac_ascii devinfo hw_mac_addr)
                ip link set dev eth0 address "${base_mac}"
index a0dec1042a3dd7416ece3307666c8ecf9d15d277..42667d2dfb060e50f22c949ca6012d24f6dcf96d 100644 (file)
@@ -7,6 +7,7 @@ set_preinit_iface() {
        aruba,ap-303| \
        asus,rt-ac58u| \
        avm,fritzbox-4040| \
+       ezviz,cs-w3-wd1200g-eup| \
        glinet,gl-b1300| \
        linksys,ea8300| \
        meraki,mr33| \
diff --git a/target/linux/ipq40xx/files-4.19/arch/arm/boot/dts/qcom-ipq4018-cs-w3-wd1200g-eup.dts b/target/linux/ipq40xx/files-4.19/arch/arm/boot/dts/qcom-ipq4018-cs-w3-wd1200g-eup.dts
new file mode 100644 (file)
index 0000000..d8b9e7e
--- /dev/null
@@ -0,0 +1,242 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+
+#include "qcom-ipq4019.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/soc/qcom,tcsr.h>
+
+/ {
+       model = "EZVIZ CS-W3-WD1200G EUP";
+       compatible = "ezviz,cs-w3-wd1200g-eup";
+
+       aliases {
+               led-boot = &led_status_green;
+               led-failsafe = &led_status_red;
+               led-running = &led_status_blue;
+               led-upgrade = &led_status_green;
+       };
+
+       soc {
+               rng@22000 {
+                       status = "okay";
+               };
+
+               mdio@90000 {
+                       status = "okay";
+                       pinctrl-0 = <&mdio_pins>;
+                       pinctrl-names = "default";
+                       reset-gpios = <&tlmm 59 GPIO_ACTIVE_LOW>;
+                       reset-delay-us = <5000>;
+               };
+
+               ess-psgmii@98000 {
+                       status = "okay";
+               };
+
+               tcsr@1949000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x1949000 0x100>;
+                       qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
+               };
+
+               tcsr@194b000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x194b000 0x100>;
+                       qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>;
+               };
+
+               ess_tcsr@1953000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x1953000 0x1000>;
+                       qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
+               };
+
+               tcsr@1957000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x1957000 0x100>;
+                       qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
+               };
+
+               crypto@8e3a000 {
+                       status = "okay";
+               };
+
+               watchdog@b017000 {
+                       status = "okay";
+               };
+
+               ess-switch@c000000 {
+                       status = "okay";
+               };
+
+               edma@c080000 {
+                       status = "okay";
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led_status_red: status_red {
+                       label = "cs-w3-wd1200g-eup:red:status";
+                       gpios = <&tlmm 0 GPIO_ACTIVE_LOW>;
+               };
+
+               led_status_green: status_green {
+                       label = "cs-w3-wd1200g-eup:green:status";
+                       gpios = <&tlmm 3 GPIO_ACTIVE_LOW>;
+               };
+
+               led_status_blue: status_blue {
+                       label = "cs-w3-wd1200g-eup:blue:status";
+                       gpios = <&tlmm 58 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       gpios = <&tlmm 63 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+       };
+};
+
+&tlmm {
+       serial_pins: serial_pinmux {
+               mux {
+                       pins = "gpio60", "gpio61";
+                       function = "blsp_uart0";
+                       bias-disable;
+               };
+       };
+
+       mdio_pins: mdio_pinmux {
+               mux_1 {
+                       pins = "gpio53";
+                       function = "mdio";
+                       bias-pull-up;
+               };
+
+               mux_2 {
+                       pins = "gpio52";
+                       function = "mdc";
+                       bias-pull-up;
+               };
+       };
+
+       spi_0_pins: spi_0_pinmux {
+               pin {
+                       function = "blsp_spi0";
+                       pins = "gpio55", "gpio56", "gpio57";
+                       drive-strength = <12>;
+                       bias-disable;
+               };
+               pin_cs {
+                       function = "gpio";
+                       pins = "gpio54";
+                       drive-strength = <2>;
+                       bias-disable;
+                       output-high;
+               };
+       };
+};
+
+&blsp_dma {
+       status = "okay";
+};
+
+&blsp1_spi1 {
+       pinctrl-0 = <&spi_0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+       cs-gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <24000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition0@0 {
+                               label = "SBL1";
+                               reg = <0x00000000 0x00040000>;
+                               read-only;
+                       };
+
+                       partition1@40000 {
+                               label = "MIBIB";
+                               reg = <0x00040000 0x00020000>;
+                               read-only;
+                       };
+
+                       partition2@60000 {
+                               label = "QSEE";
+                               reg = <0x00060000 0x00060000>;
+                               read-only;
+                       };
+
+                       partition3@c0000 {
+                               label = "CDT";
+                               reg = <0x000c0000 0x00010000>;
+                               read-only;
+                       };
+
+                       partition4@d0000 {
+                               label = "DDRPARAMS";
+                               reg = <0x000d0000 0x00010000>;
+                               read-only;
+                       };
+
+                       partition5@E0000 {
+                               label = "APPSBLENV";
+                               reg = <0x000e0000 0x00010000>;
+                               read-only;
+                       };
+
+                       partition6@F0000 {
+                               label = "APPSBL";
+                               reg = <0x000f0000 0x00080000>;
+                               read-only;
+                       };
+
+                       partition7@170000 {
+                               label = "ART";
+                               reg = <0x00170000 0x00010000>;
+                               read-only;
+                       };
+
+                       partition9@580000 {
+                               compatible = "denx,fit";
+                               label = "firmware";
+                               reg = <0x00180000 0x00e80000>;
+                       };
+               };
+       };
+};
+
+&blsp1_uart1 {
+       pinctrl-0 = <&serial_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&cryptobam {
+       status = "okay";
+};
+
+&wifi0 {
+       status = "okay";
+       qcom,ath10k-calibration-variant = "ezviz-cs-w3-wd1200g-eup";
+};
+
+&wifi1 {
+       status = "okay";
+       qcom,ath10k-calibration-variant = "ezviz-cs-w3-wd1200g-eup";
+};
index f68a8d528824d6595a38a03bf2ccf9647255fa34..0a8dca26bc3bdb59716d286fa3bd23f81878f9fc 100644 (file)
@@ -257,6 +257,22 @@ define Device/engenius_ens620ext
 endef
 TARGET_DEVICES += engenius_ens620ext
 
+define Device/ezviz_cs-w3-wd1200g-eup
+       $(call Device/FitImage)
+       DEVICE_VENDOR := EZVIZ
+       DEVICE_MODEL := CS-W3-WD1200G
+       DEVICE_VARIANT := EUP
+       DEVICE_DTS_CONFIG := config@4
+       IMAGE_SIZE := 14848k
+       SOC := qcom-ipq4018
+       IMAGES := sysupgrade.bin
+       IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | \
+               append-metadata
+       DEVICE_PACKAGES := -kmod-ath10k-ct kmod-ath10k-ct-smallbuffers \
+               ipq-wifi-ezviz_cs-w3-wd1200g-eup
+endef
+TARGET_DEVICES += ezviz_cs-w3-wd1200g-eup
+
 define Device/glinet_gl-b1300
        $(call Device/FitImage)
        DEVICE_VENDOR := GL.iNet
index 8e97b3b51b884e33f87e68ac0dfe0b5466ea522d..d14b148cb2036f44226270c0e8f3b1f9b7b5a6da 100644 (file)
@@ -10,12 +10,13 @@ Signed-off-by: John Crispin <john@phrozen.org>
 
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
-@@ -785,11 +785,38 @@ dtb-$(CONFIG_ARCH_QCOM) += \
+@@ -785,11 +785,39 @@ dtb-$(CONFIG_ARCH_QCOM) += \
        qcom-apq8074-dragonboard.dtb \
        qcom-apq8084-ifc6540.dtb \
        qcom-apq8084-mtp.dtb \
 +      qcom-ipq4018-a42.dtb \
 +      qcom-ipq4018-ap120c-ac.dtb \
++      qcom-ipq4018-cs-w3-wd1200g-eup.dtb \
 +      qcom-ipq4018-ea6350v3.dtb \
 +      qcom-ipq4018-eap1300.dtb \
 +      qcom-ipq4018-ens620ext.dtb \