ar71xx: add support for the MikroTik RB911-2Hn/5Hn boards
authorGabor Juhos <juhosg@freemail.hu>
Thu, 18 Jan 2018 12:50:32 +0000 (13:50 +0100)
committerJohn Crispin <john@phrozen.org>
Mon, 22 Jan 2018 09:53:45 +0000 (10:53 +0100)
The patch adds support for the MikroTik RB911-2Hn (911 Lite2)
and the RB911-5Hn (911 Lite5) boards:

  https://mikrotik.com/product/RB911-2Hn
  https://mikrotik.com/product/RB911-5Hn

The two boards are using the same hardware design, the only difference
between the two is the supported wireless band.

Specifications:
  * SoC: Atheros AR9344 (600MHz)
  * RAM: 64MiB
  * Storage: 16 MiB SPI NOR flash
  * Ethernet: 1x100M (Passive PoE in)
  * Wireless: AR9344 built-in wireless MAC, single chain
              802.11b/g/n (911-2Hn) or 802.11a/g/n (911-5Hn)

Notes:
  * Older versions of these boards might be equipped with a NAND
    flash chip instead of the SPI NOR device. Those boards are not
    supported (yet).
  * The MikroTik RB911-5HnD (911 Lite5 Dual) board also uses the
    same hardware. Support for that can be added later with little
    effort probably.

Installation:

1. Setup a DHCP/BOOTP Server with the following parameters:
   * DHCP-Option 66 (TFTP server name): pointing to a local TFTP
     server within the same subnet of the DHCP range
   * DHCP-Option 67 (Bootfile-Name): matching the initramfs filename
     of the to be booted image. The usable intramfs files are:
       - openwrt-ar71xx-mikrotik-vmlinux-initramfs.elf
       - openwrt-ar71xx-mikrotik-vmlinux-initramfs-lzma.elf
       - openwrt-ar71xx-mikrotik-rb-nor-flash-16M-initramfs-kernel.bin

2. Press the reset button on the board and keep that pressed.

3. Connect the board to your local network via its ethernet port.

4. Release the button after the LEDs on the board are turned off.
   Now the board should load and start the initramfs image from
   the TFTP server.

5. Upload the sysupgrade image to the board with scp:
     $ scp openwrt-ar71xx-mikrotik-rb-nor-flash-16M-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/fw.bin

5. Log in to the running system listening on 192.168.1.1 via ssh
   as root (without password):
     $ ssh root@192.168.1.1

7. Flash the uploaded firmware file from the ssh session via the
   sysupgrade command:
     root@OpenWrt:~# sysupgrade /tmp/fw.bin

Signed-off-by: Gabor Juhos <juhosg@freemail.hu>
target/linux/ar71xx/base-files/etc/board.d/01_leds
target/linux/ar71xx/base-files/etc/board.d/02_network
target/linux/ar71xx/base-files/etc/diag.sh
target/linux/ar71xx/base-files/lib/ar71xx.sh
target/linux/ar71xx/base-files/lib/upgrade/platform.sh
target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
target/linux/ar71xx/files/arch/mips/ath79/mach-rbspi.c
target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
target/linux/ar71xx/image/mikrotik.mk
target/linux/ar71xx/patches-4.4/701-MIPS-ath79-add-routerboard-detection.patch
target/linux/ar71xx/patches-4.9/701-MIPS-ath79-add-routerboard-detection.patch

index fb1f29dcfafc3e65dc6d252345ae1eb5cb63eeee..ecd3723c6a74ed298d3a0812eb65072217192b09 100755 (executable)
@@ -292,6 +292,10 @@ rb-750up-r2)
        ucidef_set_led_switch "port4" "port3" "rb:green:port4" "switch0" "0x04"
        ucidef_set_led_switch "port5" "port5" "rb:green:port5" "switch0" "0x02"
        ;;
+rb-911-2hn|\
+rb-911-5hn)
+       ucidef_set_led_netdev "eth" "ETH" "rb:green:eth" "eth0"
+       ;;
 rb-941-2nd)
        ucidef_set_led_timer "user" "USR/ACT" "rb:green:user" "1000" "1000"
        ;;
