From 6aaa5ce2c5138877e0f0504c3bd536b40e9af928 Mon Sep 17 00:00:00 2001 From: Roger Pueyo Centelles Date: Thu, 28 Nov 2019 12:53:01 +0100 Subject: [PATCH] ath79: add support for MikroTik RouterBOARD wAP G-5HacT2HnD MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This commit adds support for the MikroTik RouterBOARD wAP G-5HacT2HnD (wAP AC), a small weatherproof dual band, dual-radio 802.11ac wireless AP with integrated omnidirectional anntennae and one 10/100/1000 Mbps Ethernet port. See https://mikrotik.com/product/RBwAPG-5HacT2HnD for more info. Specifications: - SoC: Qualcomm Atheros QCA9556 - RAM: 64 MB - Storage: 16 MB NOR - Wireless: · Atheros AR9550 (SoC) 802.11b/g/n 2x2:2, 2 dBi antennae · Qualcomm QCA9880 802.11a/n/ac 3x3:3, 2 dBi antennae - Ethernet: Atheros AG71xx (SoC, AR8033), 1x 1000/100/10 port, passive PoE in Working: - Board/system detection - Sysupgrade - Serial console - Ethernet - 2.4 GHz radio - 5 GHz radio and LED - Reset button Not working/Unsupported: - 2.4 GHz LED - AP/CAP LED - ZT2046Q SPI temperature and voltage sensor This adds the basic features for supporting MikroTik devices: - a common recipe for mikrotik images in common-mikrotik.mk - support for minor (MikroTik NOR) split firmware (only for generic subtarget so far) Acknowledgments: Robert Marko Andrew Cameron Koen Vandeputte Chuanhong Guo Signed-off-by: Roger Pueyo Centelles Co-developed-by: Adrian Schmutzler Signed-off-by: Adrian Schmutzler Tested-by: Koen Vandeputte --- ...6_mikrotik_routerboard-wap-g-5hact2hnd.dts | 138 ++++++++++++++++++ .../generic/base-files/etc/board.d/02_network | 1 + .../etc/hotplug.d/firmware/10-ath9k-eeprom | 5 + .../etc/hotplug.d/firmware/11-ath10k-caldata | 4 + .../lib/functions/mikrotik-caldata.sh | 21 +++ target/linux/ath79/generic/config-default | 1 + target/linux/ath79/generic/target.mk | 4 +- target/linux/ath79/image/common-mikrotik.mk | 7 + target/linux/ath79/image/generic.mk | 14 ++ 9 files changed, 192 insertions(+), 3 deletions(-) create mode 100644 target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts create mode 100644 target/linux/ath79/generic/base-files/lib/functions/mikrotik-caldata.sh create mode 100644 target/linux/ath79/image/common-mikrotik.mk diff --git a/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts b/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts new file mode 100644 index 00000000000..e13b58b600f --- /dev/null +++ b/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts @@ -0,0 +1,138 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include +#include + +#include "qca9557.dtsi" + +/ { + compatible = "mikrotik,routerboard-wap-g-5hact2hnd", "qca,qca9556"; + model = "MikroTik RouterBOARD wAP G-5HacT2HnD"; + + aliases { + label-mac-device = ð1; + mdio-gpio1 = &mdio2; + serial0 = &uart; + }; + + chosen { + bootargs = "console=ttyS0,115200n8"; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + linux,code = ; + gpios = <&gpio 1 GPIO_ACTIVE_LOW>; + debounce-interval = <60>; + }; + }; + + mdio2: mdio { + compatible = "virtual,mdio-gpio"; + + gpios = <&gpio 12 GPIO_ACTIVE_HIGH>, /* MDC */ + <&gpio 11 GPIO_ACTIVE_HIGH>; /* MDIO */ + #address-cells = <1>; + #size-cells = <0>; + + phy0: ethernet-phy@0 { + reg = <0>; + device_type = "ethernet-phy"; + + phy-mode = "sgmii"; + + at803x-override-sgmii-link-check; + }; + }; +}; + +ð1 { + status = "okay"; + + mtd-mac-address = <&art 0x10>; + + pll-data = <0x03000101 0x80000101 0x80001313>; + phy-handle = <&phy0>; + + qca955x-sgmii-fixup; + + gmac-config { + device = <&gmac>; + }; +}; + +&spi { + status = "okay"; + + num-cs = <1>; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <104000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "routerboot"; + reg = <0x000000 0x00e000>; + read-only; + }; + + art: partition@e000 { + label = "art"; + reg = <0x000e000 0x001000>; + read-only; + }; + + partition@f000 { + label = "bios"; + reg = <0x000f000 0x001000>; + read-only; + }; + + partition@10000 { + label = "routerboot2"; + reg = <0x010000 0x00f000>; + read-only; + }; + + partition@1f000 { + label = "soft_config"; + reg = <0x001f000 0x001000>; + }; + + partition@20000 { + compatible = "mikrotik,minor"; + label = "firmware"; + reg = <0x020000 0xfe0000>; + }; + }; + }; +}; + +&uart { + status = "okay"; +}; + +&wmac { + status = "okay"; + + qca,no-eeprom; +}; + +&pcie0 { + status = "okay"; + + wifi@0,0 { + compatible = "qcom,ath10k"; + reg = <0 0 0 0 0>; + }; +}; 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 0bae9dc3849..15f2e18e0cf 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 @@ -21,6 +21,7 @@ ath79_setup_interfaces() dlink,dir-505|\ engenius,ecb1750|\ glinet,gl-ar300m-lite|\ + mikrotik,routerboard-wap-g-5hact2hnd|\ netgear,ex6400|\ netgear,ex7300|\ ocedo,koala|\ diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index 41581162567..7a813b0db1b 100644 --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -3,6 +3,7 @@ [ -e /lib/firmware/$FIRMWARE ] && exit 0 . /lib/functions/caldata.sh +. /lib/functions/mikrotik-caldata.sh board=$(board_name) @@ -40,6 +41,10 @@ case "$FIRMWARE" in caldata_extract "art" 0x1000 0x440 ath9k_patch_mac $(mtd_get_mac_ascii u-boot-env ethaddr) ;; + mikrotik,routerboard-wap-g-5hact2hnd) + mikrotik_caldata_extract "art" 0x1000 0x440 + ath9k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x10) +2) + ;; nec,wg800hp) caldata_extract "art" 0x1000 0x440 ath9k_patch_mac $(mtd_get_mac_text board_data 0x680) 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 c24e062b5c9..3be2d337b95 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 @@ -4,6 +4,7 @@ . /lib/functions/caldata.sh . /lib/functions/k2t.sh +. /lib/functions/mikrotik-caldata.sh board=$(board_name) @@ -64,6 +65,9 @@ case "$FIRMWARE" in caldata_extract "art" 0x5000 0x844 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x0) +2) ;; + mikrotik,routerboard-wap-g-5hact2hnd) + mikrotik_caldata_extract "art" 0x5000 0x844 + ;; nec,wg800hp) caldata_extract "art" 0x5000 0x844 ath10k_patch_mac $(mtd_get_mac_text board_data 0x880) diff --git a/target/linux/ath79/generic/base-files/lib/functions/mikrotik-caldata.sh b/target/linux/ath79/generic/base-files/lib/functions/mikrotik-caldata.sh new file mode 100644 index 00000000000..9c4016ee5d5 --- /dev/null +++ b/target/linux/ath79/generic/base-files/lib/functions/mikrotik-caldata.sh @@ -0,0 +1,21 @@ +# Copyright (C) 2019 Robert Marko +# Copyright (C) 2019 Roger Pueyo Centelles +# +# Helper function to extract MAC addresses and calibration data for MikroTik +# + +mikrotik_caldata_extract() { + local part=$1 + local offset=$(($2)) + local count=$(($3)) + local mtd + local erdfile="/lib/firmware/erd.bin" + + mtd=$(find_mtd_chardev $part) + [ -n "$mtd" ] || caldata_die "no mtd device found for partition $part" + + rbextract -e $mtd $erdfile + + dd if=$erdfile of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ + caldata_die "failed to extract calibration data from $mtd" +} diff --git a/target/linux/ath79/generic/config-default b/target/linux/ath79/generic/config-default index 20da0b8ba1b..2d8f7f20c21 100644 --- a/target/linux/ath79/generic/config-default +++ b/target/linux/ath79/generic/config-default @@ -9,6 +9,7 @@ CONFIG_MICREL_PHY=y CONFIG_MTD_REDBOOT_PARTS=y CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-3 CONFIG_MTD_SPLIT_EVA_FW=y +CONFIG_MTD_SPLIT_MINOR_FW=y CONFIG_PHY_AR7100_USB=y CONFIG_PHY_AR7200_USB=y CONFIG_REGULATOR=y diff --git a/target/linux/ath79/generic/target.mk b/target/linux/ath79/generic/target.mk index 0a26110d27a..488aa6df165 100644 --- a/target/linux/ath79/generic/target.mk +++ b/target/linux/ath79/generic/target.mk @@ -1,10 +1,8 @@ BOARDNAME:=Generic -FEATURES += squashfs +FEATURES += minor squashfs DEFAULT_PACKAGES += wpad-basic define Target/Description Build firmware images for generic Atheros AR71xx/AR913x/AR934x based boards. endef - - diff --git a/target/linux/ath79/image/common-mikrotik.mk b/target/linux/ath79/image/common-mikrotik.mk new file mode 100644 index 00000000000..292237c76a7 --- /dev/null +++ b/target/linux/ath79/image/common-mikrotik.mk @@ -0,0 +1,7 @@ +define Device/mikrotik + DEVICE_VENDOR := MikroTik + DEVICE_PACKAGES := rbextract rbcfg + LOADER_TYPE := elf + KERNEL := kernel-bin | append-dtb | lzma | loader-kernel + KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | loader-kernel +endef diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index 800e1c7a7df..e5243dc0953 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -1,4 +1,5 @@ include ./common-buffalo.mk +include ./common-mikrotik.mk include ./common-netgear.mk include ./common-tp-link.mk include ./common-yuncore.mk @@ -703,6 +704,19 @@ define Device/librerouter_librerouter-v1 endef TARGET_DEVICES += librerouter_librerouter-v1 +define Device/mikrotik_routerboard-wap-g-5hact2hnd + $(Device/mikrotik) + SOC := qca9556 + DEVICE_MODEL := RouterBOARD wAP G-5HacT2HnD (wAP AC) + IMAGE_SIZE := 16256k + IMAGE/sysupgrade.bin := append-kernel | kernel2minor -s 1024 -e | \ + pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | \ + append-metadata | check-size $$$$(IMAGE_SIZE) + DEVICE_PACKAGES += kmod-ath10k-ct-smallbuffers ath10k-firmware-qca988x-ct + SUPPORTED_DEVICES += rb-wapg-5hact2hnd +endef +TARGET_DEVICES += mikrotik_routerboard-wap-g-5hact2hnd + define Device/nec_wg1200cr SOC := qca9563 DEVICE_VENDOR := NEC -- 2.30.2