OpenCores
URL https://opencores.org/ocsvn/s1_core/s1_core/trunk

Subversion Repositories s1_core

[/] [s1_core/] [trunk/] [tests/] [boot/] [boot.s] - Blame information for rev 77

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 32 fafa1971
/*
2
 * Simply RISC S1 Core - Boot code
3
 *
4
 * Cutdown version from the original OpenSPARC T1:
5
 *
6
 *   $T1_ROOT/verif/diag/assembly/include/hred_reset_handler.s
7
 *
8
 * Main changes:
9 36 fafa1971
 * - L1 and L2 cache handling are not enabled;
10 32 fafa1971
 * - Interrupt Queues handling currently commented out since causes troubles in S1 Core.
11
 *
12
 * Sun Microsystems' copyright notices follow:
13
 */
14
 
15
/*
16
* ========== Copyright Header Begin ==========================================
17
*
18
* OpenSPARC T1 Processor File: hred_reset_handler.s
19
* Copyright (c) 2006 Sun Microsystems, Inc.  All Rights Reserved.
20
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
21
*
22
* The above named program is free software; you can redistribute it and/or
23
* modify it under the terms of the GNU General Public
24
* License version 2 as published by the Free Software Foundation.
25
*
26
* The above named program is distributed in the hope that it will be
27
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
28
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
29
* General Public License for more details.
30
*
31
* You should have received a copy of the GNU General Public
32
* License along with this work; if not, write to the Free Software
33
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
34
*
35
* ========== Copyright Header End ============================================
36
*/
37
 
38 35 fafa1971
        !! Enable L2-ucache: Unused in S1 Core
39 32 fafa1971
/*
40 35 fafa1971
        setx    cregs_l2_ctl_reg_r64, %g1, %l1                          !! aka "wr  %g0, 5, %asr26" "clr  %l1"
41 32 fafa1971
        mov     0xa9, %g1
42
        sllx    %g1, 32, %g1
43
 
44
        stx     %l1, [%g1 + 0x00]
45
        stx     %l1, [%g1 + 0x40]
46
        stx     %l1, [%g1 + 0x80]
47
        stx     %l1, [%g1 + 0xc0]
48
*/
49
 
50 35 fafa1971
        !! Set LSU Diagnostic Register to use all ways for L1-icache and L1-dcache
51 73 fafa1971
 
52 77 fafa1971
        !!setx  cregs_lsu_diag_reg_r64, %g1, %l1                !!la variabile (cregs_lsu_diag_reg_r64) contiene il valore 0 (defines.h)
53
                                                                !!ho sostituito questa istruzione con la sua espansione (!! aka "clr  %l1")
54 73 fafa1971
        sethi %hh(0x0),%g1
55
        or    %g1,%hm(0x0),%g1
56
        sllx  %g1,32,%g1
57
        sethi %hi(0x0),%l1
58
        or    %l1,%g1,%l1
59
        or    %l1,%lo(0x0),%l1
60
 
61
        mov     0x10, %g1
62 77 fafa1971
        stxa %l1, [%g1] (66)            !! pone a zero il registro ASI_LSU_DIAG_REG ottenendo
63
                                        !!l'abilitazione di tutte le vie della cache e l'utilizzo
64
                                        !!dell'algoritmo "random replacement" (aka "stxa %l1, [%g1] ASI_LSU_DIAG_REG")
65 32 fafa1971
 
66 36 fafa1971
        !! Set LSU Control Register to enable L1-icache and L1-dcache: not enabled in S1 Core
67
/*
68 35 fafa1971
        setx    (CREGS_LSU_CTL_REG_IC | (CREGS_LSU_CTL_REG_DC << 1)), %g1, %l1  !! aka "mov  3, %l1"
69 36 fafa1971
        stxa  %l1, [ %g0 ] (69)                                                 !! aka "stxa    %l1, [%g0] ASI_LSU_CTL_REG"
70
*/
71 35 fafa1971
        !! Set hpstate.red = 0 and hpstate.enb = 1
72 32 fafa1971
        rdhpr   %hpstate, %l1
73 73 fafa1971
        and %l1,0x820,%l2
74
        xor %l2,0x800,%l2
75 77 fafa1971
        wrhpr %l1,%l2,%hpstate          !!questo meccanismo "dovrebbe" assicurarmi red=0 enb=1 mantenendo inalterati gli altri bit del registro
76 73 fafa1971
 
77 77 fafa1971
        !!wrhpr %l1, 0x820, %hpstate    !! vecchia istruzione: otteniamo red=0 ed enb=1 solo se in precedenza avevamo red=1 ed enb=0
78 73 fafa1971
 
79 77 fafa1971
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
80
!!istruzione aggiunte dal file  dal file hboot_tlb_init.s
81
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
82 73 fafa1971
 
83 77 fafa1971
!! init all itlb entries
84
    mov 0x30, %g1
85
    mov %g0, %g2
86
 itlb_init_loop:
87
        !!pulisce data e tag entry del buffer per TLB
88
        stxa    %g0, [ %g1 ] 0x50  !!IMMU TLB Tag Access register=0
89
        stxa    %g0, [ %g2 ] 0x55  !!IMMU TLB Data Access register=0, g2 assume valori  da 0 a 0x7f8
90 32 fafa1971
 
91 77 fafa1971
        add     %g2, 8, %g2     !!g2= somma 8 (byte) alla volta  (64 bit)
92
        cmp     %g2, 0x200      !!confronta con 512  (512*8=4096=0x1000), (ma al max VA=0x7F8 ?)
93 73 fafa1971
 
94 77 fafa1971
        bne     itlb_init_loop  !!se g2!=da 0x200 ritorna all''inizio del loop
95
        nop
96 73 fafa1971
! init all dtlb entries
97 77 fafa1971
        mov     0x30, %g1
98
        mov     %g0, %g2
99
dtlb_init_loop:
100
        stxa    %g0, [ %g1 ] 0x58  !!DMMU TLB Tag Access register=0
101
        stxa    %g0, [ %g2 ] 0x5d  !!ASI_DTLB_DATA_ACCESS_REG(DMMU TLB Data Access)=0 g2 assume valori da 0 a 0x7f8
102 73 fafa1971
 
103 77 fafa1971
        add     %g2, 8, %g2 !!incrementa g2 di 64 bit alla voltra
104
        cmp     %g2, 0x200  !!confronta g2 con 0x200
105
        bne     dtlb_init_loop !!se sono diversi ricomincia il loop
106
        nop
107 73 fafa1971
 
108
 
109
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
110
! Clear itlb/dtlb valid
111
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
112 77 fafa1971
        stxa    %g0, [%g0] 0x60         ! ASI_ITLB_INVALIDATE_ALL(IMMU TLB Invalidate register)=0
113
        mov     0x8, %g1
114
        stxa    %g0, [%g0 + %g1] 0x60   ! ASI_DTLB_INVALIDATE_ALL(DMMU TLB Invalidate register)=0
115
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
116
!!da qui riprende il vecchio file boot.s
117
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
118 73 fafa1971
 
119
 
120
 
121 35 fafa1971
        !! Initialize Interrupt Queue Registers: Currently disabled in S1 Core
122 32 fafa1971
/*
123
        wr %g0, 0x25, %asi
124
 
125
        stxa %g0, [0x3c0] %asi
126
        stxa %g0, [0x3c8] %asi
127
        stxa %g0, [0x3d0] %asi
128
        stxa %g0, [0x3d8] %asi
129
 
130
        stxa %g0, [0x3e0] %asi
131
        stxa %g0, [0x3e8] %asi
132
        stxa %g0, [0x3f0] %asi
133
        stxa %g0, [0x3f8] %asi
134
 
135
        wrpr    0, %tl
136
        wrpr    0, %g0, %gl
137
        wr      %g0, cregs_fprs_imm, %fprs
138
        wr      %g0, cregs_ccr_imm, %ccr
139
 
140
        wr      %g0, cregs_asi_imm, %asi
141
        setx    cregs_tick_r64, %g1, %g2
142 35 fafa1971
        !! FIXME set other ticks also
143 32 fafa1971
        wrpr    %g2, %tick
144
        setx    cregs_stick_r64, %g1, %g2
145
 
146
        wr      %g2, %g0, %sys_tick
147
        mov     0x1, %g2
148
        sllx    %g2, 63, %g2
149
        wr      %g2, %g0, %tick_cmpr
150
 
151
        wr      %g2, %g0, %sys_tick_cmpr
152
        wrhpr   %g2, %g0, %hsys_tick_cmpr
153
        mov     %g0, %y
154
        wrpr    cregs_pil_imm, %pil
155
 
156
        wrpr    cregs_cwp_imm, %cwp
157
        wrpr    cregs_cansave_imm, %cansave
158
        wrpr    cregs_canrestore_imm, %canrestore
159
        wrpr    cregs_otherwin_imm, %otherwin
160
 
161
        wrpr    cregs_cleanwin_imm, %cleanwin
162
        wrpr    cregs_wstate_imm, %wstate
163
*/
164
 
