[PATCH 1/2] ramips: add support for RAVPower RP-WD009

David Bauer mail at david-bauer.net
Wed Jun 24 20:45:25 EDT 2020


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 at david-bauer.net>
---
 package/boot/uboot-ramips/Makefile            |  34 ++
 ...01-add-support-for-RAVPower-RP-WD009.patch | 290 ++++++++++++++++++
 .../ramips/dts/mt7628an_ravpower_rp-wd009.dts | 202 ++++++++++++
 target/linux/ramips/image/Makefile            |   6 +
 target/linux/ramips/image/mt76x8.mk           |  11 +
 .../mt76x8/base-files/etc/board.d/02_network  |   1 +
 6 files changed, 544 insertions(+)
 create mode 100644 package/boot/uboot-ramips/Makefile
 create mode 100644 package/boot/uboot-ramips/patches/0001-add-support-for-RAVPower-RP-WD009.patch
 create mode 100644 target/linux/ramips/dts/mt7628an_ravpower_rp-wd009.dts

diff --git a/package/boot/uboot-ramips/Makefile b/package/boot/uboot-ramips/Makefile
new file mode 100644
index 0000000000..5229f5cd3c
--- /dev/null
+++ b/package/boot/uboot-ramips/Makefile
@@ -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
index 0000000000..1833a627dc
--- /dev/null
+++ b/package/boot/uboot-ramips/patches/0001-add-support-for-RAVPower-RP-WD009.patch
@@ -0,0 +1,290 @@
+From 593db38363297247df731566c2aa307a5d795005 Mon Sep 17 00:00:00 2001
+From: David Bauer <mail at 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 at 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 at 0 {
++		device_type = "memory";
++		reg = <0x0 0x4000000>;
++	};
++
++	chosen {
++		stdout-path = "serial0:115200n8";
++	};
++};
++
++&uart0 {
++	status = "okay";
++};
++
++&spi0 {
++	status = "okay";
++	num-cs = <2>;
++
++	spi-flash at 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 at 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 at 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
index 0000000000..5f556af1d3
--- /dev/null
+++ b/target/linux/ramips/dts/mt7628an_ravpower_rp-wd009.dts
@@ -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 at 0,0 {
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+	};
+};
+
+&spi0 {
+	status = "okay";
+
+	flash at 0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <40000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "bootloader";
+				reg = <0x0 0x30000>;
+				read-only;
+			};
+
+			partition at 30000 {
+				label = "config";
+				reg = <0x30000 0x10000>;
+				read-only;
+			};
+
+			factory: partition at 40000 {
+				label = "factory";
+				reg = <0x40000 0x10000>;
+				read-only;
+			};
+
+			partition at 50000 {
+				label = "loader";
+				reg = <0x50000 0x180000>;
+			};
+
+			partition at 1d0000 {
+				label = "params";
+				reg = <0x1d0000 0x10000>;
+				read-only;
+			};
+
+			partition at 1e0000 {
+				label = "user_backup";
+				reg = <0x1e0000 0x10000>;
+				read-only;
+			};
+
+			partition at 1f0000 {
+				label = "user";
+				reg = <0x1f0000 0x10000>;
+				read-only;
+			};
+
+			partition at 200000 {
+				compatible = "denx,uimage";
+				label = "firmware";
+				reg = <0x200000 0xdf0000>;
+			};
+
+			partition at ff0000 {
+				label = "mode";
+				reg = <0xff0000 0x10000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&wmac {
+	status = "okay";
+};
+
+&ethernet {
+	mtd-mac-address = <&factory 0x4>;
+};
diff --git a/target/linux/ramips/image/Makefile b/target/linux/ramips/image/Makefile
index b00e6d8726..93ce59e262 100644
--- a/target/linux/ramips/image/Makefile
+++ b/target/linux/ramips/image/Makefile
@@ -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
diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
index f3ae384a23..53b5fe21d4 100644
--- a/target/linux/ramips/image/mt76x8.mk
+++ b/target/linux/ramips/image/mt76x8.mk
@@ -234,6 +234,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
diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
index 398b5e88c7..096958596f 100755
--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
@@ -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|\
-- 
2.27.0


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
http://lists.infradead.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list