ramips: add support for RAVPower RP-WD009
authorDavid Bauer <mail@david-bauer.net>
Mon, 29 Jun 2020 10:24:01 +0000 (12:24 +0200)
committerDavid Bauer <mail@david-bauer.net>
Mon, 29 Jun 2020 10:24:01 +0000 (12:24 +0200)
The RAVPower RP-WD009 is a batter-powered pocket sized router with SD
card lot and USB port.

Hardware
--------
CPU:   MediaTek MT7628AN
RAM:   64M DDR2
FLASH: 16M GigaDevices SPI-NOR
WLAN:  MediaTek MT7628AN 2T2R b/g/n
       MediaTek MT7610E  1T1R n/ac
ETH:   1x FastEthernet
SD:    SD Card slot
USB:   USB 2.0

Custom PMIC on the I2C bus (address 0x0a).

Installation
------------

1. Press and hold down the reset button.

2. Power up the Device. Keep pressing the reset button for 10
   more seconds until the Globe LED lights up.

3. Attach your Computer to the Ethernet port. Assign yourself the
   address 10.10.10.1/24.

4. Access the recovery page at 10.10.10.128 and upload the OpenWrt
   factory image.

5. The flashing will take around 1 minute. The device will reboot
   automatically into OpenWrt.

Signed-off-by: David Bauer <mail@david-bauer.net>
package/boot/uboot-ramips/Makefile [new file with mode: 0644]
package/boot/uboot-ramips/patches/0001-add-support-for-RAVPower-RP-WD009.patch [new file with mode: 0644]
target/linux/ramips/dts/mt7628an_ravpower_rp-wd009.dts [new file with mode: 0644]
target/linux/ramips/image/Makefile
target/linux/ramips/image/mt76x8.mk
target/linux/ramips/mt76x8/base-files/etc/board.d/02_network

