[384] | 1 | =====================================================================
|
---|
| 2 | BCM283xチップ依存部
|
---|
| 3 | Last Modified: '19/04/16
|
---|
| 4 | =====================================================================
|
---|
| 5 |
|
---|
| 6 |
|
---|
| 7 | (1) 対応しているターゲットシステムの種類・構成
|
---|
| 8 |
|
---|
| 9 | bcm283xチップ依存部は,主に Raspberry Pi で使用される Broadcom製チップを
|
---|
| 10 | ターゲットとする.現時点では Raspberru Pi 3B に搭載されるBCM2837 をサポートする.
|
---|
| 11 |
|
---|
| 12 | (2) 使用する開発環境と動作検証した条件(バージョン,オプション等)
|
---|
| 13 |
|
---|
| 14 | カーネルはGCCを用いてコンパイルする.動作確認したバージョンは各ターゲ
|
---|
| 15 | ット依存部のドキュメントに記載する.
|
---|
| 16 |
|
---|
| 17 | (3) ターゲット定義事項の規定
|
---|
| 18 |
|
---|
| 19 | (3-1) 割込み処理に関する規定
|
---|
| 20 |
|
---|
| 21 | (3-1-1) 概要
|
---|
| 22 |
|
---|
| 23 | BCM283x は独自の割込みコントローラを搭載し,以下の特徴を持つ.
|
---|
| 24 | ・割込み優先レベルはサポートしない.
|
---|
| 25 | ・割込みは全てレベルトリガである.したがって割込み要求フラグは
|
---|
| 26 | 割込み発生元のデバイスを直接操作してクリアする必要がある.
|
---|
| 27 |
|
---|
| 28 | BCM283x依存部では,IRQ をカーネル管理の割込み,FIQをカーネル管理外の割込みとする.
|
---|
| 29 |
|
---|
| 30 |
|
---|
| 31 | (3-1-2) 割込みハンドラ番号と割込み番号の割当て,両者の対応
|
---|
| 32 |
|
---|
| 33 | 割込みハンドラ番号と割込み番号は,BCM2835及びBCM2836の
|
---|
| 34 | ペリフェラルマニュアル(下記a及びb)から,ペンディングレジスタのビット位置に基づいて
|
---|
| 35 | 0から127の番号を割り当てる.(個々の定義は bcm2837.h を参照)
|
---|
| 36 |
|
---|
| 37 | 0 ... 31 Core interrupt (下記aのP16 「Core0 interrupt source」に対応)
|
---|
| 38 | 32 ... 63 ARM peripherals interrupt(bのP113「Basic pending register」に対応)
|
---|
| 39 | 64 ... 95 ARM peripherals interrupt(bのP115「GPU pending register 1」に対応)
|
---|
| 40 | 96 ...127 ARM peripherals interrupt(bのP115「GPU pending register 2」に対応)
|
---|
| 41 |
|
---|
| 42 | (a) QA7(ARM Quad A7 core)
|
---|
| 43 | https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2836/QA7_rev3.4.pdf
|
---|
| 44 |
|
---|
| 45 | (b) BCM2835 ARM Peripherals
|
---|
| 46 | https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.pdf
|
---|
| 47 |
|
---|
| 48 |
|
---|
| 49 | (3-1-3) 割込み優先度の段階数(TMIN_INTPRIの値),その設定方法
|
---|
| 50 |
|
---|
| 51 | 割込み優先度の段階数は,ターゲット依存部毎に異なる.
|
---|
| 52 | BCM283x の割込みコントローラは優先度制御機能を持たないためソフトウェアで実現する.
|
---|
| 53 | そのため段階数を独自に設定することが可能である.
|
---|
| 54 |
|
---|
| 55 | カーネル管理内の割込みに対する最高優先度(TMIN_INTPRI)はチップ依存部で
|
---|
| 56 | 既定値を定義しているが,ターゲット依存部で設定することも可能である.
|
---|
| 57 |
|
---|
| 58 | 各割込みの割込み優先度は,CFG_INT で設定する.優先度は TMIN_INTPRI 以上の値
|
---|
| 59 | (優先度としては低い値)を指定する.
|
---|
| 60 |
|
---|
| 61 | (3-1-4) dis_intとena_intのサポートの有無,その制限事項
|
---|
| 62 |
|
---|
| 63 | dis_int と ena_int はサポートしない
|
---|
| 64 |
|
---|
| 65 |
|
---|
| 66 | (3-1-5) CFG_INTの制限事項と拡張(ターゲット定義で使用できる割込み属性)
|
---|
| 67 |
|
---|
| 68 | レベル割込みしかサポートしないため,エッジ/レベルのトリガ設定は意味をもたない.
|
---|
| 69 | その他,ターゲット独自に使用可能な割込み属性はない.
|
---|
| 70 |
|
---|
| 71 |
|
---|
| 72 | (3-1-6) カーネル管理外の割込み
|
---|
| 73 |
|
---|
| 74 | FIQ割込みをカーネル管理外の割込みとして扱う.
|
---|
| 75 |
|
---|
| 76 | FIQ割込みが発生すると該当する割込みベクタからレジスタの退避を行なった後に
|
---|
| 77 | call_fiq_handler (core_config.c) が呼び出される.この関数は,
|
---|
| 78 | コアの全ての例外がマスクされた状態(ステータスレジスタのD,A,I,Fが全て1)で
|
---|
| 79 | 呼び出される.
|
---|
| 80 |
|
---|
| 81 | FIQを利用するための設定,発生したFIQ 割込みに対する要因判別,
|
---|
| 82 | 及び対応するハンドラ等の処理は独自に実装する必要がある.
|
---|
| 83 |
|
---|
| 84 | カーネル管理外の割込みを設定するためのAPIはサポートしない.
|
---|
| 85 |
|
---|
| 86 |
|
---|
| 87 | (3-2) CPUロック・割込みロック
|
---|
| 88 |
|
---|
| 89 | CPUロックは,ステータスレジスタのIビットの値で判別する.
|
---|
| 90 | 全割込みロックフラグの実装ではこれに加えFビットも使用する.
|
---|
| 91 |
|
---|
| 92 | CPUロックフラグは割込みロックフラグとは独立したフラグとしてサポートする.
|
---|
| 93 | そのため,SIL_LOC_INT呼び出し時はIフラグの状態を記憶し,
|
---|
| 94 | SIL_UNL_INT呼び出し時に元の状態に戻している.
|
---|
| 95 |
|
---|
| 96 |
|
---|
| 97 | (3-3) 性能評価用システム時刻の参照に関する規定
|
---|
| 98 |
|
---|
| 99 | get_utmをサポートしない.
|
---|
| 100 |
|
---|
| 101 |
|
---|
| 102 | (3-4) スタートアップルーチンでの初期化内容
|
---|
| 103 |
|
---|
| 104 | スタートアップルーチンはターゲット依存部のドキュメントに記載する.
|
---|
| 105 |
|
---|
| 106 |
|
---|
| 107 | (4) ディレクトリ構成・ファイル構成
|
---|
| 108 | ./arch/arm64_gcc/bcm283x/
|
---|
| 109 | MANIFEST
|
---|
| 110 | Makefile.chip
|
---|
| 111 | bcm2837.h
|
---|
| 112 | chip_cfg1_out.h
|
---|
| 113 | chip_check.trb
|
---|
| 114 | chip_config.c
|
---|
| 115 | chip_config.h
|
---|
| 116 | chip_design.txt
|
---|
| 117 | chip_kernel.h
|
---|
| 118 | chip_kernel.trb
|
---|
| 119 | chip_rename.def
|
---|
| 120 | chip_rename.h
|
---|
| 121 | chip_serial.c
|
---|
| 122 | chip_serial.cfg
|
---|
| 123 | chip_serial.h
|
---|
| 124 | chip_sil.h
|
---|
| 125 | chip_stddef.h
|
---|
| 126 | chip_support.S
|
---|
| 127 | chip_sym.def
|
---|
| 128 | chip_test.h
|
---|
| 129 | chip_timer.cfg
|
---|
| 130 | chip_timer.h
|
---|
| 131 | chip_unrename.h
|
---|
| 132 | chip_user.txt
|
---|
| 133 | pl011.h
|
---|
| 134 |
|
---|
| 135 | (12) バージョン履歴
|
---|
| 136 |
|
---|
| 137 | 2018/05/30
|
---|
| 138 | ・最初のリリース
|
---|
| 139 | 2019/04/15
|
---|
| 140 | ・BCM283xチップ依存部の分離に合わせて修正
|
---|