From 4b280ad91a6b155ac71c417aaa7bb5f4e328712f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Fr=C3=BChling?= Date: Mon, 11 Jun 2018 23:10:43 +0200 Subject: [PATCH] ipq40xx: add support for ZyXEL WRE6606 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Specifications: SOC: Qualcomm IPQ4018 (DAKOTA) ARM Quad-Core RAM: 128 MB Nanya NT5CC64M16GP-DI FLASH: 16 MiB Macronix MX25L12845EMI-12G ETH: Qualcomm QCA8072 WLAN1: Qualcomm Atheros QCA4018 2.4GHz 802.11b/g/n 2x2 WLAN2: Qualcomm Atheros QCA4018 5GHz 802.11n/ac W2 2x2 INPUT: WPS, Mode-toggle-switch LED: Power, WLAN 2.4GHz, WLAN 5GHz, LAN, WPS (LAN not controllable by software) (WLAN each green / red) SERIAL: Header next to eth-phy. VCC, TX, GND, RX (Square hole is VCC) The Serial setting is 115200-8-N-1. Tested and working: - Ethernet (Correct MAC-address) - 2.4 GHz WiFi (Correct MAC-address) - 5 GHz WiFi (Correct MAC-address) - Factory installation from tftp - OpenWRT sysupgrade - LEDs - WPS Button Not Working: - Mode-toggle-switch Install via TFTP: Connect to the devices serial. Hit Enter-Key in bootloader to stop autobooting. Command `tftpboot` will pull an initramfs image named `C0A86302.img` from a tftp server at `192.168.99.08/24`. After successfull transfer, boot the image with `bootm`. To persistently write the firmware, flash an openwrt sysupgrade image from inside the initramfs, for example transfer via `scp root@192.168.1.1:/tmp` and flash on the device with `sysupgrade -n /tmp/`. append-cmdline patch taken from chunkeeys work on the NBG6617. Signed-off-by: Magnus Frühling Co-authored-by: David Bauer Co-authored-by: Christian Lamparter --- package/firmware/ipq-wifi/Makefile | 3 +- .../firmware/ipq-wifi/board-zyxel_wre6606.bin | Bin 0 -> 24316 bytes .../ipq40xx/base-files/etc/board.d/01_leds | 4 + .../ipq40xx/base-files/etc/board.d/02_network | 3 +- .../etc/hotplug.d/firmware/11-ath10k-caldata | 8 + .../arm/boot/dts/qcom-ipq4018-wre6606.dts | 261 ++++++++++++++++++ target/linux/ipq40xx/image/Makefile | 11 + .../069-arm-boot-add-dts-files.patch | 3 +- .../997-device_tree_cmdline.patch | 12 + 9 files changed, 302 insertions(+), 3 deletions(-) create mode 100644 package/firmware/ipq-wifi/board-zyxel_wre6606.bin create mode 100644 target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-wre6606.dts create mode 100644 target/linux/ipq40xx/patches-4.14/997-device_tree_cmdline.patch diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile index d53ab298d4..1cfcc33de3 100644 --- a/package/firmware/ipq-wifi/Makefile +++ b/package/firmware/ipq-wifi/Makefile @@ -14,7 +14,7 @@ define Build/Compile endef #ALLWIFIBOARDS:= -ALLWIFIBOARDS:= +ALLWIFIBOARDS:=zyxel_wre6606 ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD)) define Package/ipq-wifi-default @@ -48,6 +48,7 @@ Don't install it for any other device! PREV_BOARD+=ipq-wifi-$(1) endef +$(eval $(call generate-ipq-wifi-package,zyxel_wre6606,board-zyxel_wre6606.bin,ZyXEL WRE6606)) #$(eval $(call generate-ipq-wifi-package,,,)) $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE)))) diff --git a/package/firmware/ipq-wifi/board-zyxel_wre6606.bin b/package/firmware/ipq-wifi/board-zyxel_wre6606.bin new file mode 100644 index 0000000000000000000000000000000000000000..262c07b04a898eb8e2629d2fed11d517df96b3f6 GIT binary patch literal 24316 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 ZV{1J7>2}AS + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include "qcom-ipq4019.dtsi" +#include "qcom-ipq4019-bus.dtsi" +#include +#include +#include + +/ { + model = "ZyXEL WRE6606"; + compatible = "zyxel,wre6606", "qcom,ipq4019"; + + aliases { + led-boot = &power; + led-failsafe = &power; + led-running = &power; + led-upgrade = &power; + }; + + chosen { + bootargs-append = " mtdparts="; + }; + + soc { + mdio@90000 { + status = "okay"; + }; + + ess-psgmii@98000 { + status = "okay"; + }; + + tcsr@1949000 { + compatible = "qcom,tcsr"; + reg = <0x1949000 0x100>; + qcom,wifi_glb_cfg = ; + }; + + 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 = ; + }; + + serial@78af000 { + pinctrl-0 = <&serial_pins>; + pinctrl-names = "default"; + status = "okay"; + }; + + crypto@8e3a000 { + status = "okay"; + }; + + watchdog@b017000 { + status = "okay"; + }; + + ess-switch@c000000 { + status = "okay"; + }; + + edma@c080000 { + status = "okay"; + qcom,num_gmac = <1>; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + + wps { + label = "wre6606:green:wps"; + gpios = <&tlmm 1 GPIO_ACTIVE_HIGH>; + }; + + wlan5g_green { + label = "wre6606:green:wlan5g"; + gpios = <&tlmm 3 GPIO_ACTIVE_HIGH>; + }; + + power: power { + label = "wre6606:green:power"; + gpios = <&tlmm 4 GPIO_ACTIVE_HIGH>; + }; + + wlan5g_red { + label = "wre6606:red:wlan5g"; + gpios = <&tlmm 5 GPIO_ACTIVE_HIGH>; + }; + + wlan2g_red { + label = "wre6606:red:wlan2g"; + gpios = <&tlmm 58 GPIO_ACTIVE_HIGH>; + }; + + wlan2g_green { + label = "wre6606:green:wlan2g"; + gpios = <&tlmm 59 GPIO_ACTIVE_HIGH>; + }; + }; + + gpio-keys { + compatible = "gpio-keys"; + + wps { + label = "wps"; + gpios = <&tlmm 63 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; +}; + +&tlmm { + serial_pins: serial_pinmux { + mux { + pins = "gpio60", "gpio61"; + function = "blsp_uart0"; + bias-disable; + }; + }; + + 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; + }; + }; +}; + +&spi_0 { + pinctrl-0 = <&spi_0_pins>; + pinctrl-names = "default"; + status = "okay"; + cs-gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>; + + mx25l12805d@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; + }; + + partition8@180000 { + label = "firmware"; + reg = <0x00180000 0x00ce0000>; + }; + + partition9@e60000 { + label = "manufacture"; + reg = <0x00e60000 0x00050000>; + read-only; + }; + + partition10@eb0000 { + label = "storage"; + reg = <0x00eb0000 0x00150000>; + read-only; + }; + }; + }; +}; + +&blsp_dma { + status = "okay"; +}; + +&cryptobam { + status = "okay"; +}; + +&wifi0 { + status = "okay"; + qcom,ath10k-calibration-variant = "ZyXEL-WRE6606"; +}; + +&wifi1 { + status = "okay"; + qcom,ath10k-calibration-variant = "ZyXEL-WRE6606"; +}; diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile index 8ba2697e4f..38600cf979 100644 --- a/target/linux/ipq40xx/image/Makefile +++ b/target/linux/ipq40xx/image/Makefile @@ -205,4 +205,15 @@ define Device/qcom_ap-dk04.1-c1 endef TARGET_DEVICES += qcom_ap-dk04.1-c1 +define Device/zyxel_wre6606 + $(call Device/FitImage) + DEVICE_TITLE := ZyXEL WRE6606 + DEVICE_DTS_CONFIG := config@4 + DEVICE_DTS := qcom-ipq4018-wre6606 + DEVICE_PACKAGES := ipq-wifi-zyxel_wre6606 + IMAGES := sysupgrade.bin + IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata +endef +TARGET_DEVICES += zyxel_wre6606 + $(eval $(call BuildImage)) diff --git a/target/linux/ipq40xx/patches-4.14/069-arm-boot-add-dts-files.patch b/target/linux/ipq40xx/patches-4.14/069-arm-boot-add-dts-files.patch index 5b9317eb0e..3aa368be83 100644 --- a/target/linux/ipq40xx/patches-4.14/069-arm-boot-add-dts-files.patch +++ b/target/linux/ipq40xx/patches-4.14/069-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 -@@ -697,7 +697,18 @@ dtb-$(CONFIG_ARCH_QCOM) += \ +@@ -697,7 +697,19 @@ dtb-$(CONFIG_ARCH_QCOM) += \ qcom-apq8074-dragonboard.dtb \ qcom-apq8084-ifc6540.dtb \ qcom-apq8084-mtp.dtb \ @@ -20,6 +20,7 @@ Signed-off-by: John Crispin + qcom-ipq4018-fritz4040.dtb \ + qcom-ipq4018-jalapeno.dtb \ + qcom-ipq4018-rt-ac58u.dtb \ ++ qcom-ipq4018-wre6606.dtb \ qcom-ipq4019-ap.dk01.1-c1.dtb \ + qcom-ipq4019-a62.dtb \ + qcom-ipq4019-ap.dk04.1-c1.dtb \ diff --git a/target/linux/ipq40xx/patches-4.14/997-device_tree_cmdline.patch b/target/linux/ipq40xx/patches-4.14/997-device_tree_cmdline.patch new file mode 100644 index 0000000000..51a35c17d9 --- /dev/null +++ b/target/linux/ipq40xx/patches-4.14/997-device_tree_cmdline.patch @@ -0,0 +1,12 @@ +--- a/drivers/of/fdt.c ++++ b/drivers/of/fdt.c +@@ -1127,6 +1127,9 @@ int __init early_init_dt_scan_chosen(uns + p = of_get_flat_dt_prop(node, "bootargs", &l); + if (p != NULL && l > 0) + strlcpy(data, p, min((int)l, COMMAND_LINE_SIZE)); ++ p = of_get_flat_dt_prop(node, "bootargs-append", &l); ++ if (p != NULL && l > 0) ++ strlcat(data, p, min_t(int, strlen(data) + (int)l, COMMAND_LINE_SIZE)); + + /* + * CONFIG_CMDLINE is meant to be a default in case nothing else