diff --git a/package/boot/uboot-ramips/Makefile b/package/boot/uboot-ramips/Makefile
new file mode 100644 (file)
index 0000000..5229f5c
--- /dev/null
@@ -0,0 +1,34 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+PKG_VERSION:=2020.04
+PKG_RELEASE:=1
+
+PKG_HASH:=fe732aaf037d9cc3c0909bad8362af366ae964bbdac6913a34081ff4ad565372
+
+include $(INCLUDE_DIR)/u-boot.mk
+include $(INCLUDE_DIR)/package.mk
+
+define U-Boot/Default
+  BUILD_TARGET:=ramips
+  UBOOT_IMAGE:=u-boot.bin
+endef
+
+define U-Boot/ravpower_rp-wd009
+  BUILD_DEVICES:=ravpower_rp-wd009
+  BUILD_SUBTARGET:=mt76x8
+  NAME:=RAVPower RP-WD009
+  UBOOT_CONFIG:=ravpower-rp-wd009-ram
+endef
+
+UBOOT_TARGETS := \
+       ravpower_rp-wd009
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(STAGING_DIR_IMAGE)
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/$(UBOOT_IMAGE) $(STAGING_DIR_IMAGE)/$(VARIANT)-$(UBOOT_IMAGE)
+endef
+
+$(eval $(call BuildPackage/U-Boot))
diff --git a/package/boot/uboot-ramips/patches/0001-add-support-for-RAVPower-RP-WD009.patch b/package/boot/uboot-ramips/patches/0001-add-support-for-RAVPower-RP-WD009.patch
new file mode 100644 (file)
index 0000000..1833a62
--- /dev/null
@@ -0,0 +1,290 @@
+From 593db38363297247df731566c2aa307a5d795005 Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Thu, 18 Jun 2020 00:13:11 +0200
+Subject: [PATCH] add support for RAVPower RP-WD009
+
+---
+ arch/mips/dts/Makefile                  |  3 +-
+ arch/mips/dts/ravpower-rp-wd009.dts     | 50 +++++++++++++++++++++
+ arch/mips/mach-mtmips/Kconfig           |  9 ++++
+ board/ravpower/rp-wd009/Kconfig         | 12 +++++
+ board/ravpower/rp-wd009/Makefile        |  3 ++
+ board/ravpower/rp-wd009/board.c         | 16 +++++++
+ configs/ravpower-rp-wd009-ram_defconfig | 59 +++++++++++++++++++++++++
+ include/configs/ravpower-rp-wd009.h     | 48 ++++++++++++++++++++
+ 8 files changed, 199 insertions(+), 1 deletion(-)
+ create mode 100644 arch/mips/dts/ravpower-rp-wd009.dts
+ create mode 100644 board/ravpower/rp-wd009/Kconfig
+ create mode 100644 board/ravpower/rp-wd009/Makefile
+ create mode 100644 board/ravpower/rp-wd009/board.c
+ create mode 100644 configs/ravpower-rp-wd009-ram_defconfig
+ create mode 100644 include/configs/ravpower-rp-wd009.h
+
+diff --git a/arch/mips/dts/Makefile b/arch/mips/dts/Makefile
+index c9d75596f2..23868ae1d2 100644
+--- a/arch/mips/dts/Makefile
++++ b/arch/mips/dts/Makefile
+@@ -2,7 +2,8 @@
+ dtb-$(CONFIG_ARCH_MTMIPS) += \
+       gardena-smart-gateway-mt7688.dtb \
+-      linkit-smart-7688.dtb
++      linkit-smart-7688.dtb \
++      ravpower-rp-wd009.dtb
+ dtb-$(CONFIG_TARGET_AP121) += ap121.dtb
+ dtb-$(CONFIG_TARGET_AP143) += ap143.dtb
+ dtb-$(CONFIG_TARGET_AP152) += ap152.dtb
+diff --git a/arch/mips/dts/ravpower-rp-wd009.dts b/arch/mips/dts/ravpower-rp-wd009.dts
+new file mode 100644
+index 0000000000..b271d5bfbc
+--- /dev/null
++++ b/arch/mips/dts/ravpower-rp-wd009.dts
+@@ -0,0 +1,50 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Copyright (C) 2018 Stefan Roese <sr@denx.de>
++ */
++
++/dts-v1/;
++
++#include "mt7628a.dtsi"
++#include <dt-bindings/gpio/gpio.h>
++
++/ {
++      compatible = "ravpower,rp-wd009", "ralink,mt7628a-soc";
++      model = "RAVPower RP-WD009";
++
++      aliases {
++              serial0 = &uart0;
++              spi0 = &spi0;
++      };
++
++      memory@0 {
++              device_type = "memory";
++              reg = <0x0 0x4000000>;
++      };
++
++      chosen {
++              stdout-path = "serial0:115200n8";
++      };
++};
++
++&uart0 {
++      status = "okay";
++};
++
++&spi0 {
++      status = "okay";
++      num-cs = <2>;
++
++      spi-flash@0 {
++              #address-cells = <1>;
++              #size-cells = <1>;
++              compatible = "jedec,spi-nor";
++              spi-max-frequency = <40000000>;
++              reg = <0>;
++      };
++};
++
++&eth {
++      pinctrl-names = "default";
++      pinctrl-0 = <&ephy_router_mode>;
++};
+diff --git a/arch/mips/mach-mtmips/Kconfig b/arch/mips/mach-mtmips/Kconfig
+index c8dcf19c0d..85ac8878ab 100644
+--- a/arch/mips/mach-mtmips/Kconfig
++++ b/arch/mips/mach-mtmips/Kconfig
+@@ -32,6 +32,14 @@ config BOARD_GARDENA_SMART_GATEWAY_MT7688
+         GARDENA smart Gateway boards have a MT7688 SoC with 128 MiB of RAM
+         and 8 MiB of flash (SPI NOR) and additional SPI NAND storage.
++config BOARD_RAVPOWER_RP_WD009
++      bool "RAVPower RP-WD009"
++      depends on SOC_MT7628
++      select BOARD_LATE_INIT
++      select SUPPORTS_BOOT_RAM
++      help
++        RAVPower RP-WD009
++
+ config BOARD_LINKIT_SMART_7688
+       bool "LinkIt Smart 7688"
+       depends on SOC_MT7628
+@@ -133,6 +141,7 @@ config SUPPORTS_BOOT_RAM
+       bool
+ source "board/gardena/smart-gateway-mt7688/Kconfig"
++source "board/ravpower/rp-wd009/Kconfig"
+ source "board/seeed/linkit-smart-7688/Kconfig"
+ endmenu
+diff --git a/board/ravpower/rp-wd009/Kconfig b/board/ravpower/rp-wd009/Kconfig
+new file mode 100644
+index 0000000000..111f8e4478
+--- /dev/null
++++ b/board/ravpower/rp-wd009/Kconfig
+@@ -0,0 +1,12 @@
++if BOARD_RAVPOWER_RP_WD009
++
++config SYS_BOARD
++      default "rp-wd009"
++
++config SYS_VENDOR
++      default "ravpower"
++
++config SYS_CONFIG_NAME
++      default "ravpower-rp-wd009"
++
++endif
+diff --git a/board/ravpower/rp-wd009/Makefile b/board/ravpower/rp-wd009/Makefile
+new file mode 100644
+index 0000000000..70cd7a8e56
+--- /dev/null
++++ b/board/ravpower/rp-wd009/Makefile
+@@ -0,0 +1,3 @@
++# SPDX-License-Identifier: GPL-2.0+
++
++obj-y += board.o
+diff --git a/board/ravpower/rp-wd009/board.c b/board/ravpower/rp-wd009/board.c
+new file mode 100644
+index 0000000000..eabcf85735
+--- /dev/null
++++ b/board/ravpower/rp-wd009/board.c
+@@ -0,0 +1,16 @@
++// SPDX-License-Identifier: GPL-2.0+
++/*
++ * Copyright (C) 2018 Stefan Roese <sr@denx.de>
++ */
++
++
++int board_early_init_f(void)
++{
++      return 0;
++}
++
++
++int board_late_init(void)
++{
++      return 0;
++}
+diff --git a/configs/ravpower-rp-wd009-ram_defconfig b/configs/ravpower-rp-wd009-ram_defconfig
+new file mode 100644
+index 0000000000..08cbf40638
+--- /dev/null
++++ b/configs/ravpower-rp-wd009-ram_defconfig
+@@ -0,0 +1,59 @@
++CONFIG_MIPS=y
++CONFIG_SYS_TEXT_BASE=0x80010000
++CONFIG_NR_DRAM_BANKS=1
++CONFIG_ARCH_MTMIPS=y
++CONFIG_MIPS_BOOT_FDT=y
++CONFIG_LEGACY_IMAGE_FORMAT=y
++CONFIG_OF_STDOUT_VIA_ALIAS=y
++CONFIG_USE_BOOTCOMMAND=y
++CONFIG_BOOTCOMMAND="sf probe && mtd read firmware 82000000 && bootm 82000000"
++CONFIG_USE_PREBOOT=y
++CONFIG_SYS_CONSOLE_INFO_QUIET=y
++CONFIG_VERSION_VARIABLE=y
++CONFIG_BOARD_RAVPOWER_RP_WD009=y
++CONFIG_BOARD_EARLY_INIT_F=y
++CONFIG_HUSH_PARSER=y
++CONFIG_CMD_LICENSE=y
++# CONFIG_CMD_ELF is not set
++# CONFIG_CMD_XIMG is not set
++CONFIG_CMD_MEMINFO=y
++# CONFIG_CMD_FLASH is not set
++CONFIG_CMD_GPIO=y
++# CONFIG_CMD_LOADS is not set
++CONFIG_CMD_MTD=y
++CONFIG_CMD_SPI=y
++CONFIG_CMD_WDT=y
++CONFIG_CMD_DHCP=y
++CONFIG_CMD_MII=y
++CONFIG_CMD_PING=y
++CONFIG_CMD_TIME=y
++CONFIG_CMD_UUID=y
++CONFIG_CMD_MTDPARTS=y
++CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
++CONFIG_MTDPARTS_DEFAULT="spi0.0:192k(factory-uboot),64k(config),64k(factory),1536k(loader),64k(params),64k(user_backup),64k(user),14272k(firmware),64k(mode)"
++CONFIG_DEFAULT_DEVICE_TREE="ravpower-rp-wd009"
++CONFIG_NET_RANDOM_ETHADDR=y
++# CONFIG_DM_DEVICE_REMOVE is not set
++CONFIG_HAVE_BLOCK_DEVICE=y
++CONFIG_LED=y
++CONFIG_LED_BLINK=y
++CONFIG_LED_GPIO=y
++CONFIG_MTD=y
++CONFIG_DM_MTD=y
++CONFIG_SPI_FLASH_GIGADEVICE=y
++CONFIG_SPI_FLASH_MACRONIX=y
++CONFIG_SPI_FLASH_SPANSION=y
++CONFIG_SPI_FLASH_STMICRO=y
++CONFIG_SPI_FLASH_WINBOND=y
++CONFIG_SPI_FLASH_XMC=y
++CONFIG_SPI_FLASH_MTD=y
++CONFIG_MTD_UBI_BEB_LIMIT=22
++CONFIG_MT7628_ETH=y
++CONFIG_PHY=y
++CONFIG_SPI=y
++CONFIG_MT7621_SPI=y
++CONFIG_SYSRESET_SYSCON=y
++CONFIG_WDT=y
++CONFIG_WDT_MT7621=y
++CONFIG_LZMA=y
++CONFIG_BAUDRATE=57600
+diff --git a/include/configs/ravpower-rp-wd009.h b/include/configs/ravpower-rp-wd009.h
+new file mode 100644
+index 0000000000..bb4145197c
+--- /dev/null
++++ b/include/configs/ravpower-rp-wd009.h
+@@ -0,0 +1,48 @@
++/* SPDX-License-Identifier: GPL-2.0+ */
++/*
++ * Copyright (C) 2018 Stefan Roese <sr@denx.de>
++ */
++
++#ifndef __CONFIG_RAVPOWER_RP_WD009_H
++#define __CONFIG_RAVPOWER_RP_WD009_H
++
++/* CPU */
++#define CONFIG_SYS_MIPS_TIMER_FREQ    290000000
++
++/* RAM */
++#define CONFIG_SYS_SDRAM_BASE         0x80000000
++
++#define CONFIG_SYS_LOAD_ADDR          CONFIG_SYS_SDRAM_BASE + 0x100000
++
++#define CONFIG_SYS_INIT_SP_OFFSET     0x400000
++
++#ifdef CONFIG_BOOT_RAM
++#define CONFIG_SKIP_LOWLEVEL_INIT
++#endif
++
++/* UART */
++#define CONFIG_SYS_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200, \
++                                        230400, 460800, 921600 }
++
++/* RAM */
++#define CONFIG_SYS_MEMTEST_START      0x80100000
++#define CONFIG_SYS_MEMTEST_END                0x80400000
++
++/* Memory usage */
++#define CONFIG_SYS_MAXARGS            64
++#define CONFIG_SYS_MALLOC_LEN         (16 * 1024 * 1024)
++#define CONFIG_SYS_BOOTPARAMS_LEN     (128 * 1024)
++#define CONFIG_SYS_CBSIZE             512
++
++/* U-Boot */
++#define CONFIG_SYS_MONITOR_BASE               CONFIG_SYS_TEXT_BASE
++
++/* Environment settings */
++
++/*
++ * Environment is right behind U-Boot in flash. Make sure U-Boot
++ * doesn't grow into the environment area.
++ */
++#define CONFIG_BOARD_SIZE_LIMIT               CONFIG_ENV_OFFSET
++
++#endif /* __CONFIG_RAVPOWER_RP_WD009_H */
+-- 
+2.27.0
+
diff --git a/target/linux/ramips/dts/mt7628an_ravpower_rp-wd009.dts b/target/linux/ramips/dts/mt7628an_ravpower_rp-wd009.dts
new file mode 100644 (file)
index 0000000..5f556af
--- /dev/null
@@ -0,0 +1,202 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "mt7628an.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       compatible = "ravpower,rp-wd009", "mediatek,mt7628an-soc";
+       model = "RAVPower RP-WD009";
+
+       aliases {
+               led-boot = &led_globe;
+               led-failsafe = &led_globe;
+               led-running = &led_globe;
+               led-upgrade = &led_globe;
+       };
+
+       chosen {
+               bootargs = "console=ttyS0,57600";
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led_globe: globe {
+                       label = "rp-wd009:white:globe";
+                       gpios = <&gpio 43 GPIO_ACTIVE_LOW>;
+               };
+
+               wlan2 {
+                       label = "rp-wd009:white:wlan2";
+                       gpios = <&gpio 44 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               wlan5 {
+                       label = "rp-wd009:white:wlan5";
+                       gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy1tpt";
+               };
+
+               sd_white {
+                       label = "rp-wd009:white:sd";
+                       gpios = <&gpio 41 GPIO_ACTIVE_LOW>;
+               };
+
+               sd_red {
+                       label = "rp-wd009:red:sd";
+                       gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+
+               /* Power interrupt on Pin 39 */
+
+               rfkill {
+                       label = "rfkill";
+                       gpios = <&gpio 21 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RFKILL>;
+               };
+
+               backup {
+                       label = "backup";
+                       gpios = <&gpio 40 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_COPY>;
+               };
+       };
+};
+
+&gpio {
+       mt7610-power {
+               gpio-hog;
+               gpios = <20 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "mt7610-power";
+       };
+};
+
+&state_default {
+       gpio {
+               groups = "uart1", "wled_an", "p0led_an", "p2led_an", "p3led_an",
+                               "p4led_an", "uart2", "pwm0", "i2s";
+               function = "gpio";
+       };
+};
+
+&ehci {
+       status = "okay";
+};
+
+&ohci {
+       status = "okay";
+};
+
+&sdhci {
+       status = "okay";
+};
+
+&i2c {
+       status = "okay";
+
+       /* Custom PMIC at 0x0a */
+};
+
+&pcie {
+       status = "okay";
+};
+
+&pcie0 {
+       wifi@0,0 {
+               reg = <0x0000 0 0 0 0>;
+               mediatek,mtd-eeprom = <&factory 0x8000>;
+               ieee80211-freq-limit = <5000000 6000000>;
+       };
+};
+
+&spi0 {
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <40000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       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 = "loader";
+                               reg = <0x50000 0x180000>;
+                       };
+
+                       partition@1d0000 {
+                               label = "params";
+                               reg = <0x1d0000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@1e0000 {
+                               label = "user_backup";
+                               reg = <0x1e0000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@1f0000 {
+                               label = "user";
+                               reg = <0x1f0000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@200000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x200000 0xdf0000>;
+                       };
+
+                       partition@ff0000 {
+                               label = "mode";
+                               reg = <0xff0000 0x10000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&wmac {
+       status = "okay";
+};
+
+&ethernet {
+       mtd-mac-address = <&factory 0x4>;
+};
index b00e6d8..93ce59e 100644 (file)
@@ -111,6 +111,12 @@ define Build/poray-header
        mv $@.new $@
 endef
 
+define Build/ravpower-wd009-factory
+       mkimage -A mips -T standalone -C none -a 0x80010000 -e 0x80010000 -n "OpenWrt Bootloader" -d $(UBOOT_PATH) $@.new
+       cat $@ >> $@.new
+       @mv $@.new $@
+endef
+
 define Build/relocate-kernel
        rm -rf $@.relocate
        $(CP) ../../generic/image/relocate $@.relocate
index 605537a..9fa8140 100644 (file)
@@ -253,6 +253,17 @@ define Device/rakwireless_rak633
 endef
 TARGET_DEVICES += rakwireless_rak633
 
+define Device/ravpower_rp-wd009
+  IMAGE_SIZE := 14272k
+  DEVICE_VENDOR := RAVPower
+  DEVICE_MODEL := RP-WD009
+  UBOOT_PATH := $(STAGING_DIR_IMAGE)/ravpower_rp-wd009-u-boot.bin
+  DEVICE_PACKAGES := kmod-mt76x0e kmod-usb2 kmod-usb-ohci kmod-sdhci-mt7620 kmod-i2c-mt7628
+  IMAGES += factory.bin
+  IMAGE/factory.bin := $$(sysupgrade_bin) | ravpower-wd009-factory
+endef
+TARGET_DEVICES += ravpower_rp-wd009
+
 define Device/skylab_skw92a
   IMAGE_SIZE := 16064k
   DEVICE_VENDOR := Skylab
index 1cccc16..bdb5e58 100755 (executable)
@@ -14,6 +14,7 @@ ramips_setup_interfaces()
        mediatek,linkit-smart-7688|\
        onion,omega2p|\
        onion,omega2|\
+       ravpower,rp-wd009|\
        tama,w06|\
        tplink,re200-v2|\
        tplink,re305-v1|\