162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * arch/xtensa/boot/boot-elf/bootstrap.S 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Low-level exception handling 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 762306a36Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 862306a36Sopenharmony_ci * for more details. 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * Copyright (C) 2004 - 2013 by Tensilica Inc. 1162306a36Sopenharmony_ci * 1262306a36Sopenharmony_ci * Chris Zankel <chris@zankel.net> 1362306a36Sopenharmony_ci * Marc Gauthier <marc@tensilica.com> 1462306a36Sopenharmony_ci * Piet Delaney <piet@tensilica.com> 1562306a36Sopenharmony_ci */ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#include <asm/bootparam.h> 1862306a36Sopenharmony_ci#include <asm/initialize_mmu.h> 1962306a36Sopenharmony_ci#include <asm/vectors.h> 2062306a36Sopenharmony_ci#include <linux/linkage.h> 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci .section .ResetVector.text, "ax" 2362306a36Sopenharmony_ci .global _ResetVector 2462306a36Sopenharmony_ci .global reset 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci_ResetVector: 2762306a36Sopenharmony_ci _j _SetupMMU 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci .begin no-absolute-literals 3062306a36Sopenharmony_ci .literal_position 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#ifdef CONFIG_PARSE_BOOTPARAM 3362306a36Sopenharmony_ci .align 4 3462306a36Sopenharmony_ci_bootparam: 3562306a36Sopenharmony_ci .short BP_TAG_FIRST 3662306a36Sopenharmony_ci .short 4 3762306a36Sopenharmony_ci .long BP_VERSION 3862306a36Sopenharmony_ci .short BP_TAG_LAST 3962306a36Sopenharmony_ci .short 0 4062306a36Sopenharmony_ci .long 0 4162306a36Sopenharmony_ci#endif 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci .align 4 4462306a36Sopenharmony_ci_SetupMMU: 4562306a36Sopenharmony_ci#if XCHAL_HAVE_WINDOWED 4662306a36Sopenharmony_ci movi a0, 0 4762306a36Sopenharmony_ci wsr a0, windowbase 4862306a36Sopenharmony_ci rsync 4962306a36Sopenharmony_ci movi a0, 1 5062306a36Sopenharmony_ci wsr a0, windowstart 5162306a36Sopenharmony_ci rsync 5262306a36Sopenharmony_ci#endif 5362306a36Sopenharmony_ci movi a0, 0x1F 5462306a36Sopenharmony_ci wsr a0, ps 5562306a36Sopenharmony_ci rsync 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#ifndef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX 5862306a36Sopenharmony_ci initialize_mmu 5962306a36Sopenharmony_ci#endif 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci rsil a0, XCHAL_DEBUGLEVEL-1 6262306a36Sopenharmony_ci rsync 6362306a36Sopenharmony_cireset: 6462306a36Sopenharmony_ci#if defined(CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX) && \ 6562306a36Sopenharmony_ci XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY 6662306a36Sopenharmony_ci movi a0, CONFIG_KERNEL_LOAD_ADDRESS 6762306a36Sopenharmony_ci#else 6862306a36Sopenharmony_ci movi a0, KERNELOFFSET 6962306a36Sopenharmony_ci#endif 7062306a36Sopenharmony_ci#ifdef CONFIG_PARSE_BOOTPARAM 7162306a36Sopenharmony_ci movi a2, _bootparam 7262306a36Sopenharmony_ci#else 7362306a36Sopenharmony_ci movi a2, 0 7462306a36Sopenharmony_ci#endif 7562306a36Sopenharmony_ci movi a3, 0 7662306a36Sopenharmony_ci movi a4, 0 7762306a36Sopenharmony_ci jx a0 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci .end no-absolute-literals 80