From e1444ab59cfcd330cfac6f51aa14106961585ee1 Mon Sep 17 00:00:00 2001 From: Koen Vandeputte Date: Fri, 22 Mar 2019 13:02:40 +0100 Subject: [PATCH] ar71xx: add support for MikroTik RouterBOARD 922UAGS-5HPacD This patch adds support for the MikroTik RouterBOARD 922UAGS-5HPacD with a built-in 802.11ac High-Power radio (31dBm). See https://mikrotik.com/product/RB922UAGS-5HPacD for more info. Specifications: - SoC: Qualcomm Atheros QCA9557 (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 - NAND storage detection - PCIe - USB: Type A & mini PCIe - Wireless - Ethernet - LED's (excl. SFP and RSSI levels) - Reset button - Sysupgrade Not working: - SFP cage Installation: - Boot vmlinux-initramfs image via BOOTP/TFTP and then flash sysupgrade image using "sysupgrade -n" Signed-off-by: Koen Vandeputte Signed-off-by: Roger Pueyo Centelles --- .../ar71xx/base-files/etc/board.d/02_network | 1 + .../etc/hotplug.d/firmware/11-ath10k-caldata | 1 + target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + .../ar71xx/base-files/lib/upgrade/platform.sh | 2 + .../ar71xx/files/arch/mips/ath79/mach-rb922.c | 107 +++++++++++++----- target/linux/ar71xx/image/mikrotik.mk | 2 +- 6 files changed, 87 insertions(+), 29 deletions(-) diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network index 0588e1b3c1..8dd2f6c6c0 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -107,6 +107,7 @@ ar71xx_setup_interfaces() rb-912uag-2hpnd|\ rb-912uag-5hpnd|\ rb-921gs-5hpacd-r2|\ + rb-922uags-5hpacd|\ rb-lhg-5nd|\ rb-mapl-2nd|\ rb-sxt2n|\ diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index cd5c1c2bcb..2ded261c88 100644 --- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -156,6 +156,7 @@ case "$FIRMWARE" in ;; rb-911g-5hpacd|\ rb-921gs-5hpacd-r2|\ + rb-922uags-5hpacd|\ rb-962uigs-5hact2hnt) ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 20480 2116 ;; diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index 166def9601..9a123b60e1 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -1089,6 +1089,9 @@ ar71xx_board_detect() { *"RouterBOARD 921GS-5HPacD r2") name="rb-921gs-5hpacd-r2" ;; + *"RouterBOARD 922UAGS-5HPacD") + name="rb-922uags-5hpacd" + ;; *"RouterBOARD 931-2nD") name="rb-931-2nd" ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index e970b6482d..e9227aaa7b 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -557,6 +557,7 @@ platform_check_image() { rb-912uag-2hpnd|\ rb-912uag-5hpnd|\ rb-921gs-5hpacd-r2|\ + rb-922uags-5hpacd|\ rb-951g-2hnd|\ rb-951ui-2hnd|\ rb-2011l|\ @@ -878,6 +879,7 @@ platform_do_upgrade() { rb-912uag-2hpnd|\ rb-912uag-5hpnd|\ rb-921gs-5hpacd-r2|\ + rb-922uags-5hpacd|\ rb-951g-2hnd|\ rb-951ui-2hnd|\ rb-2011il|\ diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c index 43bcc99fc7..1c1cae1e76 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c @@ -1,5 +1,5 @@ /* - * MikroTik RouterBOARD 91X support + * MikroTik RouterBOARD 92X support * * Copyright (C) 2015 Gabor Juhos * @@ -49,6 +49,10 @@ #define RB922_GPIO_BTN_RESET 20 #define RB922_GPIO_NAND_NCE 23 +#define RB92X_FLAG_USB BIT(0) +#define RB92X_FLAG_USB_POWER BIT(1) +#define RB92X_FLAG_PCIE BIT(2) + #define RB922_PHY_ADDR 4 #define RB922_KEYS_POLL_INTERVAL 20 /* msecs */ @@ -62,6 +66,11 @@ #define RB_SOFT_CFG_OFFSET 0xf000 #define RB_SOFT_CFG_SIZE 0x1000 +struct rb_board_info { + const char *name; + u32 flags; +}; + static struct mtd_partition rb922gs_spi_partitions[] = { { .name = "routerboot", @@ -82,6 +91,32 @@ static struct mtd_partition rb922gs_spi_partitions[] = { } }; +static void __init rb922gs_init_partitions(const struct rb_info *info) +{ + rb922gs_spi_partitions[0].size = info->hard_cfg_offs; + rb922gs_spi_partitions[1].offset = info->hard_cfg_offs; + rb922gs_spi_partitions[3].offset = info->soft_cfg_offs; +} + +static struct mtd_partition rb922gs_nand_partitions[] = { + { + .name = "booter", + .offset = 0, + .size = (256 * 1024), + .mask_flags = MTD_WRITEABLE, + }, + { + .name = "kernel", + .offset = (256 * 1024), + .size = (4 * 1024 * 1024) - (256 * 1024), + }, + { + .name = "ubi", + .offset = MTDPART_OFS_NXTBLK, + .size = MTDPART_SIZ_FULL, + }, +}; + static struct flash_platform_data rb922gs_spi_flash_data = { .parts = rb922gs_spi_partitions, .nr_parts = ARRAY_SIZE(rb922gs_spi_partitions), @@ -118,12 +153,7 @@ static struct mdio_board_info rb922gs_mdio0_info[] = { }, }; -static void __init rb922gs_init_partitions(const struct rb_info *info) -{ - rb922gs_spi_partitions[0].size = info->hard_cfg_offs; - rb922gs_spi_partitions[1].offset = info->hard_cfg_offs; - rb922gs_spi_partitions[3].offset = info->soft_cfg_offs; -} + static void rb922gs_nand_select_chip(int chip_no) { @@ -221,25 +251,6 @@ static int rb922gs_nand_scan_fixup(struct mtd_info *mtd) return 0; } -static struct mtd_partition rb922gs_nand_partitions[] = { - { - .name = "booter", - .offset = 0, - .size = (256 * 1024), - .mask_flags = MTD_WRITEABLE, - }, - { - .name = "kernel", - .offset = (256 * 1024), - .size = (4 * 1024 * 1024) - (256 * 1024), - }, - { - .name = "ubi", - .offset = MTDPART_OFS_NXTBLK, - .size = MTDPART_SIZ_FULL, - }, -}; - static void __init rb922gs_nand_init(void) { gpio_request_one(RB922_GPIO_NAND_NCE, GPIOF_OUT_INIT_HIGH, "NAND nCE"); @@ -252,10 +263,37 @@ static void __init rb922gs_nand_init(void) ath79_register_nfc(); } +#define RB_BOARD_INFO(_name, _flags) \ + { \ + .name = (_name), \ + .flags = (_flags), \ + } + +static const struct rb_board_info rb92x_boards[] __initconst = { + RB_BOARD_INFO("921GS-5HPacD r2", RB92X_FLAG_PCIE), + RB_BOARD_INFO("922UAGS-5HPacD", RB92X_FLAG_USB | RB92X_FLAG_USB_POWER | RB92X_FLAG_PCIE), +}; + +static u32 rb92x_get_flags(const struct rb_info *info) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(rb92x_boards); i++) { + const struct rb_board_info *bi; + + bi = &rb92x_boards[i]; + if (strcmp(info->board_name, bi->name) == 0) + return bi->flags; + } + + return 0; +} + static void __init rb922gs_setup(void) { const struct rb_info *info; char buf[64]; + u32 flags; info = rb_init_info((void *) KSEG1ADDR(0x1f000000), 0x10000); if (!info) @@ -281,7 +319,9 @@ static void __init rb922gs_setup(void) ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev; ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII; ath79_eth0_data.phy_mask = BIT(RB922_PHY_ADDR); - if (strcmp(info->board_name, "921GS-5HPacD r2") == 0) { + if (strcmp(info->board_name, "921GS-5HPacD r2") == 0 || + strcmp(info->board_name, "922UAGS-5HPacD") == 0) + { ath79_eth0_pll_data.pll_10 = 0xa0001313; ath79_eth0_pll_data.pll_100 = 0xa0000101; ath79_eth0_pll_data.pll_1000 = 0x8f000000; @@ -294,7 +334,18 @@ static void __init rb922gs_setup(void) ath79_register_eth(0); - ath79_register_pci(); + flags = rb92x_get_flags(info); + + if (flags & RB92X_FLAG_USB) + ath79_register_usb(); + + if (flags & RB92X_FLAG_USB_POWER) + gpio_request_one(RB922_GPIO_USB_POWER, GPIOF_OUT_INIT_LOW | + GPIOF_EXPORT_DIR_FIXED, "USB power"); + + if (flags & RB92X_FLAG_PCIE) + ath79_register_pci(); + ath79_register_leds_gpio(-1, ARRAY_SIZE(rb922gs_leds), rb922gs_leds); ath79_register_gpio_keys_polled(-1, RB922_KEYS_POLL_INTERVAL, ARRAY_SIZE(rb922gs_gpio_keys), diff --git a/target/linux/ar71xx/image/mikrotik.mk b/target/linux/ar71xx/image/mikrotik.mk index 96dff4905f..23d348b6a9 100644 --- a/target/linux/ar71xx/image/mikrotik.mk +++ b/target/linux/ar71xx/image/mikrotik.mk @@ -36,7 +36,7 @@ define Device/nand-large-ac MIKROTIK_CHUNKSIZE := 2048 DEVICE_TITLE := MikroTik RouterBoard (>= 128 MB NAND, 802.11ac) DEVICE_PACKAGES += kmod-ath10k-ct ath10k-firmware-qca988x-ct - SUPPORTED_DEVICES := rb-921gs-5hpacd-r2 + SUPPORTED_DEVICES := rb-921gs-5hpacd-r2 rb-922uags-5hpacd endef TARGET_DEVICES += nand-large-ac -- 2.30.2