ar71xx: add support for RB951Ui-2nD

This patch adds support for the MikroTik RouterBOARD hAP
https://routerboard.com/RB951Ui-2nD

Specifications:
- SoC: Qualcomm QCA9531 (650MHz)
- RAM: 64MB
- Storage: 16MB NOR SPI flash
- Wireless: builtin QCA9531, 2x2:2
- Ethernet: 5x100M (1 PoE in, 1 PoE out)
- USB: Type A

Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
openwrt-18.06
Thibaut VARENE 2017-02-07 19:10:04 +01:00 committed by Felix Fietkau
parent b18bae37a4
commit 8cbb2ac633
9 changed files with 170 additions and 1 deletions

View File

@ -225,6 +225,15 @@ rb-750)
rb-941-2nd) rb-941-2nd)
ucidef_set_led_timer "user" "USR/ACT" "rb:green:user" "1000" "1000" ucidef_set_led_timer "user" "USR/ACT" "rb:green:user" "1000" "1000"
;; ;;
rb-951ui-2nd)
ucidef_set_led_timer "user" "USER" "rb:green:user" "1000" "1000"
ucidef_set_led_netdev "port1" "port1" "rb:green:port1" "eth0"
ucidef_set_led_switch "port2" "port2" "rb:green:port2" "switch0" "0x10"
ucidef_set_led_switch "port3" "port2" "rb:green:port3" "switch0" "0x08"
ucidef_set_led_switch "port4" "port3" "rb:green:port4" "switch0" "0x04"
ucidef_set_led_switch "port5" "port5" "rb:green:port5" "switch0" "0x02"
ucidef_set_led_wlan "wlan" "WLAN" "rb:blue:wlan" "phy0tpt"
;;
rb-2011l|\ rb-2011l|\
rb-2011uas|\ rb-2011uas|\
rb-2011uias|\ rb-2011uias|\

View File

@ -137,6 +137,7 @@ ar71xx_setup_interfaces()
pb42|\ pb42|\
pb44|\ pb44|\
rb-951ui-2hnd|\ rb-951ui-2hnd|\
rb-951ui-2nd|\
routerstation|\ routerstation|\
tl-wr710n|\ tl-wr710n|\
tl-wr720n-v3|\ tl-wr720n-v3|\

View File

@ -27,6 +27,10 @@ rb-912uag-2hpnd|\
rb-912uag-5hpnd) rb-912uag-5hpnd)
ucidef_add_gpio_switch "usb_power_switch" "USB Power Switch" "52" "1" ucidef_add_gpio_switch "usb_power_switch" "USB Power Switch" "52" "1"
;; ;;
rb-951ui-2nd)
ucidef_add_gpio_switch "usb_power_switch" "USB Power Switch" "45" "1"
ucidef_add_gpio_switch "poe_passthrough" "PoE Passthrough" "14"
;;
esac esac
board_config_flush board_config_flush

View File

@ -299,6 +299,7 @@ get_status_led() {
rb-912uag-2hpnd|\ rb-912uag-2hpnd|\
rb-912uag-5hpnd|\ rb-912uag-5hpnd|\
rb-941-2nd|\ rb-941-2nd|\
rb-951ui-2nd|\
rb-mapl-2nd) rb-mapl-2nd)
status_led="rb:green:user" status_led="rb:green:user"
;; ;;

View File

@ -868,6 +868,9 @@ ar71xx_board_detect() {
*"RouterBOARD 951Ui-2HnD") *"RouterBOARD 951Ui-2HnD")
name="rb-951ui-2hnd" name="rb-951ui-2hnd"
;; ;;
*"951Ui-2nD")
name="rb-951ui-2nd"
;;
*"RouterBOARD 2011L") *"RouterBOARD 2011L")
name="rb-2011l" name="rb-2011l"
;; ;;

View File

