| /* | 
 |  * Startup code for use with the u-boot bootloader. | 
 |  * | 
 |  * 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 <asm/setup.h> | 
 |  | 
 | 	/* | 
 | 	 * The kernel is loaded where we want it to be and all caches | 
 | 	 * have just been flushed. We get two parameters from u-boot: | 
 | 	 * | 
 | 	 * r12 contains a magic number (ATAG_MAGIC) | 
 | 	 * r11 points to a tag table providing information about | 
 | 	 *     the system. | 
 | 	 */ | 
 | 	.section .init.text,"ax" | 
 | 	.global _start | 
 | _start: | 
 | 	/* Check if the boot loader actually provided a tag table */ | 
 | 	lddpc	r0, magic_number | 
 | 	cp.w	r12, r0 | 
 | 	brne	no_tag_table | 
 |  | 
 | 	/* Initialize .bss */ | 
 | 	lddpc	r2, bss_start_addr | 
 | 	lddpc   r3, end_addr | 
 | 	mov	r0, 0 | 
 | 	mov	r1, 0 | 
 | 1:      st.d    r2++, r0 | 
 | 	cp      r2, r3 | 
 | 	brlo    1b | 
 |  | 
 | 	/* | 
 | 	 * Save the tag table address for later use. This must be done | 
 | 	 * _after_ .bss has been initialized... | 
 | 	 */ | 
 | 	lddpc	r0, tag_table_addr | 
 | 	st.w	r0[0], r11 | 
 |  | 
 | 	/* Jump to loader-independent setup code */ | 
 | 	rjmp	kernel_entry | 
 |  | 
 | 	.align	2 | 
 | magic_number: | 
 | 	.long	ATAG_MAGIC | 
 | tag_table_addr: | 
 | 	.long	bootloader_tags | 
 | bss_start_addr: | 
 | 	.long   __bss_start | 
 | end_addr: | 
 | 	.long   _end | 
 |  | 
 | no_tag_table: | 
 | 	sub	r12, pc, (. - 2f) | 
 | 	bral	panic | 
 | 2:	.asciz	"Boot loader didn't provide correct magic number\n" |