PROCESSOR-SDK-AM64X: Purpose of Defining Different Modes and Stacks in SBL Boot-Up Assembly Code

Part Number: PROCESSOR-SDK-AM64X

Tool/software:

Hi,  

in C:\ti\mcu_plus_sdk_am64x_09_01_00_41\source\kernel\nortos\dpl\r5\boot_armv7r_asm.S, 

I saw in assembly code it initialize the 7 modes. IRQ, FIQ, USER, SYSTEM ABORT and so on 

<code>

_set_to_fiq_mode:
        //*------------------------------------------------------
        //* SET TO FIQ MODE
        //*
        //*------------------------------------------------------
        MRS     r0, cpsr
        BIC     r0, r0, #0x1F  // CLEAR MODES
        ORR     r0, r0, #0x11  // SET FIQ MODE
        MSR     cpsr_cf, r0

_init_fiq_mode_stack
        //*------------------------------------------------------
        //* INITIALIZE THE FIQ MODE STACK
        //*------------------------------------------------------
        LDR     sp, c_FIQ_STACK_END

        //*------------------------------------------------------
        //* SET TO IRQ MODE
        //*------------------------------------------------------
        MRS     r0, cpsr
        BIC     r0, r0, #0x1F  // CLEAR MODES
        ORR     r0, r0, #0x12  // SET IRQ MODE
        MSR     cpsr_cf, r0

        //*------------------------------------------------------
        //* INITIALIZE THE IRQ MODE STACK
        //*------------------------------------------------------
        LDR     sp, c_IRQ_STACK_END

        //*------------------------------------------------------
        //* SET TO SVC MODE
        //*------------------------------------------------------
        MRS     r0, cpsr
        BIC     r0, r0, #0x1F  // CLEAR MODES
        ORR     r0, r0, #0x13  // SET SVC MODE
        MSR     cpsr_cf, r0

        //*------------------------------------------------------
        //* INITIALIZE THE SVC MODE STACK
        //*------------------------------------------------------
        LDR     sp, c_SVC_STACK_END

        //*------------------------------------------------------
        //* SET TO ABORT MODE
        //*------------------------------------------------------
        MRS     r0, cpsr
        BIC     r0, r0, #0x1F  // CLEAR MODES
        ORR     r0, r0, #0x17  // SET ABORT MODE
        MSR     cpsr_cf, r0

        //*------------------------------------------------------
        //* INITIALIZE THE ABORT MODE STACK
        //*------------------------------------------------------
        LDR     sp, c_ABORT_STACK_END

        //*------------------------------------------------------
        //* SET TO ABORT MODE
        //*------------------------------------------------------
        MRS     r0, cpsr
        BIC     r0, r0, #0x1F  // CLEAR MODES
        ORR     r0, r0, #0x1B  // SET ABORT MODE
        MSR     cpsr_cf, r0

        //*------------------------------------------------------
        //* INITIALIZE THE UNDEFINED MODE STACK
        //*------------------------------------------------------
        LDR     sp, c_UNDEFINED_STACK_END

        //*------------------------------------------------------
        //* SET TO SYSTEM MODE
        //*------------------------------------------------------
        MRS     r0, cpsr
        BIC     r0, r0, #0x1F  // CLEAR MODES
        ORR     r0, r0, #0x1F  // SET SYSTEM MODE
        MSR     cpsr_cf, r0

</code>


My question,

1.  what is the purpose of go into each mode and initialize all that, is that redundant if we konw, we never use that mode in SBL? 


2. In SBL, actually, we only need system mode.   After jumping to application, application assembly will also set 7 modes  right??

3. can we delete the other 6 modes, since, it is never used, before jump to   application main. 

Thanks.