nios2: crt0: split into __start and __text_start
__start is the CPU's reset vector. In a typical Nios II configuration, the exception vector is 0x20 bytes after the reset vector, severely constraining the amount of code that can go in here. Split this into __start and __text_start. The only thing that __start really need to do is init the instruction cache and jump into __text_start. JIRA IDs placed in comments for missing items. Change-Id: I3c6b8ed65e8fcf6b6a735b80cf007d0180599230 Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
e57f3446ac
commit
191f1df574
1 changed files with 43 additions and 7 deletions
|
@ -19,25 +19,61 @@
|
|||
|
||||
/* exports */
|
||||
GTEXT(__start)
|
||||
GTEXT(__text_start)
|
||||
|
||||
/* imports */
|
||||
GTEXT(_PrepC)
|
||||
GTEXT(_interrupt_stack)
|
||||
|
||||
/* Allow use of r1/at (the assembler temporary register) in this
|
||||
* code, normally reserved for internal assembler use
|
||||
*/
|
||||
.set noat
|
||||
|
||||
SECTION_FUNC(TEXT_START, __start)
|
||||
/*
|
||||
* Reset vector entry point into the system. Placed into special 'reset'
|
||||
* section so that the linker puts this at ALT_CPU_RESET_ADDR defined in
|
||||
* system.h
|
||||
*
|
||||
* This code can be at most 0x20 bytes, since the exception vector for Nios II
|
||||
* is usually configured to be 0x20 past the reset vector.
|
||||
*/
|
||||
SECTION_FUNC(reset, __start)
|
||||
|
||||
/* TODO initialize instruction cache, if present */
|
||||
/* TODO initialize instruction cache, if present
|
||||
* ZEP-275
|
||||
*/
|
||||
|
||||
/* TODO if shadow register sets enabled, ensure we are in set 0 */
|
||||
/* Done all we need to do here, jump to __text_start */
|
||||
movhi r1, %hi(__text_start)
|
||||
ori r1, r1, %lo(__text_start)
|
||||
jmp r1
|
||||
|
||||
/* TODO initialize data cache, if present */
|
||||
/* Remainder of asm-land initialization code before we can jump into
|
||||
* the C domain
|
||||
*/
|
||||
SECTION_FUNC(TEXT, __text_start)
|
||||
|
||||
/* TODO setup stack pointer */
|
||||
/* TODO if shadow register sets enabled, ensure we are in set 0
|
||||
* ZEP-258
|
||||
*/
|
||||
|
||||
/* TODO setup global pointer, if used */
|
||||
/* TODO initialize data cache, if present
|
||||
* ZEP-275
|
||||
*/
|
||||
|
||||
/* Set up the initial stack pointer
|
||||
* ZEP-269
|
||||
*/
|
||||
|
||||
/* TODO Setup the global pointer
|
||||
* ZEP-272
|
||||
*/
|
||||
|
||||
/* TODO if shadow register sets enabled, interate through them to set
|
||||
* up. Need to clear r0, write gp, set the execption stack pointer */
|
||||
* up. Need to clear r0, write gp, set the execption stack pointer
|
||||
* ZEP-258
|
||||
*/
|
||||
|
||||
/* Jump into C domain. _PrepC zeroes BSS, copies rw data into RAM,
|
||||
* and then enters nanokernel _Cstart */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue