source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/mips3/vr5500/sys_support.S@ 26

Last change on this file since 26 was 26, checked in by ykominami, 12 years ago

initial

File size: 11.0 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2000-2003 by Industrial Technology Institute,
9 * Miyagi Prefectural Government, JAPAN
10 *
11 * 上記著作権者
12は,以下の (1)〜(4) の条件か,Free Software Foundation
13 * によってå…
14¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
15 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
16 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
17å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
18 * 利用と呼ぶ)することを無償で許諾する.
19 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
20 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21 * スコード中に含まれていること.
22 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
23 * 用できる形で再é…
24å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
25å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
26 * 者
27マニュアルなど)に,上記の著作権表示,この利用条件および下記
28 * の無保証規定を掲載すること.
29 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30 * 用できない形で再é…
31å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
32 * と.
33 * (a) 再é…
34å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
35マニュアルなど)に,上記の著
36 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
37 * (b) 再é…
38å¸ƒã®å½¢æ…
39‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
40 * 報告すること.
41 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
42 * 害からも,上記著作権者
43およびTOPPERSプロジェクトをå…
44è²¬ã™ã‚‹ã“と.
45 *
46 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
47お
48 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
49 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
50 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
51 */
52
53#define _MACRO_ONLY
54
55#include "jsp_kernel.h"
56#include "offset.h" /* INT_TABLE_intmaskのために必
57要 */
58
59 .set noreorder
60 .align 2
61
62/*
63 * ターゲットハードウェア依存する初期化処理
64 */
65#ifndef GDB_STUB
66
67 .section .reset
68 .global hardware_init_hook
69
70hardware_init_hook:
71
72 /*
73 * キャッシュの初期化
74 */
75 mtc0 zero, TagLo
76 mtc0 zero, TagHi
77
78 li t0, 0x80003fe0
79 li t1, 0x80000000
80loop_I_cache_clear:
81 cache Index_Store_Tag_I, +0(t0)
82 cache Index_Store_Tag_I, +1(t0)
83 bne t0, t1, loop_I_cache_clear
84 addiu t0, t0, -I_CACHE_LINE_SIZE
85
86 li t0, 0x80003fe0
87 li t1, 0x80000000
88loop_D_cache_clear:
89 cache Index_Store_Tag_D, +0(t0)
90 cache Index_Store_Tag_D, +1(t0)
91 bne t0, t1, loop_D_cache_clear
92 addiu t0, t0, -D_CACHE_LINE_SIZE
93
94 /*
95 * TLBの初期化
96 */
97 mtc0 zero, PageMask
98 mtc0 zero, EntryLo0
99 mtc0 zero, EntryLo1
100
101 li t0, TMAX_TLB
102 li t1, 0xA8000000 /* kseg1 の中のDRAMの所を使用 */
103loop_TLB_clear:
104 mtc0 t0, Index
105 mtc0 t1, EntryHi
106 addiu t0, t0, -1
107 addiu t1, t1, TLB_VPN2 /* 1ページが4kバイトで、2ページ分を
108 マッピングするため */
109 tlbwi
110 bgez t0, loop_TLB_clear
111 nop
112
113 /*
114 * ボードの初期化
115 */
116
117 /* SDRAM コントローラの初期化 */
118 li t0, 0x00
119 sb t0, 0xb8006000 /* SRAMC_SWAIT */
120
121 li t0, 0x02
122 sb t0, 0xb8005000 /* DRAMC_RCD */
123 li t0, 0x02
124 sb t0, 0xb8005010 /* DRAMC_RP */
125 li t0, 0x05
126 sb t0, 0xb8005020 /* DRAMC_RC */
127 li t0, 0x06
128 sb t0, 0xb8005030 /* DRAMC_RRC */
129 li t0, 0x04
130 sb t0, 0xb8005040 /* DRAMC_RAS */
131 li t0, 0x02
132 sb t0, 0xb8005050 /* DRAMC_LAT */
133 li t0, 0x02
134 sb t0, 0xb8005060 /* DRAMC_RSC */
135 li t0, 0x01
136 sb t0, 0xb8005070 /* DRAMC_AP */
137
138 li t0, 0x00
139 sb t0, 0xb8004000 /* DRAM_INIT */
140
141 /* DRAMリフレッシュ用タイマの初期化 */
142 li t0, 0xb4
143 sb t0, 0xb9005030 /* PCNTL */
144 li t0, 0x1f
145 sb t0, 0xb9005020 /* PCNT2 */
146 li t0, 0x00
147 sb t0, 0xb9005020 /* PCNT2 */
148
149 /* SRAMの初期化 */
150
151 /* SRAMのå…
152¨é ˜åŸŸã«å¯¾ã—て、一度書き込みを行う処理が必
153要 */
154 la t0, 0xa0000000
155 li t1, 0x00100000-4
156loop_sram_clear:
157 add t2, t1, t0
158 sw zero, (t2)
159 bgez t1, loop_sram_clear
160 addiu t1, t1, -4
161
162 /* 割り込みコントローラの設定 */
163 sb zero, 0xb9000000 /* PIC_INT0M;å…
164¨å‰²è¾¼ã¿ã®ãƒžã‚¹ã‚¯ */
165 sb zero, 0xb9000010 /* PIC_INT1M;å…
166¨å‰²è¾¼ã¿ã®ãƒžã‚¹ã‚¯ */
167 sb zero, 0xb9000020 /* PIC_INTR ;割込み要求のクリア */
168 li t0, 0x01 /* 割込み線は片方のみ使う */
169 sb t0, 0xb9000030 /* PIC_INTEN */
170
171 /*----------*/
172
173 j ra /* 呼び出しå…
174ƒã¸ãƒªã‚¿ãƒ¼ãƒ³ */
175 nop
176
177#endif /* GDB_STUB */
178
179/*============================================================================*/
180
181/* 割込み処理に関する、割込み要因の判断分岐処理のシステム依存部 */
182
183 .align 2
184 .section .text
185 .global proc_interrupt_sys
186 .global int_table /* 割込みハンドラの擬似ベクタテーブル
187 cpu_config.h, cpu_config.cで定義 */
188
189 /* 呼び出されたとき、 */
190 /* a1にステータスレジスタ */
191 /* a2に原因レジスタ */
192 /* の値がå…
193¥ã£ã¦ã„ã‚‹ */
194
195proc_interrupt_sys:
196 and t2, a2, a1 /* 割込み要求ビットにマスクをかける */
197 andi t3, t2, Cause_IP0 /* IP0ビット取り出し */
198 bne t3, zero, proc_IP0
199 andi t4, t2, Cause_IP1 /* IP1ビット取り出し */
200 bne t4, zero, proc_IP1
201 andi t5, t2, Cause_IP2 /* IP2ビット取り出し */
202 bne t5, zero, proc_IP2
203 andi t6, t2, Cause_IP3 /* IP3ビット取り出し */
204 bne t6, zero, proc_IP3
205 andi t7, t2, Cause_IP4 /* IP4ビット取り出し */
206 bne t7, zero, proc_IP4
207 andi t8, t2, Cause_IP5 /* IP5ビット取り出し */
208 bne t8, zero, proc_IP5
209 andi t9, t2, Cause_IP6 /* IP6ビット取り出し */
210 bne t9, zero, proc_IP6
211 nop
212
213 /* なんらかの原因で分岐できない場合 */
214 j join_interrupt_and_exception
215 nop
216
217/* MIPS3コアレベルで分岐したレベルでの処理 */
218/* 割込み要因番号をt0にå…
219¥ã‚Œã¦ */
220/* 割込み要求クリアのための定数をt1にå…
221¥ã‚Œã¦ */
222/* set_ICU_IPMへ飛ぶ */
223proc_IP7: /* 割込み要因IP7(タイマ)の場合 */
224 xori t1, zero, Cause_IP7
225 j set_ICU_IPM
226 ori t0, zero, INTNO_IP7
227
228proc_IP0: /* 割込み要因IP0(ソフトウェア割込み0)の場合 */
229 xori t1, zero, Cause_IP0
230 j set_ICU_IPM
231 ori t0, zero, INTNO_IP0
232
233proc_IP1: /* 割込み要因IP1(ソフトウェア割込み1)の場合 */
234 xori t1, zero, Cause_IP1
235 j set_ICU_IPM
236 ori t0, zero, INTNO_IP1
237
238proc_IP2: /* 割込み要因IP2の場合 */
239 /* 割込みコントローラ依存の定義があれば、そちらを実行する */
240#ifdef PROC_INT0
241 PROC_INT0 /* システム依存部で定義するマクロ */
242 xori t1, zero, Cause_IP2
243 j set_ICU_IPM
244 nop
245#else /* PROC_INT0 */
246 xori t1, zero, Cause_IP2
247 j set_ICU_IPM
248 ori t0, zero, INTNO_IP2
249#endif /* PROC_INT0 */
250
251proc_IP3: /* 割込み要因IP3の場合 */
252 /* 割込みコントローラ依存の定義があれば、そちらを実行する */
253#ifdef PROC_INT1
254 PROC_INT1 /* システム依存部で定義するマクロ */
255 xori t1, zero, Cause_IP3
256 j set_ICU_IPM
257 nop
258#else /* PROC_INT1 */
259 xori t1, zero, Cause_IP3
260 j set_ICU_IPM
261 ori t0, zero, INTNO_IP3
262#endif /* PROC_INT1 */
263
264proc_IP4: /* 割込み要因IP4の場合 */
265 /* 割込みコントローラ依存の定義があれば、そちらを実行する */
266#ifdef PROC_INT2
267 PROC_INT2 /* システム依存部で定義するマクロ */
268 xori t1, zero, Cause_IP4
269 j set_ICU_IPM
270 nop
271#else /* PROC_INT2 */
272 xori t1, zero, Cause_IP4
273 j set_ICU_IPM
274 ori t0, zero, INTNO_IP4
275#endif /* PROC_INT2 */
276
277proc_IP5: /* 割込み要因IP5の場合 */
278 /* 割込みコントローラ依存の定義があれば、そちらを実行する */
279#ifdef PROC_INT3
280 PROC_INT3 /* システム依存部で定義するマクロ */
281 xori t1, zero, Cause_IP5
282 j set_ICU_IPM
283 nop
284#else /* PROC_INT3 */
285 xori t1, zero, Cause_IP5
286 j set_ICU_IPM
287 ori t0, zero, INTNO_IP5
288#endif /* PROC_INT3 */
289
290proc_IP6: /* 割込み要因IP6の場合 */
291 /* 割込みコントローラ依存の定義があれば、そちらを実行する */
292#ifdef PROC_INT4
293 PROC_INT4 /* システム依存部で定義するマクロ */
294 xori t1, zero, Cause_IP6
295#else /* PROC_INT4 */
296 xori t1, zero, Cause_IP6
297 ori t0, zero, INTNO_IP6
298#endif /* PROC_INT4 */
299
300/* 割込みコントローラ依存のマスク設定 */
301set_ICU_IPM:
302
303#ifdef SET_ICU_IPM
304 SET_ICU_IPM /* 割込みマスクを設定するマクロ */
305 /* 実装
306を行うときには、下記にてt0、t1は利用するの */
307 /* で破壊しないように、注意しなければならない。 */
308#endif /* SET_ICU_IPM */
309
310/*
311 * 原因レジスタIPビットに保持されている各種割込みの割込み要求をクリアする。
312 * t1には、割込み要求ビットを反転したものがå…
313¥ã£ã¦ã„る。
314 */
315 mfc0 t8, Cause
316 and t8, t8, t1
317 mtc0 t8, Cause
318
319/* ステータスレジスタのマスク設定とC言語ルーチン呼び出し */
320/* t0に割込み要因番号が設定された状æ…
321‹ã§ã“こに来る */
322 la t3, int_table /* 擬似ベクタアドレス */
323 sll t4, t0, 3 /* 割込み要因番号を8倍
324 TNT_TABLE型は、
325 ハンドラのアドレス(4バイト)
326 +MIPS3コアの割込みマスク(4バイト)
327 の、合計8バイト。 */
328 add t5, t3, t4 /* ベクタアドレスを算出 */
329 lw t6, INT_TABLE_intmask(t5)
330 /* IPM(割込み許可ビット)読み出し。
331 割込みマスク以外の値は、
332 IEビットはセット
333 EXLビットはリセット
334 状æ…
335‹ã«ãªã£ã¦ã„る。*/
336 lw t7, (t5) /* C言語ルーチンå…
337ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹èª­ã¿å‡ºã— */
338
339 jalr ra, t7 /* C言語ルーチン呼び出し */
340 mtc0 t6, Status /* 割込み許可;ステータスレジスタのマスク設定*/
341
342 mfc0 t0, Status
343 ori t0, t0, SR_EXL /* 割込み禁止;IEビットの値は保持しなければなら
344 ないのでEXLビットを用いる。*/
345 mtc0 t0, Status
346
347 /* CP0ハザードのための時間稼ぎ */
348#ifdef NOP_FOR_CP0_HAZARD
349 NOP_FOR_CP0_HAZARD
350#endif /* NOP_FOR_CP0_HAZARD */
351
352 j join_interrupt_and_exception
353 nop
354
Note: See TracBrowser for help on using the repository browser.