Hi all,
we have developed new board WBD222. It is very similar to WBD111 and is
based on SL3512 CPU. New board has two ethernet interfaces, two
mini-PCI, one SATA, one mini-PCIe and two USB 2.0 interfaces. At the
moment we have only few prototypes. Below is attached patch to add
support for this board to OpenWRT. All comments are appreciated.
Darius A.
Index: target/linux/gemini/image/Makefile
===================================================================
--- target/linux/gemini/image/Makefile (revision 20251)
+++ target/linux/gemini/image/Makefile (working copy)
@@ -11,12 +11,17 @@
# WBD111: mach id 1690 (0x69a)
echo -en "\x06\x1c\xa0\xe3\x9a\x10\x81\xe3" >
$(KDIR)/openwrt-$(BOARD)-wbd111-zImage
cat $(LINUX_DIR)/arch/arm/boot/zImage >>
$(KDIR)/openwrt-$(BOARD)-wbd111-zImage
+# WBD222: mach id 2753 (0xAC1)
+ echo -en "\x0a\x1c\xa0\xe3\xc1\x10\x81\xe3" >
$(KDIR)/openwrt-$(BOARD)-wbd222-zImage
+ cat $(LINUX_DIR)/arch/arm/boot/zImage >>
$(KDIR)/openwrt-$(BOARD)-wbd222-zImage
endef
define Image/BuildKernel
# workaround the bootloader's bug with extra nops
echo -en
"\x00\x00\xa0\xe1\x00\x00\xa0\xe1\x00\x00\xa0\xe1\x00\x00\xa0\xe1" >
$(BIN_DIR)/openwrt-$(BOARD)-wbd111-zImage
+ echo -en
"\x00\x00\xa0\xe1\x00\x00\xa0\xe1\x00\x00\xa0\xe1\x00\x00\xa0\xe1" >
$(BIN_DIR)/openwrt-$(BOARD)-wbd222-zImage
cat $(KDIR)/openwrt-$(BOARD)-wbd111-zImage >>
$(BIN_DIR)/openwrt-$(BOARD)-wbd111-zImage
+ cat $(KDIR)/openwrt-$(BOARD)-wbd222-zImage >>
$(BIN_DIR)/openwrt-$(BOARD)-wbd222-zImage
endef
define Image/Build/jffs2-64k
@@ -41,6 +46,14 @@
-o $(BIN_DIR)/openwrt-$(BOARD)-wbd111-$(1).bin \
-p
Kernel:0x020000:0x100000:0:0:$(BIN_DIR)/openwrt-$(BOARD)-wbd111-zImage \
-p
Ramdisk:0x120000:0x500000:0:0:$(BIN_DIR)/openwrt-$(BOARD)-$(1).img
+
+ -$(STAGING_DIR_HOST)/bin/mkfwimage2 \
+ -m GEOS -f 0x30000000 -z \
+ -v WILI-S.WBD222.v5.00.SL3512.OpenWrt.00000.000000.000000 \
+ -o $(BIN_DIR)/openwrt-$(BOARD)-wbd222-$(1).bin \
+ -p
Kernel:0x020000:0x100000:0:0:$(BIN_DIR)/openwrt-$(BOARD)-wbd222-zImage \
+ -p
Ramdisk:0x120000:0x500000:0:0:$(BIN_DIR)/openwrt-$(BOARD)-$(1).img
+
endef
$(eval $(call BuildImage))
Index: target/linux/gemini/patches/200-wbd222_support.patch
===================================================================
--- target/linux/gemini/patches/200-wbd222_support.patch (revision 0)
+++ target/linux/gemini/patches/200-wbd222_support.patch (revision 0)
@@ -0,0 +1,211 @@
+Index: linux-2.6.32.8/arch/arm/mach-gemini/board-wbd222.c
+===================================================================
+--- /dev/null
++++ linux-2.6.32.8/arch/arm/mach-gemini/board-wbd222.c
+@@ -0,0 +1,170 @@
++/*
++ * Support for Wiliboard WBD-222
++ *
++ * Copyright (C) 2009 Imre Kaloz <ka...@openwrt.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ */
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/leds.h>
++#include <linux/input.h>
++#include <linux/skbuff.h>
++#include <linux/gpio_keys.h>
++#include <linux/mdio-gpio.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/mach/time.h>
++
++#include <mach/gmac.h>
++
++#include "common.h"
++
++static struct mdio_gpio_platform_data wbd222_mdio = {
++ .mdc = 22,
++ .mdio = 21,
++ .phy_mask = ~((1 << 1) | (1 << 3)),
++};
++
++static struct platform_device wbd222_phy_device = {
++ .name = "mdio-gpio",
++ .id = 0,
++ .dev = {
++ .platform_data = &wbd222_mdio,
++ },
++};
++
++static struct gemini_gmac_platform_data gmac_data = {
++ .bus_id[0] = "0:01",
++ .interface[0] = PHY_INTERFACE_MODE_MII,
++ .bus_id[1] = "0:03",
++ .interface[1] = PHY_INTERFACE_MODE_MII,
++};
++
++static struct gpio_keys_button wbd222_keys[] = {
++ {
++ .code = KEY_SETUP,
++ .gpio = 5,
++ .active_low = 1,
++ .desc = "reset",
++ .type = EV_KEY,
++ },
++};
++
++static struct gpio_keys_platform_data wbd222_keys_data = {
++ .buttons = wbd222_keys,
++ .nbuttons = ARRAY_SIZE(wbd222_keys),
++};
++
++static struct platform_device wbd222_keys_device = {
++ .name = "gpio-keys",
++ .id = -1,
++ .dev = {
++ .platform_data = &wbd222_keys_data,
++ },
++};
++
++static struct gpio_led wbd222_leds[] = {
++ {
++ .name = "L3red",
++ .gpio = 1,
++ },
++ {
++ .name = "L4green",
++ .gpio = 2,
++ },
++ {
++ .name = "L4red",
++ .gpio = 3,
++ },
++ {
++ .name = "L3green",
++ .gpio = 5,
++ },
++};
++
++static struct gpio_led_platform_data wbd222_leds_data = {
++ .num_leds = ARRAY_SIZE(wbd222_leds),
++ .leds = wbd222_leds,
++};
++
++static struct platform_device wbd222_leds_device = {
++ .name = "leds-gpio",
++ .id = -1,
++ .dev = {
++ .platform_data = &wbd222_leds_data,
++ },
++};
++
++static struct sys_timer wbd222_timer = {
++ .init = gemini_timer_init,
++};
++
++#ifdef CONFIG_MTD_PARTITIONS
++static struct mtd_partition wbd222_partitions[] = {
++ {
++ .name = "RedBoot",
++ .offset = 0,
++ .size = 0x020000,
++ .mask_flags = MTD_WRITEABLE,
++ } , {
++ .name = "kernel",
++ .offset = 0x020000,
++ .size = 0x100000,
++ } , {
++ .name = "rootfs",
++ .offset = 0x120000,
++ .size = 0x6a0000,
++ } , {
++ .name = "VCTL",
++ .offset = 0x7c0000,
++ .size = 0x010000,
++ .mask_flags = MTD_WRITEABLE,
++ } , {
++ .name = "cfg",
++ .offset = 0x7d0000,
++ .size = 0x010000,
++ .mask_flags = MTD_WRITEABLE,
++ } , {
++ .name = "FIS",
++ .offset = 0x7e0000,
++ .size = 0x010000,
++ .mask_flags = MTD_WRITEABLE,
++ }
++};
++#define wbd222_num_partitions ARRAY_SIZE(wbd222_partitions)
++#else
++#define wbd222_partitions NULL
++#define wbd222_num_partitions 0
++#endif /* CONFIG_MTD_PARTITIONS */
++
++static void __init wbd222_init(void)
++{
++ gemini_gpio_init();
++ platform_register_uart();
++ platform_register_watchdog();
++ platform_register_pflash(SZ_8M, wbd222_partitions,
++ wbd222_num_partitions);
++ platform_device_register(&wbd222_leds_device);
++ platform_device_register(&wbd222_keys_device);
++ platform_device_register(&wbd222_phy_device);
++ platform_register_ethernet(&gmac_data);
++ platform_register_usb(0);
++ platform_register_usb(1);
++}
++
++MACHINE_START(WBD222, "Wiliboard WBD-222")
++ .phys_io = 0x7fffc000,
++ .io_pg_offst = ((0xffffc000) >> 18) & 0xfffc,
++ .boot_params = 0x100,
++ .map_io = gemini_map_io,
++ .init_irq = gemini_init_irq,
++ .timer = &wbd222_timer,
++ .init_machine = wbd222_init,
++MACHINE_END
+Index: linux-2.6.32.8/arch/arm/mach-gemini/Kconfig
+===================================================================
+--- linux-2.6.32.8.orig/arch/arm/mach-gemini/Kconfig
++++ linux-2.6.32.8/arch/arm/mach-gemini/Kconfig
+@@ -23,6 +23,13 @@ config MACH_WBD111
+ Say Y here if you intend to run this kernel on a
+ Wiliboard WBD-111.
+
++config MACH_WBD222
++ bool "Wiliboard WBD-222"
++ select GEMINI_MEM_SWAP
++ help
++ Say Y here if you intend to run this kernel on a
++ Wiliboard WBD-222.
++
+ endmenu
+
+ config GEMINI_MEM_SWAP
+Index: linux-2.6.32.8/arch/arm/mach-gemini/Makefile
+===================================================================
+--- linux-2.6.32.8.orig/arch/arm/mach-gemini/Makefile
++++ linux-2.6.32.8/arch/arm/mach-gemini/Makefile
+@@ -12,3 +12,4 @@ obj-$(CONFIG_PCI) += pci.o
+ obj-$(CONFIG_MACH_NAS4220B) += board-nas4220b.o
+ obj-$(CONFIG_MACH_RUT100) += board-rut1xx.o
+ obj-$(CONFIG_MACH_WBD111) += board-wbd111.o
++obj-$(CONFIG_MACH_WBD222) += board-wbd222.o
+Index: linux-2.6.32.8/arch/arm/tools/mach-types
+===================================================================
+--- linux-2.6.32.8.orig/arch/arm/tools/mach-types
++++ linux-2.6.32.8/arch/arm/tools/mach-types
+@@ -2536,3 +2536,4 @@ c3ax03 MACH_C3AX03 C3AX03
2549
+ mxt_td60 MACH_MXT_TD60 MXT_TD60 2550
+ esyx MACH_ESYX ESYX 2551
+ bulldog MACH_BULLDOG BULLDOG
2553
++wbd222 MACH_WBD222 WBD222 2753
Index: target/linux/gemini/config-default
===================================================================
--- target/linux/gemini/config-default (revision 20251)
+++ target/linux/gemini/config-default (working copy)
@@ -91,6 +91,7 @@
# CONFIG_MACH_NAS4220B is not set
# CONFIG_MACH_RUT100 is not set
CONFIG_MACH_WBD111=y
+CONFIG_MACH_WBD222=y
CONFIG_MDIO_BITBANG=y
CONFIG_MDIO_GPIO=y
# CONFIG_MG_DISK is not set
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel