From 491ae3357e10be46ff6342cad5d2f820bf2cd9f9 Mon Sep 17 00:00:00 2001 From: Roman Kuzmitskii Date: Sun, 4 Oct 2020 05:43:41 +0000 Subject: [PATCH] ath79: add support for Ubiquiti airCube AC The Ubiquiti Network airCube AC is a cube shaped device supporting 2.4 GHz and 5 GHz with internal 2x2 MIMO antennas. It can be powered with either one of: - 24v power supply with 3.0mm x 1.0mm barrel plug - 24v passive PoE on first LAN port There are four 10/100/1000 Mbps ports (1 * WAN + 3 * LAN). First LAN port have optional PoE passthrough to the WAN port. SoC: Qualcomm / Atheros AR9342 RAM: 64 MB DDR2 Flash: 16 MB SPI NOR Ethernet: 4x 10/100/1000 Mbps (1 WAN + 3 LAN) LEDS: 1x via a SPI controller (not yet supported) Buttons: 1x Reset Serial: 1x (only RX and TX); 115200 baud, 8N1 Missing features: - LED control is not supported Physical to internal switch port mapping: - physical port #1 (poe in) = switchport 2 - physical port #2 = switchport 3 - physical port #3 = switchport 5 - physical port #4 (wan/poe out) = switchport 4 Factory update is tested and is the same as for Ubiquiti AirCube ISP hence the shared configuration between that devices. Signed-off-by: Roman Kuzmitskii --- .../ath79/dts/ar9342_ubnt_aircube-ac.dts | 117 ++++++++++++++++++ .../generic/base-files/etc/board.d/02_network | 4 + .../base-files/etc/board.d/03_gpio_switches | 1 + .../etc/hotplug.d/firmware/11-ath10k-caldata | 1 + target/linux/ath79/image/generic-ubnt.mk | 23 +++- tools/firmware-utils/src/mkfwimage.c | 2 +- 6 files changed, 142 insertions(+), 6 deletions(-) create mode 100644 target/linux/ath79/dts/ar9342_ubnt_aircube-ac.dts diff --git a/target/linux/ath79/dts/ar9342_ubnt_aircube-ac.dts b/target/linux/ath79/dts/ar9342_ubnt_aircube-ac.dts new file mode 100644 index 0000000000..8e0955e182 --- /dev/null +++ b/target/linux/ath79/dts/ar9342_ubnt_aircube-ac.dts @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +#include "ar9344.dtsi" + +#include +#include + +/ { + compatible = "ubnt,aircube-ac", "qca,ar9342"; + model = "Ubiquiti airCube AC"; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + linux,code = ; + gpios = <&gpio 17 GPIO_ACTIVE_LOW>; + debounce-interval = <60>; + }; + }; +}; + +&spi { + status = "okay"; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <25000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "u-boot"; + reg = <0x000000 0x040000>; + read-only; + }; + + partition@40000 { + label = "u-boot-env"; + reg = <0x040000 0x010000>; + read-only; + }; + + partition@50000 { + compatible = "denx,uimage"; + label = "firmware"; + reg = <0x050000 0xf60000>; + }; + + partition@fb0000 { + label = "cfg"; + reg = <0xfb0000 0x040000>; + read-only; + }; + + art: partition@ff0000 { + label = "art"; + reg = <0xff0000 0x010000>; + read-only; + }; + }; + }; +}; + +&ref { + clock-frequency = <40000000>; +}; + +&uart { + status = "okay"; +}; + +&pcie { + status = "okay"; +}; + +&mdio0 { + status = "okay"; + + phy-mask = <4>; + phy0: ethernet-phy@0 { + phy-mode = "rgmii"; + reg = <0>; + + qca,ar8327-initvals = < + 0x04 0x07600000 /* PORT0 PAD MODE CTRL */ + 0x7c 0x0000007e /* PORT0_STATUS */ + >; + }; +}; + +ð0 { + status = "okay"; + + /* default for ar934x, except for 1000M and 10M */ + pll-data = <0x06000000 0x00000101 0x00001313>; + + mtd-mac-address = <&art 0x0>; + + phy-mode = "rgmii"; + phy-handle = <&phy0>; + + gmac-config { + device = <&gmac>; + }; +}; + +&wmac { + status = "okay"; + + mtd-cal-data = <&art 0x1000>; +}; diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network index ac1fc4406d..103da30379 100755 --- a/target/linux/ath79/generic/base-files/etc/board.d/02_network +++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network @@ -376,6 +376,10 @@ ath79_setup_interfaces() ucidef_add_switch "switch0" \ "1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "9@eth0" ;; + ubnt,aircube-ac) + ucidef_add_switch "switch0" \ + "0@eth0" "2:lan:1" "3:lan:2" "5:lan:3" "4:wan" + ;; ubnt,aircube-isp) ucidef_set_interface_wan "eth1" ucidef_add_switch "switch0" \ diff --git a/target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches b/target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches index 8ec0af53d4..b3e0d0dd31 100755 --- a/target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches +++ b/target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches @@ -73,6 +73,7 @@ tplink,wbs510-v1|\ tplink,wbs510-v2) ucidef_add_gpio_switch "poe_passthrough" "PoE Passthrough" "20" ;; +ubnt,aircube-ac|\ ubnt,aircube-isp) ucidef_add_gpio_switch "poe_passthrough" "PoE Passthrough" "11" ;; diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index 5a38e7f421..23cd4497ba 100644 --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -26,6 +26,7 @@ case "$FIRMWARE" in qxwlan,e1700ac-v2-16m|\ qxwlan,e600gac-v2-8m|\ qxwlan,e600gac-v2-16m|\ + ubnt,aircube-ac|\ ubnt,unifiac-lite|\ ubnt,unifiac-lr|\ ubnt,unifiac-mesh|\ diff --git a/target/linux/ath79/image/generic-ubnt.mk b/target/linux/ath79/image/generic-ubnt.mk index c347bd1cf1..710ab54772 100644 --- a/target/linux/ath79/image/generic-ubnt.mk +++ b/target/linux/ath79/image/generic-ubnt.mk @@ -110,15 +110,28 @@ define Device/ubnt-xw UBNT_VERSION := 6.0.4 endef -define Device/ubnt_aircube-isp +define Device/ubnt-acb $(Device/ubnt) - SOC := qca9533 - DEVICE_MODEL := airCube ISP IMAGE_SIZE := 15744k - UBNT_BOARD := ACB-ISP - UBNT_CHIP := qca9533 + UBNT_BOARD := ACB UBNT_TYPE := ACB UBNT_VERSION := 2.5.0 +endef + +define Device/ubnt_aircube-ac + $(Device/ubnt-acb) + SOC := ar9342 + DEVICE_MODEL := airCube AC + UBNT_CHIP := ar9342 + DEVICE_PACKAGES += kmod-ath10k-ct-smallbuffers ath10k-firmware-qca988x-ct +endef +TARGET_DEVICES += ubnt_aircube-ac + +define Device/ubnt_aircube-isp + $(Device/ubnt-acb) + SOC := qca9533 + DEVICE_MODEL := airCube ISP + UBNT_CHIP := qca9533 SUPPORTED_DEVICES += ubnt,acb-isp endef TARGET_DEVICES += ubnt_aircube-isp diff --git a/tools/firmware-utils/src/mkfwimage.c b/tools/firmware-utils/src/mkfwimage.c index 591ce44a78..5b749a3f66 100644 --- a/tools/firmware-utils/src/mkfwimage.c +++ b/tools/firmware-utils/src/mkfwimage.c @@ -148,7 +148,7 @@ struct fw_info fw_info[] = { .sign = true, }, { - .name = "ACB-ISP", + .name = "ACB", .fw_layout = { .kern_start = 0x9f050000, .kern_entry = 0x80002000, -- 2.30.2