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