From 54ffc0138fd79067b5690eac56d1c3ea9c7c665d Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Sat, 29 Jan 2022 09:03:11 +0900 Subject: [PATCH] ipq807x: add Edgecore EAP102 The Edgecore EAP102 is a wall/ceiling mountable AP. The AP can be powered by either PoE or AC adapter. Device info: - IPQ8071-A SoC - 1GiB RAM - 256MiB NAND flash - 32MiB SPI NOR - 2 Ethernet ports - 1 Console port - 2GHz/5GHz AX WLAN - 2 USB 2.0 ports Install instructions: Prerequistes - TFTP server, preferrably within 192.168.1.0/24 Console cable plugged in (115200 8N1 no flow control) 1. Power on device and interrupt u-boot to obtain u-boot CLI 2. set serverip to IP address of the TFTP server: `setenv serverip 192.168.1.250` 3. Download image from TFTP server: `tftpboot 0x44000000 openwrt-ipq807x-generic-edgecore_eap102-squashfs-nand-factory.ubi` 4. Flash ubi image to both partitions and reset: `sf probe imxtract 0x44000000 ubi nand device 0 nand erase 0x0 0x3400000 nand erase 0x3c00000 0x3400000 nand write $fileaddr 0x0 $filesize nand write $fileaddr 0x3c00000 $filesize reset` Signed-off-by: Matthew Hagan --- package/boot/uboot-envtools/files/ipq807x | 5 + package/firmware/ipq-wifi/Makefile | 2 + .../ipq-wifi/board-edgecore_eap102.ipq8074 | Bin 0 -> 131180 bytes .../ipq807x/base-files/etc/board.d/01_leds | 3 + .../ipq807x/base-files/etc/board.d/02_network | 3 + .../etc/hotplug.d/firmware/11-ath11k-caldata | 1 + .../ipq807x/base-files/etc/init.d/bootcount | 5 + .../base-files/lib/upgrade/platform.sh | 12 + .../arm64/boot/dts/qcom/ipq8071-eap102.dts | 674 ++++++++++++++++++ target/linux/ipq807x/image/generic.mk | 14 + 10 files changed, 719 insertions(+) create mode 100644 package/firmware/ipq-wifi/board-edgecore_eap102.ipq8074 create mode 100644 target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8071-eap102.dts diff --git a/package/boot/uboot-envtools/files/ipq807x b/package/boot/uboot-envtools/files/ipq807x index e7057945b8cf06..71fa7b7b7992a9 100644 --- a/package/boot/uboot-envtools/files/ipq807x +++ b/package/boot/uboot-envtools/files/ipq807x @@ -8,6 +8,11 @@ touch /etc/config/ubootenv board=$(board_name) case "$board" in +edgecore,eap102) + idx="$(find_mtd_index 0:appsblenv)" + [ -n "$idx" ] && \ + ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x10000" "0x10000" "1" + ;; edimax,cax1800) idx="$(find_mtd_index 0:appsblenv)" [ -n "$idx" ] && \ diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile index 02f50db5c98575..db88d9e24c2362 100644 --- a/package/firmware/ipq-wifi/Makefile +++ b/package/firmware/ipq-wifi/Makefile @@ -27,6 +27,7 @@ endef ALLWIFIBOARDS:= \ aruba_ap-365 \ devolo_magic-2-wifi-next \ + edgecore_eap102 \ edgecore_ecw5410 \ edgecore_oap100 \ edimax_cax1800 \ @@ -118,6 +119,7 @@ endef $(eval $(call generate-ipq-wifi-package,aruba_ap-365,Aruba AP-365)) $(eval $(call generate-ipq-wifi-package,devolo_magic-2-wifi-next,devolo Magic 2 WiFi next)) +$(eval $(call generate-ipq-wifi-package,edgecore_eap102,Edgecore EAP102)) $(eval $(call generate-ipq-wifi-package,edgecore_ecw5410,Edgecore ECW5410)) $(eval $(call generate-ipq-wifi-package,edgecore_oap100,Edgecore OAP100)) $(eval $(call generate-ipq-wifi-package,edimax_cax1800,Edimax CAX1800)) diff --git a/package/firmware/ipq-wifi/board-edgecore_eap102.ipq8074 b/package/firmware/ipq-wifi/board-edgecore_eap102.ipq8074 new file mode 100644 index 0000000000000000000000000000000000000000..36d0f42fb9707321f84398e6a04f6173ebad6b27 GIT binary patch literal 131180 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 TfIvVXAP^7;2m}NI0R;X(w@xMs literal 0 HcmV?d00001 diff --git a/target/linux/ipq807x/base-files/etc/board.d/01_leds b/target/linux/ipq807x/base-files/etc/board.d/01_leds index 8f13f8e2ff5969..d48dcfa385fd18 100644 --- a/target/linux/ipq807x/base-files/etc/board.d/01_leds +++ b/target/linux/ipq807x/base-files/etc/board.d/01_leds @@ -6,6 +6,9 @@ board_config_update board=$(board_name) case "$board" in +edgecore,eap102) + ucidef_set_led_netdev "wan" "WAN" "green:wanpoe" "eth0" + ;; redmi,ax6|\ xiaomi,ax3600) ucidef_set_led_netdev "wan" "WAN" "blue:network" "eth0" diff --git a/target/linux/ipq807x/base-files/etc/board.d/02_network b/target/linux/ipq807x/base-files/etc/board.d/02_network index 281ece63559e69..aa0e341b61ea45 100644 --- a/target/linux/ipq807x/base-files/etc/board.d/02_network +++ b/target/linux/ipq807x/base-files/etc/board.d/02_network @@ -11,6 +11,9 @@ ipq807x_setup_interfaces() local board="$1" case "$board" in + edgecore,eap102) + ucidef_set_interfaces_lan_wan "eth1" "eth0" + ;; edimax,cax1800) ucidef_set_interfaces_lan_wan "eth0" ;; diff --git a/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata b/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata index 7ac05f299256e9..a2290ac124aa08 100644 --- a/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata +++ b/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata @@ -9,6 +9,7 @@ board=$(board_name) case "$FIRMWARE" in "ath11k/IPQ8074/hw2.0/cal-ahb-c000000.wifi.bin") case "$board" in + edgecore,eap102|\ edimax,cax1800|\ qnap,301w|\ redmi,ax6|\ diff --git a/target/linux/ipq807x/base-files/etc/init.d/bootcount b/target/linux/ipq807x/base-files/etc/init.d/bootcount index fedf3e21d8a1af..6d5f3abf914720 100755 --- a/target/linux/ipq807x/base-files/etc/init.d/bootcount +++ b/target/linux/ipq807x/base-files/etc/init.d/bootcount @@ -4,6 +4,11 @@ START=99 boot() { case $(board_name) in + edgecore,eap102) + fw_setenv upgrade_available 0 + # Unset changed flag after sysupgrade complete + fw_setenv changed + ;; redmi,ax6|\ xiaomi,ax3600|\ xiaomi,ax9000) diff --git a/target/linux/ipq807x/base-files/lib/upgrade/platform.sh b/target/linux/ipq807x/base-files/lib/upgrade/platform.sh index acfed82b3ec5a6..a2b653c8195340 100644 --- a/target/linux/ipq807x/base-files/lib/upgrade/platform.sh +++ b/target/linux/ipq807x/base-files/lib/upgrade/platform.sh @@ -10,6 +10,18 @@ platform_check_image() { platform_do_upgrade() { case "$(board_name)" in + edgecore,eap102) + active="$(fw_printenv -n active)" + if [ "$active" -eq "1" ]; then + CI_UBIPART="rootfs2" + else + CI_UBIPART="rootfs1" + fi + # force altbootcmd which handles partition change in u-boot + fw_setenv bootcount 3 + fw_setenv upgrade_available 1 + nand_do_upgrade "$1" + ;; edimax,cax1800) nand_do_upgrade "$1" ;; diff --git a/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8071-eap102.dts b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8071-eap102.dts new file mode 100644 index 00000000000000..0c5950fa9a51de --- /dev/null +++ b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8071-eap102.dts @@ -0,0 +1,674 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* Copyright (c) 2022, Matthew Hagan */ + +/dts-v1/; + +#include "ipq8074.dtsi" +#include "ipq8074-ac-cpu.dtsi" +#include "ipq8074-ess.dtsi" +#include +#include + +/ { + model = "Edgecore EAP102"; + compatible = "edgecore,eap102", "qcom,ipq8074"; + + aliases { + serial0 = &blsp1_uart5; + serial1 = &blsp1_uart3; + led-boot = &led_system_green; + led-failsafe = &led_system_green; + led-running = &led_system_green; + led-upgrade = &led_system_green; + /* Aliases as required by u-boot to patch MAC addresses */ + ethernet1 = &dp5; + ethernet0 = &dp6; + label-mac-device = &dp6; + }; + + chosen { + stdout-path = "serial0:115200n8"; + bootargs-append = " root=/dev/ubiblock0_1"; + }; + + keys { + compatible = "gpio-keys"; + pinctrl-0 = <&button_pins>; + pinctrl-names = "default"; + + reset { + label = "reset"; + gpios = <&tlmm 66 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_wanpoe { + label = "green:wanpoe"; + gpios = <&tlmm 46 GPIO_ACTIVE_HIGH>; + }; + + led_wlan2g { + label = "green:wlan2g"; + gpio = <&tlmm 47 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "phy1radio"; + }; + + led_wlan5g { + label = "green:wlan5g"; + gpio = <&tlmm 48 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "phy0radio"; + }; + + led_system_green: led_system { + label = "green:power"; + gpios = <&tlmm 50 GPIO_ACTIVE_HIGH>; + }; + }; +}; + +&tlmm { + mdio_pins: mdio-pins { + mdc { + pins = "gpio68"; + function = "mdc"; + drive-strength = <8>; + bias-pull-up; + }; + + mdio { + pins = "gpio69"; + function = "mdio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + button_pins: button_pins { + reset_button { + pins = "gpio66"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + }; +}; + +&blsp1_spi1 { + status = "okay"; + + flash@0 { + #address-cells = <1>; + #size-cells = <1>; + reg = <0>; + compatible = "jedec,spi-nor"; + spi-max-frequency = <50000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "0:sbl1"; + reg = <0x0 0x50000>; + read-only; + }; + + partition@50000 { + label = "0:mibib"; + reg = <0x50000 0x10000>; + read-only; + }; + + partition@60000 { + label = "0:bootconfig"; + reg = <0x60000 0x20000>; + read-only; + }; + + partition@80000 { + label = "0:bootconfig1"; + reg = <0x80000 0x20000>; + read-only; + }; + + partition@a0000 { + label = "0:qsee"; + reg = <0xa0000 0x180000>; + read-only; + }; + + partition@220000 { + label = "0:qsee_1"; + reg = <0x220000 0x180000>; + read-only; + }; + + partition@3a0000 { + label = "0:devcfg"; + reg = <0x3a0000 0x10000>; + read-only; + }; + + partition@3b0000 { + label = "0:devcfg_1"; + reg = <0x3b0000 0x10000>; + read-only; + }; + + partition@3c0000 { + label = "0:apdp"; + reg = <0x3c0000 0x10000>; + read-only; + }; + + partition@3d0000 { + label = "0:apdp_1"; + reg = <0x3d0000 0x10000>; + read-only; + }; + + partition@3e0000 { + label = "0:rpm"; + reg = <0x3e0000 0x40000>; + read-only; + }; + + partition@420000 { + label = "0:rpm_1"; + reg = <0x420000 0x40000>; + read-only; + }; + + partition@460000 { + label = "0:cdt"; + reg = <0x460000 0x10000>; + read-only; + }; + + partition@470000 { + label = "0:cdt_1"; + reg = <0x470000 0x10000>; + read-only; + }; + + partition@480000 { + label = "0:appsblenv"; + reg = <0x480000 0x10000>; + }; + + partition@490000 { + label = "0:appsbl"; + reg = <0x490000 0xc0000>; + read-only; + }; + + partition@550000 { + label = "0:appsbl_1"; + reg = <0x530000 0xc0000>; + read-only; + }; + + partition@610000 { + label = "0:art"; + reg = <0x610000 0x40000>; + read-only; + }; + + partition@650000 { + label = "0:ethphyfw"; + reg = <0x650000 0x80000>; + read-only; + }; + + partition@6d0000 { + label = "0:product_info"; + reg = <0x6d0000 0x80000>; + read-only; + }; + + partition@750000 { + label = "priv_data1"; + reg = <0x750000 0x10000>; + read-only; + }; + + partition@760000 { + label = "priv_data2"; + reg = <0x760000 0x10000>; + read-only; + }; + }; + }; +}; + +&blsp1_uart3 { + status = "okay"; +}; + +&blsp1_uart5 { + status = "okay"; +}; + +&crypto { + status = "okay"; +}; + +&cryptobam { + status = "okay"; +}; + +&prng { + status = "okay"; +}; + +&qpic_bam { + status = "okay"; +}; + +&qusb_phy_0 { + status = "okay"; +}; + +&ssphy_0 { + status = "okay"; +}; + +&usb_0 { + status = "okay"; +}; + +&qpic_nand { + status = "okay"; + + nand@0 { + reg = <0>; + nand-ecc-strength = <8>; + nand-ecc-step-size = <512>; + nand-bus-width = <8>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "rootfs1"; + reg = <0x0000000 0x3400000>; + }; + + partition@3400000 { + label = "0:wififw"; + reg = <0x3400000 0x800000>; + read-only; + }; + + partition@3c00000 { + label = "rootfs2"; + reg = <0x3c00000 0x3400000>; + }; + + partition@7000000 { + label = "0:wififw_1"; + reg = <0x7000000 0x800000>; + read-only; + }; + }; + }; +}; + +&mdio { + status = "okay"; + + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + + qca8081_24: ethernet-phy@24 { + compatible = "ethernet-phy-id004d.d101"; + reg = <24>; + reset-gpios = <&tlmm 33 GPIO_ACTIVE_LOW>; + }; + + qca8081_28: ethernet-phy@28 { + compatible = "ethernet-phy-id004d.d101"; + reg = <28>; + reset-gpios = <&tlmm 44 GPIO_ACTIVE_LOW>; + }; +}; + +&switch { + status = "okay"; + + switch_cpu_bmp = <0x1>; /* cpu port bitmap */ + switch_lan_bmp = <0x3e>; /* lan port bitmap */ + switch_wan_bmp = <0x40>; /* wan port bitmap */ + switch_mac_mode = <0xff>; /* mac mode for uniphy instance0*/ + switch_mac_mode1 = <0xf>; /* mac mode for uniphy instance1*/ + switch_mac_mode2 = <0xf>; /* mac mode for uniphy instance2*/ + bm_tick_mode = <0>; /* bm tick mode */ + tm_tick_mode = <0>; /* tm tick mode */ + + qcom,port_phyinfo { + port@4 { + port_id = <5>; + phy_address = <24>; + port_mac_sel = "QGMAC_PORT"; + }; + port@5 { + port_id = <6>; + phy_address = <28>; + port_mac_sel = "QGMAC_PORT"; + }; + }; + + port_scheduler_resource { + port@0 { + port_id = <0>; + ucast_queue = <0 143>; + mcast_queue = <256 271>; + l0sp = <0 35>; + l0cdrr = <0 47>; + l0edrr = <0 47>; + l1cdrr = <0 7>; + l1edrr = <0 7>; + }; + port@1 { + port_id = <1>; + ucast_queue = <144 159>; + mcast_queue = <272 275>; + l0sp = <36 39>; + l0cdrr = <48 63>; + l0edrr = <48 63>; + l1cdrr = <8 11>; + l1edrr = <8 11>; + }; + port@2 { + port_id = <2>; + ucast_queue = <160 175>; + mcast_queue = <276 279>; + l0sp = <40 43>; + l0cdrr = <64 79>; + l0edrr = <64 79>; + l1cdrr = <12 15>; + l1edrr = <12 15>; + }; + port@3 { + port_id = <3>; + ucast_queue = <176 191>; + mcast_queue = <280 283>; + l0sp = <44 47>; + l0cdrr = <80 95>; + l0edrr = <80 95>; + l1cdrr = <16 19>; + l1edrr = <16 19>; + }; + port@4 { + port_id = <4>; + ucast_queue = <192 207>; + mcast_queue = <284 287>; + l0sp = <48 51>; + l0cdrr = <96 111>; + l0edrr = <96 111>; + l1cdrr = <20 23>; + l1edrr = <20 23>; + }; + port@5 { + port_id = <5>; + ucast_queue = <208 223>; + mcast_queue = <288 291>; + l0sp = <52 55>; + l0cdrr = <112 127>; + l0edrr = <112 127>; + l1cdrr = <24 27>; + l1edrr = <24 27>; + }; + port@6 { + port_id = <6>; + ucast_queue = <224 239>; + mcast_queue = <292 295>; + l0sp = <56 59>; + l0cdrr = <128 143>; + l0edrr = <128 143>; + l1cdrr = <28 31>; + l1edrr = <28 31>; + }; + port@7 { + port_id = <7>; + ucast_queue = <240 255>; + mcast_queue = <296 299>; + l0sp = <60 63>; + l0cdrr = <144 159>; + l0edrr = <144 159>; + l1cdrr = <32 35>; + l1edrr = <32 35>; + }; + }; + port_scheduler_config { + port@0 { + port_id = <0>; + l1scheduler { + group@0 { + sp = <0 1>; /*L0 SPs*/ + /*cpri cdrr epri edrr*/ + cfg = <0 0 0 0>; + }; + }; + l0scheduler { + group@0 { + /*unicast queues*/ + ucast_queue = <0 4 8>; + /*multicast queues*/ + mcast_queue = <256 260>; + /*sp cpri cdrr epri edrr*/ + cfg = <0 0 0 0 0>; + }; + group@1 { + ucast_queue = <1 5 9>; + mcast_queue = <257 261>; + cfg = <0 1 1 1 1>; + }; + group@2 { + ucast_queue = <2 6 10>; + mcast_queue = <258 262>; + cfg = <0 2 2 2 2>; + }; + group@3 { + ucast_queue = <3 7 11>; + mcast_queue = <259 263>; + cfg = <0 3 3 3 3>; + }; + }; + }; + port@1 { + port_id = <1>; + l1scheduler { + group@0 { + sp = <36>; + cfg = <0 8 0 8>; + }; + group@1 { + sp = <37>; + cfg = <1 9 1 9>; + }; + }; + l0scheduler { + group@0 { + ucast_queue = <144>; + ucast_loop_pri = <16>; + mcast_queue = <272>; + mcast_loop_pri = <4>; + cfg = <36 0 48 0 48>; + }; + }; + }; + port@2 { + port_id = <2>; + l1scheduler { + group@0 { + sp = <40>; + cfg = <0 12 0 12>; + }; + group@1 { + sp = <41>; + cfg = <1 13 1 13>; + }; + }; + l0scheduler { + group@0 { + ucast_queue = <160>; + ucast_loop_pri = <16>; + mcast_queue = <276>; + mcast_loop_pri = <4>; + cfg = <40 0 64 0 64>; + }; + }; + }; + port@3 { + port_id = <3>; + l1scheduler { + group@0 { + sp = <44>; + cfg = <0 16 0 16>; + }; + group@1 { + sp = <45>; + cfg = <1 17 1 17>; + }; + }; + l0scheduler { + group@0 { + ucast_queue = <176>; + ucast_loop_pri = <16>; + mcast_queue = <280>; + mcast_loop_pri = <4>; + cfg = <44 0 80 0 80>; + }; + }; + }; + port@4 { + port_id = <4>; + l1scheduler { + group@0 { + sp = <48>; + cfg = <0 20 0 20>; + }; + group@1 { + sp = <49>; + cfg = <1 21 1 21>; + }; + }; + l0scheduler { + group@0 { + ucast_queue = <192>; + ucast_loop_pri = <16>; + mcast_queue = <284>; + mcast_loop_pri = <4>; + cfg = <48 0 96 0 96>; + }; + }; + }; + port@5 { + port_id = <5>; + l1scheduler { + group@0 { + sp = <52>; + cfg = <0 24 0 24>; + }; + group@1 { + sp = <53>; + cfg = <1 25 1 25>; + }; + }; + l0scheduler { + group@0 { + ucast_queue = <208>; + ucast_loop_pri = <16>; + mcast_queue = <288>; + mcast_loop_pri = <4>; + cfg = <52 0 112 0 112>; + }; + }; + }; + port@6 { + port_id = <6>; + l1scheduler { + group@0 { + sp = <56>; + cfg = <0 28 0 28>; + }; + group@1 { + sp = <57>; + cfg = <1 29 1 29>; + }; + }; + l0scheduler { + group@0 { + ucast_queue = <224>; + ucast_loop_pri = <16>; + mcast_queue = <292>; + mcast_loop_pri = <4>; + cfg = <56 0 128 0 128>; + }; + }; + }; + port@7 { + port_id = <7>; + l1scheduler { + group@0 { + sp = <60>; + cfg = <0 32 0 32>; + }; + group@1 { + sp = <61>; + cfg = <1 33 1 33>; + }; + }; + l0scheduler { + group@0 { + ucast_queue = <240>; + ucast_loop_pri = <16>; + mcast_queue = <296>; + cfg = <60 0 144 0 144>; + }; + }; + }; + }; +}; + +&edma { + status = "okay"; +}; + +&soc { + dp6: dp6 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <6>; + reg = <0x3a001800 0x200>; + qcom,mactype = <0>; + local-mac-address = [000000000000]; + phy-handle = <&qca8081_28>; + phy-mode = "sgmii"; + }; + + dp5: dp5 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <5>; + reg = <0x3a001a00 0x200>; + qcom,mactype = <0>; + local-mac-address = [000000000000]; + phy-handle = <&qca8081_24>; + phy-mode = "sgmii"; + }; +}; + +&wifi { + status = "okay"; + + qcom,ath11k-calibration-variant = "Edgecore-EAP102"; +}; diff --git a/target/linux/ipq807x/image/generic.mk b/target/linux/ipq807x/image/generic.mk index 8c2c55276c8bc0..633f74f096b6b4 100644 --- a/target/linux/ipq807x/image/generic.mk +++ b/target/linux/ipq807x/image/generic.mk @@ -17,6 +17,20 @@ define Device/UbiFit IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata endef +define Device/edgecore_eap102 + $(call Device/FitImage) + $(call Device/UbiFit) + DEVICE_VENDOR := Edgecore + DEVICE_MODEL := EAP102 + BLOCKSIZE := 128k + PAGESIZE := 2048 + DEVICE_DTS_CONFIG := config@ac02 + SOC := ipq8071 + DEVICE_PACKAGES := ipq-wifi-edgecore_eap102 + IMAGE/factory.ubi := append-ubi | qsdk-ipq-factory-nand +endef +TARGET_DEVICES += edgecore_eap102 + define Device/edimax_cax1800 $(call Device/FitImage) $(call Device/UbiFit)