Skip to content

Commit

Permalink
ipq40xx: add MikroTik wAP ac (RBwAPG-5HacD2HnD) support
Browse files Browse the repository at this point in the history
The MikroTik wAP ac (RBwAPG-5HacD2HnD) is a dual-band dual-radio
802.11ac wireless access point with integrated antenna and two Ethernet
ports in a weatherproof enclosure. See
https://mikrotik.com/product/wap_ac for more information.

Important: this is the new ipq40xx-based wAP ac, not the older
ath79-based wAP ac (RBwAPG-5HacT2HnD), already supported in OpenWrt.

Specifications:
 - SoC: Qualcomm Atheros IPQ4018
 - CPU: 4x ARM Cortex A7
 - RAM: 128MB
 - Storage: 16MB NOR flash
 - Wireless
    - 2.4GHz: Built-in IPQ4018 (SoC) 802.11b/g/n 2x2:2, 2.5 dBi antennae
    - 5GHz: Built-in IPQ4018 (SoC) 802.11a/n/ac 2x2:2, 2.5 dBi antennae
 - Ethernet: Built-in IPQ4018 (SoC, QCA8075), 2x 1000/100/10Mb/s ports,
   one with 802.3af/at PoE in

Installation:
Boot the initramfs image via TFTP, then flash the sysupgrade image using
sysupgrade. Details at https://openwrt.org/toh/mikrotik/common.

Notes:
This preserves the MAC addresses of the physical Ethernet ports:
 - eth0 corresponds to the physical port labeled ETH1 and has the base
   MAC address. This port can be used to power the device.
 - eth1 corresponds to the physical port labeled ETH2 and has a MAC
   address one greater than the base.

MAC addresses are set from /lib/preinit/05_set_iface_mac_ipq40xx.sh
rather than /etc/board.d/02_network so that they are in effect for
preinit. This should likely be done for other MikroTik devices and
possibly other non-MikroTik devices as well.

As this device has 2 physical ports, they are each connected to their
respective PHYs, allowing the link status to be visible to software.
Since they are not marked on the case with any role (such as LAN or
WAN), both are bridged to the lan network by default, although this can
easily be changed if needed.

Signed-off-by: Mark Mentovai <mark@mentovai.com>
  • Loading branch information
markmentovai authored and Ansuel committed Jul 17, 2022
1 parent d9ab1e5 commit 7f54bf6
Show file tree
Hide file tree
Showing 8 changed files with 250 additions and 8 deletions.
3 changes: 2 additions & 1 deletion target/linux/ipq40xx/base-files/etc/board.d/02_network
Expand Up @@ -90,7 +90,8 @@ ipq40xx_setup_interfaces()
;;
compex,wpj419|\
compex,wpj428|\
engenius,eap2200)
engenius,eap2200|\
mikrotik,wap-ac)
ucidef_set_interface_lan "eth0 eth1"
;;
buffalo,wtr-m2133hp)
Expand Down
Expand Up @@ -117,7 +117,8 @@ case "$FIRMWARE" in
;;
mikrotik,cap-ac |\
mikrotik,hap-ac2 |\
mikrotik,hap-ac3)
mikrotik,hap-ac3 |\
mikrotik,wap-ac)
wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x0 0x2f20 ) || \
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_0" 0x0 0x2f20 )
Expand Down Expand Up @@ -199,7 +200,8 @@ case "$FIRMWARE" in
mikrotik,cap-ac |\
mikrotik,hap-ac2 |\
mikrotik,hap-ac3 |\
mikrotik,sxtsq-5-ac)
mikrotik,sxtsq-5-ac |\
mikrotik,wap-ac)
wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x8000 0x2f20 ) || \
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_2" 0x0 0x2f20 )
Expand All @@ -222,7 +224,8 @@ case "$FIRMWARE" in
case "$board" in
mikrotik,cap-ac |\
mikrotik,hap-ac2 |\
mikrotik,hap-ac3)
mikrotik,hap-ac3 |\
mikrotik,wap-ac)
wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x2f20 0x2f20 ) || \
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_0" 0x2f20 0x2f20 )
Expand All @@ -234,7 +237,8 @@ case "$FIRMWARE" in
mikrotik,cap-ac |\
mikrotik,hap-ac2 |\
mikrotik,hap-ac3 |\
mikrotik,sxtsq-5-ac)
mikrotik,sxtsq-5-ac |\
mikrotik,wap-ac)
wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0xaf20 0x2f20 ) || \
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_2" 0x2f20 0x2f20 )
Expand Down
Expand Up @@ -26,6 +26,11 @@ preinit_set_mac_address() {
mac_lan=$(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66)
[ -n "$mac_lan" ] && ip link set dev eth0 address "$mac_lan"
;;
mikrotik,wap-ac)
base_mac=$(cat /sys/firmware/mikrotik/hard_config/mac_base)
ip link set dev eth0 address "$base_mac"
ip link set dev eth1 address $(macaddr_add "$base_mac" 1)
;;
zyxel,nbg6617)
base_mac=$(cat /sys/class/net/eth0/address)
ip link set dev eth0 address $(macaddr_add "$base_mac" 2)
Expand Down
3 changes: 2 additions & 1 deletion target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
Expand Up @@ -173,7 +173,8 @@ platform_do_upgrade() {
mikrotik,cap-ac|\
mikrotik,hap-ac2|\
mikrotik,lhgg-60ad|\
mikrotik,sxtsq-5-ac)
mikrotik,sxtsq-5-ac|\
mikrotik,wap-ac)
[ "$(rootfs_type)" = "tmpfs" ] && mtd erase firmware
default_do_upgrade "$1"
;;
Expand Down
221 changes: 221 additions & 0 deletions target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-wap-ac.dts
@@ -0,0 +1,221 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/* Copyright (c) 2020, Robert Marko <robimarko@gmail.com> */

