| 
									
										
										
										
											2012-12-03 15:01:43 +04:00
										 |  |  | /* | 
					
						
							|  |  |  |  * arch/xtensa/boot/boot-elf/bootstrap.S | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Low-level exception handling | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This file is subject to the terms and conditions of the GNU General Public | 
					
						
							|  |  |  |  * License.  See the file "COPYING" in the main directory of this archive | 
					
						
							|  |  |  |  * for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2004 - 2013 by Tensilica Inc. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Chris Zankel <chris@zankel.net>
 | 
					
						
							|  |  |  |  * Marc Gauthier <marc@tensilica.com>
 | 
					
						
							|  |  |  |  * Piet Delaney <piet@tensilica.com>
 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2005-06-23 22:01:12 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <asm/bootparam.h> | 
					
						
							| 
									
										
										
										
											2012-12-03 15:01:43 +04:00
										 |  |  | #include <asm/processor.h> | 
					
						
							|  |  |  | #include <asm/pgtable.h> | 
					
						
							|  |  |  | #include <asm/page.h> | 
					
						
							|  |  |  | #include <asm/cacheasm.h> | 
					
						
							|  |  |  | #include <asm/initialize_mmu.h> | 
					
						
							|  |  |  | #include <linux/linkage.h> | 
					
						
							| 
									
										
										
										
											2005-06-23 22:01:12 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-03 15:01:43 +04:00
										 |  |  | 	.section	.ResetVector.text, "ax" | 
					
						
							| 
									
										
										
										
											2005-06-23 22:01:12 -07:00
										 |  |  | 	.global         _ResetVector
 | 
					
						
							| 
									
										
										
										
											2012-12-03 15:01:43 +04:00
										 |  |  | 	.global         reset
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-23 22:01:12 -07:00
										 |  |  | _ResetVector: | 
					
						
							| 
									
										
										
										
											2012-12-03 15:01:43 +04:00
										 |  |  | 	_j _SetupMMU | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	.begin  no-absolute-literals | 
					
						
							|  |  |  | 	.literal_position | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-23 22:01:12 -07:00
										 |  |  | 	.align 4
 | 
					
						
							|  |  |  | RomInitAddr: | 
					
						
							| 
									
										
										
										
											2012-12-03 15:01:43 +04:00
										 |  |  | #if defined(CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX) && \ | 
					
						
							|  |  |  | 	XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY | 
					
						
							|  |  |  | 	.word 0x00003000
 | 
					
						
							|  |  |  | #else | 
					
						
							|  |  |  | 	.word 0xd0003000
 | 
					
						
							|  |  |  | #endif | 
					
						
							| 
									
										
										
										
											2005-06-23 22:01:12 -07:00
										 |  |  | RomBootParam: | 
					
						
							|  |  |  | 	.word _bootparam
 | 
					
						
							| 
									
										
										
										
											2012-12-03 15:01:43 +04:00
										 |  |  | _bootparam: | 
					
						
							|  |  |  | 	.short	BP_TAG_FIRST
 | 
					
						
							|  |  |  | 	.short	4
 | 
					
						
							|  |  |  | 	.long	BP_VERSION
 | 
					
						
							|  |  |  | 	.short	BP_TAG_LAST
 | 
					
						
							|  |  |  | 	.short	0
 | 
					
						
							|  |  |  | 	.long	0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	.align  4
 | 
					
						
							|  |  |  | _SetupMMU: | 
					
						
							|  |  |  | 	movi	a0, 0 | 
					
						
							|  |  |  | 	wsr	a0, windowbase | 
					
						
							|  |  |  | 	rsync | 
					
						
							|  |  |  | 	movi	a0, 1 | 
					
						
							|  |  |  | 	wsr	a0, windowstart | 
					
						
							|  |  |  | 	rsync | 
					
						
							|  |  |  | 	movi	a0, 0x1F | 
					
						
							|  |  |  | 	wsr	a0, ps | 
					
						
							|  |  |  | 	rsync | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Offset = _SetupMMU - _ResetVector | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX | 
					
						
							|  |  |  | 	initialize_mmu | 
					
						
							|  |  |  | #endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	.end    no-absolute-literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	rsil    a0, XCHAL_DEBUGLEVEL-1 | 
					
						
							|  |  |  | 	rsync | 
					
						
							| 
									
										
										
										
											2005-06-23 22:01:12 -07:00
										 |  |  | reset: | 
					
						
							|  |  |  | 	l32r    a0, RomInitAddr | 
					
						
							|  |  |  | 	l32r	a2, RomBootParam | 
					
						
							|  |  |  | 	movi	a3, 0 | 
					
						
							|  |  |  | 	movi	a4, 0 | 
					
						
							|  |  |  | 	jx      a0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	.align 4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-03 15:01:43 +04:00
										 |  |  | 	.section	.ResetVector.remapped_text, "x" | 
					
						
							|  |  |  | 	.global         _RemappedResetVector
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Do org before literals */ | 
					
						
							|  |  |  | 	.org 0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _RemappedResetVector: | 
					
						
							|  |  |  | 	.begin  no-absolute-literals | 
					
						
							|  |  |  | 	.literal_position | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_j	_RemappedSetupMMU | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Position Remapped code at the same location as the original code */ | 
					
						
							|  |  |  | 	. = _RemappedResetVector + Offset | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _RemappedSetupMMU: | 
					
						
							|  |  |  | #ifndef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX | 
					
						
							|  |  |  | 	initialize_mmu | 
					
						
							|  |  |  | #endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	.end    no-absolute-literals |