source: asp3_wo_tecs/trunk/arch/arm_gcc/doc/gic_design.txt@ 306

Last change on this file since 306 was 306, checked in by ertl-honda, 7 years ago

3.1.0を反映

File size: 12.1 KB
Line 
1
2 TOPPERS/ASP3カーネル
3 GIC(ARM Generic Interrupt Controller)依存部 設計メモ
4
5 対応バージョン: Release 3.0.0
6 最終更新: 2016年1月16日
7
8----------------------------------------------------------------------
9 TOPPERS/ASP Kernel
10 Toyohashi Open Platform for Embedded Real-Time Systems/
11 Advanced Standard Profile Kernel
12
13 Copyright (C) 2014-2016 by Embedded and Real-Time Systems Laboratory
14 Graduate School of Information Science, Nagoya Univ., JAPAN
15
16 上記著作権者
17は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
18 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
19 変・再é…
20å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
21 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
22 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
23 スコード中に含まれていること.
24 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
25 用できる形で再é…
26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
27å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
28 者
29マニュアルなど)に,上記の著作権表示,この利用条件および下記
30 の無保証規定を掲載すること.
31 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
32 用できない形で再é…
33å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
34 と.
35 (a) 再é…
36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
37マニュアルなど)に,上記の著
38 作権表示,この利用条件および下記の無保証規定を掲載すること.
39 (b) 再é…
40å¸ƒã®å½¢æ…
41‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
42 報告すること.
43 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
44 害からも,上記著作権者
45およびTOPPERSプロジェクトをå…
46è²¬ã™ã‚‹ã“と.
47 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
48 由に基づく請求からも,上記著作権者
49およびTOPPERSプロジェクトを
50 å…
51è²¬ã™ã‚‹ã“と.
52
53 本ソフトウェアは,無保証で提供されているものである.上記著作権者
54お
55 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
56 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
57 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
58 の責任を負わない.
59
60 $Id: gic_design.txt 533 2016-01-15 23:29:33Z ertl-hiro $
61----------------------------------------------------------------------
62
63○目次
64
65・参考文献
66・GIC依存部の位置づけ
67 - GIC依存部を構成するファイル
68・チップ依存のパラメータ
69 - アプリケーションから参ç…
70§ã§ãã‚‹ãƒ‘ラメータ
71 - カーネル内
72部で使用するパラメータ
73・GICにおける割込みハンドラおよびCPU例外ハンドラの出å…
74¥å£å‡¦ç†
75 - GICにおける割込みハンドラの出å…
76¥å£å‡¦ç†
77 - GICにおけるCPU例外ハンドラの出å…
78¥å£å‡¦ç†
79
80○参考文献
81
82[1] TOPPERSプロジェクト 設計メモ「GIC(ARM Generic Interrupt
83Controller)に関するメモ」.
84
85○GIC依存部の位置づけ
86
87GIC依存部は,カーネルのターゲット依存部の中で,GICアーキテクチャ
88(GICv1およびGICv2)に準拠した割込みコントローラを持つチップにå…
89±é€šã«ä½¿
90用できる部分である.また,GICの前身と思われるARM11 MPCoreのDistributed
91Interrupt Controllerにも適用できるように実装
92する.
93
94TOPPERS_SAFEG_SECUREがマクロ定義されている場合には,GICがセキュリティ拡
95張されていることを想定し,セキュアモードで使用するものとする.
96
97GICv1とGICv2でレジスタ名が変更になっているが,ソースコード中では,
98GICv2のレジスタ名を使用する.
99
100●GIC依存部を構成するファイル
101
102GIC依存部は,次の3つのファイルで構成される.
103
104 arch/arm_gcc/common/
105 gic_kernel_impl.h カーネルの割込みGIC依存部のヘッダファイル
106 gic_kernel_impl.c カーネルの割込みGIC依存部
107 gic_support.S カーネルの割込みGIC依存部のアセンブリ言語部
108
109○チップ依存のパラメータ
110
111●アプリケーションから参ç…
112§ã§ãã‚‹ãƒ‘ラメータ
113
114target_kernel.h(または,そこからインクルードされるファイル)で,以下の
115定数をマクロ定義しておく.
116
117(1) TMIN_INTPRI 割込み優å…
118ˆåº¦ã®æœ€å°å€¤ï¼ˆæœ€é«˜å€¤ï¼‰
119(2) TMAX_INTPRI 割込み優å…
120ˆåº¦ã®æœ€å¤§å€¤ï¼ˆæœ€ä½Žå€¤ï¼‰
121
122TMAX_INTPRIは,-1に定義する.TMAX_INTPRIは,ターゲットチップのGICでサポー
123トする割込み優å…
124ˆåº¦ã®æ®µæ•°ã«ã‚ˆã‚Šï¼Œ-15,-31,-63,-127,-255のいずれかに定
125義する.
126
127●カーネル内
128部で使用するパラメータ
129
130target_kernel_impl.h(または,そこからインクルードされるファイル)から
131gic_kernel_impl.hをインクルードする前に,必
132要に応じて,以下の定数をマク
133ロ定義しておく.
134
135(1) GIC_TNUM_INTNO 割込みの数
136
137ターゲットチップのGICがサポートする割込みの数.SGI(Software Generated
138Interrupt),PPI(Private Peripheral Interrupt),SPI(Shared
139Peripheral Interrupt)の合計数.
140
141(2) GICC_BASE CPUインタフェースのベースアドレス
142(3) GICD_BASE ディストリビュータのベースアドレス
143
144GICのCPUインタフェースおよびディストリビュータのベースアドレス.
145
146(4) TOPPERS_SAFEG_SECURE セキュアモード(オプション)
147
148セキュアモードでカーネルを動作させ,FIQをカーネル管理の割込みと扱う場合
149に,このシンボルをマクロ定義する.
150
151(5) GIC_ARM11MPCORE ARM11 MPCoreへの対応(オプション)
152
153ARM11 MPCoreのDistributed Interrupt Controllerの場合には,このシンボル
154をマクロ定義する.
155
156○GICにおける割込みハンドラおよびCPU例外ハンドラの出å…
157¥å£å‡¦ç†
158
159●GICにおける割込みハンドラの出å…
160¥å£å‡¦ç†
161
162GICにおける割込みハンドラの出å…
163¥å£å‡¦ç†ï¼ˆirc_begin_intおよびirc_end_int)
164の実現方法には,いくつかのアプローチがある.
165
166【アプローチ1】
167
168このアプローチは,GICの想定している(よって,最もシンプルな)ものである.
169割込みハンドラのå…
170¥å£ã§ã¯ä½•ã‚‚行わず,割込みハンドラの出口でEOIを発行する.
171
172----------------------------------------
173ALABEL(irc_begin_int)
174 /*
175 * 割込み要因を取得する.
176 */
177 ldr r1, =GICC_IAR
178 ldr r3, [r1]
179 push {r3} /* irc_end_intで用いる情
180報を保存 */
181
182 /*
183 * 割込み番号を返値としてリターンする.
184 */
185 lsl r0, r3, #22 /* 下位10ビットを取り出す */
186 lsr r0, r0, #22
187 bx lr
188
189ALABEL(irc_end_int)
190 /*
191 * EOIを発行してリターンする.
192 */
193 pop {r3} /* irc_begin_intで保存した情
194報を復帰 */
195 ldr r1, =GICC_EOIR /* EOIレジスタへの書込み */
196 str r3, [r1]
197 bx lr
198----------------------------------------
199
200このアプローチには,次の問題点がある.
201
202(1) 割込みハンドラからのリターン時に,割込み優å…
203ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
204ƒã«æˆ»ã™ã¨ã„
205う仕様を実装
206していると言えるか微妙である.特に,CPU例外ハンドラをこれと
207整合するように実装
208した場合,割込み優å…
209ˆåº¦ãƒžã‚¹ã‚¯ã‚’一切操作しないという実
210装
211になり,仕様に準拠していないように思われる.
212
213(2) 割込み優å…
214ˆåº¦ãŒ256段階ある時(この場合,ARM GICでは,割込み優å…
215ˆåº¦ã®
216すべてのビットをプリエンプションに使うという設定ができない)に,このア
217プローチでは,割込み優å…
218ˆåº¦ã®ã™ã¹ã¦ã®ãƒ“ットをプリエンプションに使うこと
219ができず,TOPPERS標準割込み処理モデルからの逸脱となる.
220
221(3) 割込みハンドラから割込み優å…
222ˆåº¦ãƒžã‚¹ã‚¯ã‚’参ç…
223§ï¼è¨­å®šã™ã‚‹ã“とができない.
224ASP3カーネルでは問題ないが,ATK2カーネルでは,このアプローチは用いるこ
225とができない.
226
227【アプローチ2】
228
229問題点(1)と(3)を解決するためには,発生した割込み要因の割込み優å…
230ˆåº¦ã‚’,
231割込み優å…
232ˆåº¦ãƒžã‚¹ã‚¯ã«è¨­å®šã—ておく方法が考えられる.
233
234----------------------------------------
235ALABEL(irc_begin_int)
236 /*
237 * 割込み要因を取得する.
238 */
239 ldr r1, =GICC_IAR
240 ldr r3, [r1]
241
242 /*
243 * 割込み要因の割込み優å…
244ˆåº¦ã‚’求め,割込み優å…
245ˆåº¦ãƒžã‚¹ã‚¯ã«è¨­å®šã™ã‚‹ï¼Ž
246 */
247 ldr r1, =GICC_RPR /* 受け付けた割込みの割込み優å…
248ˆåº¦ã‚’取得 */
249 ldr r0, [r1]
250 ldr r1, =GICC_PMR /* 割込み発生前の割込み優å…
251ˆåº¦ã‚’取得 */
252 ldr r2, [r1]
253 str r0, [r1] /* 新しい割込み優å…
254ˆåº¦ãƒžã‚¹ã‚¯ã‚’セットする */
255 DATA_SYNC_BARRIER /* 割込み優å…
256ˆåº¦ãƒžã‚¹ã‚¯ãŒã‚»ãƒƒãƒˆã•ã‚Œã‚‹ã®ã‚’å¾…
257つ */
258 push {r2,r3} /* irc_end_intで用いる情
259報を保存 */
260
261 /*
262 * 割込み番号を返値としてリターンする.
263 */
264 lsl r0, r3, #22 /* 下位10ビットを取り出す */
265 lsr r0, r0, #22
266 bx lr
267
268ALABEL(irc_end_int)
269 /*
270 * EOIを発行する.
271 */
272 pop {r2,r3} /* irc_begin_intで保存した情
273報を復帰 */
274 ldr r1, =GICC_EOIR /* EOIレジスタへの書込み */
275 str r3, [r1]
276
277 /*
278 * 割込み優å…
279ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
280ƒã«æˆ»ã—てリターンする.
281 */
282 ldr r1, =GICC_PMR
283 str r2, [r1]
284 bx lr
285----------------------------------------
286
287しかし,このアプローチでは,アプローチ1の2つめの欠点は解決できない.
288
289【アプローチ3】
290
291アプローチ1の2つめの欠点を解決するためには,割込みハンドラのå…
292¥å£å‡¦ç†ã§
293EOIを発行してしまう方法が考えられる.
294
295----------------------------------------
296ALABEL(irc_begin_int)
297 /*
298 * 割込み要因を取得する.
299 */
300 ldr r1, =GICC_IAR
301 ldr r3, [r1]
302
303 /*
304 * 割込み要因の割込み優å…
305ˆåº¦ã‚’求め,割込み優å…
306ˆåº¦ãƒžã‚¹ã‚¯ã«è¨­å®šã™ã‚‹ï¼Ž
307 */
308 ldr r1, =GICC_RPR /* 受け付けた割込みの割込み優å…
309ˆåº¦ã‚’取得 */
310 ldr r0, [r1]
311 ldr r1, =GICC_PMR /* 割込み発生前の割込み優å…
312ˆåº¦ã‚’取得 */
313 ldr r2, [r1]
314 str r0, [r1] /* 新しい割込み優å…
315ˆåº¦ãƒžã‚¹ã‚¯ã‚’セットする */
316 DATA_SYNC_BARRIER /* 割込み優å…
317ˆåº¦ãƒžã‚¹ã‚¯ãŒã‚»ãƒƒãƒˆã•ã‚Œã‚‹ã®ã‚’å¾…
318つ */
319 push {r2} /* irc_end_intで用いる情
320報を保存 */
321
322 /*
323 * EOIを発行する.
324 */
325 ldr r1, =GICC_EOIR /* EOIレジスタへの書込み */
326 str r3, [r1]
327
328 /*
329 * 割込み番号を返値としてリターンする.
330 */
331 lsl r0, r3, #22 /* 下位10ビットを取り出す */
332 lsr r0, r0, #22
333 bx lr
334
335ALABEL(irc_end_int)
336 /*
337 * 割込み優å…
338ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
339ƒã«æˆ»ã—てリターンする.
340 */
341 pop {r2} /* irc_begin_intで保存した情
342報を復帰 */
343 ldr r1, =GICC_PMR /* 割込み優å…
344ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
345ƒã«æˆ»ã™ */
346 str r2, [r1]
347 bx lr
348----------------------------------------
349
350現在の実装
351では,アプローチ3を採用している.
352
353●GICにおけるCPU例外ハンドラの出å…
354¥å£å‡¦ç†
355
356GICにおけるCPU例外ハンドラのå…
357¥å£å‡¦ç†ï¼ˆirc_begin_exc)では,CPU例外発生
358前の割込み優å…
359ˆåº¦ãƒžã‚¹ã‚¯ã‚’スタックに保存し,CPU例外ハンドラのå…
360¥å£å‡¦ç†
361(irc_end_exc)で割込み優å…
362ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
363ƒã«æˆ»ã™ï¼Ž
364
365----------------------------------------
366ALABEL(irc_begin_exc)
367 /*
368 * 割込み優å…
369ˆåº¦ãƒžã‚¹ã‚¯ã‚’保存する.
370 */
371 ldr r1, =GICC_PMR /* 現在の割込み優å…
372ˆåº¦ã‚’取得 */
373 ldr r2, [r1]
374 push {r2} /* irc_end_excで用いる情
375報を保存 */
376 bx lr
377----------------------------------------
378ALABEL(irc_end_exc)
379 /*
380 * 割込み優å…
381ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
382ƒã«æˆ»ã™ï¼Ž
383 */
384 pop {r2} /* irc_begin_excで保存した情
385報を復帰 */
386 ldr r1, =GICC_PMR /* 割込み優å…
387ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
388ƒã«æˆ»ã™ */
389 str r2, [r1]
390 bx lr
391----------------------------------------
392
393以上
Note: See TracBrowser for help on using the repository browser.