Skip to content

Commit

Permalink
ath79: support Mikrotik RouterBOARD 2011-UiAS-2HnD
Browse files Browse the repository at this point in the history
Mikrotik RouterBOARD 2011 series are AR9344-based wired routers, with
optional 2,4GHz 802.11n 2x2:2 Wi-Fi radio, with desktop or rack-mount
capability, featuring 5 gigabit Ethernet ports and 5 fast Ethernet
ports. Different variants of the board are supported using a single
image.
Bare-bones RouterBOARD 2011LS is supported using the same image.

Specification:
- Power: 10-28V input via 5,5/2,1 DC barrel jack, or terminal block on
  some boards
- CPU: AR9344 at 600 to 750MHz (configurable)
- RAM: 128MB (64MB in early versions) DDR2
- Flash: 128MB (64MB in early versions) NAND flash
- Gigabit Ethernet: 5 ports via AR8327 switch (eth1 to eth5)
- Fast Ethernet: 5 ports via AR9344 built-in switch (eth6 to eth10)
- SFP: single port through AR8327 switch (SGMII at port 6) - currently
  unsuppoorted
- PoE in: passive input up to 28V at eth1
- PoE out: passive output up to 28V at eth10
- USB: optional micro-AB host port or type-A host port
- Console: optional Cisco-style RS232 console at the back of the device,
  on budget devices available as 3.3V UART via testpoints
- LCD: 2" touchscreen-equipped LCD (unsupported)

Installation:
- perform TFTP boot of initramfs image as for netinstall procedure
  typical for Mikrotik devices
- when initramfs image boots, use sysupgrade to perform final
  installation.

If upgrading from ar71xx, clean installation should be performed, as the
devices now uses yafut to handle kernel image.

TODO:
- SFP port probes over I²C and gigabit link is possible, but currently
  the drivers lack support of handling link status information to
  userspace, including swconfig. Link will appear as always up.
  Currently, link status logging can detect something, but status both
  for ports 0 and 6 is logged simultaneously,
  but "swconfig dev switch0 show" will always show link up on port 6.
- Unknown connection to display and touch panel, but some documentation
  is available (seemingly connected via SPI, according to Mikrotik's
  open source code at [1])

[1] https://github.com/robimarko/routeros-GPL

Signed-off-by: Lech Perczak <[email protected]>
  • Loading branch information
Leo-PL committed Jan 16, 2025
1 parent 63d59e6 commit 2e92530
Show file tree
Hide file tree
Showing 8 changed files with 367 additions and 0 deletions.
317 changes: 317 additions & 0 deletions target/linux/ath79/dts/ar9344_mikrotik_routerboard-2011uias-2hnd.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,317 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

#include "ar9344.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
model = "MikroTik RouterBOARD 2011UiAS-2HnD";
compatible = "mikrotik,routerboard-2011uias-2hnd", "qca,ar9344";

aliases {
led-boot = &led_user;
led-failsafe = &led_user;
led-running = &led_user;
led-upgrade = &led_user;
};

keys {
compatible = "gpio-keys";

reset {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};

poe-in {
label = "poe-in";
linux,input-type = <EV_SW>;
linux,code = <BTN_1>;
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};

beeper {
compatible = "gpio-beeper";
gpios = <&gpio 22 GPIO_ACTIVE_HIGH>;
};

sfp_i2c: i2c-gpio {
compatible = "i2c-gpio";
#address-cells = <1>;
#size-cells = <0>;

pictrl-names = "default";
pinctrl-0 = <&pmx_sfp_i2c>;

sda-gpios = <&gpio 11 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
scl-gpios = <&gpio 21 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
i2c-gpio,delay-us = <2>;
};

sfp {
/*
* SFP port attached throug AR8327 port 6 isn't functional for now
* The module detects sucessfully, but lacks some GPIO definitions,
* and proper SGMII configuration isn't known yet.
*/
compatible = "sff,sfp";
i2c-bus = <&sfp_i2c>;
los-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <1000>;
};

leds {
compatible = "gpio-leds";

led-0 {
label = "green:wlan2g";
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy0tpt";
};
};
};

&ref {
clock-frequency = <25000000>;
};

&gpio {
nand-nce {
gpio-hog;
gpios = <14 GPIO_ACTIVE_LOW>;
output-high;
line-name = "nand-nce";
};
};

