mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			2202 lines
		
	
	
		
			59 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			2202 lines
		
	
	
		
			59 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/arch/arm/Kconfig
 | |
| +++ b/arch/arm/Kconfig
 | |
| @@ -1888,7 +1888,7 @@ config XIP_PHYS_ADDR
 | |
|  
 | |
|  config KEXEC
 | |
|  	bool "Kexec system call (EXPERIMENTAL)"
 | |
| -	depends on EXPERIMENTAL
 | |
| +	depends on EXPERIMENTAL && (!SMP || HOTPLUG_CPU)
 | |
|  	help
 | |
|  	  kexec is a system call that implements the ability to shutdown your
 | |
|  	  current kernel, and to start another kernel.  It is like a reboot
 | |
| --- /dev/null
 | |
| +++ b/arch/arm/include/asm/idmap.h
 | |
| @@ -0,0 +1,11 @@
 | |
| +#ifndef __ASM_IDMAP_H
 | |
| +#define __ASM_IDMAP_H
 | |
| +
 | |
| +#include <linux/compiler.h>
 | |
| +
 | |
| +/* Tag a function as requiring to be executed via an identity mapping. */
 | |
| +#define __idmap __section(.idmap.text) noinline notrace
 | |
| +
 | |
| +void setup_mm_for_reboot(void);
 | |
| +
 | |
| +#endif	/* __ASM_IDMAP_H */
 | |
| --- a/arch/arm/include/asm/mach/arch.h
 | |
| +++ b/arch/arm/include/asm/mach/arch.h
 | |
| @@ -30,10 +30,10 @@ struct machine_desc {
 | |
|  	unsigned int		video_start;	/* start of video RAM	*/
 | |
|  	unsigned int		video_end;	/* end of video RAM	*/
 | |
|  
 | |
| -	unsigned int		reserve_lp0 :1;	/* never has lp0	*/
 | |
| -	unsigned int		reserve_lp1 :1;	/* never has lp1	*/
 | |
| -	unsigned int		reserve_lp2 :1;	/* never has lp2	*/
 | |
| -	unsigned int		soft_reboot :1;	/* soft reboot		*/
 | |
| +	unsigned char		reserve_lp0 :1;	/* never has lp0	*/
 | |
| +	unsigned char		reserve_lp1 :1;	/* never has lp1	*/
 | |
| +	unsigned char		reserve_lp2 :1;	/* never has lp2	*/
 | |
| +	char			restart_mode;	/* default restart mode	*/
 | |
|  	void			(*fixup)(struct machine_desc *,
 | |
|  					 struct tag *, char **,
 | |
|  					 struct meminfo *);
 | |
| @@ -46,6 +46,7 @@ struct machine_desc {
 | |
|  #ifdef CONFIG_MULTI_IRQ_HANDLER
 | |
|  	void			(*handle_irq)(struct pt_regs *);
 | |
|  #endif
 | |
| +	void			(*restart)(char, const char *);
 | |
|  };
 | |
|  
 | |
|  /*
 | |
| --- a/arch/arm/include/asm/system.h
 | |
| +++ b/arch/arm/include/asm/system.h
 | |
| @@ -107,7 +107,7 @@ extern void __show_regs(struct pt_regs *
 | |
|  extern int cpu_architecture(void);
 | |
|  extern void cpu_init(void);
 | |
|  
 | |
| -void arm_machine_restart(char mode, const char *cmd);
 | |
| +void soft_restart(unsigned long);
 | |
|  extern void (*arm_pm_restart)(char str, const char *cmd);
 | |
|  
 | |
|  #define UDBG_UNDEFINED	(1 << 0)
 | |
| --- a/arch/arm/kernel/machine_kexec.c
 | |
| +++ b/arch/arm/kernel/machine_kexec.c
 | |
| @@ -12,12 +12,11 @@
 | |
|  #include <asm/mmu_context.h>
 | |
|  #include <asm/cacheflush.h>
 | |
|  #include <asm/mach-types.h>
 | |
| +#include <asm/system.h>
 | |
|  
 | |
|  extern const unsigned char relocate_new_kernel[];
 | |
|  extern const unsigned int relocate_new_kernel_size;
 | |
|  
 | |
| -extern void setup_mm_for_reboot(char mode);
 | |
| -
 | |
|  extern unsigned long kexec_start_address;
 | |
|  extern unsigned long kexec_indirection_page;
 | |
|  extern unsigned long kexec_mach_type;
 | |
| @@ -111,14 +110,6 @@ void machine_kexec(struct kimage *image)
 | |
|  
 | |
|  	if (kexec_reinit)
 | |
|  		kexec_reinit();
 | |
| -	local_irq_disable();
 | |
| -	local_fiq_disable();
 | |
| -	setup_mm_for_reboot(0); /* mode is not used, so just pass 0*/
 | |
| -	flush_cache_all();
 | |
| -	outer_flush_all();
 | |
| -	outer_disable();
 | |
| -	cpu_proc_fin();
 | |
| -	outer_inv_all();
 | |
| -	flush_cache_all();
 | |
| -	cpu_reset(reboot_code_buffer_phys);
 | |
| +
 | |
| +	soft_restart(reboot_code_buffer_phys);
 | |
|  }
 | |
| --- a/arch/arm/kernel/process.c
 | |
| +++ b/arch/arm/kernel/process.c
 | |
| @@ -57,7 +57,7 @@ static const char *isa_modes[] = {
 | |
|    "ARM" , "Thumb" , "Jazelle", "ThumbEE"
 | |
|  };
 | |
|  
 | |
| -extern void setup_mm_for_reboot(char mode);
 | |
| +extern void setup_mm_for_reboot(void);
 | |
|  
 | |
|  static volatile int hlt_counter;
 | |
|  
 | |
| @@ -92,40 +92,64 @@ static int __init hlt_setup(char *__unus
 | |
|  __setup("nohlt", nohlt_setup);
 | |
|  __setup("hlt", hlt_setup);
 | |
|  
 | |
| -void arm_machine_restart(char mode, const char *cmd)
 | |
| +extern void call_with_stack(void (*fn)(void *), void *arg, void *sp);
 | |
| +typedef void (*phys_reset_t)(unsigned long);
 | |
| +
 | |
| +/*
 | |
| + * A temporary stack to use for CPU reset. This is static so that we
 | |
| + * don't clobber it with the identity mapping. When running with this
 | |
| + * stack, any references to the current task *will not work* so you
 | |
| + * should really do as little as possible before jumping to your reset
 | |
| + * code.
 | |
| + */
 | |
| +#define SOFT_RESTART_STACK_WORDS	32
 | |
| +static u32 soft_restart_stack[SOFT_RESTART_STACK_WORDS];
 | |
| +
 | |
| +static void __soft_restart(void *addr)
 | |
|  {
 | |
| -	/* Disable interrupts first */
 | |
| -	local_irq_disable();
 | |
| -	local_fiq_disable();
 | |
| +	phys_reset_t phys_reset;
 | |
|  
 | |
| -	/*
 | |
| -	 * Tell the mm system that we are going to reboot -
 | |
| -	 * we may need it to insert some 1:1 mappings so that
 | |
| -	 * soft boot works.
 | |
| -	 */
 | |
| -	setup_mm_for_reboot(mode);
 | |
| +	/* Take out a flat memory mapping. */
 | |
| +	setup_mm_for_reboot();
 | |
|  
 | |
| -	/* Clean and invalidate caches */
 | |
| +	/* Clean and invalidate caches. */
 | |
|  	flush_cache_all();
 | |
|  
 | |
| -	/* Turn off caching */
 | |
| +	/* Turn off caching. */
 | |
|  	cpu_proc_fin();
 | |
|  
 | |
|  	/* Push out any further dirty data, and ensure cache is empty */
 | |
|  	flush_cache_all();
 | |
|  
 | |
| -	/*
 | |
| -	 * Now call the architecture specific reboot code.
 | |
| -	 */
 | |
| -	arch_reset(mode, cmd);
 | |
| -
 | |
| -	/*
 | |
| -	 * Whoops - the architecture was unable to reboot.
 | |
| -	 * Tell the user!
 | |
| -	 */
 | |
| -	mdelay(1000);
 | |
| -	printk("Reboot failed -- System halted\n");
 | |
| -	while (1);
 | |
| +	/* Switch to the identity mapping. */
 | |
| +	phys_reset = (phys_reset_t)(unsigned long)virt_to_phys(cpu_reset);
 | |
| +	phys_reset((unsigned long)addr);
 | |
| +
 | |
| +	/* Should never get here. */
 | |
| +	BUG();
 | |
| +}
 | |
| +
 | |
| +void soft_restart(unsigned long addr)
 | |
| +{
 | |
| +	u32 *stack = soft_restart_stack + SOFT_RESTART_STACK_WORDS;
 | |
| +
 | |
| +	/* Disable interrupts first */
 | |
| +	local_irq_disable();
 | |
| +	local_fiq_disable();
 | |
| +
 | |
| +	/* Disable the L2 if we're the last man standing. */
 | |
| +	if (num_online_cpus() == 1)
 | |
| +		outer_disable();
 | |
| +
 | |
| +	/* Change to the new stack and continue with the reset. */
 | |
| +	call_with_stack(__soft_restart, (void *)addr, (void *)stack);
 | |
| +
 | |
| +	/* Should never get here. */
 | |
| +	BUG();
 | |
| +}
 | |
| +
 | |
| +static void null_restart(char mode, const char *cmd)
 | |
| +{
 | |
|  }
 | |
|  
 | |
|  /*
 | |
| @@ -134,7 +158,7 @@ void arm_machine_restart(char mode, cons
 | |
|  void (*pm_power_off)(void);
 | |
|  EXPORT_SYMBOL(pm_power_off);
 | |
|  
 | |
| -void (*arm_pm_restart)(char str, const char *cmd) = arm_machine_restart;
 | |
| +void (*arm_pm_restart)(char str, const char *cmd) = null_restart;
 | |
|  EXPORT_SYMBOL_GPL(arm_pm_restart);
 | |
|  
 | |
|  static void do_nothing(void *unused)
 | |
| @@ -253,7 +277,15 @@ void machine_power_off(void)
 | |
|  void machine_restart(char *cmd)
 | |
|  {
 | |
|  	machine_shutdown();
 | |
| +
 | |
|  	arm_pm_restart(reboot_mode, cmd);
 | |
| +
 | |
| +	/* Give a grace period for failure to restart of 1s */
 | |
| +	mdelay(1000);
 | |
| +
 | |
| +	/* Whoops - the platform was unable to reboot. Tell the user! */
 | |
| +	printk("Reboot failed -- System halted\n");
 | |
| +	while (1);
 | |
|  }
 | |