165 35 fafa1971
        !! Clear L1-icache and L1-dcache SFSR
166 32 fafa1971
        mov     0x18, %g1
167 77 fafa1971
        stxa    %g0, [%g0 + %g1] 0x50 !IMMU Synchronous Fault Status register=0
168
        stxa    %g0, [%g0 + %g1] 0x58 !DMMU Synchronous Fault Status register=0
169 32 fafa1971
 
170 35 fafa1971
        !! Enable error trap
171 77 fafa1971
        !!setx  cregs_sparc_error_en_reg_r64, %g1, %l1         !! aka "stxa     %l1, [%g0] ASI_SPARC_ERROR_EN_REG"
172
                                                               !!ho sostituito questa istruzione con la sua espansione
173
                                                               !!ponendo la costante cregs_sparc_error_en_reg_r64=3 (dal file defines.h)
174
                                                               !!l'effetto dovrebbe essere "trap on correctable error" e "trap on uncorrectable error"
175
                                                               !!(!!aka "mov  3, %l1")
176
        !!inizio espansione
177 73 fafa1971
        sethi %hh(0x3),%g1
178
        or    %g1,%hm(0x3),%g1
179
        sllx  %g1,32,%g1
180
        sethi %hi(0x3),%l1
181
        or    %l1,%g1,%l1
182
        or    %l1,%lo(0x3),%l1
183 77 fafa1971
        stxa  %l1, [%g0] (75)       !!mette il contenuto di l1 nel registro "SPARC Error Enable reg"
184
        !!fine espansione
185 32 fafa1971
 
186 35 fafa1971
        !! Enable L2-ucache error trap: Unused in S1 Core
187 32 fafa1971
/*
188
        setx    cregs_l2_error_en_reg_r64, %g1, %l1
189
 
190
        mov     0xaa, %g1
191
        sllx    %g1, 32, %g1
192
        stx     %l1, [%g1 + 0x00]
193
        stx     %l1, [%g1 + 0x40]
194
 
195
        stx     %l1, [%g1 + 0x80]
196
        stx     %l1, [%g1 + 0xc0]
197
*/
198
 
199 77 fafa1971
        !! Load Partition ID (permette a S.O. multipli di condividere lo stesso TLB)
200
        rd      %asr26, %l1                             !!%asr26 corrisponde allo Strand Status and Control register
201 35 fafa1971
        set     0x0300, %g1                             !! aka "sethi %hi(0x1c00), %g1" "or  %g1, 0x300, %g1"
202 32 fafa1971
        and     %l1, %g1, %l1
203 73 fafa1971
 
204 35 fafa1971
        srlx    %l1, 8, %l1                             !! %l1 has thread ID
205 32 fafa1971
 
206 77 fafa1971
        !!setx  part_id_list, %g1, %g2  (part_id_list viene definito nel file hboot.s)
207
        !! this instruction expands as (preso dal file ACCESS.TXT)
208
        !!inizio espansione
209 73 fafa1971
         sethi  %hi(0), %g1
210 77 fafa1971
         sethi  %hi(0x4c000), %g2
211 73 fafa1971
         mov  %g1, %g1
212
         mov  %g2, %g2
213
         sllx  %g1, 0x20, %g1
214
         or  %g2, %g1, %g2
215 77 fafa1971
        !!fine espansione
216 32 fafa1971
 
217 35 fafa1971
        sllx    %l1, 3, %l1                                                     !! offset - partition list
218
        ldx     [%g2 + %l1], %g2                                                !! %g2 contains partition ID
219 32 fafa1971
        mov     0x80, %g1