index 5a10a9f4861691931e7163de8f213b295bc2b603..b0755c44dd815abf216fe1f30e10c334f791803e 100755 (executable)
@@ -93,6 +93,8 @@ ar71xx_setup_interfaces()
        pqi-air-pen|\
        rb-411|\
        rb-411u|\
+       rb-911-2hn|\
+       rb-911-5hn|\
        rb-911g-2hpnd|\
        rb-911g-5hpacd|\
        rb-911g-5hpnd|\
index 2720288e3d868e1ecb7831ec1d67420e6b6fc50b..4f4a73ce067ecbad5a3185ce4ab311e41dad27f8 100644 (file)
@@ -319,6 +319,8 @@ get_status_led() {
        rb-750-r2|\
        rb-750p-pbr2|\
        rb-750up-r2|\
+       rb-911-2hn|\
+       rb-911-5hn|\
        rb-911g-2hpnd|\
        rb-911g-5hpacd|\
        rb-911g-5hpnd|\
index b6642495de1b0307859f71e17d7ffc57802eceac..73bdce58531072a4962498f8d150d39947ebf2d8 100755 (executable)
@@ -941,6 +941,12 @@ ar71xx_board_detect() {
        *"RouterBOARD 751G")
                name="rb-751g"
                ;;
+       *"RouterBOARD 911-2Hn")
+               name="rb-911-2hn"
+               ;;
+       *"RouterBOARD 911-5Hn")
+               name="rb-911-5hn"
+               ;;
        *"RouterBOARD 911G-2HPnD")
                name="rb-911g-2hpnd"
                ;;
index 3d7b1593e129e651b7dac81980425f358d55592f..1f9ed76fc320776ce03a5a1dce71cb95d5030b97 100755 (executable)
@@ -660,6 +660,8 @@ platform_check_image() {
        rb-750-r2|\
        rb-750p-pbr2|\
        rb-750up-r2|\
+       rb-911-2hn|\
+       rb-911-5hn|\
        rb-941-2nd|\
        rb-951ui-2nd|\
        rb-952ui-5ac2nd|\
@@ -723,6 +725,8 @@ platform_pre_upgrade() {
        rb-750-r2|\
        rb-750p-pbr2|\
        rb-750up-r2|\
+       rb-911-2hn|\
+       rb-911-5hn|\
        rb-941-2nd|\
        rb-951ui-2nd|\
        rb-952ui-5ac2nd|\
index 3ca77550bc8a99c0eaaeb460c9147de7b4010802..caaaf977925052caad39839924d5c95af980266e 100644 (file)
@@ -1054,6 +1054,8 @@ config ATH79_MACH_RBSPI
        select ATH79_ROUTERBOOT
        help
          Say 'Y' here if you want your kernel to support the
+         MikroTik ROuterBOARD 911-2Hn (911 Lite2)
+         MikroTik ROuterBOARD 911-5Hn (911 Lite5)
          MikroTik RouterBOARD mAP
          MikroTik RouterBOARD mAP lite
          MikroTik RouterBOARD hAP lite
index 25e920f59300710e137f6e4ec51f9e461d656a15..f7f3b028f4b45e5a88b8321c70d50ab670dbb06c 100644 (file)
@@ -3,6 +3,8 @@
  *
  *  - MikroTik RouterBOARD mAP 2nD
  *  - MikroTik RouterBOARD mAP L-2nD
+ *  - MikroTik RouterBOARD 911-2Hn (911 Lite2)
+ *  - MikroTik RouterBOARD 911-5Hn (911 Lite5)
  *  - MikroTik RouterBOARD 941L-2nD
  *  - MikroTik RouterBOARD 951Ui-2nD
  *  - MikroTik RouterBOARD 952Ui-5ac2nD
@@ -509,6 +511,56 @@ static struct platform_device rbwapgsc_phy_device = {
        },
 };
 
+/* RB911L GPIOs */
+#define RB911L_GPIO_BTN_RESET  15
+#define RB911L_GPIO_LED_1      13
+#define RB911L_GPIO_LED_2      12
+#define RB911L_GPIO_LED_3      4
+#define RB911L_GPIO_LED_4      21
+#define RB911L_GPIO_LED_5      18
+#define RB911L_GPIO_LED_ETH    20
+#define RB911L_GPIO_LED_POWER  11
+#define RB911L_GPIO_LED_USER   3
+#define RB911L_GPIO_PIN_HOLE   14 /* for reference */
+
+static struct gpio_led rb911l_leds[] __initdata = {
+       {
+               .name = "rb:green:eth",
+               .gpio = RB911L_GPIO_LED_ETH,
+               .active_low = 1,
+       }, {
+               .name = "rb:green:led1",
+               .gpio = RB911L_GPIO_LED_1,
+               .active_low = 1,
+       }, {
+               .name = "rb:green:led2",
+               .gpio = RB911L_GPIO_LED_2,
+               .active_low = 1,
+       }, {
+               .name = "rb:green:led3",
+               .gpio = RB911L_GPIO_LED_3,
+               .active_low = 1,
+       }, {
+               .name = "rb:green:led4",
+               .gpio = RB911L_GPIO_LED_4,
+               .active_low = 1,
+       }, {
+               .name = "rb:green:led5",
+               .gpio = RB911L_GPIO_LED_5,
+               .active_low = 1,
+       }, {
+               .name = "rb:green:power",
+               .gpio = RB911L_GPIO_LED_POWER,
+               .default_state = LEDS_GPIO_DEFSTATE_ON,
+               .open_drain = 1,
+       }, {
+               .name = "rb:green:user",
+               .gpio = RB911L_GPIO_LED_USER,
+               .active_low = 1,
+               .open_drain = 1,
+       },
+};
+
 static struct gen_74x164_chip_platform_data rbspi_ssr_data = {
        .base = RBSPI_SSR_GPIO_BASE,
        .num_registers = 1,
@@ -1015,8 +1067,53 @@ static void __init rbwapgsc_setup(void)
                        rbwapgsc_leds);
 }
 
