diff options
8 files changed, 109 insertions, 706 deletions
| diff --git a/target/linux/gemini/Makefile b/target/linux/gemini/Makefile index 29517b3b7..8073b18a8 100644 --- a/target/linux/gemini/Makefile +++ b/target/linux/gemini/Makefile @@ -1,5 +1,5 @@  # -# Copyright (C) 2009-2010 OpenWrt.org +# Copyright (C) 2009-2011 OpenWrt.org  #  # This is free software, licensed under the GNU General Public License v2.  # See /LICENSE for more information. @@ -13,7 +13,7 @@ FEATURES:=squashfs  CFLAGS:=-Os -pipe -march=armv4 -mtune=arm9tdmi -funit-at-a-time  MAINTAINER:=Imre Kaloz <kaloz@openwrt.org> -LINUX_VERSION:=2.6.32.29 +LINUX_VERSION:=2.6.37.1  include $(INCLUDE_DIR)/target.mk diff --git a/target/linux/gemini/patches/001-git_sync.patch b/target/linux/gemini/patches/001-git_sync.patch index d072a0195..6343647a2 100644 --- a/target/linux/gemini/patches/001-git_sync.patch +++ b/target/linux/gemini/patches/001-git_sync.patch @@ -8,7 +8,7 @@   /*    * Debugging stuff -@@ -337,7 +338,7 @@ params:		ldr	r0, =params_phys +@@ -355,7 +356,7 @@ params:		ldr	r0, =0x10000100		@ params_p    * This routine must preserve:    *  r4, r5, r6, r7, r8    */ @@ -17,7 +17,7 @@   cache_on:	mov	r3, #8			@ cache_on function   		b	call_cache_fn -@@ -519,7 +520,7 @@ __common_mmu_cache_on: +@@ -544,7 +545,7 @@ __common_mmu_cache_on:   		mcr	p15, 0, r3, c2, c0, 0	@ load page table pointer   		mcr	p15, 0, r1, c3, c0, 0	@ load domain access control   		b	1f @@ -26,7 +26,7 @@   1:		mcr	p15, 0, r0, c1, c0, 0	@ load control register   		mrc	p15, 0, r0, c1, c0, 0	@ and read it back to   		sub	pc, lr, r0, lsr #32	@ properly flush pipeline -@@ -538,7 +539,7 @@ __common_mmu_cache_on: +@@ -563,7 +564,7 @@ __common_mmu_cache_on:    * r8     = atags pointer    * r9-r12,r14 = corrupted    */ @@ -35,16 +35,16 @@   reloc_start:	add	r9, r5, r0   		sub	r9, r9, #128		@ do not copy the stack   		debug_reloc_start -@@ -766,7 +767,7 @@ proc_types: -  * On exit, r0, r1, r2, r3, r9, r12 corrupted -  * This routine must preserve: r4, r6, r7 +@@ -793,7 +794,7 @@ proc_types: +  * This routine must preserve: +  *  r4, r6, r7    */  -		.align	5  +		.align	L1_CACHE_SHIFT   cache_off:	mov	r3, #12			@ cache_off function   		b	call_cache_fn -@@ -841,7 +842,7 @@ __armv3_mmu_cache_off: +@@ -868,7 +869,7 @@ __armv3_mmu_cache_off:    * This routine must preserve:    *  r0, r4, r5, r6, r7    */ @@ -53,40 +53,37 @@   cache_clean_flush:   		mov	r3, #16   		b	call_cache_fn ---- a/arch/arm/include/asm/dma-mapping.h -+++ b/arch/arm/include/asm/dma-mapping.h -@@ -98,7 +98,7 @@ static inline int dma_set_mask(struct de -  - static inline int dma_get_cache_alignment(void) - { --	return 32; -+	return L1_CACHE_BYTES; - } -  - static inline int dma_is_consistent(struct device *dev, dma_addr_t handle)  --- a/arch/arm/Kconfig  +++ b/arch/arm/Kconfig -@@ -923,7 +923,7 @@ config ISA_DMA_API +@@ -307,6 +307,7 @@ config ARCH_GEMINI + 	select CPU_FA526 + 	select ARCH_REQUIRE_GPIOLIB + 	select ARCH_USES_GETTIMEOFFSET ++	select PCI + 	help + 	  Support for the Cortina Systems Gemini family SoCs +  +@@ -1164,7 +1165,7 @@ config ISA_DMA_API   	bool   config PCI --	bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE -+	bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE || ARCH_GEMINI +-	bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE || ARCH_CNS3XXX ++	bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE || ARCH_CNS3XXX || ARCH_GEMINI   	help   	  Find out whether you have a PCI motherboard. PCI is the name of a   	  bus system, i.e. the way the CPU talks to the other stuff inside  --- a/arch/arm/kernel/entry-armv.S  +++ b/arch/arm/kernel/entry-armv.S -@@ -22,6 +22,7 @@ - #include <asm/thread_notify.h> +@@ -23,6 +23,7 @@   #include <asm/unwind.h>   #include <asm/unistd.h> + #include <asm/tls.h>  +#include <asm/cache.h>   #include "entry-header.S" -@@ -166,7 +167,7 @@ ENDPROC(__und_invalid) - 	asm_trace_hardirqs_off +@@ -167,7 +168,7 @@ ENDPROC(__und_invalid) + 	stmia	r5, {r0 - r4}   	.endm  -	.align	5 @@ -94,7 +91,7 @@   __dabt_svc:   	svc_entry -@@ -214,7 +215,7 @@ __dabt_svc: +@@ -215,7 +216,7 @@ __dabt_svc:    UNWIND(.fnend		)   ENDPROC(__dabt_svc) @@ -103,7 +100,7 @@   __irq_svc:   	svc_entry -@@ -255,7 +256,7 @@ svc_preempt: +@@ -259,7 +260,7 @@ svc_preempt:   	b	1b   #endif @@ -112,7 +109,7 @@   __und_svc:   #ifdef CONFIG_KPROBES   	@ If a kprobe is about to simulate a "stmdb sp..." instruction, -@@ -301,7 +302,7 @@ __und_svc: +@@ -305,7 +306,7 @@ __und_svc:    UNWIND(.fnend		)   ENDPROC(__und_svc) @@ -121,7 +118,7 @@   __pabt_svc:   	svc_entry -@@ -337,7 +338,7 @@ __pabt_svc: +@@ -341,7 +342,7 @@ __pabt_svc:    UNWIND(.fnend		)   ENDPROC(__pabt_svc) @@ -130,7 +127,7 @@   .LCcralign:   	.word	cr_alignment   #ifdef MULTI_DABORT -@@ -412,7 +413,7 @@ ENDPROC(__pabt_svc) +@@ -414,7 +415,7 @@ ENDPROC(__pabt_svc)   #endif   	.endm @@ -139,7 +136,7 @@   __dabt_usr:   	usr_entry   	kuser_cmpxchg_check -@@ -444,7 +445,7 @@ __dabt_usr: +@@ -446,7 +447,7 @@ __dabt_usr:    UNWIND(.fnend		)   ENDPROC(__dabt_usr) @@ -148,7 +145,7 @@   __irq_usr:   	usr_entry   	kuser_cmpxchg_check -@@ -476,7 +477,7 @@ ENDPROC(__irq_usr) +@@ -475,7 +476,7 @@ ENDPROC(__irq_usr)   	.ltorg @@ -157,7 +154,7 @@   __und_usr:   	usr_entry -@@ -692,7 +693,7 @@ __und_usr_unknown: +@@ -691,7 +692,7 @@ __und_usr_unknown:   	b	do_undefinstr   ENDPROC(__und_usr_unknown) @@ -166,7 +163,7 @@   __pabt_usr:   	usr_entry -@@ -803,7 +804,7 @@ ENDPROC(__switch_to) +@@ -805,7 +806,7 @@ ENDPROC(__switch_to)   #endif   	.endm @@ -175,7 +172,7 @@   	.globl	__kuser_helper_start   __kuser_helper_start: -@@ -843,7 +844,7 @@ __kuser_memory_barrier:				@ 0xffff0fa0 +@@ -845,7 +846,7 @@ __kuser_memory_barrier:				@ 0xffff0fa0   	smp_dmb   	usr_ret	lr @@ -184,7 +181,7 @@   /*    * Reference prototype: -@@ -975,7 +976,7 @@ kuser_cmpxchg_fixup: +@@ -972,7 +973,7 @@ kuser_cmpxchg_fixup:   #endif @@ -193,7 +190,7 @@   /*    * Reference prototype: -@@ -1058,7 +1059,7 @@ __kuser_helper_end: +@@ -1050,7 +1051,7 @@ __kuser_helper_end:    * of which is copied into r0 for the mode specific abort handler.    */   	.macro	vector_stub, name, mode, correction=0 @@ -202,7 +199,7 @@   vector_\name:   	.if \correction -@@ -1189,7 +1190,7 @@ __stubs_start: +@@ -1181,7 +1182,7 @@ __stubs_start:   	.long	__und_invalid			@  e   	.long	__und_invalid			@  f @@ -211,7 +208,7 @@   /*=============================================================================    * Undefined FIQs -@@ -1219,7 +1220,7 @@ vector_addrexcptn: +@@ -1211,7 +1212,7 @@ vector_addrexcptn:    * We group all the following data together to optimise    * for CPUs with separate I & D caches.    */ @@ -238,7 +235,7 @@   /*    * This is the fast syscall return path.  We do as little as    * possible here, and this includes saving r0 back into the SVC -@@ -183,7 +184,7 @@ ftrace_stub: +@@ -266,7 +267,7 @@ ENDPROC(ftrace_stub)   #define A710(code...)   #endif @@ -247,7 +244,7 @@   ENTRY(vector_swi)   	sub	sp, sp, #S_FRAME_SIZE   	stmia	sp, {r0 - r12}			@ Calling r0 - r12 -@@ -316,7 +317,7 @@ __sys_trace_return: +@@ -410,7 +411,7 @@ __sys_trace_return:   	bl	syscall_trace   	b	ret_slow_syscall @@ -264,9 +261,9 @@   #include <asm/system.h>  +#include <asm/cache.h> - #if (PHYS_OFFSET & 0x001fffff) - #error "PHYS_OFFSET must be at an even 2MiB boundary!" -@@ -192,7 +193,7 @@ ENDPROC(__enable_mmu) + #ifdef CONFIG_DEBUG_LL + #include <mach/debug-macro.S> +@@ -378,7 +379,7 @@ ENDPROC(__enable_mmu)    *    * other registers depend on the function called upon completion    */ @@ -275,41 +272,6 @@   __turn_mmu_on:   	mov	r0, r0   	mcr	p15, 0, r0, c1, c0, 0		@ write control reg ---- a/arch/arm/kernel/vmlinux.lds.S -+++ b/arch/arm/kernel/vmlinux.lds.S -@@ -7,6 +7,7 @@ - #include <asm/thread_info.h> - #include <asm/memory.h> - #include <asm/page.h> -+#include <asm/cache.h> - 	 - OUTPUT_ARCH(arm) - ENTRY(stext) -@@ -59,7 +60,7 @@ SECTIONS - 			*(.security_initcall.init) - 		__security_initcall_end = .; - #ifdef CONFIG_BLK_DEV_INITRD --		. = ALIGN(32); -+		. = ALIGN(L1_CACHE_BYTES); - 		__initramfs_start = .; - 			usr/built-in.o(.init.ramfs) - 		__initramfs_end = .; -@@ -176,13 +177,13 @@ SECTIONS - 		/* - 		 * then the cacheline aligned data - 		 */ --		. = ALIGN(32); -+		. = ALIGN(L1_CACHE_BYTES); - 		*(.data.cacheline_aligned) -  - 		/* - 		 * The exception fixup table (might need resorting at runtime) - 		 */ --		. = ALIGN(32); -+		. = ALIGN(L1_CACHE_BYTES); - 		__start___ex_table = .; - #ifdef CONFIG_MMU - 		*(__ex_table)  --- a/arch/arm/lib/memchr.S  +++ b/arch/arm/lib/memchr.S  @@ -11,9 +11,10 @@ @@ -408,169 +370,6 @@   ENTRY(strrchr)   		mov	r3, #0   1:		ldrb	r2, [r0], #1 ---- /dev/null -+++ b/arch/arm/mach-gemini/board-nas4220b.c -@@ -0,0 +1,160 @@ -+/* -+ *  Support for Raidsonic NAS-4220-B -+ * -+ *  Copyright (C) 2009 Janos Laube <janos.dev@gmail.com> -+ * -+ * based on rut1xx.c -+ *  Copyright (C) 2008 Paulius Zaleckas <paulius.zaleckas@teltonika.lt> -+ * -+ * 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/gpio_keys.h> -+#include <linux/mdio-gpio.h> -+#include <linux/io.h> -+ -+#include <asm/setup.h> -+#include <asm/mach-types.h> -+#include <asm/mach/arch.h> -+#include <asm/mach/time.h> -+ -+#include <mach/gmac.h> -+#include <mach/hardware.h> -+#include <mach/global_reg.h> -+ -+#include "common.h" -+ -+static struct sys_timer ib4220b_timer = { -+	.init	= gemini_timer_init, -+}; -+ -+static struct gpio_led ib4220b_leds[] = { -+	{ -+		.name			= "nas4220b:orange:hdd", -+		.default_trigger	= "ide-disk", -+		.gpio			= 60, -+	}, -+	{ -+		.name			= "nas4220b:green:os", -+		.default_trigger	= "heartbeat", -+		.gpio			= 62, -+	}, -+}; -+ -+static struct gpio_led_platform_data ib4220b_leds_data = { -+	.num_leds	= ARRAY_SIZE(ib4220b_leds), -+	.leds		= ib4220b_leds, -+}; -+ -+static struct platform_device ib4220b_led_device = { -+	.name	= "leds-gpio", -+	.id	= -1, -+	.dev	= { -+		.platform_data = &ib4220b_leds_data, -+	}, -+}; -+ -+static struct gpio_keys_button ib4220b_keys[] = { -+	{ -+		.code		= KEY_SETUP, -+		.gpio		= 61, -+		.active_low	= 1, -+		.desc		= "Backup Button", -+		.type		= EV_KEY, -+	}, -+	{ -+		.code		= KEY_RESTART, -+		.gpio		= 63, -+		.active_low	= 1, -+		.desc		= "Softreset Button", -+		.type		= EV_KEY, -+	}, -+}; -+ -+static struct gpio_keys_platform_data ib4220b_keys_data = { -+	.buttons	= ib4220b_keys, -+	.nbuttons	= ARRAY_SIZE(ib4220b_keys), -+}; -+ -+static struct platform_device ib4220b_key_device = { -+	.name	= "gpio-keys", -+	.id	= -1, -+	.dev	= { -+		.platform_data = &ib4220b_keys_data, -+	}, -+}; -+ -+static struct mdio_gpio_platform_data ib4220b_mdio = { -+	.mdc		= 22, -+	.mdio		= 21, -+	.phy_mask	= ~(1 << 1), -+}; -+ -+static struct platform_device ib4220b_phy_device = { -+	.name	= "mdio-gpio", -+	.id	= 0, -+	.dev	= { -+		.platform_data = &ib4220b_mdio, -+	}, -+}; -+ -+static struct gemini_gmac_platform_data ib4220b_gmac_data = { -+	.bus_id[0] = "0:01", -+	.interface[0] = PHY_INTERFACE_MODE_RGMII, -+}; -+ -+static void __init gmac_ib4220b_init(void) -+{ -+	unsigned int val; -+ -+	val = __raw_readl(IO_ADDRESS(GEMINI_GLOBAL_BASE) + -+		GLOBAL_IO_DRIVING_CTRL); -+	val |= (0x3 << GMAC0_PADS_SHIFT) | (0x3 << GMAC1_PADS_SHIFT); -+	__raw_writel(val, IO_ADDRESS(GEMINI_GLOBAL_BASE) + -+		GLOBAL_IO_DRIVING_CTRL); -+ -+	val = (0x0 << GMAC0_RXDV_SKEW_SHIFT) | (0xf << GMAC0_RXC_SKEW_SHIFT) | -+		(0x7 << GMAC0_TXEN_SKEW_SHIFT) | (0xa << GMAC0_TXC_SKEW_SHIFT) | -+		(0x0 << GMAC1_RXDV_SKEW_SHIFT) | (0xf << GMAC1_RXC_SKEW_SHIFT) | -+		(0x7 << GMAC1_TXEN_SKEW_SHIFT) | (0xa << GMAC1_TXC_SKEW_SHIFT); -+	__raw_writel(val, IO_ADDRESS(GEMINI_GLOBAL_BASE) + -+		GLOBAL_GMAC_CTRL_SKEW_CTRL); -+ -+	val = __raw_readl(IO_ADDRESS(GEMINI_GLOBAL_BASE) + -+		GLOBAL_ARBITRATION1_CTRL); -+	val |= (0x20 << BURST_LENGTH_SHIFT); -+	__raw_writel(val, IO_ADDRESS(GEMINI_GLOBAL_BASE) + -+		GLOBAL_ARBITRATION1_CTRL); -+} -+ -+static void __init ib4220b_init(void) -+{ -+	gemini_gpio_init(); -+	gmac_ib4220b_init(); -+	platform_register_uart(); -+	platform_register_usb(0); -+	platform_register_usb(1); -+	platform_register_pflash(SZ_16M, NULL, 0); -+	platform_device_register(&ib4220b_led_device); -+	platform_device_register(&ib4220b_key_device); -+	platform_device_register(&ib4220b_phy_device); -+	platform_register_ethernet(&ib4220b_gmac_data); -+} -+ -+MACHINE_START(NAS4220B, "Raidsonic NAS IB-4220-B") -+	.phys_io	= 0x7fffc000, -+	.io_pg_offst	= ((0xffffc000) >> 18) & 0xfffc, -+	.boot_params	= 0x100, -+	.map_io		= gemini_map_io, -+	.init_irq	= gemini_init_irq, -+	.timer		= &ib4220b_timer, -+	.init_machine	= ib4220b_init, -+MACHINE_END  --- a/arch/arm/mach-gemini/board-rut1xx.c  +++ b/arch/arm/mach-gemini/board-rut1xx.c  @@ -14,13 +14,35 @@ @@ -852,36 +651,20 @@  +#define NR_IRQS		(NORMAL_IRQ_NUM + PCI_IRQ_NUM + GPIO_IRQ_NUM)   #endif /* __MACH_IRQS_H__ */ ---- a/arch/arm/mach-gemini/Kconfig -+++ b/arch/arm/mach-gemini/Kconfig -@@ -2,6 +2,13 @@ if ARCH_GEMINI -  - menu "Cortina Systems Gemini Implementations" -  -+config MACH_NAS4220B -+	bool "Raidsonic NAS-4220-B" -+	select GEMINI_MEM_SWAP -+	help -+	  Say Y here if you intend to run this kernel on a -+	  Raidsonic NAS-4220-B. -+ - config MACH_RUT100 - 	bool "Teltonika RUT100" - 	select GEMINI_MEM_SWAP  --- a/arch/arm/mach-gemini/Makefile  +++ b/arch/arm/mach-gemini/Makefile -@@ -6,5 +6,8 @@ +@@ -6,6 +6,8 @@   obj-y			:= irq.o mm.o time.o devices.o gpio.o  +obj-$(CONFIG_PCI)	+= pci.o  +   # Board-specific support -+obj-$(CONFIG_MACH_NAS4220B)	+= board-nas4220b.o + obj-$(CONFIG_MACH_NAS4220B)	+= board-nas4220b.o   obj-$(CONFIG_MACH_RUT100)	+= board-rut1xx.o  --- a/arch/arm/mach-gemini/mm.c  +++ b/arch/arm/mach-gemini/mm.c -@@ -59,6 +59,11 @@ static struct map_desc gemini_io_desc[]  +@@ -59,6 +59,11 @@ static struct map_desc gemini_io_desc[]   		.length		= SZ_512K,   		.type 		= MT_DEVICE,   	}, { @@ -2373,14 +2156,14 @@  +		filter.bits.unicast = 1;  +		mc_filter[1] = mc_filter[0] = 0xffffffff;  +	} else { -+		struct dev_mc_list *mclist; ++		struct netdev_hw_addr *ha;  +  +		filter.bits.broadcast = 1;  +		filter.bits.multicast = 1;  +		filter.bits.unicast = 1;  +		mc_filter[1] = mc_filter[0] = 0; -+		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count; i++, mclist = mclist->next) { -+			bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3f; ++		netdev_for_each_mc_addr(ha, dev) { ++			bit_nr = ether_crc(ETH_ALEN, ha->addr) & 0x3f;  +			if (bit_nr <= 32)  +				mc_filter[0] = mc_filter[0] | (1 << bit_nr);  +			else @@ -4099,7 +3882,7 @@  +gemini_negmac-objs := gm_gmac.o  --- a/drivers/net/Kconfig  +++ b/drivers/net/Kconfig -@@ -2126,6 +2126,13 @@ config ACENIC_OMIT_TIGON_I +@@ -2068,6 +2068,13 @@ config ACENIC_OMIT_TIGON_I   	  The safe and default value for this is N. @@ -4115,10 +3898,10 @@   	depends on PCI  --- a/drivers/net/Makefile  +++ b/drivers/net/Makefile -@@ -247,6 +247,7 @@ pasemi_mac_driver-objs := pasemi_mac.o p - obj-$(CONFIG_MLX4_CORE) += mlx4/ +@@ -257,6 +257,7 @@ obj-$(CONFIG_MLX4_CORE) += mlx4/   obj-$(CONFIG_ENC28J60) += enc28j60.o   obj-$(CONFIG_ETHOC) += ethoc.o + obj-$(CONFIG_GRETH) += greth.o  +obj-$(CONFIG_GEMINI_NET_ENGINE_GMAC) += gemini_negmac/   obj-$(CONFIG_XTENSA_XT2000_SONIC) += xtsonic.o @@ -4587,7 +4370,7 @@  +};  --- a/drivers/usb/host/ehci.h  +++ b/drivers/usb/host/ehci.h -@@ -552,7 +552,12 @@ static inline unsigned int +@@ -561,7 +561,12 @@ static inline unsigned int   ehci_port_speed(struct ehci_hcd *ehci, unsigned int portsc)   {   	if (ehci_is_TDI(ehci)) { @@ -4602,7 +4385,7 @@   		case 1:  --- a/drivers/usb/host/ehci-hcd.c  +++ b/drivers/usb/host/ehci-hcd.c -@@ -194,9 +194,11 @@ static int ehci_halt (struct ehci_hcd *e +@@ -223,9 +223,11 @@ static int ehci_halt (struct ehci_hcd *e   	if ((temp & STS_HALT) != 0)   		return 0; @@ -4614,7 +4397,7 @@   	return handshake (ehci, &ehci->regs->status,   			  STS_HALT, STS_HALT, 16 * 125);   } -@@ -263,8 +265,8 @@ static int ehci_reset (struct ehci_hcd * +@@ -292,8 +294,8 @@ static int ehci_reset (struct ehci_hcd *   	if (retval)   		return retval; @@ -4625,7 +4408,7 @@   	if (ehci->debug)   		dbgp_external_startup(); -@@ -397,12 +399,13 @@ static void ehci_silence_controller(stru +@@ -427,12 +429,13 @@ static void ehci_silence_controller(stru   {   	ehci_halt(ehci);   	ehci_turn_off_all_ports(ehci); @@ -4640,7 +4423,7 @@   }   /* ehci_shutdown kick in for silicon on any bus (not just pci, etc). -@@ -654,7 +657,9 @@ static int ehci_run (struct usb_hcd *hcd +@@ -712,7 +715,9 @@ static int ehci_run (struct usb_hcd *hcd   	// Philips, Intel, and maybe others need CMD_RUN before the   	// root hub will detect new devices (why?); NEC doesn't   	ehci->command &= ~(CMD_LRESET|CMD_IAAD|CMD_PSE|CMD_ASE|CMD_RESET); @@ -4650,7 +4433,7 @@   	ehci_writel(ehci, ehci->command, &ehci->regs->command);   	dbg_cmd (ehci, "init", ehci->command); -@@ -674,9 +679,11 @@ static int ehci_run (struct usb_hcd *hcd +@@ -732,9 +737,11 @@ static int ehci_run (struct usb_hcd *hcd   	 */   	down_write(&ehci_cf_port_reset_rwsem);   	hcd->state = HC_STATE_RUNNING; @@ -4662,7 +4445,7 @@   	up_write(&ehci_cf_port_reset_rwsem);   	ehci->last_periodic_enable = ktime_get_real(); -@@ -768,9 +775,10 @@ static irqreturn_t ehci_irq (struct usb_ +@@ -827,9 +834,10 @@ static irqreturn_t ehci_irq (struct usb_   		pcd_status = status;   		/* resume root hub? */ @@ -4671,10 +4454,10 @@   			usb_hcd_resume_root_hub(hcd);  -  +#endif - 		while (i--) { - 			int pstatus = ehci_readl(ehci, - 						 &ehci->regs->port_status [i]); -@@ -803,7 +811,9 @@ static irqreturn_t ehci_irq (struct usb_ + 		/* get per-port change detect bits */ + 		if (ehci->has_ppcd) + 			ppcd = status >> 16; +@@ -871,7 +879,9 @@ static irqreturn_t ehci_irq (struct usb_   		ehci_halt(ehci);   dead:   		ehci_reset(ehci); @@ -4684,7 +4467,7 @@   		/* generic layer kills/unlinks all urbs, then   		 * uses ehci_stop to clean up the rest   		 */ -@@ -1102,6 +1112,11 @@ MODULE_LICENSE ("GPL"); +@@ -1169,6 +1179,11 @@ MODULE_LICENSE ("GPL");   #define	PCI_DRIVER		ehci_pci_driver   #endif @@ -4698,7 +4481,7 @@   #define	PLATFORM_DRIVER		ehci_fsl_driver  --- a/drivers/usb/host/ehci-hub.c  +++ b/drivers/usb/host/ehci-hub.c -@@ -809,6 +809,12 @@ static int ehci_hub_control ( +@@ -929,6 +929,12 @@ static int ehci_hub_control (   			/* see what we found out */   			temp = check_reset_complete (ehci, wIndex, status_reg,   					ehci_readl(ehci, status_reg)); @@ -4713,10 +4496,10 @@   		if (!(temp & (PORT_RESUME|PORT_RESET)))  --- a/drivers/usb/Kconfig  +++ b/drivers/usb/Kconfig -@@ -60,6 +60,7 @@ config USB_ARCH_HAS_EHCI - 	default y if ARCH_IXP4XX - 	default y if ARCH_W90X900 +@@ -66,6 +66,7 @@ config USB_ARCH_HAS_EHCI   	default y if ARCH_AT91SAM9G45 + 	default y if ARCH_MXC + 	default y if ARCH_OMAP3  +	default y if ARCH_GEMINI   	default PCI @@ -4742,6 +4525,7 @@  +#include <linux/miscdevice.h>  +#include <linux/platform_device.h>  +#include <linux/watchdog.h> ++#include <linux/slab.h>  +  +#define GEMINI_WDCOUNTER	0x0  +#define GEMINI_WDLOAD		0x4 @@ -4924,7 +4708,6 @@  +static const struct file_operations gemini_wdt_fops = {  +	.owner		= THIS_MODULE,  +	.llseek		= no_llseek, -+	.ioctl		= gemini_wdt_ioctl,  +	.open		= gemini_wdt_open,  +	.release	= gemini_wdt_close,  +	.write		= gemini_wdt_write, @@ -5094,7 +4877,7 @@  +MODULE_ALIAS("platform:gemini-wdt");  --- a/drivers/watchdog/Kconfig  +++ b/drivers/watchdog/Kconfig -@@ -111,6 +111,16 @@ config 977_WATCHDOG +@@ -118,6 +118,16 @@ config 977_WATCHDOG   	  Not sure? It's safe to say N. @@ -5113,7 +4896,7 @@   	depends on ARCH_IXP2000  --- a/drivers/watchdog/Makefile  +++ b/drivers/watchdog/Makefile -@@ -31,6 +31,7 @@ obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt. +@@ -32,6 +32,7 @@ obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.   obj-$(CONFIG_TWL4030_WATCHDOG) += twl4030_wdt.o   obj-$(CONFIG_21285_WATCHDOG) += wdt285.o   obj-$(CONFIG_977_WATCHDOG) += wdt977.o @@ -5123,13 +4906,13 @@   obj-$(CONFIG_KS8695_WATCHDOG) += ks8695_wdt.o  --- a/include/linux/usb/ehci_def.h  +++ b/include/linux/usb/ehci_def.h -@@ -91,9 +91,9 @@ struct ehci_regs { +@@ -105,9 +105,9 @@ struct ehci_regs {   	u32		frame_list;	/* points to periodic list */   	/* ASYNCLISTADDR: offset 0x18 */   	u32		async_next;	/* address of next async queue head */  -  +#ifndef CONFIG_ARCH_GEMINI - 	u32		reserved [9]; + 	u32		reserved[9];  -  +#endif   	/* CONFIGFLAG: offset 0x40 */ @@ -5137,13 +4920,14 @@   #define FLAG_CF		(1<<0)		/* true: we'll support "high speed" */  --- a/arch/arm/mm/Kconfig  +++ b/arch/arm/mm/Kconfig -@@ -774,5 +774,6 @@ config CACHE_XSC3L2 +@@ -806,6 +806,7 @@ config CACHE_XSC3L2   config ARM_L1_CACHE_SHIFT   	int  +	default 4 if CPU_FA526 - 	default 6 if ARCH_OMAP3 + 	default 6 if ARM_L1_CACHE_SHIFT_6   	default 5 +   --- a/arch/arm/lib/copy_page.S  +++ b/arch/arm/lib/copy_page.S  @@ -17,7 +17,7 @@ diff --git a/target/linux/gemini/patches/002-register_watchdog.patch b/target/linux/gemini/patches/002-register_watchdog.patch new file mode 100644 index 000000000..b41bd85f3 --- /dev/null +++ b/target/linux/gemini/patches/002-register_watchdog.patch @@ -0,0 +1,30 @@ +--- a/arch/arm/mach-gemini/board-nas4220b.c ++++ b/arch/arm/mach-gemini/board-nas4220b.c +@@ -95,6 +95,7 @@ static void __init ib4220b_init(void) + { + 	gemini_gpio_init(); + 	platform_register_uart(); ++	platform_register_watchdog(); + 	platform_register_pflash(SZ_16M, NULL, 0); + 	platform_device_register(&ib4220b_led_device); + 	platform_device_register(&ib4220b_key_device); +--- a/arch/arm/mach-gemini/board-wbd111.c ++++ b/arch/arm/mach-gemini/board-wbd111.c +@@ -126,6 +126,7 @@ static void __init wbd111_init(void) + { + 	gemini_gpio_init(); + 	platform_register_uart(); ++	platform_register_watchdog(); + 	platform_register_pflash(SZ_8M, wbd111_partitions, + 				 wbd111_num_partitions); + 	platform_device_register(&wbd111_leds_device); +--- a/arch/arm/mach-gemini/board-wbd222.c ++++ b/arch/arm/mach-gemini/board-wbd222.c +@@ -126,6 +126,7 @@ 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); diff --git a/target/linux/gemini/patches/002-wbd111_support.patch b/target/linux/gemini/patches/002-wbd111_support.patch deleted file mode 100644 index 059006d0d..000000000 --- a/target/linux/gemini/patches/002-wbd111_support.patch +++ /dev/null @@ -1,151 +0,0 @@ ---- /dev/null -+++ b/arch/arm/mach-gemini/board-wbd111.c -@@ -0,0 +1,125 @@ -+/* -+ *  Support for Wiliboard WBD-111 -+ * -+ *  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 <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 wbd111_mdio = { -+	.mdc		= 22, -+	.mdio		= 21, -+	.phy_mask	= ~(1 << 1), -+}; -+ -+static struct platform_device wbd111_phy_device = { -+	.name	= "mdio-gpio", -+	.id	= 0, -+	.dev	= { -+		.platform_data = &wbd111_mdio, -+	}, -+}; -+ -+static struct gemini_gmac_platform_data gmac_data = { -+	.bus_id[0] = "0:01", -+	.interface[0] = PHY_INTERFACE_MODE_MII, -+}; -+ -+static struct gpio_keys_button wbd111_keys[] = { -+	{ -+		.code		= KEY_SETUP, -+		.gpio		= 5, -+		.active_low	= 1, -+		.desc		= "reset", -+		.type		= EV_KEY, -+	}, -+}; -+ -+static struct gpio_keys_platform_data wbd111_keys_data = { -+	.buttons	= wbd111_keys, -+	.nbuttons	= ARRAY_SIZE(wbd111_keys), -+}; -+ -+static struct platform_device wbd111_keys_device = { -+	.name	= "gpio-keys", -+	.id	= -1, -+	.dev	= { -+		.platform_data = &wbd111_keys_data, -+	}, -+}; -+ -+static struct gpio_led wbd111_leds[] = { -+	{ -+		.name			= "L3red", -+		.gpio			= 1, -+	}, -+	{ -+		.name			= "L4green", -+		.gpio			= 2, -+	}, -+	{ -+		.name			= "L4red", -+		.gpio			= 3, -+	}, -+	{ -+		.name			= "L3green", -+		.gpio			= 5, -+	}, -+}; -+ -+static struct gpio_led_platform_data wbd111_leds_data = { -+	.num_leds	= ARRAY_SIZE(wbd111_leds), -+	.leds		= wbd111_leds, -+}; -+ -+static struct platform_device wbd111_leds_device = { -+	.name	= "leds-gpio", -+	.id	= -1, -+	.dev	= { -+		.platform_data = &wbd111_leds_data, -+	}, -+}; -+ -+static struct sys_timer wbd111_timer = { -+	.init	= gemini_timer_init, -+}; -+ -+static void __init wbd111_init(void) -+{ -+	gemini_gpio_init(); -+	platform_register_uart(); -+	platform_register_watchdog(); -+	platform_register_pflash(SZ_8M, NULL, 0); -+	platform_device_register(&wbd111_leds_device); -+	platform_device_register(&wbd111_keys_device); -+	platform_device_register(&wbd111_phy_device); -+	platform_register_ethernet(&gmac_data); -+} -+ -+MACHINE_START(WBD111, "Wiliboard WBD-111") -+	.phys_io	= 0x7fffc000, -+	.io_pg_offst	= ((0xffffc000) >> 18) & 0xfffc, -+	.boot_params	= 0x100, -+	.map_io		= gemini_map_io, -+	.init_irq	= gemini_init_irq, -+	.timer		= &wbd111_timer, -+	.init_machine	= wbd111_init, -+MACHINE_END ---- a/arch/arm/mach-gemini/Kconfig -+++ b/arch/arm/mach-gemini/Kconfig -@@ -16,6 +16,13 @@ config MACH_RUT100 - 	  Say Y here if you intend to run this kernel on a - 	  Teltonika 3G Router RUT100. -  -+config MACH_WBD111 -+	bool "Wiliboard WBD-111" -+	select GEMINI_MEM_SWAP -+	help -+	  Say Y here if you intend to run this kernel on a -+	  Wiliboard WBD-111. -+ - endmenu -  - config GEMINI_MEM_SWAP ---- a/arch/arm/mach-gemini/Makefile -+++ b/arch/arm/mach-gemini/Makefile -@@ -11,3 +11,4 @@ obj-$(CONFIG_PCI)	+= pci.o - # Board-specific support - obj-$(CONFIG_MACH_NAS4220B)	+= board-nas4220b.o - obj-$(CONFIG_MACH_RUT100)	+= board-rut1xx.o -+obj-$(CONFIG_MACH_WBD111)	+= board-wbd111.o diff --git a/target/linux/gemini/patches/003-wbd111-static-flash-map.patch b/target/linux/gemini/patches/003-wbd111-static-flash-map.patch deleted file mode 100644 index 1b9debb62..000000000 --- a/target/linux/gemini/patches/003-wbd111-static-flash-map.patch +++ /dev/null @@ -1,64 +0,0 @@ ---- a/arch/arm/mach-gemini/board-wbd111.c -+++ b/arch/arm/mach-gemini/board-wbd111.c -@@ -16,6 +16,8 @@ - #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> -@@ -102,12 +104,51 @@ static struct sys_timer wbd111_timer = { - 	.init	= gemini_timer_init, - }; -  -+#ifdef CONFIG_MTD_PARTITIONS -+static struct mtd_partition wbd111_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 wbd111_num_partitions	ARRAY_SIZE(wbd111_partitions) -+#else -+#define wbd111_partitions	NULL -+#define wbd111_num_partitions	0 -+#endif /* CONFIG_MTD_PARTITIONS */ -+ - static void __init wbd111_init(void) - { - 	gemini_gpio_init(); - 	platform_register_uart(); - 	platform_register_watchdog(); --	platform_register_pflash(SZ_8M, NULL, 0); -+	platform_register_pflash(SZ_8M, wbd111_partitions, -+				 wbd111_num_partitions); - 	platform_device_register(&wbd111_leds_device); - 	platform_device_register(&wbd111_keys_device); - 	platform_device_register(&wbd111_phy_device); diff --git a/target/linux/gemini/patches/005-gemini-add-missing-skbuff-include.patch b/target/linux/gemini/patches/005-gemini-add-missing-skbuff-include.patch index 6d0f4a246..a509c09fd 100644 --- a/target/linux/gemini/patches/005-gemini-add-missing-skbuff-include.patch +++ b/target/linux/gemini/patches/005-gemini-add-missing-skbuff-include.patch @@ -25,8 +25,8 @@   #include <linux/module.h>  +#include <linux/skbuff.h>   #include <linux/mdio-bitbang.h> - #include <linux/slab.h>   #include <linux/types.h> + #include <linux/delay.h>  --- a/drivers/net/phy/mdio-gpio.c  +++ b/drivers/net/phy/mdio-gpio.c  @@ -25,6 +25,7 @@ diff --git a/target/linux/gemini/patches/100-mtd-physmap-try-static-partitions-first.patch b/target/linux/gemini/patches/100-mtd-physmap-try-static-partitions-first.patch index 887dab0b7..2c085e1ce 100644 --- a/target/linux/gemini/patches/100-mtd-physmap-try-static-partitions-first.patch +++ b/target/linux/gemini/patches/100-mtd-physmap-try-static-partitions-first.patch @@ -1,6 +1,6 @@  --- a/drivers/mtd/maps/physmap.c  +++ b/drivers/mtd/maps/physmap.c -@@ -170,6 +170,13 @@ static int physmap_flash_probe(struct pl +@@ -173,6 +173,13 @@ static int physmap_flash_probe(struct pl   		goto err_out;   #ifdef CONFIG_MTD_PARTITIONS @@ -14,7 +14,7 @@   	err = parse_mtd_partitions(info->cmtd, part_probe_types,   				&info->parts, 0);   	if (err > 0) { -@@ -177,13 +184,6 @@ static int physmap_flash_probe(struct pl +@@ -180,13 +187,6 @@ static int physmap_flash_probe(struct pl   		info->nr_parts = err;   		return 0;   	} diff --git a/target/linux/gemini/patches/200-wbd222_support.patch b/target/linux/gemini/patches/200-wbd222_support.patch deleted file mode 100644 index 0251618c1..000000000 --- a/target/linux/gemini/patches/200-wbd222_support.patch +++ /dev/null @@ -1,196 +0,0 @@ ---- 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 | 