|  
 | |
|  void __show_regs(struct pt_regs *regs)
 | |
| --- a/arch/arm/kernel/setup.c
 | |
| +++ b/arch/arm/kernel/setup.c
 | |
| @@ -896,8 +896,8 @@ void __init setup_arch(char **cmdline_p)
 | |
|  		arm_dma_zone_size = mdesc->dma_zone_size;
 | |
|  	}
 | |
|  #endif
 | |
| -	if (mdesc->soft_reboot)
 | |
| -		reboot_setup("s");
 | |
| +	if (mdesc->restart_mode)
 | |
| +		reboot_setup(&mdesc->restart_mode);
 | |
|  
 | |
|  	init_mm.start_code = (unsigned long) _text;
 | |
|  	init_mm.end_code   = (unsigned long) _etext;
 | |
| @@ -916,6 +916,9 @@ void __init setup_arch(char **cmdline_p)
 | |
|  	paging_init(mdesc);
 | |
|  	request_standard_resources(mdesc);
 | |
|  
 | |
| +	if (mdesc->restart)
 | |
| +		arm_pm_restart = mdesc->restart;
 | |
| +
 | |
|  	unflatten_device_tree();
 | |
|  
 | |
|  #ifdef CONFIG_SMP
 | |
| --- a/arch/arm/kernel/smp.c
 | |
| +++ b/arch/arm/kernel/smp.c
 | |
| @@ -558,6 +558,10 @@ static void ipi_cpu_stop(unsigned int cp
 | |
|  	local_fiq_disable();
 | |
|  	local_irq_disable();
 | |
|  
 | |
| +#ifdef CONFIG_HOTPLUG_CPU
 | |
| +	platform_cpu_kill(cpu);
 | |
| +#endif
 | |
| +
 | |
|  	while (1)
 | |
|  		cpu_relax();
 | |
|  }
 | |
| --- a/arch/arm/kernel/vmlinux.lds.S
 | |
| +++ b/arch/arm/kernel/vmlinux.lds.S
 | |
| @@ -91,6 +91,7 @@ SECTIONS
 | |
|  			SCHED_TEXT
 | |
|  			LOCK_TEXT
 | |
|  			KPROBES_TEXT
 | |
| +			IDMAP_TEXT
 | |
|  #ifdef CONFIG_MMU
 | |
|  			*(.fixup)
 | |
|  #endif
 | |
| --- a/arch/arm/lib/Makefile
 | |
| +++ b/arch/arm/lib/Makefile
 | |
| @@ -13,7 +13,8 @@ lib-y		:= backtrace.o changebit.o csumip
 | |
|  		   testchangebit.o testclearbit.o testsetbit.o        \
 | |
|  		   ashldi3.o ashrdi3.o lshrdi3.o muldi3.o             \
 | |
|  		   ucmpdi2.o lib1funcs.o div64.o                      \
 | |
| -		   io-readsb.o io-writesb.o io-readsl.o io-writesl.o
 | |
| +		   io-readsb.o io-writesb.o io-readsl.o io-writesl.o  \
 | |
| +		   call_with_stack.o
 | |
|  
 | |
|  mmu-y	:= clear_user.o copy_page.o getuser.o putuser.o
 | |
|  
 | |
| --- /dev/null
 | |
| +++ b/arch/arm/lib/call_with_stack.S
 | |
| @@ -0,0 +1,44 @@
 | |
| +/*
 | |
| + * arch/arm/lib/call_with_stack.S
 | |
| + *
 | |
| + * Copyright (C) 2011 ARM Ltd.
 | |
| + * Written by Will Deacon <will.deacon@arm.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.
 | |
| + *
 | |
| + * This program is distributed in the hope that it will be useful,
 | |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| + * GNU General Public License for more details.
 | |
| + *
 | |
| + * You should have received a copy of the GNU General Public License
 | |
| + * along with this program; if not, write to the Free Software
 | |
| + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | |
| + */
 | |
| +
 | |
| +#include <linux/linkage.h>
 | |
| +#include <asm/assembler.h>
 | |
| +
 | |
| +/*
 | |
| + * void call_with_stack(void (*fn)(void *), void *arg, void *sp)
 | |
| + *
 | |
| + * Change the stack to that pointed at by sp, then invoke fn(arg) with
 | |
| + * the new stack.
 | |
| + */
 | |
| +ENTRY(call_with_stack)
 | |
