source: soft/giet_vm/boot/reset.S @ 160

Last change on this file since 160 was 160, checked in by karaoui, 12 years ago

giet-vm new version

File size: 4.2 KB
Line 
1/********************************************************************************/
2/*      File : reset.S                                                              */
3/*      Author : Alain Greiner  & Mohamed karaoui               */
4/*      Date : 03/06/2012                                                           */
5/********************************************************************************/
6/* This boot code is for a multi-cluster, multi-processor architecture,             */
7/* running one or several multi-tasks software application(s) defined in the    */
8/* 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.                       */
11/* Other processors are waiting until the mapping_info signature has been       */
12/* modified by processor 0 (done while executing kernel_init code).             */
13/* The entry point is 0xbfc00000, but the actual boot code starts at address    */
14/* 0xbfc00500, and a minimal boot exception handler is implemented at address   */
15/* 0xbfc0380.                                                                                                   */
16/********************************************************************************/
17               
18#include <giet_config.h>
19#include <mips32_registers.h>
20
21#define EXCEP_ORG               0x380
22#define START_ORG               0x500
23
24#define OUT_MAPPING_SIGNATURE   0xBABEF00D
25
26        .section .boot,"ax",@progbits
27        .align  2
28        .set noreorder
29
30/********************************************************/
31/* reset entry point                                    */
32/* (address 0xBFC00000 imposed by the hardware)         */
33/********************************************************/
34boot_reset:
35    j   boot_start
36        nop
37
38/*******************************************************/
39/* handling exceptions in the boot phase               */
40/* (address 0xBFC00380 imposed by the hardware         */
41/*******************************************************/
42        .align  2
43    .org        EXCEP_ORG
44boot_excep:
45    la  a0,     boot_error_string
46    jal boot_tty_puts
47    nop
48    mfc0        a0,     CP0_TIME
49        jal     boot_tty_putw
50        nop
51    la  a0,     boot_lf_string
52    jal boot_tty_puts
53    nop
54
55        la      a0,     boot_epc_string
56    jal boot_tty_puts
57    nop
58    mfc0        a0,     CP0_EPC
59
60        jal     boot_tty_putw
61    nop
62    la  a0,     boot_lf_string
63    jal boot_tty_puts
64    nop
65
66        la      a0,     boot_cr_string
67    jal boot_tty_puts
68    nop
69    mfc0        a0,     CP0_CR
70        jal     boot_tty_putw
71    nop
72    la  a0,     boot_lf_string
73    jal boot_tty_puts
74    nop
75
76        la      a0,     boot_sr_string
77    jal boot_tty_puts
78    nop
79    mfc0        a0,     CP0_SR
80        jal     boot_tty_putw
81    nop
82    la  a0,     boot_lf_string
83    jal boot_tty_puts
84    nop
85
86        la      a0,     boot_bar_string
87    jal boot_tty_puts
88    nop
89    mfc0        a0,     CP0_BAR
90        jal     boot_tty_putw
91    nop
92    la  a0,     boot_lf_string
93    jal boot_tty_puts
94    nop
95
96        j       boot_exit
97        nop
98
99/*******************************************/
100/* actual starting point for the boot code */
101/*******************************************/
102    .align      2
103        .org    START_ORG
104
105boot_start:
106    /* get the procid */
107    mfc0        k0,     CP0_PROCID
108        andi    k0,     k0,     0x3FF   /* no more than 1024 processors... */
109
110        /* Only processor 0 does init */
111        bne     k0,     zero,   boot_wait_signature
112    nop
113
114        /* temporary stack for procesor 0 : 16K */
115        la          sp, seg_boot_stack_base
116        addiu   sp,     sp,     0x4000 
117
118    /* plat-form initialisation */
119        jal     boot_init
120    nop
121    j app_start
122    nop
123
124boot_wait_signature:
125    la  k0, seg_mapping_base
126    cache   0x11,   0(k0)           /* invalidate local cache copy */
127    lw  k0, 0(k0)                   /* k0 <= mapping_info[0] */
128    li  k1,     OUT_MAPPING_SIGNATURE
129    bne k1, k0, boot_wait_signature
130    nop
131       
132app_start:
133    /* All processors initialize PTPR / MODE */
134    /* and jump to kernel_init code.                                     */
135
136    /* get the procid */
137    mfc0        s0,     CP0_PROCID
138        andi    s0,     s0,     0x3FF           /* no more than 1024 processors... TOFIX*/
139
140    /* load a PTPR */
141        la          k1, _ptabs
142    lw      k1, 0(k1)   
143    srl     k1, k1, 13
144    mtc2        k1,     CP2_PTPR                /* ptpr <= _ptabs[0]  */
145
146        /* activates MMU */
147        li          k1, 0xF
148        mtc2    k1,     CP2_MODE                /* load MODE register */
149
150    /* jump to kernel_init */
151        la          k0, seg_kernel_init_base
152    j       k0
153    nop
154
155
156boot_error_string:      .asciiz "\n[BOOT] Fatal Error at cycle"
157boot_sr_string:         .asciiz "    SR   = "
158boot_cr_string:         .asciiz "    CR   = "
159boot_epc_string:        .asciiz "    EPC  = "
160boot_bar_string:        .asciiz "    BAR  = "
161boot_lf_string:         .asciiz "\n"
162
163        .set    reorder
164
165
Note: See TracBrowser for help on using the repository browser.