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