@ -344,6 +344,7 @@ platform_check_image() {
pb42|\ pb42|\
pb44|\ pb44|\
rb-941-2nd|\ rb-941-2nd|\
rb-951ui-2nd|\
rb-mapl-2nd|\ rb-mapl-2nd|\
routerstation-pro|\ routerstation-pro|\
routerstation|\ routerstation|\
@ -617,6 +618,7 @@ platform_pre_upgrade() {
case "$board" in case "$board" in
rb-941-2nd|\ rb-941-2nd|\
rb-951ui-2nd|\
rb-mapl-2nd) rb-mapl-2nd)
;; ;;
rb*|\ rb*|\
@ -654,6 +656,7 @@ platform_do_upgrade() {
case "$board" in case "$board" in
rb-941-2nd|\ rb-941-2nd|\
rb-951ui-2nd|\
rb-mapl-2nd) rb-mapl-2nd)
PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD=1 PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD=1
platform_do_upgrade_combined "$ARGV" platform_do_upgrade_combined "$ARGV"

View File

@ -921,12 +921,14 @@ config ATH79_MACH_RBSPI
select ATH79_DEV_GPIO_BUTTONS select ATH79_DEV_GPIO_BUTTONS
select ATH79_DEV_LEDS_GPIO select ATH79_DEV_LEDS_GPIO
select ATH79_DEV_M25P80 select ATH79_DEV_M25P80
select ATH79_DEV_USB
select ATH79_DEV_WMAC select ATH79_DEV_WMAC
select ATH79_ROUTERBOOT select ATH79_ROUTERBOOT
help help
Say 'Y' here if you want your kernel to support the Say 'Y' here if you want your kernel to support the
MikroTik RouterBOARD mAP lite MikroTik RouterBOARD mAP lite
MikroTik RouterBOARD hAP lite MikroTik RouterBOARD hAP lite
MikroTik RouterBOARD hAP
config ATH79_MACH_RBSXTLITE config ATH79_MACH_RBSXTLITE
bool "MikroTik RouterBOARD SXT Lite" bool "MikroTik RouterBOARD SXT Lite"

View File

@ -3,6 +3,7 @@
* *
* - MikroTik RouterBOARD mAP L-2nD * - MikroTik RouterBOARD mAP L-2nD
* - MikroTik RouterBOARD 941L-2nD * - MikroTik RouterBOARD 941L-2nD
* - MikroTik RouterBOARD 951Ui-2nD
* *
* Copyright (C) 2017 Thibaut VARENE <varenet@parisc-linux.org> * Copyright (C) 2017 Thibaut VARENE <varenet@parisc-linux.org>
* *
@ -16,6 +17,9 @@
#include <linux/routerboot.h> #include <linux/routerboot.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/spi/spi.h>
#include <linux/spi/74x164.h>
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
@ -40,6 +44,7 @@
#define RBSPI_HAS_USB BIT(0) #define RBSPI_HAS_USB BIT(0)
#define RBSPI_HAS_WLAN BIT(1) #define RBSPI_HAS_WLAN BIT(1)
#define RBSPI_HAS_WAN4 BIT(2) /* has WAN port on PHY4 */ #define RBSPI_HAS_WAN4 BIT(2) /* has WAN port on PHY4 */
#define RBSPI_HAS_SSR BIT(3) /* has an SSR on SPI bus 0 */
#define RB_ROUTERBOOT_OFFSET 0x0000 #define RB_ROUTERBOOT_OFFSET 0x0000
#define RB_BIOS_SIZE 0x1000 #define RB_BIOS_SIZE 0x1000
@ -166,6 +171,96 @@ static struct gpio_led rbhapl_leds[] __initdata = {
}, },
}; };
/* common RB SSRs */
#define RBSPI_SSR_GPIO_BASE 40
#define RBSPI_SSR_GPIO(bit) (RBSPI_SSR_GPIO_BASE + (bit))
/* RB 951Ui-2nD gpios */
#define RB952_SSR_BIT_LED_LAN1 0
#define RB952_SSR_BIT_LED_LAN2 1
#define RB952_SSR_BIT_LED_LAN3 2
#define RB952_SSR_BIT_LED_LAN4 3
#define RB952_SSR_BIT_LED_LAN5 4
#define RB952_SSR_BIT_USB_POWER 5
#define RB952_SSR_BIT_LED_WLAN 6
#define RB952_GPIO_SSR_CS 11
#define RB952_GPIO_LED_USER 4
#define RB952_GPIO_POE_POWER 14
#define RB952_GPIO_USB_POWER RBSPI_SSR_GPIO(RB952_SSR_BIT_USB_POWER)
#define RB952_GPIO_LED_LAN1 RBSPI_SSR_GPIO(RB952_SSR_BIT_LED_LAN1)
#define RB952_GPIO_LED_LAN2 RBSPI_SSR_GPIO(RB952_SSR_BIT_LED_LAN2)
#define RB952_GPIO_LED_LAN3 RBSPI_SSR_GPIO(RB952_SSR_BIT_LED_LAN3)
#define RB952_GPIO_LED_LAN4 RBSPI_SSR_GPIO(RB952_SSR_BIT_LED_LAN4)
#define RB952_GPIO_LED_LAN5 RBSPI_SSR_GPIO(RB952_SSR_BIT_LED_LAN5)
#define RB952_GPIO_LED_WLAN RBSPI_SSR_GPIO(RB952_SSR_BIT_LED_WLAN)
static struct gpio_led rb952_leds[] __initdata = {
{
.name = "rb:green:user",
.gpio = RB952_GPIO_LED_USER,
.active_low = 0,
}, {
.name = "rb:blue:wlan",
.gpio = RB952_GPIO_LED_WLAN,
.active_low = 1,
}, {
.name = "rb:green:port1",
.gpio = RB952_GPIO_LED_LAN1,
.active_low = 1,
}, {
.name = "rb:green:port2",
.gpio = RB952_GPIO_LED_LAN2,
.active_low = 1,
}, {
.name = "rb:green:port3",
.gpio = RB952_GPIO_LED_LAN3,
.active_low = 1,
}, {
.name = "rb:green:port4",
.gpio = RB952_GPIO_LED_LAN4,
.active_low = 1,
}, {
.name = "rb:green:port5",
.gpio = RB952_GPIO_LED_LAN5,
.active_low = 1,
},
};
static struct gen_74x164_chip_platform_data rbspi_ssr_data = {
.base = RBSPI_SSR_GPIO_BASE,
};
/* the spi-ath79 driver can only natively handle CS0. Other CS are bit-banged */
static int rbspi_spi_cs_gpios[] = {
-ENOENT, /* CS0 is always -ENOENT: natively handled */
-ENOENT, /* CS1 can be updated by the code as necessary */
};
static struct ath79_spi_platform_data rbspi_ath79_spi_data = {
.bus_num = 0,
.cs_gpios = rbspi_spi_cs_gpios,
};
/*
* Global spi_board_info: devices that don't have an SSR only have the SPI NOR
* flash on bus0 CS0, while devices that have an SSR add it on the same bus CS1
*/
static struct spi_board_info rbspi_spi_info[] = {
{
.bus_num = 0,
.chip_select = 0,
.max_speed_hz = 25000000,
.modalias = "m25p80",
.platform_data = &rbspi_spi_flash_data,
}, {
.bus_num = 0,
.chip_select = 1,
.max_speed_hz = 25000000,
.modalias = "74x164",
.platform_data = &rbspi_ssr_data,
}
};
void __init rbspi_wlan_init(int wmac_offset) void __init rbspi_wlan_init(int wmac_offset)
{ {
char *art_buf; char *art_buf;
@ -209,7 +304,16 @@ static int __init rbspi_platform_setup(void)
*/ */
static void __init rbspi_peripherals_setup(u32 flags) static void __init rbspi_peripherals_setup(u32 flags)
{ {
ath79_register_m25p80(&rbspi_spi_flash_data); unsigned spi_n;
if (flags & RBSPI_HAS_SSR)
spi_n = ARRAY_SIZE(rbspi_spi_info);
else
spi_n = 1; /* only one device on bus0 */
rbspi_ath79_spi_data.num_chipselect = spi_n;
rbspi_ath79_spi_data.cs_gpios = rbspi_spi_cs_gpios;
ath79_register_spi(&rbspi_ath79_spi_data, rbspi_spi_info, spi_n);
if (flags & RBSPI_HAS_USB) if (flags & RBSPI_HAS_USB)
ath79_register_usb(); ath79_register_usb();
@ -314,5 +418,46 @@ static void __init rbhapl_setup(void)
rbspi_gpio_keys_reset16); rbspi_gpio_keys_reset16);
} }
/*
* Init the hAP hardware.
* The 951Ui-2nD (hAP) has 5 ethernet ports, with ports 2-5 being assigned
* to LAN on the casing, and port 1 being assigned to "internet" (WAN).
* Port 1 is connected to PHY4 (the ports are labelled in reverse physical
* number), so the SoC can be set to connect GMAC0 to PHY4 and GMAC1 to the
* internal switch for the LAN ports.
* The device also has USB, PoE output and an SSR used for LED multiplexing.
*/
static void __init rb952_setup(void)
{
u32 flags = RBSPI_HAS_WLAN | RBSPI_HAS_WAN4 | RBSPI_HAS_USB |
RBSPI_HAS_SSR;
if (rbspi_platform_setup())
return;
rbspi_spi_cs_gpios[1] = RB952_GPIO_SSR_CS;
rbspi_peripherals_setup(flags);
/* GMAC1 is HW MAC + 1, WLAN MAC IS HW MAC + 5 */
rbspi_network_setup(flags, 1, 5);
gpio_request_one(RB952_GPIO_USB_POWER,
GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
"USB power");
gpio_request_one(RB952_GPIO_POE_POWER,
GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
"POE power");
ath79_register_leds_gpio(-1, ARRAY_SIZE(rb952_leds), rb952_leds);
/* hAP has a single reset button as gpio 16 */
ath79_register_gpio_keys_polled(-1, RBSPI_KEYS_POLL_INTERVAL,
ARRAY_SIZE(rbspi_gpio_keys_reset16),
rbspi_gpio_keys_reset16);
}
MIPS_MACHINE_NONAME(ATH79_MACH_RB_MAPL, "map-hb", rbmapl_setup); MIPS_MACHINE_NONAME(ATH79_MACH_RB_MAPL, "map-hb", rbmapl_setup);
MIPS_MACHINE_NONAME(ATH79_MACH_RB_941, "H951L", rbhapl_setup); MIPS_MACHINE_NONAME(ATH79_MACH_RB_941, "H951L", rbhapl_setup);
MIPS_MACHINE_NONAME(ATH79_MACH_RB_952, "952-hb", rb952_setup);

