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