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