@-----------------------------------------------------------------------------
@ 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   .