Changeset e84439a in mainline for arch/mips/src/start.S


Ignore:
Timestamp:
2005-09-06T08:51:22Z (20 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e949fd6
Parents:
39ae77b
Message:

Fixed mips boot process.
On interrupt saving registers, save $lo, $hi.
Add interrupt naming to asm files (mips).
Save only necessary registers on context switch (see mips ABI).
Fixed copyright info.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/mips/src/start.S

    r39ae77b re84439a  
    1 #
     1
    22# Copyright (C) 2001-2004 Jakub Jermar
    33# All rights reserved.
     
    2727#
    2828
    29 #include <arch/asm/macro.h>
    30 
    31 #define STACK_SPACE     128
    32 
     29#define __ASM__
     30       
     31#include <arch/asm/regname.h>
     32#include <arch/mm/page.h>
     33#include <arch/asm/boot.h>
     34#include <arch/context.h>
     35       
    3336.text
    3437
     
    4245.global exception_entry
    4346
     47.macro REGISTERS_STORE r
     48        sw $at,EOFFSET_AT(\r)
     49        sw $v0,EOFFSET_V0(\r)
     50        sw $v1,EOFFSET_V1(\r)
     51        sw $a0,EOFFSET_A0(\r)
     52        sw $a1,EOFFSET_A1(\r)
     53        sw $a2,EOFFSET_A2(\r)
     54        sw $a3,EOFFSET_A3(\r)
     55        sw $t0,EOFFSET_A4(\r)
     56        sw $t1,EOFFSET_T1(\r)
     57        sw $t2,EOFFSET_T2(\r)
     58        sw $t3,EOFFSET_T3(\r)
     59        sw $t4,EOFFSET_T4(\r)
     60        sw $t5,EOFFSET_T5(\r)
     61        sw $t6,EOFFSET_T6(\r)
     62        sw $t7,EOFFSET_T7(\r)
     63        sw $t8,EOFFSET_T8(\r)
     64        sw $t9,EOFFSET_T9(\r)
     65        sw $s0,EOFFSET_S0(\r)
     66        sw $s1,EOFFSET_S1(\r)
     67        sw $s2,EOFFSET_S2(\r)
     68        sw $s3,EOFFSET_S3(\r)
     69        sw $s4,EOFFSET_S4(\r)
     70        sw $s5,EOFFSET_S5(\r)
     71        sw $s6,EOFFSET_S6(\r)
     72        sw $s7,EOFFSET_S7(\r)
     73        sw $s8,EOFFSET_S8(\r)   
     74        sw $gp,EOFFSET_GP(\r)
     75        sw $ra,EOFFSET_RA(\r)
     76        mflo $k0
     77        mfhi $k1
     78        sw $k0,EOFFSET_LO(\r)
     79        sw $k1,EOFFSET_HI(\r)
     80.endm
     81
     82.macro REGISTERS_LOAD r
     83        lw $at,EOFFSET_AT(\r)
     84        lw $v0,EOFFSET_V0(\r)
     85        lw $v1,EOFFSET_V1(\r)
     86        lw $a0,EOFFSET_A0(\r)
     87        lw $a1,EOFFSET_A1(\r)
     88        lw $a2,EOFFSET_A2(\r)
     89        lw $a3,EOFFSET_A3(\r)
     90        lw $t0,EOFFSET_A4(\r)
     91        lw $t1,EOFFSET_T1(\r)
     92        lw $t2,EOFFSET_T2(\r)
     93        lw $t3,EOFFSET_T3(\r)
     94        lw $t4,EOFFSET_T4(\r)
     95        lw $t5,EOFFSET_T5(\r)
     96        lw $t6,EOFFSET_T6(\r)
     97        lw $t7,EOFFSET_T7(\r)
     98        lw $t8,EOFFSET_T8(\r)
     99        lw $t9,EOFFSET_T9(\r)
     100        lw $s0,EOFFSET_S0(\r)
     101        lw $s1,EOFFSET_S1(\r)
     102        lw $s2,EOFFSET_S2(\r)
     103        lw $s3,EOFFSET_S3(\r)
     104        lw $s4,EOFFSET_S4(\r)
     105        lw $s5,EOFFSET_S5(\r)
     106        lw $s6,EOFFSET_S6(\r)
     107        lw $s7,EOFFSET_S7(\r)
     108        lw $s8,EOFFSET_S8(\r)
     109        lw $gp,EOFFSET_GP(\r)
     110        lw $ra,EOFFSET_RA(\r)
     111       
     112        lw $k0,EOFFSET_LO(\r)
     113        lw $k1,EOFFSET_HI(\r)
     114        mtlo $k0
     115        mthi $k1
     116.endm
     117
     118       
    44119.org 0x0
    45 kernel_image_start:
    46120tlb_refill_entry:
    47121        j tlb_refill_handler
     
    56130exception_entry:
    57131exception_handler:
    58         sub $29, STACK_SPACE
    59         REGISTERS_STORE $29
     132        sub $sp, REGISTER_SPACE
     133        REGISTERS_STORE $sp
    60134
    61135        jal exception
    62136        nop
    63137
    64         REGISTERS_LOAD $29
    65         add $29, STACK_SPACE
     138        REGISTERS_LOAD $sp
     139        add $sp, REGISTER_SPACE
    66140
    67141        eret
     142        nop
    68143
     144.org KA2PA(0x80000300)
     145kernel_image_start:
     146        /* Load temporary stack */
     147        lui $sp, (TEMP_STACK_START + TEMP_STACK_SIZE) >> 16
     148        ori $sp, (TEMP_STACK_START + TEMP_STACK_SIZE) & 0xffff
     149
     150        /* Not sure about this, but might be needed for PIC code???? */
     151        lui $gp, 0x8000
     152       
     153        jal main_bsp
     154        nop
     155
     156.org KA2PA(TEMP_STACK_START)
     157        .space TEMP_STACK_SIZE
     158       
    69159tlb_refill_handler:
    70         sub $29, STACK_SPACE
    71         REGISTERS_STORE $29
     160        sub $sp, REGISTER_SPACE
     161        REGISTERS_STORE $sp
    72162
    73163        jal tlb_refill
    74164        nop
    75165
    76         REGISTERS_LOAD $29
    77         add $29, STACK_SPACE
     166        REGISTERS_LOAD $sp
     167        add $sp, REGISTER_SPACE
    78168
    79169        eret
     170        nop
    80171
    81172cache_error_handler:
    82         sub $29, STACK_SPACE
    83         REGISTERS_STORE $29
     173        sub $sp, REGISTER_SPACE
     174        REGISTERS_STORE $sp
    84175
    85176        jal cache_error
    86177        nop
    87178
    88         REGISTERS_LOAD $29
    89         add $29, STACK_SPACE
     179        REGISTERS_LOAD $sp
     180        add $sp, REGISTER_SPACE
    90181
    91182        eret
     183        nop
Note: See TracChangeset for help on using the changeset viewer.