&nand {
status = "okay";

nand-ecc-mode = "soft";
nand-ecc-step-size = <2048>;
qca,nand-swap-dma;
qca,nand-scan-fixup;

partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#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 0x0>;
};
};
};

&pinmux {
pmx_sfp_i2c: pinmux_sfp_i2c {
pinctrl-single,bits = <0x8 0x00000000 0xff000000>; /* set GPIO11 back as GPIO */
};
};

&spi {
status = "okay";

flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <25000000>;

partitions {
compatible = "mikrotik,routerboot-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "routerboot";
reg = <0x0 0x0>;
read-only;
};

hard_config {
read-only;

nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;

macaddr_hardconfig_10: macaddr@10 {
compatible = "mac-base";
reg = <0x10 0x6>;
#nvmem-cell-cells = <1>;
};
};
};

bios {
size = <0x1000>;
read-only;
};

soft_config {
};
};
};
};

&mdio0 {
status = "okay";
phy0: ethernet-phy@0 {
reg = <0>;
phy-mode = "rgmii";

qca,ar8327-initvals = <
0x04 0x07c00000 /* PORT0 PAD MODE CTRL: Mac0_rgmii_en | Mac0_rgmii_txclk_delay_en | Mac0_rgmii_rxclk_delay_en | Mac0_rgmii_txclk_delay_sel3 | Mac0_rgmii_rxclk_delay_sel0 */
0x0c 0x00000080 /* PORT6 PAD MODE CTRL: Mac6_sgmii_en */
0x10 0x81000000 /* PWS_REG: POWER_ON_STRAP | LED_OPEN_EN_CSR */
0x50 0xc731c731 /* LED_CTRL0 */
0x54 0x00000000 /* LED_CTRL1 */
0x58 0x00008000 /* LED_CTRL2: 5A: disable LCD power */
0x5c 0x0230c300 /* LED_CTRL3: 5C: enable SFP power */
0x7c 0x0000007e /* PORT0_STATUS: DUPLEX_MODE_0 | RX_FLOW_EN_0 | TX_FLOW_EN_0 | RXMAC_EN_0 | TXMAC_EN_0 | SPEED_0 1000M */
0x94 0x0000007e /* PORT6_STATUS: DUPLEX_MODE_0 | RX_FLOW_EN_0 | TX_FLOW_EN_0 | RXMAC_EN_0 | TXMAC_EN_0 | SPEED_0 1000M */
0xe0 0xc70167d0 /* SGMII_CTRL */
>;

leds {
led@0 {
reg = <0>;
label = "green:eth1";
qca,led_mode = <0>;
};

led@1 {
reg = <1>;
label = "green:eth6";
qca,led_mode = <1>;
};

led@2 {
reg = <2>;
label = "backlight";
linux,default-trigger = "backlight";
// active-low; // causes the kernel to crash in driver
qca,led_mode = <1>;
};

led@3 {
reg = <3>;
label = "green:eth2";
qca,led_mode = <0>;
};

led@4 {
reg = <4>;
label = "green:eth7";
qca,led_mode = <1>;
};

led@6 {
reg = <6>;
label = "green:eth3";
qca,led_mode = <0>;
};

led@7 {
reg = <7>;
label = "green:eth8";
qca,led_mode = <1>;
};

led@9 {
reg = <9>;
label = "green:eth4";
qca,led_mode = <0>;
};

led@10 {
reg = <10>;
label = "green:eth9";
qca,led_mode = <1>;
};

led@12 {
reg = <12>;
label = "green:eth5";
qca,led_mode = <0>;
};

led@13 {
reg = <13>;
label = "green:eth10";
qca,led_mode = <1>;
};

led_user: led@14 {
reg = <14>;
label = "green:user";
qca,led_mode = <1>;
};
};
};
};

&eth0 {
status = "okay";

/* default for ar934x, except for 1000M */
pll-data = <0x6f000000 0x00000101 0x00001616>;

phy-mode = "rgmii";
phy-handle = <&phy0>;

nvmem-cells = <&macaddr_hardconfig_10 0>;
nvmem-cell-names = "mac-address";

gmac-config {
device = <&gmac>;
rgmii-gmac0 = <1>;
switch-phy-swap = <0>;
switch-only-mode = <1>;
rxd-delay = <1>;
rxdv-delay = <1>;
};
};

