46 lines
999 B
ArmAsm
46 lines
999 B
ArmAsm
/*
|
|
* Non-board-specific low-level startup code
|
|
*
|
|
* Copyright (C) 2004-2006 Atmel Corporation
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
#include <linux/linkage.h>
|
|
|
|
#include <asm/page.h>
|
|
#include <asm/thread_info.h>
|
|
#include <asm/sysreg.h>
|
|
|
|
.section .init.text,"ax"
|
|
.global kernel_entry
|
|
kernel_entry:
|
|
/* Initialize status register */
|
|
lddpc r0, init_sr
|
|
mtsr SYSREG_SR, r0
|
|
|
|
/* Set initial stack pointer */
|
|
lddpc sp, stack_addr
|
|
sub sp, -THREAD_SIZE
|
|
|
|
#ifdef CONFIG_FRAME_POINTER
|
|
/* Mark last stack frame */
|
|
mov lr, 0
|
|
mov r7, 0
|
|
#endif
|
|
|
|
/* Set up the PIO, SDRAM controller, early printk, etc. */
|
|
rcall board_early_init
|
|
|
|
/* Start the show */
|
|
lddpc pc, kernel_start_addr
|
|
|
|
.align 2
|
|
init_sr:
|
|
.long 0x007f0000 /* Supervisor mode, everything masked */
|
|
stack_addr:
|
|
.long init_thread_union
|
|
kernel_start_addr:
|
|
.long start_kernel
|