ramips: add support for UniElec U7628-01
authorPiotr Dymacz <pepe2k@gmail.com>
Fri, 3 Nov 2017 20:12:49 +0000 (21:12 +0100)
committerPiotr Dymacz <pepe2k@gmail.com>
Tue, 14 Nov 2017 21:36:46 +0000 (22:36 +0100)
UniElec U7628-01 is a router platform board based on MediaTek MT7628AN.
The device has the following specifications:

- MT7628AN (580MHz)
- 64/128/256 MB of RAM (DDR2)
- 8/16 MB of flash (SPI NOR)
- 5x 10/100 Mbps Ethernet (MT7628 built-in switch)
- 1x 2T2R 2.4 GHz Wi-Fi (MT7628)
- 1x miniPCIe slot (with PCIe and USB 2.0 buses)
- 1x miniSIM slot
- 1x microSD slot
- 1x USB 2.0 port
- 7x single-color LEDs (GPIO-controlled)
- 1x bi-color LED (green GPIO-controlled, red -> LED_WLAN# in miniPCIe)
- 1x reset button
- 1x UART header (4-pins)
- 1x SDXC/GPIO header (10-pins, connected with microSD slot)
- 1x DC jack for main power (12 V)

The following has been tested and is working:

- Ethernet switch
- miniPCIe slot (tested with modem and Wi-Fi card)
- miniSIM slot
- sysupgrade
- reset button
- USB 2.0 port*

Due to a missing driver (MMC over GPIO) this is not supported:

- microSD card reader

* Warning:
USB buses in miniPCIe and regular A-type socket are connected together,
without any proper analog switch or USB HUB.

Installation:

This board might come with a different firmware versions (MediaTek SDK,
PandoraBox, Padavan, etc.). If your board comes with PandoraBox, you can
install LEDE using sysupgrade. Just SSH to the router and perform forced
sysupgrade (due to a board name mismatch). The default IP of this board
should be: 192.168.1.1 and username/password: root/admin. In case of a
different firmware, you can use web based recovery described below.

Use the following command to perform the sysupgrade (for the 128MB
RAM/16MB flash version):

sysupgrade -n -F lede-ramips-mt76x8-u7628-01-128M-16M-squashfs-sysupgrade.bin

Recovery:

This board contains a Chinese, closed-source bootloader called Breed
(Boot and Recovery Environment for Embedded Devices). Breed supports web
recovery and to enter it, you keep the reset button pressed for around
5 seconds during boot. Your machine will be assigned an IP through DHCP
and the router will use IP address 192.168.1.1. The recovery website is
in Chinese, but is easy to use. Click on the second item in the list to
access the recovery page, then the second item on the next page is where
you select the firmware. In order to start the recovery, you click the
button at the bottom.

SDXC/GPIO header (J3):

 1. SDXC_D3  / I2C_SCLK
 2. SDXC_D2  / I2C_SD
 3. SDXC_D1  / I2S_DI
 4. SDXC_D0  / I2S_WS
 5. SDXC_CMD / I2S_CLK
 6. SDXC_CLK / GPIO0
 7. SDXC_CD  / UART_RXD1
 8. UART_TXD1
 9. 3V3
10. GND

Other notes:

1. The board is available with different amounts of RAM and flash. We
have only added support for the 128/16 MB configuration, as that seems
to be the default. However, all the required infrastructure is in place
for making support for the other configurations easy.

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
target/linux/ramips/base-files/etc/board.d/01_leds
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/base-files/etc/diag.sh
target/linux/ramips/base-files/lib/ramips.sh
target/linux/ramips/base-files/lib/upgrade/platform.sh
target/linux/ramips/dts/U7628-01-128M-16M.dts [new file with mode: 0644]
target/linux/ramips/dts/U7628-01.dtsi [new file with mode: 0644]
target/linux/ramips/image/mt76x8.mk

index 037331df965069afefea67a0774526336a1d2c4c..74e405e4201b37125af11467de87842f1cbd8270 100755 (executable)
@@ -372,6 +372,15 @@ u25awf-h1)
        set_wifi_led "u25awf:red:wifi"
        ucidef_set_led_netdev "eth" "eth" "u25awf:green:lan" "eth0"
        ;;
