diff options
| author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-08-14 21:07:40 +0000 | 
|---|---|---|
| committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-08-14 21:07:40 +0000 | 
| commit | 0eb7476b7713980807ecb2e1bcd97b043bb607e2 (patch) | |
| tree | 8a71c04109c61ebe0cf1ff9e4c021c5f35082370 | |
| parent | 551560105211bbb121e690cf2c1af01e308e2ede (diff) | |
ixp4xx: add TW-266-2 support to 2.6.32 as well
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22648 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -rw-r--r-- | target/linux/ixp4xx/config-2.6.32 | 1 | ||||
| -rw-r--r-- | target/linux/ixp4xx/patches-2.6.32/520-tw2662_support.patch | 329 | 
2 files changed, 330 insertions, 0 deletions
diff --git a/target/linux/ixp4xx/config-2.6.32 b/target/linux/ixp4xx/config-2.6.32 index aca804c1a..12f19ec31 100644 --- a/target/linux/ixp4xx/config-2.6.32 +++ b/target/linux/ixp4xx/config-2.6.32 @@ -116,6 +116,7 @@ CONFIG_MACH_NSLU2=y  CONFIG_MACH_PRONGHORN=y  CONFIG_MACH_PRONGHORNMETRO=y  CONFIG_MACH_SIDEWINDER=y +CONFIG_MACH_TW2662=y  CONFIG_MACH_TW5334=y  CONFIG_MACH_USR8200=y  CONFIG_MACH_WG302V1=y diff --git a/target/linux/ixp4xx/patches-2.6.32/520-tw2662_support.patch b/target/linux/ixp4xx/patches-2.6.32/520-tw2662_support.patch new file mode 100644 index 000000000..cc796c504 --- /dev/null +++ b/target/linux/ixp4xx/patches-2.6.32/520-tw2662_support.patch @@ -0,0 +1,329 @@ +--- a/arch/arm/mach-ixp4xx/Kconfig ++++ b/arch/arm/mach-ixp4xx/Kconfig +@@ -180,6 +180,15 @@ config ARCH_PRPMC1100 + 	  PrPCM1100 Processor Mezanine Module. For more information on + 	  this platform, see <file:Documentation/arm/IXP4xx>. +  ++config MACH_TW2662 ++        bool "Titan Wireless TW-266-2" ++        select PCI ++        help ++          Say 'Y' here if you want your kernel to support the Titan ++          Wireless TW266-2. For more information on this platform, ++          see http://openwrt.org ++ ++ + config MACH_TW5334 + 	bool "Titan Wireless TW-533-4" + 	select PCI +--- a/arch/arm/mach-ixp4xx/Makefile ++++ b/arch/arm/mach-ixp4xx/Makefile +@@ -23,6 +23,7 @@ obj-pci-$(CONFIG_MACH_SIDEWINDER)	+= sid + obj-pci-$(CONFIG_MACH_COMPEX)		+= ixdp425-pci.o + obj-pci-$(CONFIG_MACH_WRT300NV2)		+= wrt300nv2-pci.o + obj-pci-$(CONFIG_MACH_AP1000)		+= ixdp425-pci.o ++obj-pci-$(CONFIG_MACH_TW2662)		+= tw2662-pci.o + obj-pci-$(CONFIG_MACH_TW5334)		+= tw5334-pci.o + obj-pci-$(CONFIG_MACH_MI424WR)		+= mi424wr-pci.o + obj-pci-$(CONFIG_MACH_USR8200)		+= usr8200-pci.o +@@ -48,6 +49,7 @@ obj-$(CONFIG_MACH_SIDEWINDER)	+= sidewin + obj-$(CONFIG_MACH_COMPEX)	+= compex-setup.o + obj-$(CONFIG_MACH_WRT300NV2)	+= wrt300nv2-setup.o + obj-$(CONFIG_MACH_AP1000)	+= ap1000-setup.o ++obj-$(CONFIG_MACH_TW2662)	+= tw2662-setup.o + obj-$(CONFIG_MACH_TW5334)	+= tw5334-setup.o + obj-$(CONFIG_MACH_MI424WR)	+= mi424wr-setup.o + obj-$(CONFIG_MACH_USR8200)	+= usr8200-setup.o +--- a/arch/arm/mach-ixp4xx/include/mach/uncompress.h ++++ b/arch/arm/mach-ixp4xx/include/mach/uncompress.h +@@ -43,7 +43,7 @@ static __inline__ void __arch_decomp_set + 	if (machine_is_adi_coyote() || machine_is_gtwx5715() || + 			 machine_is_gateway7001() || machine_is_wg302v2() || + 			 machine_is_pronghorn() || machine_is_pronghorn_metro() || machine_is_wrt300nv2() || +-			 machine_is_tw5334() || machine_is_usr8200()) ++			 machine_is_tw5334() || machine_is_usr8200() || machine_is_tw2662()) + 		uart_base = (volatile u32*) IXP4XX_UART2_BASE_PHYS; + 	else + 		uart_base = (volatile u32*) IXP4XX_UART1_BASE_PHYS; +--- /dev/null ++++ b/arch/arm/mach-ixp4xx/tw2662-pci.c +@@ -0,0 +1,68 @@ ++/* ++ * arch/arm/mach-ixp4xx/tw2662-pci.c ++ * ++ * PCI setup routines for Tiran Wireless TW-266-2 platform ++ * ++ * Copyright (C) 2002 Jungo Software Technologies. ++ * Copyright (C) 2003 MontaVista Softwrae, Inc. ++ * Copyright (C) 2010 Alexandros C. Couloumbis <alex@ozo.com> ++ * Copyright (C) 2010 Gabor Juhos <juhosg@openwrt.org> ++ * ++ * Maintainer: Deepak Saxena <dsaxena@mvista.com> ++ * Maintainer: Alexandros C. Couloumbis <alex@ozo.com> ++ * ++ * 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/kernel.h> ++#include <linux/pci.h> ++#include <linux/init.h> ++#include <linux/irq.h> ++#include <asm/mach-types.h> ++#include <mach/hardware.h> ++#include <asm/irq.h> ++#include <asm/mach/pci.h> ++ ++#define SLOT0_DEVID	1 ++#define SLOT1_DEVID	3 ++ ++/* PCI controller GPIO to IRQ pin mappings */ ++#define SLOT0_INTA	11 ++#define SLOT1_INTA	9 ++ ++void __init tw2662_pci_preinit(void) ++{ ++	set_irq_type(IXP4XX_GPIO_IRQ(SLOT0_INTA), IRQ_TYPE_LEVEL_LOW); ++	set_irq_type(IXP4XX_GPIO_IRQ(SLOT1_INTA), IRQ_TYPE_LEVEL_LOW); ++	ixp4xx_pci_preinit(); ++} ++ ++static int __init tw2662_map_irq(struct pci_dev *dev, u8 slot, u8 pin) ++{ ++	if (slot == SLOT0_DEVID) ++		return IXP4XX_GPIO_IRQ(SLOT0_INTA); ++	else if (slot == SLOT1_DEVID) ++		return IXP4XX_GPIO_IRQ(SLOT1_INTA); ++	else return -1; ++} ++ ++struct hw_pci tw2662_pci __initdata = { ++	.nr_controllers = 1, ++	.preinit =        tw2662_pci_preinit, ++	.swizzle =        pci_std_swizzle, ++	.setup =          ixp4xx_setup, ++	.scan =           ixp4xx_scan_bus, ++	.map_irq =        tw2662_map_irq, ++}; ++ ++int __init tw2662_pci_init(void) ++{ ++        if (machine_is_tw2662()) ++		pci_common_init(&tw2662_pci); ++        return 0; ++} ++ ++subsys_initcall(tw2662_pci_init); +--- /dev/null ++++ b/arch/arm/mach-ixp4xx/tw2662-setup.c +@@ -0,0 +1,208 @@ ++/* ++ * arch/arm/mach-ixp4xx/tw2662-setup.c ++ * ++ * Titan Wireless TW-266-2 ++ * ++ * Copyright (C) 2010 Gabor Juhos <juhosg@openwrt.org> ++ * Copyright (C) 2010 Alexandros C. Couloumbis <alex@ozo.com> ++ * ++ * based on ap1000-setup.c: ++ * 	Author: Imre Kaloz <Kaloz@openwrt.org> ++ */ ++ ++#include <linux/if_ether.h> ++#include <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/device.h> ++#include <linux/serial.h> ++#include <linux/tty.h> ++#include <linux/serial_8250.h> ++#include <linux/slab.h> ++#include <linux/netdevice.h> ++#include <linux/etherdevice.h> ++#include <linux/platform_device.h> ++ ++#include <asm/io.h> ++#include <asm/types.h> ++#include <asm/setup.h> ++#include <asm/memory.h> ++#include <mach/hardware.h> ++#include <asm/mach-types.h> ++#include <asm/irq.h> ++#include <asm/mach/arch.h> ++#include <asm/mach/flash.h> ++ ++/* gpio mask used by platform device */ ++#define TW2662_GPIO_MASK        (1 << 1) | (1 << 3) | (1 << 5) | (1 << 7)  ++ ++static struct flash_platform_data tw2662_flash_data = { ++	.map_name	= "cfi_probe", ++	.width		= 2, ++}; ++ ++static struct resource tw2662_flash_resource = { ++	.flags		= IORESOURCE_MEM, ++}; ++ ++static struct platform_device tw2662_flash = { ++	.name		= "IXP4XX-Flash", ++	.id		= 0, ++	.dev		= { ++		.platform_data = &tw2662_flash_data, ++	}, ++	.num_resources	= 1, ++	.resource	= &tw2662_flash_resource, ++}; ++ ++static struct resource tw2662_gpio_resources[] = { ++        { ++                .name   = "gpio", ++                /* FIXME: gpio mask should be model specific */ ++                .start  = TW2662_GPIO_MASK, ++                .end    = TW2662_GPIO_MASK, ++                .flags  = 0, ++        }, ++}; ++ ++static struct platform_device tw2662_gpio = { ++	.name			= "GPIODEV", ++	.id			= -1, ++	.num_resources		= ARRAY_SIZE(tw2662_gpio_resources), ++	.resource		= tw2662_gpio_resources, ++}; ++ ++static struct resource tw2662_uart_resources[] = { ++	{ ++		.start		= IXP4XX_UART1_BASE_PHYS, ++		.end		= IXP4XX_UART1_BASE_PHYS + 0x0fff, ++		.flags		= IORESOURCE_MEM ++	}, ++	{ ++		.start		= IXP4XX_UART2_BASE_PHYS, ++		.end		= IXP4XX_UART2_BASE_PHYS + 0x0fff, ++		.flags		= IORESOURCE_MEM ++	} ++}; ++ ++static struct plat_serial8250_port tw2662_uart_data[] = { ++	{ ++		.mapbase	= IXP4XX_UART1_BASE_PHYS, ++		.membase	= (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET, ++		.irq		= IRQ_IXP4XX_UART1, ++		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, ++		.iotype		= UPIO_MEM, ++		.regshift	= 2, ++		.uartclk	= IXP4XX_UART_XTAL, ++	}, ++	{ ++		.mapbase	= IXP4XX_UART2_BASE_PHYS, ++		.membase	= (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET, ++		.irq		= IRQ_IXP4XX_UART2, ++		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, ++		.iotype		= UPIO_MEM, ++		.regshift	= 2, ++		.uartclk	= IXP4XX_UART_XTAL, ++	}, ++	{ }, ++}; ++ ++static struct platform_device tw2662_uart = { ++	.name			= "serial8250", ++	.id			= PLAT8250_DEV_PLATFORM, ++	.dev.platform_data	= tw2662_uart_data, ++	.num_resources		= 2, ++	.resource		= tw2662_uart_resources ++}; ++ ++/* Built-in 10/100 Ethernet MAC interfaces */ ++static struct eth_plat_info tw2662_plat_eth[] = { ++        { ++                .phy            = 3, ++                .rxq            = 3, ++                .txreadyq       = 20, ++        }, { ++                .phy            = 1, ++                .rxq            = 4, ++                .txreadyq       = 21, ++        } ++}; ++ ++static struct platform_device tw2662_eth[] = { ++	{ ++		.name			= "ixp4xx_eth", ++		.id			= IXP4XX_ETH_NPEB, ++		.dev.platform_data	= tw2662_plat_eth, ++	}, { ++		.name			= "ixp4xx_eth", ++		.id			= IXP4XX_ETH_NPEC, ++		.dev.platform_data	= tw2662_plat_eth + 1, ++	} ++}; ++ ++ ++static struct platform_device *tw2662_devices[] __initdata = { ++	&tw2662_flash, ++	&tw2662_uart, ++	&tw2662_gpio, ++	&tw2662_eth[0], ++	&tw2662_eth[1], ++}; ++ ++static char tw2662_mem_fixup[] __initdata = "mem=64M "; ++ ++static void __init tw2662_fixup(struct machine_desc *desc, ++		struct tag *tags, char **cmdline, struct meminfo *mi) ++ ++{ ++	struct tag *t = tags; ++	char *p = *cmdline; ++ ++	/* Find the end of the tags table, taking note of any cmdline tag. */ ++	for (; t->hdr.size; t = tag_next(t)) { ++		if (t->hdr.tag == ATAG_CMDLINE) { ++			p = t->u.cmdline.cmdline; ++		} ++	} ++ ++	/* Overwrite the end of the table with a new cmdline tag. */ ++	t->hdr.tag = ATAG_CMDLINE; ++	t->hdr.size = (sizeof (struct tag_header) + ++		strlen(tw2662_mem_fixup) + strlen(p) + 1 + 4) >> 2; ++	strlcpy(t->u.cmdline.cmdline, tw2662_mem_fixup, COMMAND_LINE_SIZE); ++	strlcpy(t->u.cmdline.cmdline + strlen(tw2662_mem_fixup), p, ++		COMMAND_LINE_SIZE - strlen(tw2662_mem_fixup)); ++ ++	/* Terminate the table. */ ++	t = tag_next(t); ++	t->hdr.tag = ATAG_NONE; ++	t->hdr.size = 0; ++} ++ ++static void __init tw2662_init(void) ++{ ++	ixp4xx_sys_init(); ++ ++	tw2662_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); ++	tw2662_flash_resource.end = ++		IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; ++ ++	platform_add_devices(tw2662_devices, ARRAY_SIZE(tw2662_devices)); ++	/* hack MACs as most of these boards have a broken eeprom */ ++	random_ether_addr(tw2662_plat_eth[0].hwaddr); ++	random_ether_addr(tw2662_plat_eth[1].hwaddr); ++ ++} ++ ++#ifdef CONFIG_MACH_TW2662 ++MACHINE_START(TW2662, "Titan Wireless TW-266-2") ++	/* Maintainer: Alexandros C. Couloumbis <alex@ozo.com> */ ++	.phys_io	= IXP4XX_PERIPHERAL_BASE_PHYS, ++	.io_pg_offst	= ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc, ++	.fixup		= tw2662_fixup, ++	.map_io		= ixp4xx_map_io, ++	.init_irq	= ixp4xx_init_irq, ++	.timer		= &ixp4xx_timer, ++	.boot_params	= 0x0100, ++	.init_machine	= tw2662_init, ++MACHINE_END ++#endif  | 
