Changeset 46c20c8 in mainline for boot/arch/mips32/src/asm.S


Ignore:
Timestamp:
2010-11-26T20:08:10Z (15 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
45df59a
Parents:
fb150d78 (diff), ffdd2b9 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • boot/arch/mips32/src/asm.S

    rfb150d78 r46c20c8  
    2727#
    2828
    29 #include "regname.h"
     29#include <arch/arch.h>
     30#include <arch/regname.h>
    3031
    3132.set noat
     
    3334.set nomacro
    3435
     36.global start
     37.global halt
     38.global jump_to_kernel
     39
     40.section BOOTSTRAP
     41
     42start:
     43        /* Setup CPU map (on msim this code
     44           is executed in parallel on all CPUs,
     45           but it not an issue) */
     46        la $a0, PA2KA(CPUMAP_OFFSET)
     47       
     48        sw $zero, 0($a0)
     49        sw $zero, 4($a0)
     50        sw $zero, 8($a0)
     51        sw $zero, 12($a0)
     52       
     53        sw $zero, 16($a0)
     54        sw $zero, 20($a0)
     55        sw $zero, 24($a0)
     56        sw $zero, 28($a0)
     57       
     58        sw $zero, 32($a0)
     59        sw $zero, 36($a0)
     60        sw $zero, 40($a0)
     61        sw $zero, 44($a0)
     62       
     63        sw $zero, 48($a0)
     64        sw $zero, 52($a0)
     65        sw $zero, 56($a0)
     66        sw $zero, 60($a0)
     67       
     68        sw $zero, 64($a0)
     69        sw $zero, 68($a0)
     70        sw $zero, 72($a0)
     71        sw $zero, 76($a0)
     72       
     73        sw $zero, 80($a0)
     74        sw $zero, 84($a0)
     75        sw $zero, 88($a0)
     76        sw $zero, 92($a0)
     77       
     78        sw $zero, 96($a0)
     79        sw $zero, 100($a0)
     80        sw $zero, 104($a0)
     81        sw $zero, 108($a0)
     82       
     83        sw $zero, 112($a0)
     84        sw $zero, 116($a0)
     85        sw $zero, 120($a0)
     86        sw $zero, 124($a0)
     87       
     88        lui $a1, 1
     89       
     90#ifdef MACHINE_msim
     91       
     92        /* Read dorder value */
     93        la $k0, MSIM_DORDER_ADDRESS
     94        lw $k1, ($k0)
     95       
     96        /* If we are not running on BSP
     97           then end in an infinite loop  */
     98        beq $k1, $zero, bsp
     99        nop
     100       
     101        /* Record CPU presence */
     102        sll $a2, $k1, 2
     103        addu $a2, $a2, $a0
     104        sw $a1, ($a2)
     105       
     106        loop:
     107                j loop
     108                nop
     109       
     110#endif
     111       
     112        bsp:
     113                /* Record CPU presence */
     114                sw $a1, ($a0)
     115               
     116                /* Setup initial stack */
     117                la $sp, PA2KA(STACK_OFFSET)
     118               
     119                j bootstrap
     120                nop
     121
    35122.text
    36123
    37 .global halt
    38 .global memcpy
    39 .global jump_to_kernel
    40 
    41124halt:
    42         b halt
     125        j halt
    43126        nop
    44        
    45 memcpy:
    46         addiu   $v0,$a1,3
    47         li      $v1,-4                  # 0xfffffffffffffffc
    48         and     $v0,$v0,$v1
    49         beq     $a1,$v0,3f
    50         move    $t0,$a0
    51         move    $t2,$a0                 # save dst
    52 
    53 0:
    54         beq     $a2,$zero,2f
    55         move    $a3,$zero
    56 
    57 1:
    58         addu    $v0,$a1,$a3
    59         lbu     $a0,0($v0)
    60         addu    $v1,$t0,$a3
    61         addiu   $a3,$a3,1
    62         bne     $a3,$a2,1b
    63         sb      $a0,0($v1)
    64 
    65 2:
    66         jr      $ra
    67         move    $v0,$t2
    68 
    69 3:
    70         addiu   $v0,$a0,3
    71         and     $v0,$v0,$v1
    72         bne     $a0,$v0,0b
    73         srl     $t1,$a2,2
    74 
    75         beq     $t1,$zero,5f
    76         move    $a3,$zero
    77 
    78         move    $a3,$zero
    79         move    $a0,$zero
    80 4:
    81         addu    $v0,$a1,$a0
    82         lw      $v1,0($v0)
    83         addiu   $a3,$a3,1
    84         addu    $v0,$t0,$a0
    85         sw      $v1,0($v0)
    86         bne     $a3,$t1,4b
    87         addiu   $a0,$a0,4
    88 
    89 5:
    90         andi    $a2,$a2,0x3
    91         beq     $a2,$zero,2b
    92         nop
    93 
    94         sll     $v0,$a3,2
    95         addu    $t1,$v0,$t0
    96         move    $a3,$zero
    97         addu    $t0,$v0,$a1
    98 6:
    99         addu    $v0,$t0,$a3
    100         lbu     $a0,0($v0)
    101         addu    $v1,$t1,$a3
    102         addiu   $a3,$a3,1
    103         bne     $a3,$a2,6b
    104         sb      $a0,0($v1)
    105 
    106         jr      $ra
    107         move    $v0,$t2
    108127
    109128jump_to_kernel:
    110129        #
    111         # TODO
     130        # TODO:
    112131        # Make sure that the I-cache, D-cache and memory are mutually coherent
    113132        # before passing control to the copied code.
Note: See TracChangeset for help on using the changeset viewer.