diff options
-rw-r--r-- | target/linux/gemini/config-default | 1 | ||||
-rw-r--r-- | target/linux/gemini/image/Makefile | 12 | ||||
-rw-r--r-- | target/linux/gemini/patches/200-wbd222_support.patch | 203 |
3 files changed, 216 insertions, 0 deletions
diff --git a/target/linux/gemini/config-default b/target/linux/gemini/config-default index 9404cd400e..d5d74caaf2 100644 --- a/target/linux/gemini/config-default +++ b/target/linux/gemini/config-default @@ -91,6 +91,7 @@ CONFIG_LEGACY_PTYS=y # 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 diff --git a/target/linux/gemini/image/Makefile b/target/linux/gemini/image/Makefile index 9ebcbcf9f6..5ef900b452 100644 --- a/target/linux/gemini/image/Makefile +++ b/target/linux/gemini/image/Makefile @@ -11,12 +11,17 @@ define Image/Prepare # WBD111: mach id 1690 (0x69a) echo -en "\x06\x1c\xa0\xe3\x9a\x10\x81\xe3" > $(KDIR)/$(IMG_PREFIX)-wbd111-zImage cat $(LINUX_DIR)/arch/arm/boot/zImage >> $(KDIR)/$(IMG_PREFIX)-wbd111-zImage +# WBD222: mach id 2753 (0xAC1) + echo -en "\x0a\x1c\xa0\xe3\xc1\x10\x81\xe3" > $(KDIR)/$(IMG_PREFIX)-wbd222-zImage + cat $(LINUX_DIR)/arch/arm/boot/zImage >> $(KDIR)/$(IMG_PREFIX)-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)/$(IMG_PREFIX)-wbd111-zImage cat $(KDIR)/$(IMG_PREFIX)-wbd111-zImage >> $(BIN_DIR)/$(IMG_PREFIX)-wbd111-zImage + echo -en "\x00\x00\xa0\xe1\x00\x00\xa0\xe1\x00\x00\xa0\xe1\x00\x00\xa0\xe1" > $(BIN_DIR)/$(IMG_PREFIX)-wbd222-zImage + cat $(KDIR)/$(IMG_PREFIX)-wbd222-zImage >> $(BIN_DIR)/$(IMG_PREFIX)-wbd222-zImage endef define Image/Build/jffs2-64k @@ -41,6 +46,13 @@ define Image/Build -o $(BIN_DIR)/$(IMG_PREFIX)-wbd111-$(1).bin \ -p Kernel:0x020000:0x100000:0:0:$(BIN_DIR)/$(IMG_PREFIX)-wbd111-zImage \ -p Ramdisk:0x120000:0x500000:0:0:$(BIN_DIR)/$(IMG_PREFIX)-$(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)/$(IMG_PREFIX)-wbd222-$(1).bin \ + -p Kernel:0x020000:0x100000:0:0:$(BIN_DIR)/$(IMG_PREFIX)-wbd222-zImage \ + -p Ramdisk:0x120000:0x500000:0:0:$(BIN_DIR)/$(IMG_PREFIX)-$(1).img endef $(eval $(call BuildImage)) diff --git a/target/linux/gemini/patches/200-wbd222_support.patch b/target/linux/gemini/patches/200-wbd222_support.patch new file mode 100644 index 0000000000..26b7d1e3ac --- /dev/null +++ b/target/linux/gemini/patches/200-wbd222_support.patch @@ -0,0 +1,203 @@ +--- a/arch/arm/mach-gemini/Kconfig ++++ b/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 +--- a/arch/arm/mach-gemini/Makefile ++++ b/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 +--- /dev/null ++++ b/arch/arm/mach-gemini/board-wbd222.c +@@ -0,0 +1,170 @@ ++/* ++ * Support for Wiliboard WBD-222 ++ * ++ * Copyright (C) 2009 Imre Kaloz <kaloz@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 +--- a/arch/arm/tools/mach-types ++++ b/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 |