View File

@ -173,6 +173,7 @@ enum ath79_mach_type {
ATH79_MACH_RB_941, /* MikroTik RouterBOARD 941-2nD */ ATH79_MACH_RB_941, /* MikroTik RouterBOARD 941-2nD */
ATH79_MACH_RB_951G, /* Mikrotik RouterBOARD 951G */ ATH79_MACH_RB_951G, /* Mikrotik RouterBOARD 951G */
ATH79_MACH_RB_951U, /* Mikrotik RouterBOARD 951Ui-2HnD */ ATH79_MACH_RB_951U, /* Mikrotik RouterBOARD 951Ui-2HnD */
ATH79_MACH_RB_952, /* MikroTik RouterBOARD 951Ui-2nD */
ATH79_MACH_RB_MAPL, /* Mikrotik RouterBOARD mAP L-2nD */ ATH79_MACH_RB_MAPL, /* Mikrotik RouterBOARD mAP L-2nD */
ATH79_MACH_RB_SXTLITE2ND, /* Mikrotik RouterBOARD SXT Lite 2nD */ ATH79_MACH_RB_SXTLITE2ND, /* Mikrotik RouterBOARD SXT Lite 2nD */
ATH79_MACH_RB_SXTLITE5ND, /* Mikrotik RouterBOARD SXT Lite 5nD */ ATH79_MACH_RB_SXTLITE5ND, /* Mikrotik RouterBOARD SXT Lite 5nD */