source: ssp_rpi3/trunk/arch/arm64_gcc/bcm283x/chip_design.txt@ 384

Last change on this file since 384 was 384, checked in by nmir-saito, 5 years ago

add target dependent files of ssp for rpi3

  • Property svn:keywords set to Id
File size: 7.7 KB
Line 
1=====================================================================
2 BCM283x チップ依存部設計メモ
3 Last Modified: 16 Apr 2019
4=====================================================================
5
6○このドキュメントの位置づけ
7
8このドキュメントは,TOPPERS/SSPカーネルをBCM283xに移植する際の
9チップ固有事項
10に関する設計メモである.
11
12(参考)
13
14(a) QA7(ARM Quad A7 core)
15https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2836/QA7_rev3.4.pdf
16
17(b) BCM2835 ARM Peripherals
18https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.
19pdf
20
21
22[CPUモード]
23
24●リセット時の状æ…
25‹
26
27リセット時,BCM283x (Cortex-A53) は,EL3h (使用スタック SP_EL3)で起動する.
28
29
30[割込み]
31
32
33●割込み優å…
34ˆåº¦
35
36BCM283x の割込みコントローラは優å…
37ˆåº¦ãŒå®Ÿè£…
38されていない.そのため
39優å…
40ˆåº¦ã«åŸºã¥ãå‰²è¾¼ã¿ã®ãƒžã‚¹ã‚¯ã‚’ソフトウェアで擬似的に実装
41している.
42割込みの内
43部優å…
44ˆåº¦ã®å€¤ã¯å¤–部優å…
45ˆåº¦ã®ç¬¦å·ã‚’反転したものを用いるため,
46値の大きい方が高優å…
47ˆåº¦ã¨ãªã‚‹ï¼Ž
48
49優å…
50ˆåº¦ã®ç¯„囲は自由に決めることができる.既定の最高値は15となっている.
51
52
53●割込み/例外の受付
54
55割込み信号を受信すると,BCM283xのペンディングレジスタの該当するビットがセットされる.
56割込み番号はこのレジスタにセットされる値を使用する.
57
58割込みハンドラ番号と割込み番号は,BCM2835及びBCM2836の
59ペリフェラルマニュアル(下記a及びb)から,ペンディングレジスタのビット位置に基づいて
600から127の番号を割り当てる.(個々
61の定義は bcm2837.h を参ç…
62§)
63
64 0 ... 31 Core interrupt (下記aのP16 「Core0 interrupt source」に対応)
6532 ... 63 ARM peripherals interrupt(bのP113「Basic pending register」に対応)
6664 ... 95 ARM peripherals interrupt(bのP115「GPU pending register 1」に対応)
6796 ...127 ARM peripherals interrupt(bのP115「GPU pending register 2」に対応)
68
69割込みを受け付けると例外レベルと例外の種類に応じた所定の位置から
70実行を開始する点はコア依存部の説明と同様であるが,割込みの優å…
71ˆåº¦ã®
72処理内
73容については以下のようになる.
74
75まず割込みのå…
76¥å£å‡¦ç†ã§ã¯ä»¥ä¸‹ã®å‡¦ç†ã‚’行う:
77・割込み発生時,割込み要因をå…
78ƒã«å„ªå…
79ˆåº¦ã‚’取得する
80・優å…
81ˆåº¦ã‚’å…
82ƒã«ï¼Œãã®å‰²è¾¼ã¿å„ªå…
83ˆãƒ¬ãƒ™ãƒ«ã§å½“該の割込み要因をマスクするかどうかを決定する.
84・その優å…
85ˆåº¦ã§ãƒžã‚¹ã‚¯ã™ã‚‹å¿…
86要のある割込みをå…
87¨ã¦ãƒžã‚¹ã‚¯ã™ã‚‹ï¼Ž
88・CPUロックを解除し,割込みハンドラを呼び出す.
89
90割込みハンドラからのリターン後,出口処理にå…
91¥ã‚‹å‰ã«å„ªå…
92ˆåº¦ã‚’å…
93ƒã«æˆ»ã™ï¼š
94・割込み発生前の割込み優å…
95ˆåº¦ã‚’スタックから取得する
96・割込み発生前の優å…
97ˆåº¦ã‚’å…
98ƒã«ï¼Œãã®å‰²è¾¼ã¿å„ªå…
99ˆåº¦ã§ãƒžã‚¹ã‚¯è§£é™¤ã®å¯¾è±¡ã¨ãªã‚‹å‰²è¾¼ã¿ã‚’決める
100・対象となる割込みの割込みマスクをすべて解除する.
101
102割込み要因と優å…
103ˆåº¦ã¨ã®å¯¾å¿œï¼ŒãŠã‚ˆã³å„ªå…
104ˆåº¦ã¨ãƒžã‚¹ã‚¯ãƒ‘ターンとの対応には
105それぞれ intpri_table,及び iipm_mask_table というé…
106åˆ—を使用する.
107これらは CFG_INT の設定値をもとにコンフィギュレータが kernel_cfg.c に出力する.
108
109
110CPU例外の例外番号については,コア依存部と同様のため省略する.
111
112
113●例外/割込みの受付
114
115・例外/割込みを受付けると,受付け時にアクティブなスタック上に以下のコ
116 ンテキストを保存する.
117
118 ---------------
119 | GICC_PMR | <- new SP
120 ----------------
121 | 割込み/例外番号|
122 ----------------
123 | ESR_ELx |
124 ----------------
125 | ELR_ELx |
126 ----------------
127 | SPSR_ELx |
128 ----------------
129 | X30 |
130 ----------------
131 | X29 |
132 ----------------
133 | : |
134 | : |
135 ----------------
136 | X1 |
137 ----------------
138 | X0 |
139 ----------------
140 | | <- old SP
141
142
143割込み/例外発生時の主なシーケンスは次のようになる(遷移å…
144ˆã®ä¾‹å¤–レベルをELxと表現する)
145
146(ハードウェアの処理)
147 ・PSTATEをSPSR_ELxに保存する
148 ・リターンアドレスをELR_ELxに保存する
149 ・PSTATE.{D,A,I,F}を1にセットする
150 ・同期例外およびSError割込みのとき,例外要因情
151報をESR_ELxに保存する
152 ・スタックポインタをSP_ELxに切り替える
153 ・(CPU例外の場合)例外番号をx22に格納
154 ・ELxへ遷移する
155
156(ソフトウェアでの処理)
157 ・(発生時にSP_EL0を使用していた場合)スタックを割込み発生前(SP_EL0)に戻す
158 ・汎用レジスタ(X0-X30)をスタックに保存
159 ・SPSR_ELx, ESR_ELx, ELR_ELxをスタックに保存
160 ・(割込み)ペンディングレジスタから割込み番号を取得
161 (CPU例外)例外番号をx22から取得
162 ・割込み番号,例外番号をスタックに保存
163 ・割込み発生前の割込み優å…
164ˆåº¦ãƒžã‚¹ã‚¯ã‚’スタックに保存
165 ・受け付けた割込みの割込み優å…
166ˆåº¦ã‚’変数 current_intpri にセット
167 ・(割込みの場合)割込み優å…
168ˆåº¦ã®å€¤ã‚’å…
169ƒã«ï¼Œå‰²è¾¼ã¿ã‚’マスクする
170 ・割込み/例外ネストカウンタのインクリメント
171 ・(割込みの場合)CPUロック解除
172 (カーネル管理のCPU例外の場合)例外発生前のPSTATE状æ…
173‹ã«è¨­å®š
174 ・ハンドラのé…
175åˆ—からアドレスを読み込みハンドラを実行する
176
177●例外/割込みからのリターン
178
179(ソフトウェアでの処理)
180 ・CPUロック状æ…
181‹ã¸ç§»è¡Œ
182 ・割込み/例外ネストカウンタのデクリメント
183 ・(割込みの場合)割込み発生前の優å…
184ˆåº¦ãƒžã‚¹ã‚¯ã‚’戻し,優å…
185ˆåº¦ã«å¿œã˜ã¦å‰²è¾¼ã¿ã®ãƒžã‚¹ã‚¯ã‚’解除する
186 (CPU例外の場合)CPU管理外の例外の場合,例外発生å…
187ƒã¸ãƒªã‚¿ãƒ¼ãƒ³ã™ã‚‹
188 ・戻りå…
189ˆã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚„システム状æ…
190‹ã«å¿œã˜ã¦å‰²è¾¼ã¿/例外発生å…
191ƒã¸ãƒªã‚¿ãƒ¼ãƒ³
192 または遅
193延ディスパッチを実行する
194 ・ELR_ELxに戻りå…
195ˆã‚¢ãƒ‰ãƒ¬ã‚¹ï¼ŒSPSR_ELxにプロセッサ状æ…
196‹ãŒãã‚Œãžã‚Œ
197 セットされている状æ…
198‹ã§eret命令を実行し,割込み/例外からリターン
199
200
201○ OSの実装
202
203
2041.チップ依存部名称: bcm283x
205
206現状では Raspberry Pi3B に搭載されるBCM2837のみサポートするが,
207Raspberry Pi に搭載されるプロセッサBCM283x (x=5,6,7)は周辺回路について
208å…
209±é€šã™ã‚‹éƒ¨åˆ†ãŒå¤šãï¼Œã¾ã¨ã‚ã¦æ‰±ã†ã“とにするため依存部名称を bcm283x とした
210
211
2122. 外部優å…
213ˆåº¦ã¨å†…
214部優å…
215ˆåº¦
216
217外部優å…
218ˆåº¦ã¨ã¯APIで指定する割込み優å…
219ˆåº¦(PRI型)のことであり,値が小さい
220ほど優å…
221ˆåº¦ãŒé«˜ã„.割込みハンドラには,-1から連続した負の値を設定可能で
222ある.内
223部優å…
224ˆåº¦ã¯å¤–部優å…
225ˆåº¦ã®ç¬¦å·ã‚’反転した値とする.
226外部優å…
227ˆåº¦ã¨å†…
228部優å…
229ˆåº¦ã®å¤‰æ›ã¯ä»¥ä¸‹ã®ãƒžã‚¯ãƒ­ã§è¡¨ç¾ã•ã‚Œã‚‹ï¼Ž
230
231/* 外部表現への変換 */
232#define EXT_IPM(pri) (-pri)
233
234/* 内
235部表現への変換 */
236#define INT_IPM(ipm) (-ipm)
237
238
2393. カーネル管理内
240の最高優å…
241ˆåº¦(CPUロック状æ…
242‹ã§ã®å„ªå…
243ˆåº¦ãƒžã‚¹ã‚¯)
244
245CPUロック状æ…
246‹ã®å®Ÿè£…
247に優å…
248ˆåº¦ã¯ç”¨ã„ていない.
249また優å…
250ˆåº¦åˆ¶å¾¡ã¯ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã§å®Ÿè£…
251しているため,
252カーネル管理内
253の割込みの最高優å…
254ˆåº¦ã¯è‡ªç”±ã«è¨­å®šå¯èƒ½ã§ã‚る.
255
256チップ依存部で既定値として-15に定義しているが,必
257要に応じて
258ターゲット毎に必
259要な値を設定することができる.
260
261
262以上.
Note: See TracBrowser for help on using the repository browser.