/*
 * 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/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

#ifdef CONFIG_PARSE_BOOTPARAM
	.align 4
_bootparam:
	.short	BP_TAG_FIRST
	.short	4
	.long	BP_VERSION
	.short	BP_TAG_LAST
	.short	0
	.long	0
#endif

	.align  4
_SetupMMU:
#if XCHAL_HAVE_WINDOWED
	movi	a0, 0
	wsr	a0, windowbase
	rsync
	movi	a0, 1
	wsr	a0, windowstart
	rsync
#endif
	movi	a0, 0x1F
	wsr	a0, ps
	rsync

#ifndef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
	initialize_mmu
#endif

	rsil    a0, XCHAL_DEBUGLEVEL-1
	rsync
reset:
#if defined(CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX) && \
	XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY
	movi	a0, CONFIG_KERNEL_LOAD_ADDRESS
#else
	movi	a0, KERNELOFFSET
#endif
#ifdef CONFIG_PARSE_BOOTPARAM
	movi	a2, _bootparam
#else
	movi	a2, 0
#endif
	movi	a3, 0
	movi	a4, 0
	jx      a0

	.end    no-absolute-literals
