===================================================================== ARM64プロセッサ依存部 Last Modified: '19/04/16 ===================================================================== (1) 対応しているターゲットシステムの種類・構成 ARM64依存部は,ARMv8-A アーキテクチャをターゲットとしている.ARMv8-A は 64ビットアーキテクチャであり命令セットレベルでもARMとは異なるため, ARM依存部と分けている. コア略称等は次の通り. コア略称:arm64 開発環境略称:gcc (2) 使用する開発環境と動作検証した条件(バージョン,オプション等) カーネルはGCCを用いてコンパイルする.動作確認したバージョンは各ターゲ ット依存部のドキュメントに記載する. (3) ターゲット定義事項の規定 (3-1) データ型に関する規定 データ型は arch/gcc/tool_stddef.h で定義されている内容で,float型と double型は,それぞれIEEE754準拠の単精度浮動小数点数と倍精度浮動小数点 数である. このほか,スタック領域を確保するためのデータ型のために int128_t および uint128_t を定義している. (3-2) 割込み処理に関する規定 チップに搭載される割込みコントローラにより異なる. そのため,以下の事項についてはチップ依存部に記載する. ・割込みハンドラ番号と割込み番号の割当て,両者の対応 ・割込み優先度の段階数(TMIN_INTPRIの値),その設定方法 ・dis_intとena_intのサポートの有無,その制限事項 ・CFG_INTの制限事項と拡張(ターゲット定義で使用できる割込み属性) ・カーネル管理外の割込み (3-3) CPU例外処理に関する規定 ・CPU例外ハンドラ番号 Synchronous例外およびSError例外をCPU例外として扱う. ARMv8では,例外発生時の例外レベル(EL),使用スタック,実行状態(AArch32 or AArch64), 発生した例外の種類により,ジャンプ先となる例外ベクタ中のオフセットアドレスが異なる. CPU例外ハンドラはこのジャンプ先のオフセットアドレスで区別することにし, それぞれ異なるCPU例外ハンドラ番号を割り当てる. 例外発生時の状態 例外の種類 例外番号  例外ベクタ先頭からのオフセット AArch64, EL1t(EL1, SP_EL0) Synchronous 0 0x0000 AArch64, EL1t(EL1, SP_EL0) SError 1 0x0180 AArch64, EL1h(EL1, SP_EL1) Synchronous 2 0x0200 AArch64, EL1h(EL1, SP_EL1) SError 3 0x0380 AArch64, EL0 (EL0, SP_EL0) Synchronous 4 0x0400 AArch64, EL0 (EL0, SP_EL0) SError 5 0x0580 AArch32, EL0 (EL0, SP_EL0) Synchronous 6 0x0600 AArch32, EL0 (EL0, SP_EL0) SError 7 0x0780 (3-4) CPUロック・割込みロック チップにより実装方法が異なるため,チップ依存部に記載する. (3-5) 性能評価用システム時刻の参照に関する規定 システムによって異なるためチップ依存部またはターゲット依存部のドキュメントで記載する. (3-6) スタートアップルーチンでの初期化内容 スタートアップルーチンが前提とするプロセッサの状態はシステムにより異なるため, スタートアップルーチンはターゲット依存部のドキュメントに記載する. (4) タイマドライバ関連の情報 カーネルのタイムティックとして,Generic Timer を使用する, ティック周期は1msecとする.またTIC_DENO及びTIC_NUMEの既定値として1に定義する. (5) ターゲット依存部での設定可能項目 ターゲット依存部では以下のマクロを定義する. いくつかはプロセッサの依存部において既定値が定義されている. ・TMIN_INTPRI : 割込み優先度の最小値(最高値) ・TIC_NUME : タイムティックの周期の分子 ・TIC_DENO : タイムティックの周期の分母 ・INTPRI_TIMER : タイマ割込み優先度 ・INTATR_TIMER : タイマ割込みの割込み属性 ・DEFAULT_ISTKSZ : スタックサイズ(16byte単位で指定) (6) ディレクトリ構成・ファイル構成 ./arch/arm64_gcc/ MANIFEST common/Makefile.core common/arm64.h common/core_cfg1_out.h common/core_check.trb common/core_config.c common/core_config.h common/core_design.txt common/core_kernel.h common/core_kernel.trb common/core_rename.def common/core_rename.h common/core_sil.h common/core_stddef.h common/core_support.S common/core_sym.def common/core_test.h common/core_timer.c common/core_timer.cfg common/core_timer.h common/core_unrename.h common/core_user.txt (12) バージョン履歴 2018/05/30 ・最初のリリース 2019/04/15 ・BCM283xチップ依存部の分離に合わせて修正