| +	str	sp, [r2, #-4]!
 | |
| +	str	lr, [r2, #-4]!
 | |
| +
 | |
| +	mov	sp, r2
 | |
| +	mov	r2, r0
 | |
| +	mov	r0, r1
 | |
| +
 | |
| +	adr	lr, BSYM(1f)
 | |
| +	mov	pc, r2
 | |
| +
 | |
| +1:	ldr	lr, [sp]
 | |
| +	ldr	sp, [sp, #4]
 | |
| +	mov	pc, lr
 | |
| +ENDPROC(call_with_stack)
 | |
| --- a/arch/arm/mach-omap2/board-2430sdp.c
 | |
| +++ b/arch/arm/mach-omap2/board-2430sdp.c
 | |
| @@ -34,7 +34,7 @@
 | |
|  #include <asm/mach/map.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <plat/usb.h>
 | |
|  #include <plat/gpmc-smc91x.h>
 | |
| @@ -264,4 +264,5 @@ MACHINE_START(OMAP_2430SDP, "OMAP2430 sd
 | |
|  	.init_irq	= omap2_init_irq,
 | |
|  	.init_machine	= omap_2430sdp_init,
 | |
|  	.timer		= &omap2_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-3430sdp.c
 | |
| +++ b/arch/arm/mach-omap2/board-3430sdp.c
 | |
| @@ -33,7 +33,7 @@
 | |
|  #include <plat/mcspi.h>
 | |
|  #include <plat/board.h>
 | |
|  #include <plat/usb.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/dma.h>
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <video/omapdss.h>
 | |
| @@ -736,4 +736,5 @@ MACHINE_START(OMAP_3430SDP, "OMAP3430 34
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= omap_3430sdp_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-3630sdp.c
 | |
| +++ b/arch/arm/mach-omap2/board-3630sdp.c
 | |
| @@ -16,7 +16,7 @@
 | |
|  #include <asm/mach-types.h>
 | |
|  #include <asm/mach/arch.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/board.h>
 | |
|  #include <plat/gpmc-smc91x.h>
 | |
|  #include <plat/usb.h>
 | |
| @@ -222,4 +222,5 @@ MACHINE_START(OMAP_3630SDP, "OMAP 3630SD
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= omap_sdp_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-4430sdp.c
 | |
| +++ b/arch/arm/mach-omap2/board-4430sdp.c
 | |
| @@ -27,13 +27,12 @@
 | |
|  #include <linux/leds_pwm.h>
 | |
|  
 | |
|  #include <mach/hardware.h>
 | |
| -#include <mach/omap4-common.h>
 | |
|  #include <asm/mach-types.h>
 | |
|  #include <asm/mach/arch.h>
 | |
|  #include <asm/mach/map.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/usb.h>
 | |
|  #include <plat/mmc.h>
 | |
|  #include <plat/omap4-keypad.h>
 | |
| @@ -845,4 +844,5 @@ MACHINE_START(OMAP_4430SDP, "OMAP4430 44
 | |
|  	.init_irq	= gic_init_irq,
 | |
|  	.init_machine	= omap_4430sdp_init,
 | |
|  	.timer		= &omap4_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-am3517crane.c
 | |
| +++ b/arch/arm/mach-omap2/board-am3517crane.c
 | |
| @@ -27,7 +27,7 @@
 | |
|  #include <asm/mach/map.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/usb.h>
 | |
|  
 | |
|  #include "mux.h"
 | |
| @@ -105,4 +105,5 @@ MACHINE_START(CRANEBOARD, "AM3517/05 CRA
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= am3517_crane_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-am3517evm.c
 | |
| +++ b/arch/arm/mach-omap2/board-am3517evm.c
 | |
| @@ -32,7 +32,7 @@
 | |
|  #include <asm/mach/map.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/usb.h>
 | |
|  #include <video/omapdss.h>
 | |
|  #include <video/omap-panel-generic-dpi.h>
 | |
| @@ -497,4 +497,5 @@ MACHINE_START(OMAP3517EVM, "OMAP3517/AM3
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= am3517_evm_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-apollon.c
 | |
| +++ b/arch/arm/mach-omap2/board-apollon.c
 | |
| @@ -37,7 +37,7 @@
 | |
|  #include <plat/led.h>
 | |
|  #include <plat/usb.h>
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/gpmc.h>
 | |
|  
 | |
|  #include "mux.h"
 | |
| @@ -357,4 +357,5 @@ MACHINE_START(OMAP_APOLLON, "OMAP24xx Ap
 | |
|  	.init_irq	= omap2_init_irq,
 | |
|  	.init_machine	= omap_apollon_init,
 | |
|  	.timer		= &omap2_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-cm-t35.c
 | |
| +++ b/arch/arm/mach-omap2/board-cm-t35.c
 | |
| @@ -37,7 +37,7 @@
 | |
|  #include <asm/mach/map.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/nand.h>
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <plat/usb.h>
 | |
| @@ -641,6 +641,7 @@ MACHINE_START(CM_T35, "Compulab CM-T35")
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= cm_t35_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
|  
 | |
|  MACHINE_START(CM_T3730, "Compulab CM-T3730")
 | |
| @@ -651,4 +652,5 @@ MACHINE_START(CM_T3730, "Compulab CM-T37
 | |
|  	.init_irq       = omap3_init_irq,
 | |
|  	.init_machine   = cm_t3730_init,
 | |
|  	.timer          = &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-cm-t3517.c
 | |
| +++ b/arch/arm/mach-omap2/board-cm-t3517.c
 | |
| @@ -39,7 +39,7 @@
 | |
|  #include <asm/mach/map.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/usb.h>
 | |
|  #include <plat/nand.h>
 | |
|  #include <plat/gpmc.h>
 | |
| @@ -306,4 +306,5 @@ MACHINE_START(CM_T3517, "Compulab CM-T35
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= cm_t3517_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-devkit8000.c
 | |
| +++ b/arch/arm/mach-omap2/board-devkit8000.c
 | |
| @@ -41,7 +41,7 @@
 | |
|  #include <asm/mach/flash.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <plat/nand.h>
 | |
|  #include <plat/usb.h>
 | |
| @@ -674,4 +674,5 @@ MACHINE_START(DEVKIT8000, "OMAP3 Devkit8
 | |
|  	.init_irq	= devkit8000_init_irq,
 | |
|  	.init_machine	= devkit8000_init,
 | |
|  	.timer		= &omap3_secure_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-h4.c
 | |
| +++ b/arch/arm/mach-omap2/board-h4.c
 | |
| @@ -34,7 +34,7 @@
 | |
|  #include <mach/gpio.h>
 | |
|  #include <plat/usb.h>
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/keypad.h>
 | |
|  #include <plat/menelaus.h>
 | |
|  #include <plat/dma.h>
 | |
| @@ -389,4 +389,5 @@ MACHINE_START(OMAP_H4, "OMAP2420 H4 boar
 | |
|  	.init_irq	= omap_h4_init_irq,
 | |
|  	.init_machine	= omap_h4_init,
 | |
|  	.timer		= &omap2_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-igep0020.c
 | |
| +++ b/arch/arm/mach-omap2/board-igep0020.c
 | |
| @@ -28,7 +28,7 @@
 | |
|  #include <asm/mach/arch.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <plat/usb.h>
 | |
|  #include <video/omapdss.h>
 | |
| @@ -679,6 +679,7 @@ MACHINE_START(IGEP0020, "IGEP v2 board")
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= igep_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
|  
 | |
|  MACHINE_START(IGEP0030, "IGEP OMAP3 module")
 | |
| @@ -689,4 +690,5 @@ MACHINE_START(IGEP0030, "IGEP OMAP3 modu
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= igep_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-ldp.c
 | |
| +++ b/arch/arm/mach-omap2/board-ldp.c
 | |
| @@ -36,7 +36,7 @@
 | |
|  #include <plat/mcspi.h>
 | |
|  #include <mach/gpio.h>
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <mach/board-zoom.h>
 | |
|  
 | |
| @@ -340,4 +340,5 @@ MACHINE_START(OMAP_LDP, "OMAP LDP board"
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= omap_ldp_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-n8x0.c
 | |
| +++ b/arch/arm/mach-omap2/board-n8x0.c
 | |
| @@ -26,7 +26,7 @@
 | |
|  #include <asm/mach-types.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/menelaus.h>
 | |
|  #include <mach/irqs.h>
 | |
|  #include <plat/mcspi.h>
 | |
| @@ -702,6 +702,7 @@ MACHINE_START(NOKIA_N800, "Nokia N800")
 | |
|  	.init_irq	= omap2_init_irq,
 | |
|  	.init_machine	= n8x0_init_machine,
 | |
|  	.timer		= &omap2_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
|  
 | |
|  MACHINE_START(NOKIA_N810, "Nokia N810")
 | |
| @@ -712,6 +713,7 @@ MACHINE_START(NOKIA_N810, "Nokia N810")
 | |
|  	.init_irq	= omap2_init_irq,
 | |
|  	.init_machine	= n8x0_init_machine,
 | |
|  	.timer		= &omap2_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
|  
 | |
|  MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX")
 | |
| @@ -722,4 +724,5 @@ MACHINE_START(NOKIA_N810_WIMAX, "Nokia N
 | |
|  	.init_irq	= omap2_init_irq,
 | |
|  	.init_machine	= n8x0_init_machine,
 | |
|  	.timer		= &omap2_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-omap3beagle.c
 | |
| +++ b/arch/arm/mach-omap2/board-omap3beagle.c
 | |
| @@ -40,7 +40,7 @@
 | |
|  #include <asm/mach/flash.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <video/omapdss.h>
 | |
|  #include <video/omap-panel-generic-dpi.h>
 | |
|  #include <plat/gpmc.h>
 | |
| @@ -564,4 +564,5 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagl
 | |
|  	.init_irq	= omap3_beagle_init_irq,
 | |
|  	.init_machine	= omap3_beagle_init,
 | |
|  	.timer		= &omap3_secure_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-omap3evm.c
 | |
| +++ b/arch/arm/mach-omap2/board-omap3evm.c
 | |
| @@ -42,7 +42,7 @@
 | |
|  
 | |
|  #include <plat/board.h>
 | |
|  #include <plat/usb.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/mcspi.h>
 | |
|  #include <video/omapdss.h>
 | |
|  #include <video/omap-panel-generic-dpi.h>
 | |
| @@ -688,4 +688,5 @@ MACHINE_START(OMAP3EVM, "OMAP3 EVM")
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= omap3_evm_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-omap3logic.c
 | |
| +++ b/arch/arm/mach-omap2/board-omap3logic.c
 | |
| @@ -40,7 +40,7 @@
 | |
|  
 | |
|  #include <plat/mux.h>
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/gpmc-smsc911x.h>
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <plat/sdrc.h>
 | |
| @@ -215,6 +215,7 @@ MACHINE_START(OMAP3_TORPEDO, "Logic OMAP
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= omap3logic_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
|  
 | |
|  MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board")
 | |
| @@ -224,4 +225,5 @@ MACHINE_START(OMAP3530_LV_SOM, "OMAP Log
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= omap3logic_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-omap3pandora.c
 | |
| +++ b/arch/arm/mach-omap2/board-omap3pandora.c
 | |
| @@ -41,7 +41,7 @@
 | |
|  #include <asm/mach/map.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <mach/hardware.h>
 | |
|  #include <plat/mcspi.h>
 | |
|  #include <plat/usb.h>
 | |
| @@ -613,4 +613,5 @@ MACHINE_START(OMAP3_PANDORA, "Pandora Ha
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= omap3pandora_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-omap3stalker.c
 | |
| +++ b/arch/arm/mach-omap2/board-omap3stalker.c
 | |
| @@ -35,7 +35,7 @@
 | |
|  #include <asm/mach/flash.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <plat/nand.h>
 | |
|  #include <plat/usb.h>
 | |
| @@ -500,4 +500,5 @@ MACHINE_START(SBC3530, "OMAP3 STALKER")
 | |
|  	.init_irq		= omap3_stalker_init_irq,
 | |
|  	.init_machine		= omap3_stalker_init,
 | |
|  	.timer			= &omap3_secure_timer,
 | |
| +	.restart		= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-omap3touchbook.c
 | |
| +++ b/arch/arm/mach-omap2/board-omap3touchbook.c
 | |
| @@ -44,7 +44,7 @@
 | |
|  #include <asm/mach/flash.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <plat/nand.h>
 | |
|  #include <plat/usb.h>
 | |
| @@ -411,4 +411,5 @@ MACHINE_START(TOUCHBOOK, "OMAP3 touchboo
 | |
|  	.init_irq	= omap3_touchbook_init_irq,
 | |
|  	.init_machine	= omap3_touchbook_init,
 | |
|  	.timer		= &omap3_secure_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-omap4panda.c
 | |
| +++ b/arch/arm/mach-omap2/board-omap4panda.c
 | |
| @@ -30,14 +30,13 @@
 | |
|  #include <linux/wl12xx.h>
 | |
|  
 | |
|  #include <mach/hardware.h>
 | |
| -#include <mach/omap4-common.h>
 | |
|  #include <asm/mach-types.h>
 | |
|  #include <asm/mach/arch.h>
 | |
|  #include <asm/mach/map.h>
 | |
|  #include <video/omapdss.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/usb.h>
 | |
|  #include <plat/mmc.h>
 | |
|  #include <video/omap-panel-generic-dpi.h>
 | |
| @@ -590,4 +589,5 @@ MACHINE_START(OMAP4_PANDA, "OMAP4 Panda
 | |
|  	.init_irq	= gic_init_irq,
 | |
|  	.init_machine	= omap4_panda_init,
 | |
|  	.timer		= &omap4_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-overo.c
 | |
| +++ b/arch/arm/mach-omap2/board-overo.c
 | |
| @@ -43,7 +43,7 @@
 | |
|  #include <asm/mach/map.h>
 | |
|  
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <video/omapdss.h>
 | |
|  #include <video/omap-panel-generic-dpi.h>
 | |
|  #include <plat/gpmc.h>
 | |
| @@ -568,4 +568,5 @@ MACHINE_START(OVERO, "Gumstix Overo")
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= overo_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-rm680.c
 | |
| +++ b/arch/arm/mach-omap2/board-rm680.c
 | |
| @@ -25,7 +25,7 @@
 | |
|  #include <plat/mmc.h>
 | |
|  #include <plat/usb.h>
 | |
|  #include <plat/gpmc.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/onenand.h>
 | |
|  
 | |
|  #include "mux.h"
 | |
| @@ -160,4 +160,5 @@ MACHINE_START(NOKIA_RM680, "Nokia RM-680
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= rm680_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-rx51-peripherals.c
 | |
| +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
 | |
| @@ -27,7 +27,7 @@
 | |
|  
 | |
|  #include <plat/mcspi.h>
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/dma.h>
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <plat/onenand.h>
 | |
| --- a/arch/arm/mach-omap2/board-rx51.c
 | |
| +++ b/arch/arm/mach-omap2/board-rx51.c
 | |
| @@ -25,7 +25,7 @@
 | |
|  
 | |
|  #include <plat/mcspi.h>
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/dma.h>
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <plat/usb.h>
 | |
| @@ -163,4 +163,5 @@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 b
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= rx51_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-ti8168evm.c
 | |
| +++ b/arch/arm/mach-omap2/board-ti8168evm.c
 | |
| @@ -22,7 +22,7 @@
 | |
|  
 | |
|  #include <plat/irqs.h>
 | |
|  #include <plat/board.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  static struct omap_board_config_kernel ti8168_evm_config[] __initdata = {
 | |
|  };
 | |
| @@ -54,4 +54,5 @@ MACHINE_START(TI8168EVM, "ti8168evm")
 | |
|  	.init_irq	= ti816x_init_irq,
 | |
|  	.timer		= &omap3_timer,
 | |
|  	.init_machine	= ti8168_evm_init,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/board-zoom-peripherals.c
 | |
| +++ b/arch/arm/mach-omap2/board-zoom-peripherals.c
 | |
| @@ -24,7 +24,7 @@
 | |
|  #include <asm/mach/arch.h>
 | |
|  #include <asm/mach/map.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/usb.h>
 | |
|  
 | |
|  #include <mach/board-zoom.h>
 | |
| --- a/arch/arm/mach-omap2/board-zoom.c
 | |
| +++ b/arch/arm/mach-omap2/board-zoom.c
 | |
| @@ -21,7 +21,7 @@
 | |
|  #include <asm/mach-types.h>
 | |
|  #include <asm/mach/arch.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/board.h>
 | |
|  #include <plat/usb.h>
 | |
|  
 | |
| @@ -140,6 +140,7 @@ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 bo
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= omap_zoom_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
|  
 | |
|  MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board")
 | |
| @@ -150,4 +151,5 @@ MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 bo
 | |
|  	.init_irq	= omap3_init_irq,
 | |
|  	.init_machine	= omap_zoom_init,
 | |
|  	.timer		= &omap3_timer,
 | |
| +	.restart	= omap_prcm_restart,
 | |
|  MACHINE_END
 | |
| --- a/arch/arm/mach-omap2/cm2xxx_3xxx.c
 | |
| +++ b/arch/arm/mach-omap2/cm2xxx_3xxx.c
 | |
| @@ -18,7 +18,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "cm.h"
 | |
|  #include "cm2xxx_3xxx.h"
 | |
| --- a/arch/arm/mach-omap2/cm44xx.c
 | |
| +++ b/arch/arm/mach-omap2/cm44xx.c
 | |
| @@ -18,7 +18,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "cm.h"
 | |
|  #include "cm1_44xx.h"
 | |
| --- a/arch/arm/mach-omap2/cminst44xx.c
 | |
| +++ b/arch/arm/mach-omap2/cminst44xx.c
 | |
| @@ -20,7 +20,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "cm.h"
 | |
|  #include "cm1_44xx.h"
 | |
| --- a/arch/arm/mach-omap2/common.c
 | |
| +++ b/arch/arm/mach-omap2/common.c
 | |
| @@ -17,7 +17,7 @@
 | |
|  #include <linux/clk.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/board.h>
 | |
|  #include <plat/mux.h>
 | |
|  
 | |
| --- /dev/null
 | |
| +++ b/arch/arm/mach-omap2/common.h
 | |
| @@ -0,0 +1,186 @@
 | |
| +/*
 | |
| + * Header for code common to all OMAP2+ machines.
 | |
| + *
 | |
| + * 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.
 | |
| + *
 | |
| + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | |
| + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 | |
| + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
 | |
| + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 | |
| + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | |
| + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 | |
| + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | |
| + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | |
| + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 | |
| + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
| + *
 | |
| + * You should have received a copy of the  GNU General Public License along
 | |
| + * with this program; if not, write  to the Free Software Foundation, Inc.,
 | |
| + * 675 Mass Ave, Cambridge, MA 02139, USA.
 | |
| + */
 | |
| +
 | |
| +#ifndef __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H
 | |
| +#define __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H
 | |
| +
 | |
| +#include <linux/delay.h>
 | |
| +#include <plat/common.h>
 | |
| +
 | |
| +#ifdef CONFIG_SOC_OMAP2420
 | |
| +extern void omap242x_map_common_io(void);
 | |
| +#else
 | |
| +static inline void omap242x_map_common_io(void)
 | |
| +{
 | |
| +}
 | |
| +#endif
 | |
| +
 | |
| +#ifdef CONFIG_SOC_OMAP2430
 | |
| +extern void omap243x_map_common_io(void);
 | |
| +#else
 | |
| +static inline void omap243x_map_common_io(void)
 | |
| +{
 | |
| +}
 | |
| +#endif
 | |
| +
 | |
| +#ifdef CONFIG_ARCH_OMAP3
 | |
| +extern void omap34xx_map_common_io(void);
 | |
| +#else
 | |
| +static inline void omap34xx_map_common_io(void)
 | |
| +{
 | |
| +}
 | |
| +#endif
 | |
| +
 | |
| +#ifdef CONFIG_SOC_OMAPTI816X
 | |
| +extern void omapti816x_map_common_io(void);
 | |
| +#else
 | |
| +static inline void omapti816x_map_common_io(void)
 | |
| +{
 | |
| +}
 | |
| +#endif
 | |
| +
 | |
| +#ifdef CONFIG_ARCH_OMAP4
 | |
| +extern void omap44xx_map_common_io(void);
 | |
| +#else
 | |
| +static inline void omap44xx_map_common_io(void)
 | |
| +{
 | |
| +}
 | |
| +#endif
 | |
| +
 | |
| +extern void omap2_init_common_infrastructure(void);
 | |
| +
 | |
| +extern struct sys_timer omap2_timer;
 | |
| +extern struct sys_timer omap3_timer;
 | |
| +extern struct sys_timer omap3_secure_timer;
 | |
| +extern struct sys_timer omap4_timer;
 | |
| +
 | |
| +void omap2420_init_early(void);
 | |
| +void omap2430_init_early(void);
 | |
| +void omap3430_init_early(void);
 | |
| +void omap35xx_init_early(void);
 | |
| +void omap3630_init_early(void);
 | |
| +void omap3_init_early(void);	/* Do not use this one */
 | |
| +void am35xx_init_early(void);
 | |
| +void ti816x_init_early(void);
 | |
| +void omap4430_init_early(void);
 | |
| +void omap_prcm_restart(char, const char *);
 | |
| +
 | |
| +/*
 | |
| + * IO bases for various OMAP processors
 | |
| + * Except the tap base, rest all the io bases
 | |
| + * listed are physical addresses.
 | |
| + */
 | |
| +struct omap_globals {
 | |
| +	u32		class;		/* OMAP class to detect */
 | |
| +	void __iomem	*tap;		/* Control module ID code */
 | |
| +	void __iomem	*sdrc;           /* SDRAM Controller */
 | |
| +	void __iomem	*sms;            /* SDRAM Memory Scheduler */
 | |
| +	void __iomem	*ctrl;           /* System Control Module */
 | |
| +	void __iomem	*ctrl_pad;	/* PAD Control Module */
 | |
| +	void __iomem	*prm;            /* Power and Reset Management */
 | |
| +	void __iomem	*cm;             /* Clock Management */
 | |
| +	void __iomem	*cm2;
 | |
| +};
 | |
| +
 | |
| +void omap2_set_globals_242x(void);
 | |
| +void omap2_set_globals_243x(void);
 | |
| +void omap2_set_globals_3xxx(void);
 | |
| +void omap2_set_globals_443x(void);
 | |
| +void omap2_set_globals_ti816x(void);
 | |
| +
 | |
| +/* These get called from omap2_set_globals_xxxx(), do not call these */
 | |
| +void omap2_set_globals_tap(struct omap_globals *);
 | |
| +void omap2_set_globals_sdrc(struct omap_globals *);
 | |
| +void omap2_set_globals_control(struct omap_globals *);
 | |
| +void omap2_set_globals_prcm(struct omap_globals *);
 | |
| +
 | |
| +void omap242x_map_io(void);
 | |
| +void omap243x_map_io(void);
 | |
| +void omap3_map_io(void);
 | |
| +void omap4_map_io(void);
 | |
| +
 | |
| +/**
 | |
| + * omap_test_timeout - busy-loop, testing a condition
 | |
| + * @cond: condition to test until it evaluates to true
 | |
| + * @timeout: maximum number of microseconds in the timeout
 | |
| + * @index: loop index (integer)
 | |
| + *
 | |
| + * Loop waiting for @cond to become true or until at least @timeout
 | |
| + * microseconds have passed.  To use, define some integer @index in the
 | |
| + * calling code.  After running, if @index == @timeout, then the loop has
 | |
| + * timed out.
 | |
| + */
 | |
| +#define omap_test_timeout(cond, timeout, index)			\
 | |
| +({								\
 | |
| +	for (index = 0; index < timeout; index++) {		\
 | |
| +		if (cond)					\
 | |
| +			break;					\
 | |
| +		udelay(1);					\
 | |
| +	}							\
 | |
| +})
 | |
| +
 | |
| +extern struct device *omap2_get_mpuss_device(void);
 | |
| +extern struct device *omap2_get_iva_device(void);
 | |
| +extern struct device *omap2_get_l3_device(void);
 | |
| +extern struct device *omap4_get_dsp_device(void);
 | |
| +
 | |
| +void omap2_init_irq(void);
 | |
| +void omap3_init_irq(void);
 | |
| +void ti816x_init_irq(void);
 | |
| +extern int omap_irq_pending(void);
 | |
| +void omap_intc_save_context(void);
 | |
| +void omap_intc_restore_context(void);
 | |
| +void omap3_intc_suspend(void);
 | |
| +void omap3_intc_prepare_idle(void);
 | |
| +void omap3_intc_resume_idle(void);
 | |
| +
 | |
| +/*
 | |
| + * wfi used in low power code. Directly opcode is used instead
 | |
| + * of instruction to avoid mulit-omap build break
 | |
| + */
 | |
| +#ifdef CONFIG_THUMB2_KERNEL
 | |
| +#define do_wfi() __asm__ __volatile__ ("wfi" : : : "memory")
 | |
| +#else
 | |
| +#define do_wfi()			\
 | |
| +		__asm__ __volatile__ (".word	0xe320f003" : : : "memory")
 | |
| +#endif
 | |
| +
 | |
| +#ifdef CONFIG_CACHE_L2X0
 | |
| +extern void __iomem *l2cache_base;
 | |
| +#endif
 | |
| +
 | |
| +extern void __iomem *gic_dist_base_addr;
 | |
| +
 | |
| +extern void __init gic_init_irq(void);
 | |
| +extern void omap_smc1(u32 fn, u32 arg);
 | |
| +
 | |
| +#ifdef CONFIG_SMP
 | |
| +/* Needed for secondary core boot */
 | |
| +extern void omap_secondary_startup(void);
 | |
| +extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask);
 | |
| +extern void omap_auxcoreboot_addr(u32 cpu_addr);
 | |
| +extern u32 omap_read_auxcoreboot0(void);
 | |
| +#endif
 | |
| +
 | |
| +#endif /* __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H */
 | |
| --- a/arch/arm/mach-omap2/control.c
 | |
| +++ b/arch/arm/mach-omap2/control.c
 | |
| @@ -15,7 +15,7 @@
 | |
|  #include <linux/kernel.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/sdrc.h>
 | |
|  
 | |
|  #include "cm-regbits-34xx.h"
 | |
| --- a/arch/arm/mach-omap2/i2c.c
 | |
| +++ b/arch/arm/mach-omap2/i2c.c
 | |
| @@ -21,7 +21,7 @@
 | |
|  
 | |
|  #include <plat/cpu.h>
 | |
|  #include <plat/i2c.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/omap_hwmod.h>
 | |
|  
 | |
|  #include "mux.h"
 | |
| --- a/arch/arm/mach-omap2/id.c
 | |
| +++ b/arch/arm/mach-omap2/id.c
 | |
| @@ -21,7 +21,7 @@
 | |
|  
 | |
|  #include <asm/cputype.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/cpu.h>
 | |
|  
 | |
|  #include <mach/id.h>
 | |
| --- a/arch/arm/mach-omap2/include/mach/omap4-common.h
 | |
| +++ /dev/null
 | |
| @@ -1,43 +0,0 @@
 | |
| -/*
 | |
| - * omap4-common.h: OMAP4 specific common header file
 | |
| - *
 | |
| - * Copyright (C) 2010 Texas Instruments, Inc.
 | |
| - *
 | |
| - * Author:
 | |
| - *	Santosh Shilimkar <santosh.shilimkar@ti.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.
 | |
| - */
 | |
| -#ifndef OMAP_ARCH_OMAP4_COMMON_H
 | |
| -#define OMAP_ARCH_OMAP4_COMMON_H
 | |
| -
 | |
| -/*
 | |
| - * wfi used in low power code. Directly opcode is used instead
 | |
| - * of instruction to avoid mulit-omap build break
 | |
| - */
 | |
| -#ifdef CONFIG_THUMB2_KERNEL
 | |
| -#define do_wfi() __asm__ __volatile__ ("wfi" : : : "memory")
 | |
| -#else
 | |
| -#define do_wfi()			\
 | |
| -		__asm__ __volatile__ (".word	0xe320f003" : : : "memory")
 | |
| -#endif
 | |
| -
 | |
| -#ifdef CONFIG_CACHE_L2X0
 | |
| -extern void __iomem *l2cache_base;
 | |
| -#endif
 | |
| -
 | |
| -extern void __iomem *gic_dist_base_addr;
 | |
| -
 | |
| -extern void __init gic_init_irq(void);
 | |
| -extern void omap_smc1(u32 fn, u32 arg);
 | |
| -
 | |
| -#ifdef CONFIG_SMP
 | |
| -/* Needed for secondary core boot */
 | |
| -extern void omap_secondary_startup(void);
 | |
| -extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask);
 | |
| -extern void omap_auxcoreboot_addr(u32 cpu_addr);
 | |
| -extern u32 omap_read_auxcoreboot0(void);
 | |
| -#endif
 | |
| -#endif
 | |
| --- a/arch/arm/mach-omap2/omap-hotplug.c
 | |
| +++ b/arch/arm/mach-omap2/omap-hotplug.c
 | |
| @@ -19,7 +19,8 @@
 | |
|  #include <linux/smp.h>
 | |
|  
 | |
|  #include <asm/cacheflush.h>
 | |
| -#include <mach/omap4-common.h>
 | |
| +
 | |
| +#include "common.h"
 | |
|  
 | |
|  int platform_cpu_kill(unsigned int cpu)
 | |
|  {
 | |
| --- a/arch/arm/mach-omap2/omap-smp.c
 | |
| +++ b/arch/arm/mach-omap2/omap-smp.c
 | |
| @@ -24,7 +24,8 @@
 | |
|  #include <asm/hardware/gic.h>
 | |
|  #include <asm/smp_scu.h>
 | |
|  #include <mach/hardware.h>
 | |
| -#include <mach/omap4-common.h>
 | |
| +
 | |
| +#include "common.h"
 | |
|  
 | |
|  /* SCU base address */
 | |
|  static void __iomem *scu_base;
 | |
| --- a/arch/arm/mach-omap2/omap4-common.c
 | |
| +++ b/arch/arm/mach-omap2/omap4-common.c
 | |
| @@ -22,7 +22,8 @@
 | |
|  #include <plat/irqs.h>
 | |
|  
 | |
|  #include <mach/hardware.h>
 | |
| -#include <mach/omap4-common.h>
 | |
| +
 | |
| +#include "common.h"
 | |
|  
 | |
|  #ifdef CONFIG_CACHE_L2X0
 | |
|  void __iomem *l2cache_base;
 | |
| --- a/arch/arm/mach-omap2/omap_hwmod.c
 | |
| +++ b/arch/arm/mach-omap2/omap_hwmod.c
 | |
| @@ -137,7 +137,7 @@
 | |
|  #include <linux/mutex.h>
 | |
|  #include <linux/spinlock.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/cpu.h>
 | |
|  #include "clockdomain.h"
 | |
|  #include "powerdomain.h"
 | |
| --- a/arch/arm/mach-omap2/pm.c
 | |
| +++ b/arch/arm/mach-omap2/pm.c
 | |
| @@ -17,7 +17,7 @@
 | |
|  
 | |
|  #include <plat/omap-pm.h>
 | |
|  #include <plat/omap_device.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "voltage.h"
 | |
|  #include "powerdomain.h"
 | |
| --- a/arch/arm/mach-omap2/pm24xx.c
 | |
| +++ b/arch/arm/mach-omap2/pm24xx.c
 | |
| @@ -42,6 +42,7 @@
 | |
|  #include <plat/dma.h>
 | |
|  #include <plat/board.h>
 | |
|  
 | |
| +#include "common.h"
 | |
|  #include "prm2xxx_3xxx.h"
 | |
|  #include "prm-regbits-24xx.h"
 | |
|  #include "cm2xxx_3xxx.h"
 | |
| --- a/arch/arm/mach-omap2/pm34xx.c
 | |
| +++ b/arch/arm/mach-omap2/pm34xx.c
 | |
| @@ -42,6 +42,7 @@
 | |
|  #include <plat/gpmc.h>
 | |
|  #include <plat/dma.h>
 | |
|  
 | |
| +#include "common.h"
 | |
|  #include "cm2xxx_3xxx.h"
 | |
|  #include "cm-regbits-34xx.h"
 | |
|  #include "prm-regbits-34xx.h"
 | |
| --- a/arch/arm/mach-omap2/pm44xx.c
 | |
| +++ b/arch/arm/mach-omap2/pm44xx.c
 | |
| @@ -16,8 +16,8 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/slab.h>
 | |
|  
 | |
| +#include "common.h"
 | |
|  #include "powerdomain.h"
 | |
| -#include <mach/omap4-common.h>
 | |
|  
 | |
|  struct power_state {
 | |
|  	struct powerdomain *pwrdm;
 | |
| --- a/arch/arm/mach-omap2/prcm.c
 | |
| +++ b/arch/arm/mach-omap2/prcm.c
 | |
| @@ -24,8 +24,7 @@
 | |
|  #include <linux/io.h>
 | |
|  #include <linux/delay.h>
 | |
|  
 | |
| -#include <mach/system.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/prcm.h>
 | |
|  #include <plat/irqs.h>
 | |
|  
 | |
| @@ -58,7 +57,7 @@ u32 omap_prcm_get_reset_sources(void)
 | |
|  EXPORT_SYMBOL(omap_prcm_get_reset_sources);
 | |
|  
 | |
|  /* Resets clock rates and reboots the system. Only called from system.h */
 | |
| -static void omap_prcm_arch_reset(char mode, const char *cmd)
 | |
| +void omap_prcm_restart(char mode, const char *cmd)
 | |
|  {
 | |
|  	s16 prcm_offs = 0;
 | |
|  
 | |
| @@ -109,8 +108,6 @@ static void omap_prcm_arch_reset(char mo
 | |
|  	omap2_prm_read_mod_reg(prcm_offs, OMAP2_RM_RSTCTRL); /* OCP barrier */
 | |
|  }
 | |
|  
 | |
| -void (*arch_reset)(char, const char *) = omap_prcm_arch_reset;
 | |
| -
 | |
|  /**
 | |
|   * omap2_cm_wait_idlest - wait for IDLEST bit to indicate module readiness
 | |
|   * @reg: physical address of module IDLEST register
 | |
| --- a/arch/arm/mach-omap2/prcm_mpu44xx.c
 | |
| +++ b/arch/arm/mach-omap2/prcm_mpu44xx.c
 | |
| @@ -15,7 +15,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "prcm_mpu44xx.h"
 | |
|  #include "cm-regbits-44xx.h"
 | |
| --- a/arch/arm/mach-omap2/prm2xxx_3xxx.c
 | |
| +++ b/arch/arm/mach-omap2/prm2xxx_3xxx.c
 | |
| @@ -16,7 +16,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/cpu.h>
 | |
|  #include <plat/prcm.h>
 | |
|  
 | |
| --- a/arch/arm/mach-omap2/prm44xx.c
 | |
| +++ b/arch/arm/mach-omap2/prm44xx.c
 | |
| @@ -17,7 +17,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/cpu.h>
 | |
|  #include <plat/prcm.h>
 | |
|  
 | |
| --- a/arch/arm/mach-omap2/prminst44xx.c
 | |
| +++ b/arch/arm/mach-omap2/prminst44xx.c
 | |
| @@ -16,7 +16,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "prm44xx.h"
 | |
|  #include "prminst44xx.h"
 | |
| --- a/arch/arm/mach-omap2/sdram-nokia.c
 | |
| +++ b/arch/arm/mach-omap2/sdram-nokia.c
 | |
| @@ -18,7 +18,7 @@
 | |
|  #include <linux/io.h>
 | |
|  
 | |
|  #include <plat/io.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/clock.h>
 | |
|  #include <plat/sdrc.h>
 | |
|  
 | |
| --- a/arch/arm/mach-omap2/sdrc.c
 | |
| +++ b/arch/arm/mach-omap2/sdrc.c
 | |
| @@ -23,7 +23,7 @@
 | |
|  #include <linux/clk.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/clock.h>
 | |
|  #include <plat/sram.h>
 | |
|  
 | |
| --- a/arch/arm/mach-omap2/sdrc2xxx.c
 | |
| +++ b/arch/arm/mach-omap2/sdrc2xxx.c
 | |
| @@ -24,7 +24,7 @@
 | |
|  #include <linux/clk.h>
 | |
|  #include <linux/io.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/clock.h>
 | |
|  #include <plat/sram.h>
 | |
|  
 | |
| --- a/arch/arm/mach-omap2/serial.c
 | |
| +++ b/arch/arm/mach-omap2/serial.c
 | |
| @@ -33,7 +33,7 @@
 | |
|  #include <plat/omap-serial.h>
 | |
|  #endif
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/board.h>
 | |
|  #include <plat/clock.h>
 | |
|  #include <plat/dma.h>
 | |
| --- a/arch/arm/mach-omap2/smartreflex.c
 | |
| +++ b/arch/arm/mach-omap2/smartreflex.c
 | |
| @@ -25,7 +25,7 @@
 | |
|  #include <linux/slab.h>
 | |
|  #include <linux/pm_runtime.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "pm.h"
 | |
|  #include "smartreflex.h"
 | |
| --- a/arch/arm/mach-omap2/timer.c
 | |
| +++ b/arch/arm/mach-omap2/timer.c
 | |
| @@ -40,7 +40,7 @@
 | |
|  #include <plat/dmtimer.h>
 | |
|  #include <asm/localtimer.h>
 | |
|  #include <asm/sched_clock.h>
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/omap_hwmod.h>
 | |
|  
 | |
|  /* Parent clocks, eventually these will come from the clock framework */
 | |
| --- a/arch/arm/mach-omap2/vc3xxx_data.c
 | |
| +++ b/arch/arm/mach-omap2/vc3xxx_data.c
 | |
| @@ -18,7 +18,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/init.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "prm-regbits-34xx.h"
 | |
|  #include "voltage.h"
 | |
| --- a/arch/arm/mach-omap2/vc44xx_data.c
 | |
| +++ b/arch/arm/mach-omap2/vc44xx_data.c
 | |
| @@ -18,7 +18,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/init.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "prm44xx.h"
 | |
|  #include "prm-regbits-44xx.h"
 | |
| --- a/arch/arm/mach-omap2/voltage.c
 | |
| +++ b/arch/arm/mach-omap2/voltage.c
 | |
| @@ -26,7 +26,7 @@
 | |
|  #include <linux/debugfs.h>
 | |
|  #include <linux/slab.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "prm-regbits-34xx.h"
 | |
|  #include "prm-regbits-44xx.h"
 | |
| --- a/arch/arm/mach-omap2/voltagedomains3xxx_data.c
 | |
| +++ b/arch/arm/mach-omap2/voltagedomains3xxx_data.c
 | |
| @@ -18,7 +18,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/init.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  #include <plat/cpu.h>
 | |
|  
 | |
|  #include "prm-regbits-34xx.h"
 | |
| --- a/arch/arm/mach-omap2/voltagedomains44xx_data.c
 | |
| +++ b/arch/arm/mach-omap2/voltagedomains44xx_data.c
 | |
| @@ -21,7 +21,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/init.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "prm-regbits-44xx.h"
 | |
|  #include "prm44xx.h"
 | |
| --- a/arch/arm/mach-omap2/vp3xxx_data.c
 | |
| +++ b/arch/arm/mach-omap2/vp3xxx_data.c
 | |
| @@ -19,7 +19,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/init.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "prm-regbits-34xx.h"
 | |
|  #include "voltage.h"
 | |
| --- a/arch/arm/mach-omap2/vp44xx_data.c
 | |
| +++ b/arch/arm/mach-omap2/vp44xx_data.c
 | |
| @@ -19,7 +19,7 @@
 | |
|  #include <linux/err.h>
 | |
|  #include <linux/init.h>
 | |
|  
 | |
| -#include <plat/common.h>
 | |
| +#include "common.h"
 | |
|  
 | |
|  #include "prm44xx.h"
 | |
|  #include "prm-regbits-44xx.h"
 | |
| --- a/arch/arm/mm/idmap.c
 | |
| +++ b/arch/arm/mm/idmap.c
 | |
| @@ -1,8 +1,12 @@
 | |
|  #include <linux/kernel.h>
 | |
|  
 | |
|  #include <asm/cputype.h>
 | |
| +#include <asm/idmap.h>
 | |
|  #include <asm/pgalloc.h>
 | |
|  #include <asm/pgtable.h>
 | |
| +#include <asm/sections.h>
 | |
| +
 | |
| +pgd_t *idmap_pgd;
 | |
|  
 | |
|  static void idmap_add_pmd(pud_t *pud, unsigned long addr, unsigned long end,
 | |
|  	unsigned long prot)
 | |
| @@ -73,18 +77,45 @@ void identity_mapping_del(pgd_t *pgd, un
 | |
|  }
 | |
|  #endif
 | |
|  
 | |
| +extern char  __idmap_text_start[], __idmap_text_end[];
 | |
| +
 | |
| +static int __init init_static_idmap(void)
 | |
| +{
 | |
| +	phys_addr_t idmap_start, idmap_end;
 | |
| +
 | |
| +	idmap_pgd = pgd_alloc(&init_mm);
 | |
| +	if (!idmap_pgd)
 | |
| +		return -ENOMEM;
 | |
| +
 | |
| +	/* Align the idmap.text section pointers to PMD_SIZE. */
 | |
| +	idmap_start = (phys_addr_t)__idmap_text_start & PMD_MASK;
 | |
| +	idmap_end = PTR_ALIGN((phys_addr_t)__idmap_text_end, PMD_SIZE);
 | |
| +
 | |
| +	/* Add an identity mapping for the physical address of the section. */
 | |
| +	idmap_start = virt_to_phys((void *)idmap_start);
 | |
| +	idmap_end = virt_to_phys((void *)idmap_end);
 | |
| +
 | |
| +	pr_info("Setting up static identity map for 0x%llx - 0x%llx\n",
 | |
| +		(long long)idmap_start, (long long)idmap_end);
 | |
| +	identity_mapping_add(idmap_pgd, idmap_start, idmap_end);
 | |
| +
 | |
| +	return 0;
 | |
| +}
 | |
| +arch_initcall(init_static_idmap);
 | |
| +
 | |
|  /*
 | |
| - * In order to soft-boot, we need to insert a 1:1 mapping in place of
 | |
| - * the user-mode pages.  This will then ensure that we have predictable
 | |
| - * results when turning the mmu off
 | |
| + * In order to soft-boot, we need to switch to a 1:1 mapping for the
 | |
| + * cpu_reset functions. This will then ensure that we have predictable
 | |
| + * results when turning off the mmu.
 | |
|   */
 | |
| -void setup_mm_for_reboot(char mode)
 | |
| +void setup_mm_for_reboot(void)
 | |
|  {
 | |
| -	/*
 | |
| -	 * We need to access to user-mode page tables here. For kernel threads
 | |
| -	 * we don't have any user-mode mappings so we use the context that we
 | |
| -	 * "borrowed".
 | |
| -	 */
 | |
| -	identity_mapping_add(current->active_mm->pgd, 0, TASK_SIZE);
 | |
| +	/* Clean and invalidate L1. */
 | |
| +	flush_cache_all();
 | |
| +
 | |
| +	/* Switch exclusively to kernel mappings. */
 | |
| +	cpu_switch_mm(idmap_pgd, &init_mm);
 | |
| +
 | |
| +	/* Flush the TLB. */
 | |
|  	local_flush_tlb_all();
 | |
|  }
 | |
| --- a/arch/arm/mm/nommu.c
 | |
| +++ b/arch/arm/mm/nommu.c
 | |
| @@ -43,7 +43,7 @@ void __init paging_init(struct machine_d
 | |
|  /*
 | |
|   * We don't need to do anything here for nommu machines.
 | |
|   */
 | |
| -void setup_mm_for_reboot(char mode)
 | |
| +void setup_mm_for_reboot(void)
 | |
|  {
 | |
|  }
 | |
|  
 | |
| --- a/arch/arm/mm/proc-arm1020.S
 | |
| +++ b/arch/arm/mm/proc-arm1020.S
 | |
| @@ -95,6 +95,7 @@ ENTRY(cpu_arm1020_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm1020_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -107,6 +108,8 @@ ENTRY(cpu_arm1020_reset)
 | |
|  	bic	ip, ip, #0x1100 		@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_arm1020_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_arm1020_do_idle()
 | |
| --- a/arch/arm/mm/proc-arm1020e.S
 | |
| +++ b/arch/arm/mm/proc-arm1020e.S
 | |
| @@ -95,6 +95,7 @@ ENTRY(cpu_arm1020e_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm1020e_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -107,6 +108,8 @@ ENTRY(cpu_arm1020e_reset)
 | |
|  	bic	ip, ip, #0x1100 		@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_arm1020e_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_arm1020e_do_idle()
 | |
| --- a/arch/arm/mm/proc-arm1022.S
 | |
| +++ b/arch/arm/mm/proc-arm1022.S
 | |
| @@ -84,6 +84,7 @@ ENTRY(cpu_arm1022_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm1022_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -96,6 +97,8 @@ ENTRY(cpu_arm1022_reset)
 | |
|  	bic	ip, ip, #0x1100 		@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_arm1022_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_arm1022_do_idle()
 | |
| --- a/arch/arm/mm/proc-arm1026.S
 | |
| +++ b/arch/arm/mm/proc-arm1026.S
 | |
| @@ -84,6 +84,7 @@ ENTRY(cpu_arm1026_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm1026_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -96,6 +97,8 @@ ENTRY(cpu_arm1026_reset)
 | |
|  	bic	ip, ip, #0x1100 		@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_arm1026_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_arm1026_do_idle()
 | |
| --- a/arch/arm/mm/proc-arm6_7.S
 | |
| +++ b/arch/arm/mm/proc-arm6_7.S
 | |
| @@ -225,6 +225,7 @@ ENTRY(cpu_arm7_set_pte_ext)
 | |
|   * Params  : r0 = address to jump to
 | |
|   * Notes   : This sets up everything for a reset
 | |
|   */
 | |
| +		.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm6_reset)
 | |
|  ENTRY(cpu_arm7_reset)
 | |
|  		mov	r1, #0
 | |
| @@ -235,6 +236,9 @@ ENTRY(cpu_arm7_reset)
 | |
|  		mov	r1, #0x30
 | |
|  		mcr	p15, 0, r1, c1, c0, 0		@ turn off MMU etc
 | |
|  		mov	pc, r0
 | |
| +ENDPROC(cpu_arm6_reset)
 | |
| +ENDPROC(cpu_arm7_reset)
 | |
| +		.popsection
 | |
|  
 | |
|  		__CPUINIT
 | |
|  
 | |
| --- a/arch/arm/mm/proc-arm720.S
 | |
| +++ b/arch/arm/mm/proc-arm720.S
 | |
| @@ -101,6 +101,7 @@ ENTRY(cpu_arm720_set_pte_ext)
 | |
|   * Params  : r0 = address to jump to
 | |
|   * Notes   : This sets up everything for a reset
 | |
|   */
 | |
| +		.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm720_reset)
 | |
|  		mov	ip, #0
 | |
|  		mcr	p15, 0, ip, c7, c7, 0		@ invalidate cache
 | |
| @@ -112,6 +113,8 @@ ENTRY(cpu_arm720_reset)
 | |
|  		bic	ip, ip, #0x2100			@ ..v....s........
 | |
|  		mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  		mov	pc, r0
 | |
| +ENDPROC(cpu_arm720_reset)
 | |
| +		.popsection
 | |
|  
 | |
|  	__CPUINIT
 | |
|  
 | |
| --- a/arch/arm/mm/proc-arm740.S
 | |
| +++ b/arch/arm/mm/proc-arm740.S
 | |
| @@ -49,6 +49,7 @@ ENTRY(cpu_arm740_proc_fin)
 | |
|   * Params  : r0 = address to jump to
 | |
|   * Notes   : This sets up everything for a reset
 | |
|   */
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm740_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c0, 0		@ invalidate cache
 | |
| @@ -56,6 +57,8 @@ ENTRY(cpu_arm740_reset)
 | |
|  	bic	ip, ip, #0x0000000c		@ ............wc..
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_arm740_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  	__CPUINIT
 | |
|  
 | |
| --- a/arch/arm/mm/proc-arm7tdmi.S
 | |
| +++ b/arch/arm/mm/proc-arm7tdmi.S
 | |
| @@ -45,8 +45,11 @@ ENTRY(cpu_arm7tdmi_proc_fin)
 | |
|   * Params  : loc(r0)	address to jump to
 | |
|   * Purpose : Sets up everything for a reset and jump to the location for soft reset.
 | |
|   */
 | |
| +		.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm7tdmi_reset)
 | |
|  		mov	pc, r0
 | |
| +ENDPROC(cpu_arm7tdmi_reset)
 | |
| +		.popsection
 | |
|  
 | |
|  		__CPUINIT
 | |
|  
 | |
| --- a/arch/arm/mm/proc-arm920.S
 | |
| +++ b/arch/arm/mm/proc-arm920.S
 | |
| @@ -85,6 +85,7 @@ ENTRY(cpu_arm920_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm920_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -97,6 +98,8 @@ ENTRY(cpu_arm920_reset)
 | |
|  	bic	ip, ip, #0x1100			@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_arm920_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_arm920_do_idle()
 | |
| --- a/arch/arm/mm/proc-arm922.S
 | |
| +++ b/arch/arm/mm/proc-arm922.S
 | |
| @@ -87,6 +87,7 @@ ENTRY(cpu_arm922_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm922_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -99,6 +100,8 @@ ENTRY(cpu_arm922_reset)
 | |
|  	bic	ip, ip, #0x1100			@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_arm922_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_arm922_do_idle()
 | |
| --- a/arch/arm/mm/proc-arm925.S
 | |
| +++ b/arch/arm/mm/proc-arm925.S
 | |
| @@ -108,6 +108,7 @@ ENTRY(cpu_arm925_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm925_reset)
 | |
|  	/* Send software reset to MPU and DSP */
 | |
|  	mov	ip, #0xff000000
 | |
| @@ -115,6 +116,8 @@ ENTRY(cpu_arm925_reset)
 | |
|  	orr	ip, ip, #0x0000ce00
 | |
|  	mov	r4, #1
 | |
|  	strh	r4, [ip, #0x10]
 | |
| +ENDPROC(cpu_arm925_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| --- a/arch/arm/mm/proc-arm926.S
 | |
| +++ b/arch/arm/mm/proc-arm926.S
 | |
| @@ -77,6 +77,7 @@ ENTRY(cpu_arm926_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm926_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -89,6 +90,8 @@ ENTRY(cpu_arm926_reset)
 | |
|  	bic	ip, ip, #0x1100			@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_arm926_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_arm926_do_idle()
 | |
| --- a/arch/arm/mm/proc-arm940.S
 | |
| +++ b/arch/arm/mm/proc-arm940.S
 | |
| @@ -48,6 +48,7 @@ ENTRY(cpu_arm940_proc_fin)
 | |
|   * Params  : r0 = address to jump to
 | |
|   * Notes   : This sets up everything for a reset
 | |
|   */
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm940_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c5, 0		@ flush I cache
 | |
| @@ -58,6 +59,8 @@ ENTRY(cpu_arm940_reset)
 | |
|  	bic	ip, ip, #0x00001000		@ i-cache
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_arm940_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_arm940_do_idle()
 | |
| --- a/arch/arm/mm/proc-arm946.S
 | |
| +++ b/arch/arm/mm/proc-arm946.S
 | |
| @@ -55,6 +55,7 @@ ENTRY(cpu_arm946_proc_fin)
 | |
|   * Params  : r0 = address to jump to
 | |
|   * Notes   : This sets up everything for a reset
 | |
|   */
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm946_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c5, 0		@ flush I cache
 | |
| @@ -65,6 +66,8 @@ ENTRY(cpu_arm946_reset)
 | |
|  	bic	ip, ip, #0x00001000		@ i-cache
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_arm946_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_arm946_do_idle()
 | |
| --- a/arch/arm/mm/proc-arm9tdmi.S
 | |
| +++ b/arch/arm/mm/proc-arm9tdmi.S
 | |
| @@ -45,8 +45,11 @@ ENTRY(cpu_arm9tdmi_proc_fin)
 | |
|   * Params  : loc(r0)	address to jump to
 | |
|   * Purpose : Sets up everything for a reset and jump to the location for soft reset.
 | |
|   */
 | |
| +		.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_arm9tdmi_reset)
 | |
|  		mov	pc, r0
 | |
| +ENDPROC(cpu_arm9tdmi_reset)
 | |
| +		.popsection
 | |
|  
 | |
|  		__CPUINIT
 | |
|  
 | |
| --- a/arch/arm/mm/proc-fa526.S
 | |
| +++ b/arch/arm/mm/proc-fa526.S
 | |
| @@ -57,6 +57,7 @@ ENTRY(cpu_fa526_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	4
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_fa526_reset)
 | |
|  /* TODO: Use CP8 if possible... */
 | |
|  	mov	ip, #0
 | |
| @@ -73,6 +74,8 @@ ENTRY(cpu_fa526_reset)
 | |
|  	nop
 | |
|  	nop
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_fa526_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_fa526_do_idle()
 | |
| --- a/arch/arm/mm/proc-feroceon.S
 | |
| +++ b/arch/arm/mm/proc-feroceon.S
 | |
| @@ -98,6 +98,7 @@ ENTRY(cpu_feroceon_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_feroceon_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -110,6 +111,8 @@ ENTRY(cpu_feroceon_reset)
 | |
|  	bic	ip, ip, #0x1100			@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_feroceon_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_feroceon_do_idle()
 | |
| --- a/arch/arm/mm/proc-mohawk.S
 | |
| +++ b/arch/arm/mm/proc-mohawk.S
 | |
| @@ -69,6 +69,7 @@ ENTRY(cpu_mohawk_proc_fin)
 | |
|   * (same as arm926)
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_mohawk_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -79,6 +80,8 @@ ENTRY(cpu_mohawk_reset)
 | |
|  	bic	ip, ip, #0x1100			@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_mohawk_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_mohawk_do_idle()
 | |
| --- a/arch/arm/mm/proc-sa110.S
 | |
| +++ b/arch/arm/mm/proc-sa110.S
 | |
| @@ -62,6 +62,7 @@ ENTRY(cpu_sa110_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_sa110_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -74,6 +75,8 @@ ENTRY(cpu_sa110_reset)
 | |
|  	bic	ip, ip, #0x1100			@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_sa110_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_sa110_do_idle(type)
 | |
| --- a/arch/arm/mm/proc-sa1100.S
 | |
| +++ b/arch/arm/mm/proc-sa1100.S
 | |
| @@ -70,6 +70,7 @@ ENTRY(cpu_sa1100_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_sa1100_reset)
 | |
|  	mov	ip, #0
 | |
|  	mcr	p15, 0, ip, c7, c7, 0		@ invalidate I,D caches
 | |
| @@ -82,6 +83,8 @@ ENTRY(cpu_sa1100_reset)
 | |
|  	bic	ip, ip, #0x1100			@ ...i...s........
 | |
|  	mcr	p15, 0, ip, c1, c0, 0		@ ctrl register
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_sa1100_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_sa1100_do_idle(type)
 | |
| --- a/arch/arm/mm/proc-v6.S
 | |
| +++ b/arch/arm/mm/proc-v6.S
 | |
| @@ -55,6 +55,7 @@ ENTRY(cpu_v6_proc_fin)
 | |
|   *	- loc   - location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_v6_reset)
 | |
|  	mrc	p15, 0, r1, c1, c0, 0		@ ctrl register
 | |
|  	bic	r1, r1, #0x1			@ ...............m
 | |
| @@ -62,6 +63,8 @@ ENTRY(cpu_v6_reset)
 | |
|  	mov	r1, #0
 | |
|  	mcr	p15, 0, r1, c7, c5, 4		@ ISB
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_v6_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   *	cpu_v6_do_idle()
 | |
| --- a/arch/arm/mm/proc-v7.S
 | |
| +++ b/arch/arm/mm/proc-v7.S
 | |
| @@ -63,6 +63,7 @@ ENDPROC(cpu_v7_proc_fin)
 | |
|   *      caches disabled.
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_v7_reset)
 | |
|  	mrc	p15, 0, r1, c1, c0, 0		@ ctrl register
 | |
|  	bic	r1, r1, #0x1			@ ...............m
 | |
| @@ -71,6 +72,7 @@ ENTRY(cpu_v7_reset)
 | |
|  	isb
 | |
|  	mov	pc, r0
 | |
|  ENDPROC(cpu_v7_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   *	cpu_v7_do_idle()
 | |
| --- a/arch/arm/mm/proc-xsc3.S
 | |
| +++ b/arch/arm/mm/proc-xsc3.S
 | |
| @@ -105,6 +105,7 @@ ENTRY(cpu_xsc3_proc_fin)
 | |
|   * loc: location to jump to for soft reset
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_xsc3_reset)
 | |
|  	mov	r1, #PSR_F_BIT|PSR_I_BIT|SVC_MODE
 | |
|  	msr	cpsr_c, r1			@ reset CPSR
 | |
| @@ -119,6 +120,8 @@ ENTRY(cpu_xsc3_reset)
 | |
|  	@ already containing those two last instructions to survive.
 | |
|  	mcr	p15, 0, ip, c8, c7, 0		@ invalidate I and D TLBs
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_xsc3_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_xsc3_do_idle()
 | |
| --- a/arch/arm/mm/proc-xscale.S
 | |
| +++ b/arch/arm/mm/proc-xscale.S
 | |
| @@ -142,6 +142,7 @@ ENTRY(cpu_xscale_proc_fin)
 | |
|   * Beware PXA270 erratum E7.
 | |
|   */
 | |
|  	.align	5
 | |
| +	.pushsection	.idmap.text, "ax"
 | |
|  ENTRY(cpu_xscale_reset)
 | |
|  	mov	r1, #PSR_F_BIT|PSR_I_BIT|SVC_MODE
 | |
|  	msr	cpsr_c, r1			@ reset CPSR
 | |
| @@ -160,6 +161,8 @@ ENTRY(cpu_xscale_reset)
 | |
|  	@ already containing those two last instructions to survive.
 | |
|  	mcr	p15, 0, ip, c8, c7, 0		@ invalidate I & D TLBs
 | |
|  	mov	pc, r0
 | |
| +ENDPROC(cpu_xscale_reset)
 | |
| +	.popsection
 | |
|  
 | |
|  /*
 | |
|   * cpu_xscale_do_idle()
 | |
| --- a/arch/arm/plat-omap/include/plat/irqs.h
 | |
| +++ b/arch/arm/plat-omap/include/plat/irqs.h
 | |
| @@ -438,16 +438,6 @@
 | |
|  
 | |
|  #ifndef __ASSEMBLY__
 | |
|  extern void __iomem *omap_irq_base;
 | |
| -void omap1_init_irq(void);
 | |
| -void omap2_init_irq(void);
 | |
| -void omap3_init_irq(void);
 | |
| -void ti816x_init_irq(void);
 | |
| -extern int omap_irq_pending(void);
 | |
| -void omap_intc_save_context(void);
 | |
| -void omap_intc_restore_context(void);
 | |
| -void omap3_intc_suspend(void);
 | |
| -void omap3_intc_prepare_idle(void);
 | |
| -void omap3_intc_resume_idle(void);
 | |
|  #endif
 | |
|  
 | |
|  #include <mach/hardware.h>
 | |
| --- a/arch/arm/plat-omap/include/plat/system.h
 | |
| +++ b/arch/arm/plat-omap/include/plat/system.h
 | |
| @@ -12,6 +12,4 @@ static inline void arch_idle(void)
 | |
|  	cpu_do_idle();
 | |
|  }
 | |
|  
 | |
| -extern void (*arch_reset)(char, const char *);
 | |
| -
 | |
|  #endif
 | |
| --- a/include/asm-generic/vmlinux.lds.h
 | |
| +++ b/include/asm-generic/vmlinux.lds.h
 | |
| @@ -447,6 +447,12 @@
 | |
|  		*(.kprobes.text)					\
 | |
|  		VMLINUX_SYMBOL(__kprobes_text_end) = .;
 | |
|  
 | |
| +#define IDMAP_TEXT							\
 | |
| +		ALIGN_FUNCTION();					\
 | |
| +		VMLINUX_SYMBOL(__idmap_text_start) = .;			\
 | |
| +		*(.idmap.text)						\
 | |
| +		VMLINUX_SYMBOL(__idmap_text_end) = .;
 | |
| +
 | |
|  #define ENTRY_TEXT							\
 | |
|  		ALIGN_FUNCTION();					\
 | |
|  		VMLINUX_SYMBOL(__entry_text_start) = .;			\
 | |
| --- a/arch/arm/kernel/sleep.S
 | |
| +++ b/arch/arm/kernel/sleep.S
 | |
| @@ -85,12 +85,14 @@ ENDPROC(cpu_resume_mmu)
 | |
|  	.ltorg
 | |
|  	.align	5
 | |
|  cpu_resume_turn_mmu_on:
 | |
| +	.pushsection	.idmap.text,"ax"
 | |
|  	mcr	p15, 0, r1, c1, c0, 0	@ turn on MMU, I-cache, etc
 | |
|  	mrc	p15, 0, r1, c0, c0, 0	@ read id reg
 | |
|  	mov	r1, r1
 | |
|  	mov	r1, r1
 | |
|  	mov	pc, r3			@ jump to virtual address
 | |
|  ENDPROC(cpu_resume_turn_mmu_on)
 | |
| +	.popsection
 | |
|  cpu_resume_after_mmu:
 | |
|  	str	r5, [r2, r4, lsl #2]	@ restore old mapping
 | |
|  	mcr	p15, 0, r0, c1, c0, 0	@ turn on D-cache
 | |
| --- a/arch/arm/mach-omap2/io.c
 | |
| +++ b/arch/arm/mach-omap2/io.c
 | |
| @@ -36,7 +36,7 @@
 | |
|  #include "clock3xxx.h"
 | |
|  #include "clock44xx.h"
 | |
|  #include "io.h"
 | |
| -
 | |
| +#include "common.h"
 | |
|  #include <plat/omap-pm.h>
 | |
|  #include "powerdomain.h"
 | |
|  
 | |
| --- a/arch/arm/plat-omap/include/plat/common.h
 | |
| +++ b/arch/arm/plat-omap/include/plat/common.h
 | |
| @@ -27,78 +27,11 @@
 | |
|  #ifndef __ARCH_ARM_MACH_OMAP_COMMON_H
 | |
|  #define __ARCH_ARM_MACH_OMAP_COMMON_H
 | |
|  
 | |
| -#include <linux/delay.h>
 | |
| -
 | |
|  #include <plat/i2c.h>
 | |
|  
 | |
| -struct sys_timer;
 | |
| -
 | |
| -extern void omap_map_common_io(void);
 | |
| -extern struct sys_timer omap1_timer;
 | |
| -extern struct sys_timer omap2_timer;
 | |
| -extern struct sys_timer omap3_timer;
 | |
| -extern struct sys_timer omap3_secure_timer;
 | |
| -extern struct sys_timer omap4_timer;
 | |
| -extern bool omap_32k_timer_init(void);
 | |
|  extern int __init omap_init_clocksource_32k(void);
 | |
|  extern unsigned long long notrace omap_32k_sched_clock(void);
 | |
|  
 | |
|  extern void omap_reserve(void);
 | |
|  
 | |
| -/*
 | |
| - * IO bases for various OMAP processors
 | |
| - * Except the tap base, rest all the io bases
 | |
| - * listed are physical addresses.
 | |
| - */
 | |
| -struct omap_globals {
 | |
| -	u32		class;		/* OMAP class to detect */
 | |
| -	void __iomem	*tap;		/* Control module ID code */
 | |
| -	unsigned long   sdrc;           /* SDRAM Controller */
 | |
| -	unsigned long   sms;            /* SDRAM Memory Scheduler */
 | |
| -	unsigned long   ctrl;           /* System Control Module */
 | |
| -	unsigned long   ctrl_pad;	/* PAD Control Module */
 | |
| -	unsigned long   prm;            /* Power and Reset Management */
 | |
| -	unsigned long   cm;             /* Clock Management */
 | |
| -	unsigned long   cm2;
 | |
| -};
 | |
| -
 | |
| -void omap2_set_globals_242x(void);
 | |
| -void omap2_set_globals_243x(void);
 | |
| -void omap2_set_globals_3xxx(void);
 | |
| -void omap2_set_globals_443x(void);
 | |
| -void omap2_set_globals_ti816x(void);
 | |
| -
 | |
| -/* These get called from omap2_set_globals_xxxx(), do not call these */
 | |
| -void omap2_set_globals_tap(struct omap_globals *);
 | |
| -void omap2_set_globals_sdrc(struct omap_globals *);
 | |
| -void omap2_set_globals_control(struct omap_globals *);
 | |
| -void omap2_set_globals_prcm(struct omap_globals *);
 | |
| -
 | |
| -void omap3_map_io(void);
 | |
| -
 | |
| -/**
 | |
| - * omap_test_timeout - busy-loop, testing a condition
 | |
| - * @cond: condition to test until it evaluates to true
 | |
| - * @timeout: maximum number of microseconds in the timeout
 | |
| - * @index: loop index (integer)
 | |
| - *
 | |
| - * Loop waiting for @cond to become true or until at least @timeout
 | |
| - * microseconds have passed.  To use, define some integer @index in the
 | |
| - * calling code.  After running, if @index == @timeout, then the loop has
 | |
| - * timed out.
 | |
| - */
 | |
| -#define omap_test_timeout(cond, timeout, index)			\
 | |
| -({								\
 | |
| -	for (index = 0; index < timeout; index++) {		\
 | |
| -		if (cond)					\
 | |
| -			break;					\
 | |
| -		udelay(1);					\
 | |
| -	}							\
 | |
| -})
 | |
| -
 | |
| -extern struct device *omap2_get_mpuss_device(void);
 | |
| -extern struct device *omap2_get_iva_device(void);
 | |
| -extern struct device *omap2_get_l3_device(void);
 | |
| -extern struct device *omap4_get_dsp_device(void);
 | |
| -
 | |
|  #endif /* __ARCH_ARM_MACH_OMAP_COMMON_H */
 | |
| --- a/arch/arm/plat-omap/include/plat/io.h
 | |
| +++ b/arch/arm/plat-omap/include/plat/io.h
 | |
| @@ -258,48 +258,9 @@ struct omap_sdrc_params;
 | |
|  
 | |
|  extern void omap1_map_common_io(void);
 | |
|  extern void omap1_init_common_hw(void);
 | |
| +extern void omap_writel(u32 v, u32 pa);
 | |
|  
 | |
| -#ifdef CONFIG_SOC_OMAP2420
 | |
| -extern void omap242x_map_common_io(void);
 | |
| -#else
 | |
| -static inline void omap242x_map_common_io(void)
 | |
| -{
 | |
| -}
 | |
| -#endif
 | |
| -
 | |
| -#ifdef CONFIG_SOC_OMAP2430
 | |
| -extern void omap243x_map_common_io(void);
 | |
| -#else
 | |
| -static inline void omap243x_map_common_io(void)
 | |
| -{
 | |
| -}
 | |
| -#endif
 | |
| -
 | |
| -#ifdef CONFIG_ARCH_OMAP3
 | |
| -extern void omap34xx_map_common_io(void);
 | |
| -#else
 | |
| -static inline void omap34xx_map_common_io(void)
 | |
| -{
 | |
| -}
 | |
| -#endif
 | |
| -
 | |
| -#ifdef CONFIG_SOC_OMAPTI816X
 | |
| -extern void omapti816x_map_common_io(void);
 | |
| -#else
 | |
| -static inline void omapti816x_map_common_io(void)
 | |
| -{
 | |
| -}
 | |
| -#endif
 | |
| -
 | |
| -#ifdef CONFIG_ARCH_OMAP4
 | |
| -extern void omap44xx_map_common_io(void);
 | |
| -#else
 | |
| -static inline void omap44xx_map_common_io(void)
 | |
| -{
 | |
| -}
 | |
| -#endif
 | |
| -
 | |
| -extern void omap2_init_common_infrastructure(void);
 | |
| +struct omap_sdrc_params;
 | |
|  extern void omap2_init_common_devices(struct omap_sdrc_params *sdrc_cs0,
 | |
|  				      struct omap_sdrc_params *sdrc_cs1);
 | |
|  
 |