1*f615136cSMax Filippov/* 2*f615136cSMax Filippov * Xtensa Secondary Processors startup code. 3*f615136cSMax Filippov * 4*f615136cSMax Filippov * This file is subject to the terms and conditions of the GNU General Public 5*f615136cSMax Filippov * License. See the file "COPYING" in the main directory of this archive 6*f615136cSMax Filippov * for more details. 7*f615136cSMax Filippov * 8*f615136cSMax Filippov * Copyright (C) 2001 - 2013 Tensilica Inc. 9*f615136cSMax Filippov * 10*f615136cSMax Filippov * Joe Taylor <joe@tensilica.com> 11*f615136cSMax Filippov * Chris Zankel <chris@zankel.net> 12*f615136cSMax Filippov * Marc Gauthier <marc@tensilica.com, marc@alumni.uwaterloo.ca> 13*f615136cSMax Filippov * Pete Delaney <piet@tensilica.com> 14*f615136cSMax Filippov */ 15*f615136cSMax Filippov 16*f615136cSMax Filippov#include <linux/linkage.h> 17*f615136cSMax Filippov 18*f615136cSMax Filippov#include <asm/cacheasm.h> 19*f615136cSMax Filippov#include <asm/initialize_mmu.h> 20*f615136cSMax Filippov#include <asm/mxregs.h> 21*f615136cSMax Filippov#include <asm/regs.h> 22*f615136cSMax Filippov 23*f615136cSMax Filippov 24*f615136cSMax Filippov .section .SecondaryResetVector.text, "ax" 25*f615136cSMax Filippov 26*f615136cSMax Filippov 27*f615136cSMax FilippovENTRY(_SecondaryResetVector) 28*f615136cSMax Filippov _j _SetupOCD 29*f615136cSMax Filippov 30*f615136cSMax Filippov .begin no-absolute-literals 31*f615136cSMax Filippov .literal_position 32*f615136cSMax Filippov 33*f615136cSMax Filippov_SetupOCD: 34*f615136cSMax Filippov /* 35*f615136cSMax Filippov * Initialize WB, WS, and clear PS.EXCM (to allow loop instructions). 36*f615136cSMax Filippov * Set Interrupt Level just below XCHAL_DEBUGLEVEL to allow 37*f615136cSMax Filippov * xt-gdb to single step via DEBUG exceptions received directly 38*f615136cSMax Filippov * by ocd. 39*f615136cSMax Filippov */ 40*f615136cSMax Filippov movi a1, 1 41*f615136cSMax Filippov movi a0, 0 42*f615136cSMax Filippov wsr a1, windowstart 43*f615136cSMax Filippov wsr a0, windowbase 44*f615136cSMax Filippov rsync 45*f615136cSMax Filippov 46*f615136cSMax Filippov movi a1, LOCKLEVEL 47*f615136cSMax Filippov wsr a1, ps 48*f615136cSMax Filippov rsync 49*f615136cSMax Filippov 50*f615136cSMax Filippov_SetupMMU: 51*f615136cSMax Filippov Offset = _SetupMMU - _SecondaryResetVector 52*f615136cSMax Filippov 53*f615136cSMax Filippov#ifdef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX 54*f615136cSMax Filippov initialize_mmu 55*f615136cSMax Filippov#endif 56*f615136cSMax Filippov 57*f615136cSMax Filippov /* 58*f615136cSMax Filippov * Start Secondary Processors with NULL pointer to boot params. 59*f615136cSMax Filippov */ 60*f615136cSMax Filippov movi a2, 0 # a2 == NULL 61*f615136cSMax Filippov movi a3, _startup 62*f615136cSMax Filippov jx a3 63*f615136cSMax Filippov 64*f615136cSMax Filippov .end no-absolute-literals 65*f615136cSMax Filippov 66*f615136cSMax Filippov 67*f615136cSMax Filippov .section .SecondaryResetVector.remapped_text, "ax" 68*f615136cSMax Filippov .global _RemappedSecondaryResetVector 69*f615136cSMax Filippov 70*f615136cSMax Filippov .org 0 # Need to do org before literals 71*f615136cSMax Filippov 72*f615136cSMax Filippov_RemappedSecondaryResetVector: 73*f615136cSMax Filippov .begin no-absolute-literals 74*f615136cSMax Filippov .literal_position 75*f615136cSMax Filippov 76*f615136cSMax Filippov _j _RemappedSetupMMU 77*f615136cSMax Filippov . = _RemappedSecondaryResetVector + Offset 78*f615136cSMax Filippov 79*f615136cSMax Filippov_RemappedSetupMMU: 80*f615136cSMax Filippov 81*f615136cSMax Filippov#ifdef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX 82*f615136cSMax Filippov initialize_mmu 83*f615136cSMax Filippov#endif 84*f615136cSMax Filippov 85*f615136cSMax Filippov .end no-absolute-literals 86