#include "qcom-ipq4019.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/soc/qcom,tcsr.h>

/ {
model = "MikroTik wAP ac";
compatible = "mikrotik,wap-ac";

memory {
device_type = "memory";
reg = <0x80000000 0x08000000>;
};

chosen {
stdout-path = "serial0:115200n8";
};

aliases {
led-boot = &led_user;
led-failsafe = &led_user;
led-running = &led_user;
led-upgrade = &led_user;
};

soc {
counter@4a1000 {
compatible = "qcom,qca-gcnt";
reg = <0x4a1000 0x4>;
};

tcsr@1949000 {
compatible = "qcom,tcsr";
reg = <0x1949000 0x100>;
qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
};

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>;
};

ess-switch@c000000 {
status = "okay";
};

edma@c080000 {
status = "okay";
};
};

keys {
compatible = "gpio-keys";

reset {
label = "reset";
gpios = <&tlmm 63 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
};

leds {
compatible = "gpio-leds";

power {
label = "blue:power";
gpios = <&tlmm 0 GPIO_ACTIVE_HIGH>;
default-state = "keep";
};

led_user: user {
label = "green:user";
gpios = <&tlmm 3 GPIO_ACTIVE_HIGH>;
panic-indicator;
};
};
};

&prng {
status = "okay";
};

&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 = <2>;
bias-disable;
};
pin_cs {
function = "gpio";
pins = "gpio54";
drive-strength = <2>;
bias-disable;
output-high;
};
};
};

&blsp_dma {
status = "okay";
};

&blsp1_spi1 {
status = "okay";

pinctrl-0 = <&spi_0_pins>;
pinctrl-names = "default";
cs-gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;

flash@0 {
reg = <0>;
compatible = "jedec,spi-nor";
spi-max-frequency = <40000000>;

partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "Qualcomm";
reg = <0x0 0x80000>;
read-only;
};

partition@80000 {
compatible = "mikrotik,routerboot-partitions";
#address-cells = <1>;
#size-cells = <1>;
label = "RouterBoot";
reg = <0x80000 0x80000>;

hard_config {
read-only;
size = <0x2000>;
};

dtb_config {
read-only;
};

soft_config {
};
};

partition@100000 {
compatible = "mikrotik,minor";
label = "firmware";
reg = <0x100000 0xf00000>;
};
};
};
};

&blsp1_uart1 {
status = "okay";

pinctrl-0 = <&serial_pins>;
pinctrl-names = "default";
};

&cryptobam {
status = "okay";
};

&crypto {
status = "okay";
};

&watchdog {
status = "okay";
};

&mdio {
status = "okay";
};

&gmac0 {
qcom,phy_mdio_addr = <4>;
qcom,poll_required = <1>;
qcom,forced_speed = <1000>;
qcom,forced_duplex = <1>;
vlan_tag = <2 0x20>;
};

&gmac1 {
qcom,phy_mdio_addr = <3>;
vlan_tag = <1 0x10>;
};

&wifi0 {
status = "okay";

qcom,ath10k-calibration-variant = "MikroTik-wAP-ac";
};

&wifi1 {
status = "okay";

qcom,ath10k-calibration-variant = "MikroTik-wAP-ac";
};
8 changes: 8 additions & 0 deletions target/linux/ipq40xx/image/mikrotik.mk
Expand Up @@ -62,3 +62,11 @@ define Device/mikrotik_sxtsq-5-ac
DEVICE_PACKAGES := rssileds
endef
TARGET_DEVICES += mikrotik_sxtsq-5-ac

define Device/mikrotik_wap-ac
$(call Device/mikrotik_nor)
DEVICE_MODEL := wAP ac
SOC := qcom-ipq4018
DEVICE_PACKAGES := -kmod-ath10k-ct kmod-ath10k-ct-smallbuffers
endef
TARGET_DEVICES += mikrotik_wap-ac
Expand Up @@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john@phrozen.org>

--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -903,11 +903,78 @@ dtb-$(CONFIG_ARCH_QCOM) += \
@@ -903,11 +903,79 @@ dtb-$(CONFIG_ARCH_QCOM) += \
qcom-apq8074-dragonboard.dtb \
qcom-apq8084-ifc6540.dtb \
qcom-apq8084-mtp.dtb \
Expand Down Expand Up @@ -40,6 +40,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
+ qcom-ipq4018-rt-ac58u.dtb \
+ qcom-ipq4018-rutx10.dtb \
+ qcom-ipq4018-wac510.dtb \
+ qcom-ipq4018-wap-ac.dtb \
+ qcom-ipq4018-whw01-v1.dtb \
+ qcom-ipq4018-wre6606.dtb \
+ qcom-ipq4018-wrtq-329acn.dtb \
Expand Down
Expand Up @@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john@phrozen.org>

--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -951,11 +951,77 @@ dtb-$(CONFIG_ARCH_QCOM) += \
@@ -951,11 +951,78 @@ dtb-$(CONFIG_ARCH_QCOM) += \
qcom-ipq4018-ap120c-ac.dtb \
qcom-ipq4018-ap120c-ac-bit.dtb \
qcom-ipq4018-jalapeno.dtb \
Expand Down Expand Up @@ -39,6 +39,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
+ qcom-ipq4018-rt-ac58u.dtb \
+ qcom-ipq4018-rutx10.dtb \
+ qcom-ipq4018-wac510.dtb \
+ qcom-ipq4018-wap-ac.dtb \
+ qcom-ipq4018-whw01-v1.dtb \
+ qcom-ipq4018-wre6606.dtb \
+ qcom-ipq4018-wrtq-329acn.dtb \
Expand Down

0 comments on commit 7f54bf6

Please sign in to comment.