mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
e9a43850e6
board_early_init() is left over from some early prototyping work where we had to initialize the SDRAM controller ourselves. This depends on the kernel being loaded into static RAM, which just isn't possible on any commercially available products today. In order to run without a boot loader, we need to create a zImage stub or have the debugger initialize the SDRAM for us (for really low-level debugging) Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
43 lines
914 B
ArmAsm
43 lines
914 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
|
|
|
|
/* 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
|