/* * 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 /* 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