1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * Xtensa Secondary Processors startup code.
- *
- * 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) 2001 - 2013 Tensilica Inc.
- *
- * Joe Taylor <joe@tensilica.com>
- * Chris Zankel <chris@zankel.net>
- * Marc Gauthier <marc@tensilica.com, marc@alumni.uwaterloo.ca>
- * Pete Delaney <piet@tensilica.com>
- */
- #include <linux/linkage.h>
- #include <asm/cacheasm.h>
- #include <asm/initialize_mmu.h>
- #include <asm/mxregs.h>
- #include <asm/regs.h>
- .section .SecondaryResetVector.text, "ax"
- ENTRY(_SecondaryResetVector)
- _j _SetupOCD
- .begin no-absolute-literals
- .literal_position
- _SetupOCD:
- /*
- * Initialize WB, WS, and clear PS.EXCM (to allow loop instructions).
- * Set Interrupt Level just below XCHAL_DEBUGLEVEL to allow
- * xt-gdb to single step via DEBUG exceptions received directly
- * by ocd.
- */
- movi a1, 1
- movi a0, 0
- wsr a1, windowstart
- wsr a0, windowbase
- rsync
- movi a1, LOCKLEVEL
- wsr a1, ps
- rsync
- _SetupMMU:
- Offset = _SetupMMU - _SecondaryResetVector
- #ifdef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
- initialize_mmu
- #endif
- /*
- * Start Secondary Processors with NULL pointer to boot params.
- */
- movi a2, 0 # a2 == NULL
- movi a3, _startup
- jx a3
- .end no-absolute-literals
- .section .SecondaryResetVector.remapped_text, "ax"
- .global _RemappedSecondaryResetVector
- .org 0 # Need to do org before literals
- _RemappedSecondaryResetVector:
- .begin no-absolute-literals
- .literal_position
- _j _RemappedSetupMMU
- . = _RemappedSecondaryResetVector + Offset
- _RemappedSetupMMU:
- #ifdef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
- initialize_mmu
- #endif
- .end no-absolute-literals
|