-.extern CopyBootToRAM\r
- \r
-.text\r
-.code 32\r
-.align 0\r
-\r
-.global start\r
-start:\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, = 0x0020FFF8 @ 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, = 0x00200000 @ start address of RAM bootloader\r
- bx r3 @ jump to it\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
+ ldr pc, [pc,#-0xF20] @ IRQ - read the AIC
+ 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 .
+fiq:
+ b .