From a66eee63368eb5625b359244bfffc9b9eb921875 Mon Sep 17 00:00:00 2001 From: Roger Pueyo Centelles Date: Fri, 28 Feb 2020 16:01:02 +0100 Subject: ath79: add mikrotik subtarget This commit creates the ath79/mikrotik subtarget in order to support MikroTik devices based on Qualcomm Atheros MIPS SoCs. MikroTik devices need a couple of specific features: the split MiNOR firmware MTD format, which is not used by other devices, and the 4k sector erase size on SPI NOR storage, which can not be added to the ath79/generic and ath79/nand subtargets now. Additionally, the commit moves the two MikroTik devices already in the generic and nand subtargets to this new one. Tested on the RB922 board and the wAP AC router. Signed-off-by: Roger Pueyo Centelles --- .../mikrotik/base-files/etc/board.d/02_network | 39 ++++++++++++++++++++++ .../etc/hotplug.d/firmware/10-ath9k-eeprom | 22 ++++++++++++ .../etc/hotplug.d/firmware/11-ath10k-caldata | 28 ++++++++++++++++ .../base-files/etc/uci-defaults/04_led_migration | 17 ++++++++++ .../base-files/lib/functions/mikrotik-caldata.sh | 21 ++++++++++++ .../mikrotik/base-files/lib/upgrade/platform.sh | 35 +++++++++++++++++++ target/linux/ath79/mikrotik/config-default | 33 ++++++++++++++++++ target/linux/ath79/mikrotik/profiles/00-default.mk | 18 ++++++++++ target/linux/ath79/mikrotik/target.mk | 9 +++++ 9 files changed, 222 insertions(+) create mode 100644 target/linux/ath79/mikrotik/base-files/etc/board.d/02_network create mode 100644 target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom create mode 100644 target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/11-ath10k-caldata create mode 100644 target/linux/ath79/mikrotik/base-files/etc/uci-defaults/04_led_migration create mode 100644 target/linux/ath79/mikrotik/base-files/lib/functions/mikrotik-caldata.sh create mode 100644 target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh create mode 100644 target/linux/ath79/mikrotik/config-default create mode 100644 target/linux/ath79/mikrotik/profiles/00-default.mk create mode 100644 target/linux/ath79/mikrotik/target.mk (limited to 'target/linux/ath79/mikrotik') diff --git a/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network b/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network new file mode 100644 index 0000000000..ee795c7496 --- /dev/null +++ b/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network @@ -0,0 +1,39 @@ +#!/bin/sh + +. /lib/functions/system.sh +. /lib/functions/uci-defaults.sh + +ath79_setup_interfaces() +{ + local board="$1" + + case "$board" in + mikrotik,routerboard-922uags-5hpacd|\ + mikrotik,routerboard-wap-g-5hact2hnd) + ucidef_set_interface_lan "eth0" + ;; + *) + ucidef_set_interfaces_lan_wan "eth0" "eth1" + ;; + esac +} + +ath79_setup_macs() +{ + local board="$1" + + case "$board" in + esac + + [ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac + [ -n "$wan_mac" ] && ucidef_set_interface_macaddr "wan" $wan_mac + [ -n "$label_mac" ] && ucidef_set_label_macaddr $label_mac +} + +board_config_update +board=$(board_name) +ath79_setup_interfaces $board +ath79_setup_macs $board +board_config_flush + +exit 0 diff --git a/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom new file mode 100644 index 0000000000..f5f88484b5 --- /dev/null +++ b/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -0,0 +1,22 @@ +#!/bin/sh + +[ -e /lib/firmware/$FIRMWARE ] && exit 0 + +. /lib/functions/caldata.sh +. /lib/functions/mikrotik-caldata.sh + +board=$(board_name) + +case "$FIRMWARE" in +"ath9k-eeprom-ahb-18100000.wmac.bin") + case $board in + mikrotik,routerboard-wap-g-5hact2hnd) + mikrotik_caldata_extract "art" 0x1000 0x440 + ath9k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x10) +2) + ;; + *) + caldata_die "board $board is not supported yet" + ;; + esac + ;; +esac diff --git a/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/11-ath10k-caldata new file mode 100644 index 0000000000..6eb9a93b75 --- /dev/null +++ b/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -0,0 +1,28 @@ +#!/bin/sh + +[ -e /lib/firmware/$FIRMWARE ] && exit 0 + +. /lib/functions/caldata.sh +. /lib/functions/mikrotik-caldata.sh + +board=$(board_name) + +case "$FIRMWARE" in +"ath10k/cal-pci-0000:00:00.0.bin") + case $board in + mikrotik,routerboard-wap-g-5hact2hnd) + mikrotik_caldata_extract "art" 0x5000 0x844 + ;; + 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 + ;; +esac diff --git a/target/linux/ath79/mikrotik/base-files/etc/uci-defaults/04_led_migration b/target/linux/ath79/mikrotik/base-files/etc/uci-defaults/04_led_migration new file mode 100644 index 0000000000..1a7b371a99 --- /dev/null +++ b/target/linux/ath79/mikrotik/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/mikrotik/base-files/lib/functions/mikrotik-caldata.sh b/target/linux/ath79/mikrotik/base-files/lib/functions/mikrotik-caldata.sh new file mode 100644 index 0000000000..9c4016ee5d --- /dev/null +++ b/target/linux/ath79/mikrotik/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/mikrotik/base-files/lib/upgrade/platform.sh b/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh new file mode 100644 index 0000000000..a568689536 --- /dev/null +++ b/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh @@ -0,0 +1,35 @@ +# Copyright (C) 2011 OpenWrt.org + +PART_NAME=firmware + +REQUIRE_IMAGE_METADATA=1 +platform_check_image() { + return 0 +} + +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" + ;; + *) + default_do_upgrade "$1" + ;; + esac +} diff --git a/target/linux/ath79/mikrotik/config-default b/target/linux/ath79/mikrotik/config-default new file mode 100644 index 0000000000..a95d13406a --- /dev/null +++ b/target/linux/ath79/mikrotik/config-default @@ -0,0 +1,33 @@ +CONFIG_AT803X_PHY=y +CONFIG_CRC16=y +CONFIG_CRYPTO_DEFLATE=y +CONFIG_GPIO_LATCH=y +CONFIG_GPIO_WATCHDOG=y +CONFIG_GPIO_WATCHDOG_ARCH_INITCALL=y +CONFIG_LEDS_RESET=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_AR934X=y +CONFIG_MTD_NAND_CORE=y +CONFIG_MTD_NAND_ECC=y +CONFIG_MTD_SPI_NAND=y +CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y +CONFIG_MTD_SPLIT_MINOR_FW=y +CONFIG_MTD_UBI=y +CONFIG_MTD_UBI_BLOCK=y +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_LIMIT=20 +# CONFIG_MTD_UBI_FASTMAP is not set +# CONFIG_MTD_UBI_GLUEBI is not set +CONFIG_NET_SWITCHDEV=y +CONFIG_PHY_AR7100_USB=y +CONFIG_PHY_AR7200_USB=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_UBIFS_FS=y +CONFIG_UBIFS_FS_ADVANCED_COMPR=y +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +CONFIG_WATCHDOG_CORE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_ZLIB_INFLATE=y diff --git a/target/linux/ath79/mikrotik/profiles/00-default.mk b/target/linux/ath79/mikrotik/profiles/00-default.mk new file mode 100644 index 0000000000..14712da593 --- /dev/null +++ b/target/linux/ath79/mikrotik/profiles/00-default.mk @@ -0,0 +1,18 @@ +# +# Copyright (C) 2020 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +define Profile/Default + NAME:=Default Profile (all drivers) + PACKAGES:= \ + kmod-usb-ohci kmod-usb2 nand-utils + PRIORITY := 1 +endef + +define Profile/Default/Description + Default package set compatible with most boards. +endef +$(eval $(call Profile,Default)) diff --git a/target/linux/ath79/mikrotik/target.mk b/target/linux/ath79/mikrotik/target.mk new file mode 100644 index 0000000000..face016a51 --- /dev/null +++ b/target/linux/ath79/mikrotik/target.mk @@ -0,0 +1,9 @@ +BOARDNAME := MikroTik devices +FEATURES += minor nand squashfs + +DEFAULT_PACKAGES += wpad-basic + +define Target/Description + Build firmware images for MikroTik devices based on Qualcomm Atheros + MIPS SoCs (AR71xx, AR72xx, AR91xx, AR93xx, QCA95xx). +endef -- cgit v1.2.3