=================================================================== RCS file: /cvs/funnyos/arch/testarm/boot/loader.S,v retrieving revision 1.1.1.1 retrieving revision 1.3 diff -u -r1.1.1.1 -r1.3 --- funnyos/arch/testarm/boot/loader.S 2007/10/16 09:41:04 1.1.1.1 +++ funnyos/arch/testarm/boot/loader.S 2007/11/04 22:39:27 1.3 @@ -1,5 +1,5 @@ /* - * $Id: loader.S,v 1.1.1.1 2007/10/16 08:41:04 init Exp $ + * $Id: loader.S,v 1.3 2007/11/04 22:39:27 init Exp $ */ /* * FunnyOS loader @@ -10,23 +10,39 @@ .global main _start: -bl _vector_reset /* reset */ +b _vector_reset /* reset */ bl _vector_undef /* undefined insn */ bl _vector_swi /* software intr handler */ bl _vector_dataabrt /* data abort */ bl _vector_prefabrt /* prefetch abort */ .word 0x00000000 /* [reserved] */ -bl _vector_irq /* IRQ */ +b _vector_irq /* IRQ */ bl _vector_fiq /* Fast Interrupt Request */ _vector_reset: /* - Will enter here just right after RESET. - Set up stack and call main. - */ + * Will enter here just right after RESET. + * Set up stack and call main. + */ - ldr r13, Astack /* XXX stack at the end of phys mem */ + /* + * Setup an IRQ stack + */ + /* switch into irq mode with interrupts disabled */ + msr cpsr_c, #(0x12 | 0x80) + /* set sp (sp is banked) */ + ldr sp, Airqstack + + /* + * Setup system stack + */ + /* switch into system mode (interrupts turned off) */ + msr cpsr_c, #(0x1f | 0x80) + + /* set system stack pointer */ + ldr sp, Asysstack + b main /* NOTREACHED */ @@ -45,13 +61,20 @@ nop _vector_irq: - //bl irqc_intr - nop + bl irq_trampoline + + mrs r0, spsr + msr cpsr, r0 + + subs pc, r14, #4 + _vector_fiq: nop /* last word of the physical memory */ -Astack: +Asysstack: .word 0x01fffffc +Airqstack: +.word 0x01fff000