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