+/*
+ * Setup the 911L hardware (AR9344).
+ */
+static void __init rb911l_setup(void)
+{
+       const struct rb_info *info;
+
+       info = rbspi_platform_setup();
+       if (!info)
+               return;
+
+       if (!rb_has_hw_option(info, RB_HW_OPT_NO_NAND)) {
+               /*
+                * Old hardware revisions might be equipped with a NAND flash
+                * chip instead of the 16MiB SPI NOR device. Those boards are
+                * not supported at the moment, so throw a warning and skip
+                * the peripheral setup to avoid messing up the data in the
+                * flash chip.
+                */
+               WARN(1, "The NAND flash on this board is not supported.\n");
+       } else {
+               rbspi_peripherals_setup(0);
+       }
+
+       ath79_register_mdio(1, 0x0);
+
+       ath79_init_mac(ath79_eth1_data.mac_addr, ath79_mac_base, 0);
+
+       ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
+       ath79_eth1_data.speed = SPEED_1000;
+       ath79_eth1_data.duplex = DUPLEX_FULL;
+
+       ath79_register_eth(1);
+
+       rbspi_wlan_init(0, 1);
+
+       rbspi_register_reset_button(RB911L_GPIO_BTN_RESET);
+
+       /* Make the eth LED controllable by software. */
+       ath79_gpio_output_select(RB911L_GPIO_LED_ETH, AR934X_GPIO_OUT_GPIO);
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(rb911l_leds), rb911l_leds);
+}
+
 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_911L, "911L", rb911l_setup);
 MIPS_MACHINE_NONAME(ATH79_MACH_RB_952, "952-hb", rb952_setup);
 MIPS_MACHINE_NONAME(ATH79_MACH_RB_962, "962", rb962_setup);
 MIPS_MACHINE_NONAME(ATH79_MACH_RB_750UPR2, "750-hb", rb750upr2_setup);
