/* * 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> */ #include <asm/bootparam.h> #include <asm/processor.h> #include <asm/pgtable.h> #include <asm/page.h> #include <asm/cacheasm.h> #include <asm/initialize_mmu.h> #include <asm/vectors.h> #include <linux/linkage.h> .section .ResetVector.text, "ax" .global _ResetVector .global reset _ResetVector: _j _SetupMMU .begin no-absolute-literals .literal_position .align 4 RomInitAddr: .word LOAD_MEMORY_ADDRESS RomBootParam: .word _bootparam _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 reset: l32r a0, RomInitAddr l32r a2, RomBootParam movi a3, 0 movi a4, 0 jx a0 #ifdef CONFIG_MMU .align 4 .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 #endif