From 8f93c05a591bd68e4d8eaa0a8468ce2263762004 Mon Sep 17 00:00:00 2001 From: Roger Pueyo Centelles Date: Sun, 26 Jan 2020 17:56:05 +0100 Subject: [PATCH] ath79: add support for MikroTik RouterBOARD 922UAGS-5HPacD This patch ports support for the MikroTik RouterBOARD 922UAGS-5HPacD with a built-in 802.11ac High-Power radio (31dBm), which was already available in the ar71xx target. See https://mikrotik.com/product/RB922UAGS-5HPacD for more info. Specifications: - SoC: Qualcomm Atheros QCA9558 (720 MHz) - RAM: 128 MB - Storage: 128 MB NAND - Wireless: external QCA9882 802.11a/ac 2x2:2 - Ethernet: 1x 1000/100/10 Mbps, integrated, via AR8031 PHY, passive PoE-in 24V - SFP: 1x host - USB: 1x 2.0 type A - PCIe: 1x Mini slot (also contains USB 2.0 for 3G/LTE modems) - SIM slot: 1x mini-SIM Working: - Board/system detection - SPI and NAND storage - PCIe - USB type A host - Wireless - Ethernet - LEDs (user, phy0) - Reset button - Sysupgrade to/from ar71xx Not supported: - RSSI LEDs - SFP cage Installation methods: - Sysupgrade from ar71xx (it is advisable to use the -n option to wipe any previous settings), or - Boot the initramfs image via TFTP and then flash the sysupgrade image using "sysupgrade -n" Signed-off-by: Roger Pueyo Centelles --- ...58_mikrotik_routerboard-922uags-5hpacd.dts | 187 ++++++++++++++++++ target/linux/ath79/image/nand.mk | 14 ++ .../nand/base-files/etc/board.d/02_network | 3 +- .../etc/hotplug.d/firmware/11-ath10k-caldata | 8 + .../etc/uci-defaults/04_led_migration | 17 ++ .../nand/base-files/lib/upgrade/platform.sh | 16 +- target/linux/ath79/nand/config-default | 1 + target/linux/ath79/nand/target.mk | 2 +- 8 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 target/linux/ath79/dts/qca9558_mikrotik_routerboard-922uags-5hpacd.dts create mode 100644 target/linux/ath79/nand/base-files/etc/uci-defaults/04_led_migration diff --git a/target/linux/ath79/dts/qca9558_mikrotik_routerboard-922uags-5hpacd.dts b/target/linux/ath79/dts/qca9558_mikrotik_routerboard-922uags-5hpacd.dts new file mode 100644 index 000000000000..26a18ad6a7a8 --- /dev/null +++ b/target/linux/ath79/dts/qca9558_mikrotik_routerboard-922uags-5hpacd.dts @@ -0,0 +1,187 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include +#include + +#include "qca9557.dtsi" + +/ { + compatible = "mikrotik,routerboard-922uags-5hpacd", "qca,qca9558"; + model = "MikroTik RouterBOARD 922UAGS-5HPacD"; + + aliases { + label-mac-device = ð0; + led-boot = &led_user; + led-failsafe = &led_user; + led-upgrade = &led_user; + serial0 = &uart; + }; + + chosen { + bootargs = "console=ttyS0,115200n8"; + }; + + leds { + compatible = "gpio-leds"; + + led_user: user { + label = "mikrotik:green:user"; + gpios = <&gpio 12 GPIO_ACTIVE_LOW>; + }; + }; + + ath10k-leds { + compatible = "gpio-leds"; + + wlan5g { + label = "mikrotik:green:wlan5g"; + gpios = <&ath10k 0 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy0tpt"; + }; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + linux,code = ; + gpios = <&gpio 20 GPIO_ACTIVE_LOW>; + debounce-interval = <60>; + }; + }; + + gpio-export { + compatible = "gpio-export"; + + gpio_usb_power { + gpio-export,name = "mikrotik:power:usb"; + gpio-export,output = <0>; + gpios = <&gpio 13 GPIO_ACTIVE_HIGH>; + }; + + gpio_nand_power { + gpio-export,name = "mikrotik:power:nand"; + gpio-export,output = <0>; + gpios = <&gpio 23 GPIO_ACTIVE_LOW>; + }; + }; +}; + +&mdio0 { + status = "okay"; + + phy4: ethernet-phy@4 { + reg = <4>; + }; +}; + +ð0 { + status = "okay"; + + mtd-mac-address = <&art 0x10>; + phy-handle = <&phy4>; + pll-data = <0x8f000000 0xa0000101 0xa0001313>; + + gmac-config { + device = <&gmac>; + rgmii-enabled = <1>; + }; +}; + +&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 = "routerboot"; + reg = <0x0000000 0x000c000>; + read-only; + }; + + art: partition@c000 { + label = "art"; + reg = <0x000c000 0x0001000>; + read-only; + }; + + partition@d000 { + label = "bios"; + reg = <0x000d000 0x0001000>; + read-only; + }; + + partition@e000 { + label = "soft_config"; + reg = <0x000e000 0x0001000>; + read-only; + }; + }; + }; +}; + +&nand { + status = "okay"; + + nand-ecc-mode = "soft"; + qca,nand-swap-dma; + qca,nand-scan-fixup; + + partitions { + compatible = "fixed-partitions"; + #size-cells = <1>; + + partition@0 { + label = "booter"; + reg = <0x0000000 0x0040000>; + read-only; + }; + + partition@40000 { + label = "kernel"; + reg = <0x0040000 0x03c0000>; + }; + + partition@400000 { + label = "ubi"; + reg = <0x0400000 0x7c00000>; + }; + }; +}; + +&uart { + status = "okay"; +}; + +&pcie0 { + status = "okay"; + + ath10k: wifi@0,0 { + compatible = "qcom,ath10k"; + reg = <0 0 0 0 0>; + #gpio-cells = <2>; + gpio-controller; + }; +}; + +&pcie1 { + status = "okay"; +}; + +&usb0 { + status = "okay"; +}; + +&usb_phy0 { + status = "okay"; +}; diff --git a/target/linux/ath79/image/nand.mk b/target/linux/ath79/image/nand.mk index 95ddca26b0cb..5a61be354593 100644 --- a/target/linux/ath79/image/nand.mk +++ b/target/linux/ath79/image/nand.mk @@ -1,3 +1,4 @@ +include ./common-mikrotik.mk include ./common-netgear.mk # for netgear-uImage # attention: only zlib compression is allowed for the boot fs @@ -110,6 +111,19 @@ define Device/glinet_gl-ar750s-nor endef TARGET_DEVICES += glinet_gl-ar750s-nor +define Device/mikrotik_routerboard-922uags-5hpacd + $(Device/mikrotik) + SOC := qca9558 + DEVICE_MODEL := RouterBOARD 922UAGS-5HPacD + BOARD_NAME := routerboard + IMAGE/sysupgrade.bin = append-kernel | kernel2minor -s 2048 -e -c | \ + sysupgrade-tar kernel=$$$$@ | append-metadata + DEVICE_PACKAGES += kmod-ath10k-ct ath10k-firmware-qca988x-ct \ + kmod-usb2 nand-utils + SUPPORTED_DEVICES += rb-922uags-5hpacd +endef +TARGET_DEVICES += mikrotik_routerboard-922uags-5hpacd + # fake rootfs is mandatory, pad-offset 129 equals (2 * uimage_header + 0xff) define Device/netgear_ath79_nand DEVICE_VENDOR := NETGEAR diff --git a/target/linux/ath79/nand/base-files/etc/board.d/02_network b/target/linux/ath79/nand/base-files/etc/board.d/02_network index bd02a4b38364..f42b1ea9c242 100755 --- a/target/linux/ath79/nand/base-files/etc/board.d/02_network +++ b/target/linux/ath79/nand/base-files/etc/board.d/02_network @@ -8,7 +8,8 @@ ath79_setup_interfaces() local board="$1" case "$board" in - aerohive,hiveap-121) + aerohive,hiveap-121|\ + mikrotik,routerboard-922uags-5hpacd) ucidef_set_interface_lan "eth0" ;; glinet,gl-ar750s-nor|\ diff --git a/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index 9305f061fee6..1989332f8168 100644 --- a/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -3,6 +3,7 @@ [ -e /lib/firmware/$FIRMWARE ] && exit 0 . /lib/functions/caldata.sh +. /lib/functions/mikrotik-caldata.sh board=$(board_name) @@ -20,6 +21,13 @@ case "$FIRMWARE" in ;; esac ;; +"ath10k/cal-pci-0000:01:00.0.bin") + case $board in + mikrotik,routerboard-922uags-5hpacd) + mikrotik_caldata_extract "art" 0x5000 0x844 + ;; + esac + ;; *) exit 1 ;; diff --git a/target/linux/ath79/nand/base-files/etc/uci-defaults/04_led_migration b/target/linux/ath79/nand/base-files/etc/uci-defaults/04_led_migration new file mode 100644 index 000000000000..1a7b371a9979 --- /dev/null +++ b/target/linux/ath79/nand/base-files/etc/uci-defaults/04_led_migration @@ -0,0 +1,17 @@ +#!/bin/sh + +. /lib/functions.sh +. /lib/functions/migrations.sh + +board=$(board_name) +boardonly="${board##*,}" + +case "$board" in +mikrotik,*) + migrate_leds "^rb:=mikrotik:" + ;; +esac + +migrations_apply system + +exit 0 diff --git a/target/linux/ath79/nand/base-files/lib/upgrade/platform.sh b/target/linux/ath79/nand/base-files/lib/upgrade/platform.sh index 15d88a361ec1..8d6b639b4081 100644 --- a/target/linux/ath79/nand/base-files/lib/upgrade/platform.sh +++ b/target/linux/ath79/nand/base-files/lib/upgrade/platform.sh @@ -7,13 +7,27 @@ platform_check_image() { return 0 } -RAMFS_COPY_BIN='fw_printenv fw_setenv' +RAMFS_COPY_BIN='fw_printenv fw_setenv nandwrite' RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock' +platform_do_upgrade_mikrotik_nand() { + CI_KERNPART=none + local fw_mtd=$(find_mtd_part kernel) + fw_mtd="${fw_mtd/block/}" + [ -n "$fw_mtd" ] || return + mtd erase kernel + tar xf "$1" sysupgrade-routerboard/kernel -O | nandwrite -o "$fw_mtd" - + + nand_do_upgrade "$1" +} + platform_do_upgrade() { local board=$(board_name) case "$board" in + mikrotik,routerboard-922uags-5hpacd) + platform_do_upgrade_mikrotik_nand "$1" + ;; glinet,gl-ar300m-nand|\ glinet,gl-ar300m-nor) glinet_nand_nor_do_upgrade "$1" diff --git a/target/linux/ath79/nand/config-default b/target/linux/ath79/nand/config-default index 4742ad52d065..b03f977a07f6 100644 --- a/target/linux/ath79/nand/config-default +++ b/target/linux/ath79/nand/config-default @@ -3,6 +3,7 @@ CONFIG_MTD_NAND_AR934X=y CONFIG_MTD_NAND_CORE=y CONFIG_MTD_NAND_ECC=y CONFIG_MTD_SPI_NAND=y +CONFIG_MTD_SPLIT_MINOR_FW=y CONFIG_MTD_UBI=y CONFIG_MTD_UBI_BLOCK=y CONFIG_MTD_UBI_WL_THRESHOLD=4096 diff --git a/target/linux/ath79/nand/target.mk b/target/linux/ath79/nand/target.mk index c565c9b2b8c4..fd5216b0ebf6 100644 --- a/target/linux/ath79/nand/target.mk +++ b/target/linux/ath79/nand/target.mk @@ -1,6 +1,6 @@ BOARDNAME := Generic devices with NAND flash -FEATURES += squashfs nand +FEATURES += squashfs nand minor DEFAULT_PACKAGES += wpad-basic -- 2.30.2