index a621fe2c907e4b46f7cb58ece8dfb9d5dddf1a89..394be00c995ab4e5e044002188d3ae04aa2a63bf 100644 (file)
@@ -190,6 +190,7 @@ enum ath79_mach_type {
        ATH79_MACH_RB_750UPR2,                  /* MikroTik RouterBOARD 750UP r2 */
        ATH79_MACH_RB_751,                      /* MikroTik RouterBOARD 751 */
        ATH79_MACH_RB_751G,                     /* Mikrotik RouterBOARD 751G */
+       ATH79_MACH_RB_911L,                     /* Mikrotik RouterBOARD 911-2Hn/911-5Hn boards */
        ATH79_MACH_RB_922GS,                    /* Mikrotik RouterBOARD 911/922GS boards */
        ATH79_MACH_RB_941,                      /* MikroTik RouterBOARD 941-2nD */
        ATH79_MACH_RB_951G,                     /* Mikrotik RouterBOARD 951G */
index 403bcb08b583067c392d2c3071a2e2c0c520240c..f381f85ae2ecda781b998d96e6c2c193bfe1c380 100644 (file)
@@ -40,7 +40,7 @@ define Device/rb-nor-flash-16M
   LOADER_TYPE := elf
   KERNEL_INSTALL := 1
   KERNEL := kernel-bin | lzma | loader-kernel
-  SUPPORTED_DEVICES := rb-750-r2 rb-750up-r2 rb-750p-pbr2 rb-941-2nd rb-951ui-2nd rb-952ui-5ac2nd rb-962uigs-5hact2hnt rb-lhg-5nd rb-map-2nd rb-mapl-2nd rb-wap-2nd
+  SUPPORTED_DEVICES := rb-750-r2 rb-750up-r2 rb-750p-pbr2 rb-911-2hn rb-911-5hn rb-941-2nd rb-951ui-2nd rb-952ui-5ac2nd rb-962uigs-5hact2hnt rb-lhg-5nd rb-map-2nd rb-mapl-2nd rb-wap-2nd
   IMAGE/sysupgrade.bin := append-kernel | kernel2minor -s 1024 -e | pad-to $$$$(BLOCKSIZE) | \
        append-rootfs | pad-rootfs | append-metadata | check-size $$$$(IMAGE_SIZE)
 endef
index 625bb19ba589301ecaa8c80346099ecb70a9b47c..64c7e881a786b41f14423cf71f8079c416892cf4 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/ath79/prom.c
 +++ b/arch/mips/ath79/prom.c
-@@ -136,6 +136,30 @@ void __init prom_init(void)
+@@ -136,6 +136,31 @@ void __init prom_init(void)
                initrd_end = initrd_start + fw_getenvl("initrd_size");
        }
  #endif
@@ -26,6 +26,7 @@
 +          strstr(arcs_cmdline, "board=2011L") ||
 +          strstr(arcs_cmdline, "board=2011r") ||
 +          strstr(arcs_cmdline, "board=711Gr100") ||
++          strstr(arcs_cmdline, "board=911L") ||
 +          strstr(arcs_cmdline, "board=922gs"))
 +              ath79_prom_append_cmdline("console", "ttyS0,115200");
  }
index 625bb19ba589301ecaa8c80346099ecb70a9b47c..64c7e881a786b41f14423cf71f8079c416892cf4 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/ath79/prom.c
 +++ b/arch/mips/ath79/prom.c
-@@ -136,6 +136,30 @@ void __init prom_init(void)
+@@ -136,6 +136,31 @@ void __init prom_init(void)
                initrd_end = initrd_start + fw_getenvl("initrd_size");
        }
  #endif
@@ -26,6 +26,7 @@
 +          strstr(arcs_cmdline, "board=2011L") ||
 +          strstr(arcs_cmdline, "board=2011r") ||
 +          strstr(arcs_cmdline, "board=711Gr100") ||
++          strstr(arcs_cmdline, "board=911L") ||
 +          strstr(arcs_cmdline, "board=922gs"))
 +              ath79_prom_append_cmdline("console", "ttyS0,115200");
  }