1/* 2 * Startup code for use with the u-boot bootloader. 3 * 4 * Copyright (C) 2004-2006 Atmel Corporation 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10#include <asm/setup.h> 11 12 /* 13 * The kernel is loaded where we want it to be and all caches 14 * have just been flushed. We get two parameters from u-boot: 15 * 16 * r12 contains a magic number (ATAG_MAGIC) 17 * r11 points to a tag table providing information about 18 * the system. 19 */ 20 .section .init.text,"ax" 21 .global _start 22_start: 23 /* Check if the boot loader actually provided a tag table */ 24 lddpc r0, magic_number 25 cp.w r12, r0 26 brne no_tag_table 27 28 /* Initialize .bss */ 29 lddpc r2, bss_start_addr 30 lddpc r3, end_addr 31 mov r0, 0 32 mov r1, 0 331: st.d r2++, r0 34 cp r2, r3 35 brlo 1b 36 37 /* 38 * Save the tag table address for later use. This must be done 39 * _after_ .bss has been initialized... 40 */ 41 lddpc r0, tag_table_addr 42 st.w r0[0], r11 43 44 /* Jump to loader-independent setup code */ 45 rjmp kernel_entry 46 47 .align 2 48magic_number: 49 .long ATAG_MAGIC 50tag_table_addr: 51 .long bootloader_tags 52bss_start_addr: 53 .long __bss_start 54end_addr: 55 .long _end 56 57no_tag_table: 58 sub r12, pc, (. - 2f) 59 bral panic 602: .asciz "Boot loader didn't provide correct magic number\n" 61