220 77 fafa1971
        stxa    %g2, [%g1] 0x58                                                 !!I/DMMU Partition ID=g2
221 32 fafa1971
 
222 35 fafa1971
        !! Set Hypervisor Trap Base Address
223 77 fafa1971
        !!setx HV_TRAP_BASE_PA, %l0, %l7                !!sostituita con la sua espansione e HV_TRAP_BASE_PA=0x80000(!!sethi %hi(0x80000), %l7)
224
        !!inizio espansione
225 73 fafa1971
        sethi %hh(0x80000),%g1
226
        or    %g1,%hm(0x80000),%g1
227
        sllx  %g1,32,%g1
228
        sethi %hi(0x80000),%l1
229
        or    %l1,%g1,%l1
230
        or    %l1,%lo(0x80000),%l1
231 77 fafa1971
        !!fine espansione
232 73 fafa1971
 
233 77 fafa1971
        wrhpr %l7, %g0, %htba                          !!i bit da 63-14 servono a selezionare il trap vector per un trap servito in Hyperprivileged mode
234 32 fafa1971
 
235 35 fafa1971
        !! Load TSB config/base from memory and write to corresponding ASI's
236
        !! set tsb-reg (4 at present) for one partition
237
        !! 2 i-config, 2-dconfig
238 32 fafa1971
 
239 77 fafa1971
        !!setx  tsb_config_base_list, %l0, %g1
240 35 fafa1971
        !! this instructions expands as
241 73 fafa1971
         sethi  %hi(0), %l0
242
         sethi  %hi(0x4c000), %g1
243
         mov  %l0, %l0
244
         or  %g1, 0x140, %g1
245
         sllx  %l0, 0x20, %l0
246
         or  %g1, %l0, %g1
247 77 fafa1971
        !!fine espansione
248
 
249 35 fafa1971
        sllx    %g2, 7, %g2                                     !! %g2 contains offset to tsb_config_base_list
250
        add     %g1, %g2, %g1                                   !! %g1 contains pointer to tsb_config_base_list
251 32 fafa1971
 
252 35 fafa1971
        !! IMMU_CXT_Z_CONFIG   (0x37, VA=0x00)
253 32 fafa1971
        ldx     [%g1], %l1
254
        stxa    %l1, [%g0] 0x37
255
 
256 35 fafa1971
        !! IMMU_CXT_NZ_CONFIG  (0x3f, VA=0x00)
257 32 fafa1971
        ldx     [%g1+8], %l1
258
        stxa    %l1, [%g0] 0x3f
259
 
260 35 fafa1971
        !! IMMU_CXT_Z_PS0_TSB  (0x35, VA=0x0)
261
        !! IMMU_CXT_Z_PS1_TSB  (0x36, VA=0x0)
262 32 fafa1971
        ldx     [%g1+16], %l1
263
        stxa    %l1, [%g0] 0x35
264
        ldx     [%g1+32], %l1
265
        stxa    %l1, [%g0] 0x36
266
 
267 35 fafa1971
        !! IMMU_CXT_NZ_PS0_TSB (0x3d, VA=0x00)
268
        !! IMMU_CXT_NZ_PS1_TSB (0x3e, VA=0x00)
269 32 fafa1971
        ldx     [%g1+24], %l1
270
        stxa    %l1, [%g0] 0x3d
271
        ldx     [%g1+40], %l1
272
        stxa    %l1, [%g0] 0x3e
273
 
274 35 fafa1971
        !! DMMU_CXT_Z_CONFIG   (0x33, VA=0x00)
275 32 fafa1971
        ldx     [%g1+64], %l1
276
        stxa    %l1, [%g0] 0x33
277
 
278 35 fafa1971
        !! DMMU_CXT_NZ_CONFIG  (0x3b, VA=0x00)
279 32 fafa1971
        ldx     [%g1+72], %l1
280
        stxa    %l1, [%g0] 0x3b
281
 
282 35 fafa1971
        !! DMMU_CXT_Z_PS0_TSB  (0x31, VA=0x00)
283
        !! DMMU_CXT_Z_PS1_TSB  (0x32, VA=0x00)
284 32 fafa1971
        ldx     [%g1+80], %l1
285
        stxa    %l1, [%g0] 0x31
286
        ldx     [%g1+96], %l1
287
        stxa    %l1, [%g0] 0x32
288
 
289 35 fafa1971
        !! DMMU_CXT_NZ_PS0_TSB (0x39, VA=0x00)
290
        !! DMMU_CXT_NZ_PS0_TSB (0x3a, VA=0x00)
291 32 fafa1971
        ldx     [%g1+88], %l1
292
        stxa    %l1, [%g0] 0x39
293
        ldx     [%g1+104], %l1
294
        stxa    %l1, [%g0] 0x3a
295
 
296 35 fafa1971
        !! Demap all itlb and dtlb
297 32 fafa1971
        mov     0x80, %o2
298 77 fafa1971
        stxa    %g0, [%o2] 0x57                 !!registro ASI_IMMU_DEMAP=0 (IMMU TLB demap)
299
        stxa    %g0, [%o2] 0x5f                 !!registro ASI_DMMU_DEMAP=0 (DMMU TLB demap)
300 32 fafa1971
 
301 73 fafa1971
 
302
 
303 35 fafa1971
        !! Initialize primary context register
304 32 fafa1971
        mov 0x8, %l1
305
        stxa %g0, [%l1] 0x21
306
 
307 35 fafa1971
        !! Initialize secondary context register
308 32 fafa1971
        mov 0x10, %l1
309
        stxa %g0, [%l1] 0x21
310
 
311 35 fafa1971
        !! Initialize dtsb entry for i context zero ps0, ps1
312 36 fafa1971
/*
313 35 fafa1971
        !! Set LSU Control Register to enable icache, dcache, immu, dmmu
314
        setx    cregs_lsu_ctl_reg_r64, %g1, %l1                                 !! aka "mov  0xf, %l1"
315 36 fafa1971
*/
316
        !! Set LSU Control Register to enable immu, dmmu but NOT icache, dcache
317
        mov  0xc, %l1
318 77 fafa1971
        stxa  %l1, [%g0] (69)                           !!Load/Store Unit Control Register=1100 (aka "stxa %l1, [%g0] ASI_LSU_CTL_REG")
319
                                                        !!l''effetto dovrebbe essere:
320
                                                        !! .dm=1 (DMMU ENABLE)
321
                                                        !! .Im=1 (IMMU ENABLE)
322
                                                        !! .dc=0 (dcache not enabled)
323
                                                        || .ic=0 (icache not enabled)
324 73 fafa1971
        !!setx  HPriv_Reset_Handler, %g1, %g2
325 35 fafa1971
        !! this instructions expands as
326 73 fafa1971
         sethi  %hi(0), %g1
327
         sethi  %hi(0x144000), %g2
328
         mov  %g1, %g1
329
         mov  %g2, %g2
330
         sllx  %g1, 0x20, %g1
331
         or  %g2, %g1, %g2
332 77 fafa1971
         !! fine espansione
333 32 fafa1971
 
334
        rdhpr   %hpstate, %g3
335 77 fafa1971
        wrpr    1, %tl             !!livello trap corrente=1
336
 
337
        !!setx  cregs_htstate_r64, %g1, %g4
338
        !! this instructions expands as         !!sostituita con la successive istruzioni (da manuale) (!! aka "clr  %g4")
339
        !! inizio espansione
340 73 fafa1971
        sethi %hh(0x0),%g1
341
        or    %g1,%hm(0x0),%g1
342
        sllx  %g1,32,%g1
343
        sethi %hi(0x0),%l1
344
        or    %l1,%g1,%l1
345
        or    %l1,%lo(0x0),%l1
346 77 fafa1971
        !!fine espansione
347 73 fafa1971
 
348 77 fafa1971
        wrhpr   %g4, %g0, %htstate      !! dovrebbe resettare il registro HTSTATE che mantiene lo stato hyperpriviliged dopo un trap
349
        wrpr    0, %tl                   !! trap level corrente=0 (No Trap)
350 35 fafa1971
        mov     0x0, %o0                !! aka "clr %o0", don't delete since used in customized IMMU miss trap
351 32 fafa1971
        jmp     %g2
352 77 fafa1971
        wrhpr   %g0, 0x800, %hpstate    !!assicura il bit 11 del registro HPSTATE al valore 1 (per evitare comportamenti non previsti)
353 32 fafa1971
        nop
354
        nop
355
 
356
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.