-.extern CopyBootToRAM\r
- \r
-.section .startup,"ax"\r
- .code 32\r
- .align 0\r
-\r
-.global flashstart\r
-flashstart:\r
- b Reset\r
- b UndefinedInstruction\r
- b SoftwareInterrupt\r
- b PrefetchAbort\r
- b DataAbort\r
- b Reserved\r
- b Irq\r
- b Fiq\r
-\r
-Reset:\r
- ldr sp, .stack_end @ initialize stack pointer to top of RAM\r
- bl CopyBootToRAM @ copy bootloader to RAM (in case the\r
- @ user re-flashes the bootloader)\r
- ldr r3, .bootphase2_start @ start address of RAM bootloader\r
- bx r3 @ jump to it\r
-\r
- .stack_end:\r
- .word _stack_end\r
- .bootphase2_start:\r
- .word __bootphase2_start__\r
-\r
-Fiq:\r
- b Fiq\r
-UndefinedInstruction:\r
- b UndefinedInstruction\r
-SoftwareInterrupt:\r
- b SoftwareInterrupt\r
-PrefetchAbort:\r
- b PrefetchAbort\r
-DataAbort:\r
- b DataAbort\r
-Reserved:\r
- b Reserved\r
-Irq:\r
- b Irq\r
+@-----------------------------------------------------------------------------
+@ This code is licensed to you under the terms of the GNU GPL, version 2 or,
+@ at your option, any later version. See the LICENSE.txt file for the text of
+@ the license.
+@-----------------------------------------------------------------------------
+@ Reset vector for running from FLASH
+@-----------------------------------------------------------------------------
+
+.section .startup,"ax"
+
+.arm
+
+.global flashstart
+flashstart:
+ b reset
+ b undefined_instruction
+ b software_interrupt
+ b prefetch_abort
+ b data_abort
+ b . @reserved
+ b irq
+ b fiq
+
+reset:
+ ldr sp, =_stack_end @ initialize stack pointer to top of RAM
+
+ @ copy bootloader to RAM (in case the user re-flashes the bootloader)
+ ldr r0, =__bootphase2_src_start__
+ ldr r1, =__bootphase2_start__
+ ldr r2, =__bootphase2_end__
+1:
+ ldr r3, [r0], #4
+ str r3, [r1], #4
+ cmp r1, r2
+ blo 1b
+
+ ldr r3, =ram_start @ start address of RAM bootloader
+ bx r3 @ jump to it
+
+ .ltorg
+
+undefined_instruction:
+ b .
+software_interrupt:
+ b .
+prefetch_abort:
+ b .
+data_abort:
+ b .
+irq:
+ b .
+fiq:
+ b .