[BACK]Return to loader.S CVS log [TXT][DIR] Up to [local] / funnyos / arch / sam7s64 / boot

Annotation of funnyos/arch/sam7s64/boot/loader.S, Revision 1.1

1.1     ! init        1: /*
        !             2:  * $Id: loader.S,v 1.1.1.1 2007/10/16 08:41:04 init Exp $
        !             3:  */
        !             4: /*
        !             5:  *     FunnyOS loader
        !             6:  *     for Atmel SAM7S64 SoC.
        !             7:  */
        !             8: .text
        !             9: .global _start
        !            10: .global main
        !            11:
        !            12: _start:
        !            13: b      _vector_reset           /* reset */
        !            14: bl     _vector_undef           /* undefined insn */
        !            15: bl     _vector_swi                     /* software intr handler */
        !            16: bl     _vector_dataabrt        /* data abort */
        !            17: bl     _vector_prefabrt        /* prefetch abort */
        !            18: .word 0x00000000               /* [reserved] */
        !            19: b      _vector_irq                     /* IRQ */
        !            20: bl     _vector_fiq                     /* Fast Interrupt Request */
        !            21:
        !            22: _vector_reset:
        !            23:        /*
        !            24:         *      Will enter here just right after RESET.
        !            25:         *      Set up stack and call main.
        !            26:         */
        !            27:
        !            28:        /*
        !            29:         * Setup an IRQ stack
        !            30:         */
        !            31:        /* switch into irq mode with interrupts disabled */
        !            32:        msr cpsr_c, #(0x12 | 0x80)
        !            33:
        !            34:        /* set sp (sp is banked) */
        !            35:        ldr sp, Airqstack
        !            36:
        !            37:        /*
        !            38:         * Setup system stack
        !            39:         */
        !            40:        /* switch into system mode (interrupts turned off) */
        !            41:        msr cpsr_c, #(0x1f | 0x80)
        !            42:
        !            43:        /* set system stack pointer */
        !            44:        ldr sp, Asysstack
        !            45:
        !            46:        b main
        !            47:        /* NOTREACHED */
        !            48:
        !            49: _vector_undef:
        !            50:        /* Undefined insn handler */
        !            51:        mov pc, r14
        !            52:
        !            53: _vector_swi:
        !            54:        mov pc, r14
        !            55:
        !            56: _vector_dataabrt:
        !            57:        /* XXX fatal */
        !            58:        nop
        !            59:
        !            60: _vector_prefabrt:
        !            61:        nop
        !            62:
        !            63: _vector_irq:
        !            64:        /* decrement pc by one insn */
        !            65:        sub lr, lr, #4
        !            66:
        !            67:        /* store all system mode registers */
        !            68:        stmdb sp!, {r0-r12, lr}
        !            69:
        !            70:        bl irq_trampoline
        !            71:
        !            72:        /* load r0-r12 and pc from the stack */
        !            73:        /* note ^ that copies SPSR into CPSR */
        !            74:        ldmia sp!, {r0-r12, pc}^
        !            75:
        !            76: _vector_fiq:
        !            77:        nop
        !            78:
        !            79: /* last word of the physical memory */
        !            80: Asysstack:
        !            81: .word  0x01fffffc
        !            82: Airqstack:
        !            83: .word  0x01fff000
        !            84:

CVSweb