From 67c3e0bf7e5148a91205d280d4029b32dcc9b6e0 Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Wed, 26 Jan 2011 20:35:42 +0000 Subject: [PATCH] ar71xx: add support for the WNDR3700v2 board Based on a patch by Mark Mentovai SVN-Revision: 25118 --- .../etc/defconfig/wndr3700v2/network | 69 ++++++++++++++++ target/linux/ar71xx/base-files/etc/diag.sh | 2 +- .../base-files/etc/uci-defaults/wndr3700 | 2 +- target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + .../ar71xx/base-files/lib/upgrade/platform.sh | 10 ++- .../files/arch/mips/ar71xx/mach-wndr3700.c | 81 +++++++++++++++++-- .../ar71xx/files/arch/mips/ar71xx/machtype.h | 1 + 7 files changed, 158 insertions(+), 10 deletions(-) create mode 100644 target/linux/ar71xx/base-files/etc/defconfig/wndr3700v2/network diff --git a/target/linux/ar71xx/base-files/etc/defconfig/wndr3700v2/network b/target/linux/ar71xx/base-files/etc/defconfig/wndr3700v2/network new file mode 100644 index 0000000000..d05fdf3425 --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/defconfig/wndr3700v2/network @@ -0,0 +1,69 @@ +config interface loopback + option ifname lo + option proto static + option ipaddr 127.0.0.1 + option netmask 255.0.0.0 + +config interface lan + option ifname eth0.1 + option type bridge + option proto static + option ipaddr 192.168.1.1 + option netmask 255.255.255.0 + +config interface wan + option ifname eth1 + option proto dhcp + +config switch + option name rtl8366s + option reset 1 + option enable_vlan 1 + # Blinkrate: 0=43ms; 1=84ms; 2=120ms; 3=170ms; 4=340ms; 5=670ms + option blinkrate 2 + +config switch_vlan + option device rtl8366s + option vlan 1 + option ports "0 1 2 3 5t" + +config switch_port + # Port 1 controls the GREEN configuration of LEDs for + # the switch and the section does not correspond to a real + # switch port. + # + # 0=LED off; 1=Collision/FDX; 2=Link/activity; 3=1000 Mb/s; + # 4=100 Mb/s; 5=10 Mb/s; 6=1000 Mb/s+activity; 7=100 Mb/s+activity; + # 8=10 Mb/s+activity; 9=10/100 Mb/s+activity; 10: Fiber; + # 11: Fault; 12: Link/activity(tx); 13: Link/activity(rx); + # 14: Link (master); 15: separate register + + option device rtl8366s + option port 1 + option led 6 + +config switch_port + # Port 2 controls the ORANGE configuration of LEDs for + # the switch and the section does not correspond to a real + # switch port. + # + # See the key above for switch port 1 for the meaning of the + # 'led' setting below. + + option device rtl8366s + option port 2 + option led 9 + +config switch_port + # Port 5 controls the configuration of the WAN LED and the + # section does not correspond to a real switch port. + # + # To toggle the use of green or orange LEDs for the WAN port, + # see the LED setting for wndr3700:green:wan in /etc/config/system. + # + # See the key above for switch port 1 for the meaning of the + # 'led' setting below. + + option device rtl8366s + option port 5 + option led 2 diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh index 23370446ab..dd47cf33bb 100755 --- a/target/linux/ar71xx/base-files/etc/diag.sh +++ b/target/linux/ar71xx/base-files/etc/diag.sh @@ -105,7 +105,7 @@ get_status_led() { unifi) status_led="ubnt:green:dome" ;; - wndr3700) + wndr3700 | wndr3700v2) status_led="wndr3700:green:power" ;; wnr2000) diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/wndr3700 b/target/linux/ar71xx/base-files/etc/uci-defaults/wndr3700 index a893a0ec1d..77fd057383 100755 --- a/target/linux/ar71xx/base-files/etc/uci-defaults/wndr3700 +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/wndr3700 @@ -23,6 +23,6 @@ commit system EOF } -if [ "${board}" == "wndr3700" ]; then +if [ "${board}" == "wndr3700" -o "${board}" == "wndr3700v2" ]; then wndr3700_set_wan_led fi diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index c08860542e..d390f9fdff 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -130,6 +130,9 @@ ar71xx_board_name() { *WNDR3700) name="wndr3700" ;; + *WNDR3700v2) + name="wndr3700v2" + ;; *WNR2000) name="wnr2000" ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index 0b867c0052..067fe033fa 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -64,6 +64,7 @@ platform_do_upgrade_combined() { platform_check_image() { local board=$(ar71xx_board_name) local magic="$(get_magic_word "$1")" + local magic_long="$(get_magic_long "$1")" [ "$ARGC" -gt 1 ] && return 1 @@ -83,7 +84,14 @@ platform_check_image() { return 0 ;; wndr3700) - [ "$magic" != "3337" ] && { + [ "$magic_long" != "33373030" ] && { + echo "Invalid image type." + return 1 + } + return 0 + ;; + wndr3700v2) + [ "$magic_long" != "33373031" ] && { echo "Invalid image type." return 1 } diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wndr3700.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wndr3700.c index 7b1ee90aef..f0b781955a 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wndr3700.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wndr3700.c @@ -96,14 +96,64 @@ static struct mtd_partition wndr3700_partitions[] = { .mask_flags = MTD_WRITEABLE, } }; -#endif /* CONFIG_MTD_PARTITIONS */ -static struct flash_platform_data wndr3700_flash_data = { -#ifdef CONFIG_MTD_PARTITIONS - .parts = wndr3700_partitions, - .nr_parts = ARRAY_SIZE(wndr3700_partitions), -#endif +static struct mtd_partition wndr3700v2_partitions[] = { + { + .name = "uboot", + .offset = 0, + .size = 0x050000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "env", + .offset = 0x050000, + .size = 0x020000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "rootfs", + .offset = 0x070000, + .size = 0xe40000, + }, { + .name = "config", + .offset = 0xeb0000, + .size = 0x010000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "config_bak", + .offset = 0xec0000, + .size = 0x010000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "pot", + .offset = 0xed0000, + .size = 0x010000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "traffic_meter", + .offset = 0xee0000, + .size = 0x010000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "language", + .offset = 0xef0000, + .size = 0x100000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "caldata", + .offset = 0xff0000, + .size = 0x010000, + .mask_flags = MTD_WRITEABLE, + } }; +#define wndr3700_num_partitions ARRAY_SIZE(wndr3700_partitions) +#define wndr3700v2_num_partitions ARRAY_SIZE(wndr3700v2_partitions) +#else +#define wndr3700_partitions NULL +#define wndr3700_num_partitions 0 +#define wndr3700v2_partitions NULL +#define wndr3700v2_num_partitions 0 +#endif /* CONFIG_MTD_PARTITIONS */ + +static struct flash_platform_data wndr3700_flash_data; static struct gpio_led wndr3700_leds_gpio[] __initdata = { { @@ -167,7 +217,7 @@ static struct platform_device wndr3700_rtl8366s_device = { } }; -static void __init wndr3700_setup(void) +static void __init wndr3700_common_setup(void) { u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); @@ -218,5 +268,22 @@ static void __init wndr3700_setup(void) art + WNDR3700_WMAC1_MAC_OFFSET); } +static void __init wndr3700_setup(void) +{ + wndr3700_flash_data.parts = wndr3700_partitions, + wndr3700_flash_data.nr_parts = wndr3700_num_partitions, + wndr3700_common_setup(); +} + MIPS_MACHINE(AR71XX_MACH_WNDR3700, "WNDR3700", "NETGEAR WNDR3700", wndr3700_setup); + +static void __init wndr3700v2_setup(void) +{ + wndr3700_flash_data.parts = wndr3700v2_partitions, + wndr3700_flash_data.nr_parts = wndr3700v2_num_partitions, + wndr3700_common_setup(); +} + +MIPS_MACHINE(AR71XX_MACH_WNDR3700V2, "WNDR3700v2", "NETGEAR WNDR3700v2", + wndr3700v2_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h b/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h index 2a233d79f0..40f1b09024 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h @@ -54,6 +54,7 @@ enum ar71xx_mach_type { AR71XX_MACH_UBNT_ROCKET_M, /* Ubiquiti Rocket M */ AR71XX_MACH_UBNT_NANO_M, /* Ubiquiti NanoStation M */ AR71XX_MACH_WNDR3700, /* NETGEAR WNDR3700 */ + AR71XX_MACH_WNDR3700V2, /* NETGEAR WNDR3700v2 */ AR71XX_MACH_WNR2000, /* NETGEAR WNR2000 */ AR71XX_MACH_WP543, /* Compex WP543 */ AR71XX_MACH_WRT160NL, /* Linksys WRT160NL */ -- 2.30.2