+u7628-01-128M-16M)
+       ucidef_set_led_switch "lan1" "lan1" "u7628-01:green:lan1" "switch0" "0x2"
+       ucidef_set_led_switch "lan2" "lan2" "u7628-01:green:lan2" "switch0" "0x4"
+       ucidef_set_led_switch "lan3" "lan3" "u7628-01:green:lan3" "switch0" "0x8"
+       ucidef_set_led_switch "lan4" "lan4" "u7628-01:green:lan4" "switch0" "0x10"
+       ucidef_set_led_switch "wan" "wan" "u7628-01:green:wan" "switch0" "0x01"
+       set_usb_led "u7628-01:green:usb"
+       set_wifi_led "u7628-01:green:wlan"
+       ;;
 vocore-8M|\
 vocore-16M)
        ucidef_set_led_netdev "eth" "ETH" "vocore:orange:eth" "eth0"
index da3231dc1dca3336cbc4dec2f3288bf147c02fa2..ba9ab1567045004f0654f374855777f59ff7ac12 100755 (executable)
@@ -174,6 +174,7 @@ ramips_setup_interfaces()
        tl-wr840n-v4|\
        tl-wr840n-v5|\
        tl-wr841n-v13|\
+       u7628-01-128M-16M|\
        ubnt-erx|\
        ubnt-erx-sfp|\
        ur-326n4g|\
index 107e67591a4553b4545274aafef2a552b51549fa..50cc44058f3d5c361775b7e1c1003bfb46f11452 100644 (file)
@@ -246,6 +246,9 @@ get_status_led() {
        u7621-06-256M-16M)
                status_led="u7621-06:green:status"
                ;;
+       u7628-01-128M-16M)
+               status_led="u7628-01:green:power"
+               ;;
        v22rw-2x2)
                status_led="$board:green:security"
                ;;
index 32128a48526ac0d4986ec51f1f599c7afe8b2ef2..b71a130cbe0166d5f801e73c80e988f368d72220 100755 (executable)
@@ -514,6 +514,9 @@ ramips_board_detect() {
        *"U7621-06 (256M RAM/16M flash)")
                name="u7621-06-256M-16M"
                ;;
+       *"U7628-01 (128M RAM/16M flash)")
+               name="u7628-01-128M-16M"
+               ;;
        *"UBNT-ERX")
                name="ubnt-erx"
                ;;