&builtin_switch {
/delete-property/ qca,phy4-mii-enable;
};

&eth1 {
status = "okay";

nvmem-cells = <&macaddr_hardconfig_10 5>;
nvmem-cell-names = "mac-address";
};

&usb {
status = "okay";
};

&usb_phy {
status = "okay";
};

&wmac {
status = "okay";

qca,no-eeprom;
};
11 changes: 11 additions & 0 deletions target/linux/ath79/image/mikrotik.mk
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
include ./common-mikrotik.mk

define Device/mikrotik_routerboard-2011uias-2hnd
$(Device/mikrotik_nand)
SOC := ar9344
DEVICE_MODEL := RouterBOARD 2011UiAS-2HnD
DEVICE_PACKAGES += kmod-usb2 kmod-i2c-gpio kmod-sfp kmod-gpio-beeper
SUPPORTED_DEVICES += rb-2011l rb-2011il rb-2011ils \
rb-2011uas rb-2011uas-2hnd rb-2011uias \
rb-2011uias-2hnd rb-2011uias-2hnd-r2
endef
TARGET_DEVICES += mikrotik_routerboard-2011uias-2hnd

define Device/mikrotik_routerboard-493g
$(Device/mikrotik_nand)
SOC := ar7161
Expand Down
7 changes: 7 additions & 0 deletions target/linux/ath79/mikrotik/base-files/etc/board.d/01_leds
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ board_config_update
board=$(board_name)

case "$board" in
mikrotik,routerboard-2011uias-2hnd)
ucidef_set_led_switch "eth6" "eth6" "green:eth6" "switch1" "0x20"
ucidef_set_led_switch "eth7" "eth7" "green:eth7" "switch1" "0x10"
ucidef_set_led_switch "eth8" "eth8" "green:eth8" "switch1" "0x08"
ucidef_set_led_switch "eth9" "eth9" "green:eth9" "switch1" "0x04"
ucidef_set_led_switch "eth10" "eth10" "green:eth10" "switch1" "0x02"
;;
mikrotik,routerboard-911-lite|\
mikrotik,routerboard-lhg-5nd)
ucidef_set_led_netdev "lan" "lan" "green:lan" "eth0"
Expand Down
7 changes: 7 additions & 0 deletions target/linux/ath79/mikrotik/base-files/etc/board.d/02_network
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ ath79_setup_interfaces()
local board="$1"

case "$board" in
mikrotik,routerboard-2011uias-2hnd)
ucidef_add_switch "switch0" \
"0@eth0" "2:lan" "3:lan" "4:lan" "5:lan" "6:lan" "1:wan"
ucidef_add_switch "switch1" \
"0@eth1" "1:lan:5" "2:lan:4" "3:lan:3" "4:lan:2" "5:lan:1"
;;
mikrotik,routerboard-493g)
ucidef_set_interfaces_lan_wan "eth0.1 eth1.1" "eth0.2"
ucidef_add_switch "switch0" \
Expand Down Expand Up @@ -76,6 +82,7 @@ ath79_setup_macs()
label_mac="$mac_base"
lan_mac="$mac_base"
;;
mikrotik,routerboard-2011uias-2hnd|\
mikrotik,routerboard-921gs-5hpacd-15s|\
mikrotik,routerboard-922uags-5hpacd)
label_mac="$mac_base"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#
# Copyright (C) 2025 OpenWrt.org
#

. /lib/functions/uci-defaults.sh

board_config_update

board=$(board_name)

case "$board" in
mikrotik,routerboard-2011uias-2hnd)
ucidef_add_gpio_switch "usb_power_n" "USB host power" "532" "0"
ucidef_add_gpio_switch "poe_port10_out_power" "PoE outuput on port 10" "514" "1"
;;
esac

board_config_flush

exit 0
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
board_config_update

case "$(board_name)" in
mikrotik,routerboard-2011uias-2hnd|\
mikrotik,routerboard-493g|\
mikrotik,routerboard-911g-5hpacd|\
mikrotik,routerboard-911g-xhpnd|\
Expand Down
Loading

0 comments on commit 2e92530

Please sign in to comment.