source: ssp_aarch64/trunk/arm64_gcc/prc_user.txt@ 356

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

set svn:mime-type to files

  • Property svn:mime-type set to text/plain; charset=utf-8
File size: 6.1 KB
Line 
1=====================================================================
2 ARM64プロセッサ依存部
3 Last Modified: '18/05/29
4=====================================================================
5
6
7(1) 対応しているターゲットシステムの種類・構成
8
9ARM64依存部は,ARMv8-A アーキテクチャをターゲットとしている.ARMv8-A は
1064ビットアーキテクチャであり命令セットレベルでもARMとは異なるため,
11ARM依存部と分けている.
12
13(2) 使用する開発環境と動作検証した条件(バージョン,オプション等)
14
15カーネルはGCCを用いてコンパイルする.動作確認したバージョンは各ターゲ
16ット依存部のドキュメントに記載する.
17
18(3) ターゲット定義事項の規定
19
20(3-1) データ型に関する規定
21
22データ型は arch/gcc/tool_stddef.h で定義されている内容で,float型と
23double型は,それぞれIEEE754準拠の単精度浮動小数点数と倍精度浮動小数点
24数である.
25
26(3-2) 割込み処理に関する規定
27
28○割込みハンドラ番号と割込み番号の割当て,両者の対応
29
30IRQ および FIQ をカーネル管理の割込みとする.
31割込みハンドラ番号と割込み番号は,例外発生時にGICC_IAR にセットされる例外番
32号を用いる.Generic Timer は27番で,割込みは0番からの番号が割り付けられ
33ている.
34
35○割込み優先度の段階数(TMIN_INTPRIの値),その設定方法
36
37割込み優先度の段階数は,ターゲット依存部毎に異なる.
38カーネル管理内の割込みの最高優先度(TMIN_INTPRI)はターゲット依存部で設定する.
39
40各割込みの割込み優先度は,CFG_INT で TMIN_INTPRI 以上の値を指定する.
41
42○dis_intとena_intのサポートの有無,その制限事項
43
44dis_intとena_intをサポートする.制限事項は特にない.
45
46○CFG_INTの制限事項と拡張(ターゲット定義で使用できる割込み属性)
47
48CFG_INTの制限事項はなく,ターゲット定義で使用可能な割込み属性は特にな
49い.
50
51○カーネル管理外の割込み
52
53カーネル管理外の割込みはサポートしない.
54IRQ,FIQ共にカーネル管理の割込みとして扱う.
55
56
57(3-3) CPU例外処理に関する規定
58
59○CPU例外ハンドラ番号
60
61ARMv8では,例外発生時の例外レベル(EL),使用スタック,実行状態(AArch32 or AArch64),
62発生した例外の種類により,ジャンプ先となる例外ベクタ中のオフセットアドレスが異なる.
63CPU例外ハンドラはこのジャンプ先のオフセットアドレスで区別することにし,
64それぞれ異なるCPU例外ハンドラ番号を割り当てる.
65
66 例外発生時の状態 例外の種類 例外番号  例外ベクタ先頭からのオフセット
67 AArch64, EL1t(EL1, SP_EL0) Synchronous 0 0x0000
68 AArch64, EL1t(EL1, SP_EL0) SError 1 0x0180
69 AArch64, EL1h(EL1, SP_EL1) Synchronous 2 0x0200
70 AArch64, EL1h(EL1, SP_EL1) SError 3 0x0380
71 AArch64, EL0 (EL0, SP_EL0) Synchronous 4 0x0400
72 AArch64, EL0 (EL0, SP_EL0) SError 5 0x0580
73 AArch32, EL0 (EL0, SP_EL0) Synchronous 6 0x0600
74 AArch32, EL0 (EL0, SP_EL0) SError 7 0x0780
75
76(3-4) CPUロック・割込みロック
77
78CPUロックは,PSTATE.I および PSTATE.F を共に 1 にすることで実現する.
79カーネル管理外の割込みをサポートしないため,全割込みロックフラグも
80CPUロックと同様の実装である.ただし CPUロックフラグとは独立したフラグ
81として全割込みロックフラグをサポートする.具体的にはSIL_LOC_INT呼び出し
82時にIおよびFフラグの状態を記憶しておき,SIL_UNL_INT で元の状態に
83戻している.
84
85(3-5) 性能評価用システム時刻の参照に関する規定
86
87get_utmをサポートしない.
88
89
90(3-6) スタートアップルーチンでの初期化内容
91
92スタートアップルーチンが前提とするプロセッサの状態はプロセッサにより異なるため,
93スタートアップルーチンはターゲット依存部に配置している.
94
95例としてQEMU VIRT ボードの場合は以下のようになっている.
96・例外レベルは既定でEL1
97・使用スタックは(EL1の場合,) SP_EL1
98・起動直後はPSTATEのFおよびIは1(IRQ,FIQ禁止)
99
100スタートアップルーチンではスタックポインタの初期化,ベクタテーブルアドレスの設定,
101メモリの初期化などの必要な処理を行い,sta_ker を呼び出す.
102
103
104(4) タイマドライバ関連の情報
105
106カーネルのタイムティックとして,Generic Timer を使用する,
107ティック周期は1msecとする.
108
109
110(5) ターゲット依存部での設定項目
111
112ターゲット依存部では以下のマクロを定義する必要がある.
113
114 ・TMAX_INTNO : 割込み番号の最大値(通常の割込み番号 + 15)
115 ・TMIN_INTPRI : 割込み優先度の最小値(最高値)
116 ・TIC_NUME : タイムティックの周期の分子
117 ・TIC_DENO : タイムティックの周期の分母
118 ・INTPRI_TIMER : タイマ割込み割込み優先度
119 ・INTATR_TIMER : タイマ割込みの割込み属性
120 ・DEFAULT_ISTKSZ : スタックサイズ(16byte単位で指定)
121
122
123(6) ディレクトリ構成・ファイル構成
124 ./arch/arm64/
125 ./MANIFEST
126 ./Makefile.prc
127 ./arm64.h
128 ./gic_config.c
129 ./gic_config.h
130 ./gic_support.S
131 ./prc_cfg1_out.h
132 ./prc_check.trb
133 ./prc_config.c
134 ./prc_config.h
135 ./prc_design.txt
136 ./prc_kernel.h
137 ./prc_kernel.trb
138 ./prc_rename.def
139 ./prc_rename.h
140 ./prc_sil.h
141 ./prc_stddef.h
142 ./prc_support.S
143 ./prc_sym.def
144 ./prc_test.h
145 ./prc_timer.c
146 ./prc_timer.cfg
147 ./prc_timer.h
148 ./prc_unrename.h
149 ./prc_user.txt
150
151(12) バージョン履歴
152
1532018/05/30
154 ・最初のリリース
Note: See TracBrowser for help on using the repository browser.