index c2f5df7d36c438438004e3bd8ba8fab5e45ee284..fb5e600f35ded8c5dfa9450c857abf900daec851 100755 (executable)
@@ -146,6 +146,7 @@ platform_check_image() {
        tiny-ac|\
        u25awf-h1|\
        u7621-06-256M-16M|\
+       u7628-01-128M-16M|\
        ur-326n4g|\
        ur-336un|\
        v22rw-2x2|\
diff --git a/target/linux/ramips/dts/U7628-01-128M-16M.dts b/target/linux/ramips/dts/U7628-01-128M-16M.dts
new file mode 100644 (file)
index 0000000..4b3345d
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ *  BSD LICENSE
+ *
+ *  Copyright(c) 2017 Kristian Evensen <kristian.evensen@gmail.com>.
+ *  Copyright(c) 2017 Piotr Dymacz <pepe2k@gmail.com>.
+ *  All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in
+ *      the documentation and/or other materials provided with the
+ *      distribution.
+ *    * Neither the name of Broadcom Corporation nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/dts-v1/;
+
+#include "U7628-01.dtsi"
+
+/ {
+       compatible = "unielec,u7628-01-128m-16m", "unielec,u7628-01", "mediatek,mt7628an-soc";
+       model = "UniElec U7628-01 (128M RAM/16M flash)";
+
+       memory@0 {
+               device_type = "memory";
+               reg = <0x0 0x8000000>;
+       };
+};
+
+&spi0 {
+       status = "okay";
+
+       m25p80@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <12000000>;
+               m25p,chunked-io = <32>;
+
+               partition@0 {
+                       label = "bootloader";
+                       reg = <0x0 0x30000>;
+                       read-only;
+               };
+
+               partition@30000 {
+                       label = "config";
+                       reg = <0x30000 0x10000>;
+                       read-only;
+               };
+
+               factory: partition@40000 {
+                       label = "factory";
+                       reg = <0x40000 0x10000>;
+                       read-only;
+               };
+
+               partition@50000 {
+                       label = "firmware";
+                       reg = <0x50000 0xfb0000>;
+               };
+       };
+};
diff --git a/target/linux/ramips/dts/U7628-01.dtsi b/target/linux/ramips/dts/U7628-01.dtsi
new file mode 100644 (file)
index 0000000..142cc4c
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ *  BSD LICENSE
+ *
+ *  Copyright(c) 2017 Kristian Evensen <kristian.evensen@gmail.com>.
+ *  Copyright(c) 2017 Piotr Dymacz <pepe2k@gmail.com>.
+ *  All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in
+ *      the documentation and/or other materials provided with the
+ *      distribution.
+ *    * Neither the name of Broadcom Corporation nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "mt7628an.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       compatible = "unielec,u7628-01", "mediatek,mt7628an-soc";
+
+       chosen {
+               bootargs = "console=ttyS0,115200";
+       };
+
+       gpio-keys-polled {
+               compatible = "gpio-keys-polled";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               poll-interval = <20>;
+               reset {
+                       label = "reset";
+                       gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+       };
+
+       gpio-leds {
+               compatible = "gpio-leds";
+
+               power {
+                       label = "u7628-01:green:power";
+                       gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
+               };
+
+               wlan {
+                       label = "u7628-01:green:wlan";
+                       gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
+               };
+
+               wan {
+                       label = "u7628-01:green:wan";
+                       gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
+               };
+
+               lan1 {
+                       label = "u7628-01:green:lan1";
+                       gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
+               };
+
+               lan2 {
+                       label = "u7628-01:green:lan2";
+                       gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
+               };
+
+               lan3 {
+                       label = "u7628-01:green:lan3";
+                       gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
+               };
+
+               lan4 {
+                       label = "u7628-01:green:lan4";
+                       gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
+               };
+
+               usb {
+                       label = "u7628-01:green:usb";
+                       gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&gpio0 {
+       status = "okay";
+};
+
+&gpio1 {
+       status = "okay";
+};
+
+&pcie {
+       status = "okay";
+};
+
+&ethernet {
+       mtd-mac-address = <&factory 0x28>;
+};
+
+&wmac {
+       status = "okay";
+       ralink,mtd-eeprom = <&factory 0x0>;
+};
+
+&pinctrl {
+       state_default: pinctrl0 {
+               gpio {
+                       ralink,group = "gpio", "p0led_an", "p1led_an", "p2led_an", "p3led_an", "p4led_an", "perst", "wdt", "wled_an";
+                       ralink,function = "gpio";
+               };
+       };
+};
index 248f45eebd5fac6cedfccc93df1c9bf9525c262a..0e9b8fc7eeb74f8a65ceead501fad7b11be1d6b9 100644 (file)
@@ -124,6 +124,14 @@ define Device/tl-wr841n-v13
 endef
 TARGET_DEVICES += tl-wr840n-v4 tl-wr840n-v5 tl-wr841n-v13
 
+define Device/u7628-01-128M-16M
+  DTS := U7628-01-128M-16M
+  IMAGE_SIZE := 16064k
+  DEVICE_TITLE := UniElec U7628-01 (128M RAM/16M flash)
+  DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport
+endef
+TARGET_DEVICES += u7628-01-128M-16M
+
 define Device/vocore2
   DTS := VOCORE2
   IMAGE_SIZE := $(ralink_default_fw_size_16M)