Ignore:
Timestamp:
Jul 4, 2012, 2:51:18 PM (12 years ago)
Author:
alain
Message:

Introducing various modifications in kernel initialisation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/boot/reset.S

    r162 r165  
    11/********************************************************************************/
    2 /*      File : reset.S                                                              */
    3 /*      Author : Alain Greiner  & Mohamed karaoui               */
    4 /*      Date : 03/06/2012                                                           */
     2/*      File : reset.S                                                              */
     3/*      Author : Alain Greiner  & Mohamed karaoui                                   */
     4/*      Date : 03/06/2012                                                                                       */
    55/********************************************************************************/
    66/* This boot code is for a multi-cluster, multi-processor architecture,             */
    7 /* running one or several multi-tasks software application(s) defined in the    */
     7/* running one or several multi-tasks software application(s) defined in        */
    88/* the mapping_info data-structure.                                                                     */
    9 /* It uses the mapping_info data structure to build the page tables.            */
    10 /* Processor 0 is in charge of building all pages tables.                       */
     9/* Procesor 0 uses the mapping_info data structure to build all page tables     */
     10/* before jumping to the kernel_init code.                                                                              */
    1111/* Other processors are waiting until the mapping_info signature has been       */
    1212/* modified by processor 0 (done while executing kernel_init code).             */
     13/* Implementation note:                                                                                                                 */
    1314/* The entry point is 0xbfc00000, but the actual boot code starts at address    */
    1415/* 0xbfc00500, and a minimal boot exception handler is implemented at address   */
     
    1718               
    1819#include <giet_config.h>
    19 #include <mips32_registers.h>
     20#include "../sys/mips32_registers.h"
    2021
    2122#define EXCEP_ORG               0x380
     
    4445boot_excep:
    4546    la  a0,     boot_error_string
    46     jal boot_tty_puts
     47    jal boot_puts
    4748    nop
    4849    mfc0        a0,     CP0_TIME
    49         jal     boot_tty_putw
     50        jal     boot_putw
    5051        nop
    5152    la  a0,     boot_lf_string
    52     jal boot_tty_puts
     53    jal boot_puts
     54    nop
     55
     56        la      a0,     boot_pid_string
     57    jal boot_puts
     58    nop
     59    mfc0        k0,     CP0_PROCID
     60    andi        a0,     k0,     0xFFF
     61        jal     boot_putw
     62    nop
     63    la  a0,     boot_lf_string
     64    jal boot_puts
    5365    nop
    5466
    5567        la      a0,     boot_epc_string
    56     jal boot_tty_puts
     68    jal boot_puts
    5769    nop
    5870    mfc0        a0,     CP0_EPC
    59 
    60         jal     boot_tty_putw
     71        jal     boot_putw
    6172    nop
    6273    la  a0,     boot_lf_string
    63     jal boot_tty_puts
     74    jal boot_puts
    6475    nop
    6576
    6677        la      a0,     boot_cr_string
    67     jal boot_tty_puts
     78    jal boot_puts
    6879    nop
    6980    mfc0        a0,     CP0_CR
    70         jal     boot_tty_putw
     81        jal     boot_putw
    7182    nop
    7283    la  a0,     boot_lf_string
    73     jal boot_tty_puts
     84    jal boot_puts
    7485    nop
    7586
    7687        la      a0,     boot_sr_string
    77     jal boot_tty_puts
     88    jal boot_puts
    7889    nop
    7990    mfc0        a0,     CP0_SR
    80         jal     boot_tty_putw
     91        jal     boot_putw
    8192    nop
    8293    la  a0,     boot_lf_string
    83     jal boot_tty_puts
     94    jal boot_puts
    8495    nop
    8596
    8697        la      a0,     boot_bar_string
    87     jal boot_tty_puts
     98    jal boot_puts
    8899    nop
    89100    mfc0        a0,     CP0_BAR
    90         jal     boot_tty_putw
     101        jal     boot_putw
    91102    nop
    92103    la  a0,     boot_lf_string
    93     jal boot_tty_puts
     104    jal boot_puts
    94105    nop
    95106
     
    101112/*******************************************/
    102113    .align      2
    103         .org    START_ORG
     114    .org        START_ORG
    104115
    105116boot_start:
    106117    /* get the procid */
    107118    mfc0        k0,     CP0_PROCID
    108         andi    k0,     k0,     0x3FF   /* no more than 1024 processors... */
     119    andi        k0,     k0,     0xFFF   /* no more than 4096 processors... */
    109120
    110         /* Only processor 0 does init */
    111         bne     k0,     zero,   boot_wait_signature
     121    /* Only processor 0 does init */
     122    bne k0,     zero,   boot_wait_signature
    112123    nop
    113124
    114         /* temporary stack for procesor 0 : 16K */
    115         la          sp, seg_boot_stack_base
    116         addiu   sp,     sp,     0x4000 
     125    /* Processor 0 get a temporary stack */
     126    la      sp, seg_boot_stack_base
     127    addiu       sp,     sp,     0x3000                          /* SP <= seg_boot_stack + 12K */
    117128
    118     /* plat-form initialisation */
    119         jal     boot_init
     129    /* Processor 0 initialises all Page Tables */
     130    jal boot_pt_init
    120131    nop
    121     j to_kinit
     132 
     133    /* jump to kernel_init */
     134    j           boot_to_kernel_init
    122135    nop
    123136
    124137boot_wait_signature:
     138
     139    /* all other processors are waiting signature change */
    125140    la  k0, seg_mapping_base
    126     cache   0x11,   0(k0)           /* invalidate local cache copy */
    127     lw  k0, 0(k0)                   /* k0 <= mapping_info[0] */
     141    cache   0x11,   0(k0)                               /* invalidate local cache copy */
     142    lw  k0, 0(k0)                                               /* k0 <= mapping_info[0]      */
    128143    li  k1,     OUT_MAPPING_SIGNATURE
    129144    bne k1, k0, boot_wait_signature
    130145    nop
    131146       
    132 to_kinit:
    133     /* All processors initialize PTPR / MODE */
    134     /* and jump to kernel_init code.                                     */
     147    /* all other processors get a temporary stack of 256 bytes */
     148    la      sp, seg_boot_stack_base
     149    addiu   sp, sp, 0x3100                             
     150    mfc0        k0, CP0_PROCID
     151    andi    k0, k0, 0xFFF
     152    sll     k0, k0, 8                                   
     153    addu    sp, sp, k0          /* SP <= seg_boot_stack_base + 12K + (pid+1)*256 */
    135154
    136     /* get the procid */
    137     mfc0        s0,     CP0_PROCID
    138         andi    s0,     s0,     0x3FF           /* no more than 1024 processors... TOFIX*/
     155boot_to_kernel_init:
    139156
    140     /* load a PTPR */
    141         la          k1, _ptabs
     157    /* all processors initialize PTPR with PTAB[0] */
     158    la      k1, _ptabs
    142159    lw      k1, 0(k1)   
    143160    srl     k1, k1, 13
    144     mtc2        k1,     CP2_PTPR                /* ptpr <= _ptabs[0]  */
     161    mtc2        k1,     CP2_PTPR                /* PTPR <= _ptabs[0]  */
    145162
    146         /* activates MMU */
    147         li          k1, 0xF
    148         mtc2    k1,     CP2_MODE                /* load MODE register */
     163        /* all processors activate MMU */
     164    li      k1, 0xF
     165    mtc2    k1, CP2_MODE        /* MODE register */
    149166
    150167    /* jump to kernel_init */
    151         la          k0, seg_kernel_init_base
     168    la      k0, seg_kernel_init_base
    152169    j       k0
    153170    nop
    154171
    155 
    156 boot_error_string:      .asciiz "\n[BOOT] Fatal Error at cycle"
     172boot_error_string:      .asciiz "\n[BOOT] Fatal Error in reset.S at cycle "
     173boot_pid_string:        .asciiz "    PID  = "
    157174boot_sr_string:         .asciiz "    SR   = "
    158175boot_cr_string:         .asciiz "    CR   = "
Note: See TracChangeset for help on using the changeset viewer.