This patch adds support for the Sitecom WL-341 v3 and other Sercomm
IP1006RRv2 based boards for sysupgrade support and for the initial
flash through pushbutton initiated recovery mode with the special
partition table and fixes for the quirks and things required by the
modified bootloader.
There are two known bugs:
1. The LED configuration is broken -- only one led is working, an
amber led, as I found no way to know which GPIOs were used for those.
The board has 6 unlabeled leds, of which 1 is blue only and 5 are
amber/blue. If I understand which GPIOs go to which leds I'll submit a
patch later.
2. Wi-Fi is not working on my board probably because of the lack of
RAM (the board only has 16MiB ram, but there is an empty slot for
another ram chip,) but I don't know for sure. The driver loads but
hostapd fails to load so I think it's not related to the specific
device except for the lack of RAM.
Signed-off-by: Marco Antonio Mauro <marcus90 at gmail.com>
---
Index: target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig
===================================================================
--- target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig (revision 29835)
+++ target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig (working copy)
@@ -36,6 +36,11 @@
select RALINK_DEV_GPIO_BUTTONS
select RALINK_DEV_GPIO_LEDS
+config RT305X_MACH_WL341V3
+ bool "Sitecom WL-341 v3 board support"
+ select RALINK_DEV_GPIO_BUTTONS
+ select RALINK_DEV_GPIO_LEDS
+
config RT305X_MACH_ESR_9753
bool "EnGenius ESR-9753 support"
select RALINK_DEV_GPIO_BUTTONS
Index: target/linux/ramips/files/arch/mips/ralink/rt305x/mach-wl341v3.c
===================================================================
--- target/linux/ramips/files/arch/mips/ralink/rt305x/mach-wl341v3.c
(revision
0)
+++ target/linux/ramips/files/arch/mips/ralink/rt305x/mach-wl341v3.c
(revision
0)
@@ -0,0 +1,134 @@
+/*
+ * Sitecom WL341v3 board support
+ *
+ * Copyright (C) 2012 Marco Antonio Mauro <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+#include <linux/mtd/physmap.h>
+
+#include <asm/mach-ralink/machine.h>
+#include <asm/mach-ralink/dev-gpio-buttons.h>
+#include <asm/mach-ralink/dev-gpio-leds.h>
+#include <asm/mach-ralink/rt305x.h>
+#include <asm/mach-ralink/rt305x_regs.h>
+
+#include "devices.h"
+
+#define WL341V3_GPIO_LED_STATUS_AMBER 8
+#define WL341V3_GPIO_LED_STATUS_GREEN 9
+#define WL341V3_GPIO_LED_WPS 13
+
+#define WL341V3_GPIO_BUTTON_WPS 5 /* active low */
+#define WL341V3_GPIO_BUTTON_RESET 7 /* active low */
+
+#define WL341V3_BUTTONS_POLL_INTERVAL 20
+
+#ifdef CONFIG_MTD_PARTITIONS
+static struct mtd_partition wl341v3_partitions[] = {
+ {
+ .name = "u-boot",
+ .offset = 0,
+ .size = 0x020000,
+ .mask_flags = MTD_WRITEABLE,
+ }, {
+ .name = "board-nvram",
+ .offset = 0x020000,
+ .size = 0x010000,
+ .mask_flags = MTD_WRITEABLE,
+ }, {
+ .name = "u-boot-env",
+ .offset = 0x030000,
+ .size = 0x010000,
+ .mask_flags = MTD_WRITEABLE,
+ }, {
+ .name = "kernel",
+ .offset = 0x040000,
+ .size = 0x0d0000,
+ }, {
+ .name = "rootfs",
+ .offset = 0x110000,
+ .size = 0x2e0000,
+ }, {
+ .name = "signature-eRcOmM",
+ .offset = 0x3f0000,
+ .size = 0x010000,
+ }, {
+ .name = "firmware",
+ .offset = 0x040000,
+ .size = 0x3b0000,
+ }, {
+ .name = "fullflash",
+ .offset = 0x000000,
+ .size = 0x400000,
+ }
+};
+#endif /* CONFIG_MTD_PARTITIONS */
+
+static struct physmap_flash_data wl341v3_flash_data = {
+#ifdef CONFIG_MTD_PARTITIONS
+ .nr_parts = ARRAY_SIZE(wl341v3_partitions),
+ .parts = wl341v3_partitions,
+#endif
+};
+
+static struct gpio_led wl341v3_leds_gpio[] __initdata = {
+ {
+ .name = "wl341v3:amber:status",
+ .gpio = WL341V3_GPIO_LED_STATUS_AMBER,
+ .active_low = 1,
+ }, {
+ .name = "wl341v3:blue:status",
+ .gpio = WL341V3_GPIO_LED_STATUS_GREEN,
+ .active_low = 1,
+ }, {
+ .name = "wl341v3:blue:wps",
+ .gpio = WL341V3_GPIO_LED_WPS,
+ .active_low = 1,
+ }
+};
+
+static struct gpio_button wl341v3_gpio_buttons[] __initdata = {
+ {
+ .desc = "reset",
+ .type = EV_KEY,
+ .code = KEY_RESTART,
+ .threshold = 3,
+ .gpio = WL341V3_GPIO_BUTTON_RESET,
+ .active_low = 1,
+ }, {
+ .desc = "wps",
+ .type = EV_KEY,
+ .code = KEY_WPS_BUTTON,
+ .threshold = 3,
+ .gpio = WL341V3_GPIO_BUTTON_WPS,
+ .active_low = 1,
+ }
+};
+
+static void __init wl341v3_init(void)
+{
+ rt305x_gpio_init(RT305X_GPIO_MODE_GPIO << RT305X_GPIO_MODE_UART0_SHIFT);
+
+ rt305x_register_flash(0, &wl341v3_flash_data);
+ rt305x_esw_data.vlan_config = RT305X_ESW_VLAN_CONFIG_WLLLL;
+ rt305x_register_ethernet();
+ ramips_register_gpio_leds(-1, ARRAY_SIZE(wl341v3_leds_gpio),
+ wl341v3_leds_gpio);
+ ramips_register_gpio_buttons(-1, WL341V3_BUTTONS_POLL_INTERVAL,
+ ARRAY_SIZE(wl341v3_gpio_buttons),
+ wl341v3_gpio_buttons);
+ rt305x_register_wifi();
+ rt305x_register_wdt();
+ rt305x_register_usb();
+}
+
+MIPS_MACHINE(RAMIPS_MACH_WL341V3, "WL341V3", "Sitecom WL-341 v3",
+ wl341v3_init);
Index: target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile
===================================================================
--- target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile (revision 29835)
+++ target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile (working copy)
@@ -30,3 +30,4 @@
obj-$(CONFIG_RT305X_MACH_WHR_G300N) += mach-whr-g300n.o
obj-$(CONFIG_RT305X_MACH_WR512_3GN) += mach-wr512-3gn.o
obj-$(CONFIG_RT305X_MACH_WL351) += mach-wl351.o
+obj-$(CONFIG_RT305X_MACH_WL341V3) += mach-wl341v3.o
Index: target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
===================================================================
--- target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
(revision
29835)
+++ target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
(working
copy)
@@ -42,5 +42,6 @@
RAMIPS_MACH_WCR150GN, /* Sparklan WCR-150GN */
RAMIPS_MACH_WHR_G300N, /* Buffalo WHR-G300N */
RAMIPS_MACH_WL351, /* Sitecom WL-351 v1 002 */
+ RAMIPS_MACH_WL341V3, /* Sitecom WL-341 v3 */
RAMIPS_MACH_WR512_3GN, /* SH-WR512NU/WS-WR512N1-like 3GN*/
};
Index: target/linux/ramips/image/Makefile
===================================================================
--- target/linux/ramips/image/Makefile (revision 29835)
+++ target/linux/ramips/image/Makefile (working copy)
@@ -67,6 +67,28 @@
fi; fi
endef
+define BuildFirmware/WL341V3
+ $(call PatchKernelLzma,$(2),$(3) $($(4)))
+ $(call
MkImage,lzma,"$(KDIR)/vmlinux-$(2).bin.lzma","$(KDIR)/vmlinux-$(2).uImage")
+ if [ `stat -c%s "$(KDIR)/vmlinux-$(2).uImage"` -gt $(5) ]; then \
+ echo "Warning: $(KDIR)/vmlinux-$(2).uImage is too big"; \
+ else if [ `stat -c%s $(KDIR)/root.$(1)` -gt $(6) ]; then \
+ echo "Warning: $(KDIR)/root.$(1) is too big"; \
+ else \
+ ( \
+ dd if=/dev/zero bs=195936 count=1; \
+ echo "1.01"; \
+ dd if=/dev/zero bs=581 count=1; \
+ echo -n -e
"\x73\x45\x72\x43\x6F\x4D\x6D\x00\x01\x00\x00\x59\x4E\x37\x95\x58\x10\x00\x20\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x03\x00\x00\x80\x00\x00\x00\x00\x03\x00\x00\x10\x12\x00\x00\x00\x10\x73\x45\x72\x43\x6F\x4D\x6D";
\
+ dd if=/dev/zero bs=65552 count=1; \
+ dd if=$(KDIR)/vmlinux-$(2).uImage bs=$(5) conv=sync; \
+ dd if=$(KDIR)/root.$(1) bs=64k conv=sync; \
+ dd if=/dev/zero bs=`expr 4194304 - 262144 - 16 - $(5) -
\( \( \(
\`stat -c%s $(KDIR)/root.$(1)\` / 65536 \) + 1 \) \* 65536 \)`
count=1; \
+ echo -n -e
"\x11\x03\x80\x00\x10\x12\x90\xF7\x65\x52\x63\x4F\x6D\x4D\x00\x00";
\
+ ) > $(call imgname,$(1),$(2))-factory.bin; \
+ fi; fi
+endef
+
define BuildFirmware/Buffalo
$(call PatchKernelLzma,$(2),board=$(3) $($(4)))
$(call
MkImage,lzma,"$(KDIR)/vmlinux-$(2).bin.lzma","$(KDIR)/vmlinux-$(2).uImage")
@@ -151,6 +173,16 @@
$(call BuildFirmware/Generic,$(1),$(2),board=$(3)
console=$(console_OMNIEMB),mtdlayout_OMNIEMB,1048576,7012352)
endef
+mtdlayout_sercomm_4M=mtdparts=physmap-flash.0:128k(u-boot)ro,64k(board-nvram)ro,64k(u-boot-env)ro,832k(kernel),2944k(rootfs),64k(signature-eRcOmM),3776k@0x40000(firmware),4096k@0x0(fullflash)
+define Image/Build/Template/WL341V3
+ $(call
BuildFirmware/Generic,$(1),$(2),board=$(3),mtdlayout_sercomm_4M,851968,3014656)
+ $(call
BuildFirmware/WL341V3,$(1),$(2),board=$(3),mtdlayout_sercomm_4M,851968,3014656)
+endef
+
+define Image/Build/Profile/WL341V3
+ $(call Image/Build/Template/WL341V3,$(1),wl341v3,WL341V3)
+endef
+
define Image/Build/Profile/DIR300B1
$(call
Image/Build/Template/DIR300B1,$(1),dir-300-b1,DIR-300-B1,wrgn23_dlwbr_dir300b)
$(call
Image/Build/Template/DIR300B1,$(1),dir-600-b1,DIR-600-B1,wrgn23_dlwbr_dir600b)
@@ -290,6 +322,7 @@
$(call Image/Build/Profile/W502U,$(1))
$(call Image/Build/Profile/WR5123GN,$(1))
$(call Image/Build/Profile/WL351,$(1))
+ $(call Image/Build/Profile/WL341V3,$(1))
endef
endif
Index: target/linux/ramips/rt305x/config-2.6.39
===================================================================
--- target/linux/ramips/rt305x/config-2.6.39 (revision 29835)
+++ target/linux/ramips/rt305x/config-2.6.39 (working copy)
@@ -109,6 +109,7 @@
CONFIG_RT305X_MACH_WCR150GN=y
CONFIG_RT305X_MACH_WHR_G300N=y
CONFIG_RT305X_MACH_WL351=y
+CONFIG_RT305X_MACH_WL341V3=y
CONFIG_RT305X_MACH_WR512_3GN=y
# CONFIG_SCSI_DMA is not set
CONFIG_SERIAL_8250_NR_UARTS=4
Index: target/linux/ramips/base-files/lib/ramips.sh
===================================================================
--- target/linux/ramips/base-files/lib/ramips.sh (revision 29835)
+++ target/linux/ramips/base-files/lib/ramips.sh (working copy)
@@ -113,6 +113,9 @@
*"Sitecom WL-351 v1 002")
name="wl-351"
;;
+ *"Sitecom WL-341 v3")
+ name="wl341v3"
+ ;;
*"WLI-TX4-AG300N")
name="wli-tx4-ag300n"
;;
Index: target/linux/ramips/base-files/lib/upgrade/platform.sh
===================================================================
--- target/linux/ramips/base-files/lib/upgrade/platform.sh (revision 29835)
+++ target/linux/ramips/base-files/lib/upgrade/platform.sh (working copy)
@@ -15,6 +15,7 @@
case "$board" in
bc2 | \
+ wl341v3 | \
dir-300-b1 | \
dir-600-b1 | \
dir-600-b2 | \
Index: target/linux/ramips/base-files/lib/preinit/06_set_iface_mac
===================================================================
--- target/linux/ramips/base-files/lib/preinit/06_set_iface_mac (revision 29835)
+++ target/linux/ramips/base-files/lib/preinit/06_set_iface_mac (working copy)
@@ -26,6 +26,10 @@
mac=$(ramips_get_mac_binary factory 40)
ifconfig eth0 hw ether $mac 2>/dev/null
;;
+ wl341v3)
+ mac=$(ramips_get_mac_binary board-nvram 65440)
+ ifconfig eth0 hw ether $mac 2>/dev/null
+ ;;
esac
}
Index: target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
===================================================================
--- target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
(revision
29835)
+++ target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
(working
copy)
@@ -66,7 +66,9 @@
wr512-3gn)
rt2x00_eeprom_extract "factory" 0 272
;;
-
+ wl341v3)
+ rt2x00_eeprom_extract "board-nvram" 64880 272
+ ;;
*)
rt2x00_eeprom_die "board $board is not supported yet"
;;
Index: target/linux/ramips/base-files/etc/uci-defaults/network
===================================================================
--- target/linux/ramips/base-files/etc/uci-defaults/network (revision 29835)
+++ target/linux/ramips/base-files/etc/uci-defaults/network (working copy)
@@ -82,6 +82,10 @@
lan_mac=$(ramips_get_mac_binary devdata 16388)
wan_mac=$(/usr/sbin/maccalc add "$lan_mac" 1)
;;
+ wl341v3)
+ lan_mac=$(ramips_get_mac_binary board-nvram 65440)
+ wan_mac=$(/usr/sbin/maccalc add "$lan_mac" 1)
+ ;;
esr-9753 | \
nbg-419n)
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel