Changeset 386 for ssp_rpi3/trunk/arch/arm64_gcc/common
- Timestamp:
- Apr 17, 2019, 12:13:00 PM (5 years ago)
- Location:
- ssp_rpi3/trunk/arch/arm64_gcc/common
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
ssp_rpi3/trunk/arch/arm64_gcc/common/Makefile.core
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 1 1 # 2 # Makefile ã®ã³ã¢ä¾åé¨ï¼ARMv8-Aç¨ï¼2 # Makefile のコア依存部(ARMv8-A用) 3 3 # 4 4 5 5 # 6 # ãã£ã¬ã¯ããªåã®å®ç¾©6 # ディレクトリ名の定義 7 7 # 8 8 COREDIR = $(SRCDIR)/arch/$(CORE)_$(TOOL)/common 9 9 10 10 # 11 # ã³ã³ãã¤ã«ãªãã·ã§ã³11 # コンパイルオプション 12 12 # 13 13 COPTS := $(COPTS) -march=armv8-a -mlittle-endian -mstrict-align … … 18 18 19 19 # 20 # ã«ã¼ãã«ã«é¢ããå®ç¾©20 # カーネルに関する定義 21 21 # 22 22 KERNEL_DIRS := $(KERNEL_DIRS) $(COREDIR) … … 26 26 27 27 # 28 # ã³ã³ãã£ã®ã¥ã¬ã¼ã¿é¢ä¿ã®å¤æ°ã®å®ç¾©28 # コンフィギュレータ関係の変数の定義 29 29 # 30 30 CFG_TABS := $(CFG_TABS) --symval-table $(COREDIR)/core_sym.def … … 34 34 35 35 # 36 # ä¾åé¢ä¿ã®å®ç¾©36 # 依存関係の定義 37 37 # 38 38 cfg1_out.c: $(COREDIR)/core_sym.def … … 41 41 42 42 # 43 # ãã®ä»43 # その他 44 44 # 45 45 CLEAN_FILES := $(CLEAN_FILES) -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/arm64.h
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 * å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 * ã¨ï¼ 29 * (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 * (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 * å ±åãããã¨ï¼ 37 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 * 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 * å 45 責ãããã¨ï¼ 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 46 32 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 53 38 * 54 39 * $Id$ … … 85 70 86 71 /* 87 * DAIFã®è¨å®ããã³ç¶æ 88 åç 89 § 72 * DAIFの設定および状態参照 90 73 */ 91 74 Inline uint32_t … … 103 86 104 87 /* 105 * DAIF.I ã®ã»ãã/ã¯ãªã¢88 * DAIF.I のセット/クリア 106 89 */ 107 90 Inline void … … 116 99 117 100 /* 118 * DAIF.F ã®ã»ãã/ã¯ãªã¢101 * DAIF.F のセット/クリア 119 102 */ 120 103 Inline void … … 129 112 130 113 /* 131 * DAIF.F ããã³ DAIF.I ã®åæã»ãã/ã¯ãªã¢114 * DAIF.F および DAIF.I の同時セット/クリア 132 115 */ 133 116 Inline void … … 142 125 143 126 /* 144 * DAIF.I ã®ç¶æ 145 åç 146 § 127 * DAIF.I の状態参照 147 128 */ 148 129 Inline bool_t … … 164 145 165 146 /* 166 * DAIF.F ã®ç¶æ 167 åç 168 § 147 * DAIF.F の状態参照 169 148 */ 170 149 Inline bool_t … … 186 165 187 166 /* 188 * ã¯ãªãã£ã«ã«å¦çã®åºå£(æé©åé²æ¢)167 * クリティカル処理の出口(最適化防止) 189 168 */ 190 169 Inline void -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_cfg1_out.h
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 4 4 5 5 /* 6 * cfg1_out.cããªã³ã¯ããããã«å¿ 7 è¦ãªã¹ã¿ãã®å®ç¾© 6 * cfg1_out.cをリンクするために必要なスタブの定義 8 7 */ 9 8 -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_check.trb
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 1 1 # -*- coding: utf-8 -*- 2 2 # 3 # ãã¹3ã®çæã¹ã¯ãªããã®ã³ã¢ä¾åé¨ï¼ARM64ç¨ï¼3 # パス3の生成スクリプトのコア依存部(ARM64用) 4 4 # 5 5 6 6 # 7 # ã¿ã¼ã²ããéä¾åé¨ã®ã¤ã³ã¯ã«ã¼ã7 # ターゲット非依存部のインクルード 8 8 # 9 9 IncludeTrb("kernel/kernel_check.trb") -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_config.c
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 9 9 * Nagoya Municipal Industrial Research Institute, JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 11 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 16 * スコード中に含まれていること. 17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 20 * の無保証規定を掲載すること. 21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 23 * と. 24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 25 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 27 * 報告すること. 28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * @(#) $Id$ … … 57 42 58 43 /* 59 * ã³ã¢ä¾åã¢ã¸ã¥ã¼ã«ï¼ARMv8-Aç¨ï¼44 * コア依存モジュール(ARMv8-A用) 60 45 */ 61 46 … … 63 48 #include <t_syslog.h> 64 49 65 /* å²è¾¼ã¿ãã¹ãæ°ã®ç®¡ç*/50 /* 割込みネスト数の管理 */ 66 51 uint8_t intnest; 67 52 68 53 /* 69 * ã³ã¢ä¾åã®åæå54 * コア依存の初期化 70 55 */ 71 56 void 72 57 core_initialize(void) 73 58 { 74 /* å²è¾¼ã¿ãã¹ãæ°ã®åæå*/59 /* 割込みネスト数の初期化 */ 75 60 intnest = 0u; 76 61 } 77 62 78 63 /* 79 * ã³ã¢ä¾åã®çµäºå¦ç64 * コア依存の終了処理 80 65 */ 81 66 void … … 87 72 88 73 /* 89 * å²è¾¼ã¿ãã³ãã©ã®å¼ã³åºã74 * 割込みハンドラの呼び出し 90 75 */ 91 76 void … … 96 81 i_unlock_cpu(); 97 82 98 // ãã³ãã©ã®å¼ã³åºã83 // ハンドラの呼び出し 99 84 inh_table[intno](); 100 85 … … 105 90 106 91 /* 107 * ã«ã¼ãã«ç®¡çã®CPUä¾å¤ãã³ãã©ã®å¼ã³åºã92 * カーネル管理のCPU例外ハンドラの呼び出し 108 93 */ 109 94 void … … 115 100 116 101 /* 117 * ããã»ããµã®ç¶æ 118 ãCPUä¾å¤çºçåã®ç¶æ 119 ã«ãã 102 * プロセッサの状態をCPU例外発生前の状態にする 120 103 */ 121 104 if((spsr & AARCH64_PSTATE_F) == 0) { … … 127 110 } 128 111 129 // ãã³ãã©ã®å¼ã³åºã112 // ハンドラの呼び出し 130 113 exc_table[excno](p_excinf); 131 114 132 115 /* 133 * ããã»ããµã®ç¶æ 134 ãæ»ã 116 * プロセッサの状態を戻す 135 117 */ 136 118 if((spsr & AARCH64_PSTATE_F) == 0) { … … 146 128 147 129 /* 148 * FIQãã³ãã©ã®å¼ã³åºã 149 * å 150 ¨ã¦ã®ä¾å¤ããã¹ã¯ãããç¶æ 151 ã§å¼ã³åºããã 152 * ä¾å¤è¦å ã®å¤å¥ãå«ããã(ãããã¯ããããå¼ã³åºãããã«ã¼ãã³)ã§è¡ã 130 * FIQハンドラの呼び出し 131 * 全ての例外がマスクされた状態で呼び出される 132 * 例外要因の判別も含めここ(あるいはここから呼び出されるルーチン)で行う 153 133 */ 154 134 void … … 160 140 #ifndef OMIT_DEFAULT_EXC_HANDLER 161 141 /* 162 * ç»é²ããã¦ããªãä¾å¤ãçºçããã¨å¼ã³åºããã142 * 登録されていない例外が発生すると呼び出される 163 143 */ 164 144 void … … 187 167 #ifndef OMIT_DEFAULT_INT_HANDLER 188 168 /* 189 * æªç»é²ã®å²è¾¼ã¿ãçºçããå ´åã«å¼ã³åºããã169 * 未登録の割込みが発生した場合に呼び出される 190 170 */ 191 171 void -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_config.h
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 * å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 * ã¨ï¼ 29 * (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 * (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 * å ±åãããã¨ï¼ 37 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 * 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 * å 45 責ãããã¨ï¼ 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 46 32 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 53 38 * 54 39 * @(#) $Id$ … … 56 41 57 42 /* 58 * ã³ã¢ä¾åã¢ã¸ã¥ã¼ã«ï¼ARMv8-Aç¨ï¼43 * コア依存モジュール(ARMv8-A用) 59 44 * 60 * ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼target_config.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯61 * ã«ã¼ãããããã¡ã¤ã«ï¼ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡ã¤ã«ãã62 * ç´æ¥ã¤ã³ã¯ã«ã¼ããã¦ã¯ãªããªãï¼45 * このインクルードファイルは,target_config.h(または,そこからインク 46 * ルードされるファイル)のみからインクルードされる.他のファイルから 47 * 直接インクルードしてはならない. 63 48 */ 64 49 … … 67 52 68 53 /* 69 * ãã¼ãã¦ã§ã¢å®ç¾©54 * ハードウェア定義 70 55 */ 71 56 #include "arm64.h" 72 57 73 58 /* 74 * éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯åæå¤59 * 非タスクコンテキスト用のスタック初期値 75 60 */ 76 61 #define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char *)(istk) + (istksz))) … … 79 64 80 65 /* 81 * å²è¾¼ã¿ãã¹ãæ°66 * 割込みネスト数 82 67 */ 83 68 extern uint8_t intnest; 84 69 85 70 /* 86 * ã³ã³ããã¹ãã®åç 87 § 71 * コンテキストの参照 88 72 * 89 73 */ … … 104 88 105 89 /* 106 * ãã£ã¹ãããã£ã®åä½éå§ï¼core_support.Sï¼90 * ディスパッチャの動作開始(core_support.S) 107 91 * 108 * start_dispatchã¯ï¼ã«ã¼ãã«èµ·åæã«å¼ã³åºãã¹ããã®ã§ï¼ãã¹ã¦ã®å²è¾¼ 109 * ã¿ãç¦æ¢ããç¶æ 110 ï¼å²è¾¼ã¿ããã¯ç¶æ 111 ã¨åçã®ç¶æ 112 ï¼ã§å¼ã³åºããªããã° 113 * ãªããªãï¼ 92 * start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込 93 * みを禁止した状態(割込みロック状態と同等の状態)で呼び出さなければ 94 * ならない. 114 95 */ 115 96 extern void start_dispatch(void) NoReturn; 116 97 117 98 /* 118 * ã«ã¼ãã«ã®çµäºå¦çã®å¼åºãï¼prc_support.Sï¼99 * カーネルの終了処理の呼出し(prc_support.S) 119 100 * 120 * call_exit_kernel ã¯ï¼ã«ã¼ãã«ã®çµäºæã«å¼ã³åºãã¹ããã®ã§ï¼éã¿ã¹ã¯121 * ã³ã³ããã¹ãã«åãæãã¦ï¼ã«ã¼ãã«ã®çµäºå¦çï¼exit_kernelï¼ãå¼ã³åº122 * ãï¼101 * call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク 102 * コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出 103 * す. 123 104 */ 124 105 extern void call_exit_kernel(void) NoReturn; 125 106 126 107 /* 127 * ã¢ã¤ãã«ã«ã¼ãã®å®è£ 128 108 * アイドルループの実装 129 109 * 130 * åã«CPUããã¯ç¶æ 131 ã¨CPUããã¯è§£é¤ç¶æ 132 ãå¼ã³åºãå®è£ 133 ã¨ããï¼ 134 * ã¹ãªã¼ãã¢ã¼ãã«å 135 ¥ããå ´åã¯æ¬å¦çãwfiå½ä»¤ãç¨ãã¦æ¸ãæããã°è¯ãï¼ 110 * 単にCPUロック状態とCPUロック解除状態を呼び出す実装とする. 111 * スリープモードに入れる場合は本処理をwfi命令を用いて書き換えれば良い. 136 112 */ 137 113 Inline void … … 139 115 { 140 116 x_unlock_cpu(); 141 /* CPU ã¢ã³ãã㯠=> CPUããã¯*/117 /* CPUアンロック => CPUロック */ 142 118 x_lock_cpu(); 143 119 } 144 120 145 121 /* 146 * ã³ã¢ä¾åã®åæå122 * コア依存の初期化 147 123 */ 148 124 extern void core_initialize(void); 149 125 150 126 /* 151 * ã³ã¢ä¾åã®çµäºæå¦ç127 * コア依存の終了時処理 152 128 */ 153 129 extern void core_terminate(void) NoReturn; 154 130 155 131 /* 156 * å²è¾¼ã¿ãã³ãã©ã®å¼ã³åºã132 * 割込みハンドラの呼び出し 157 133 */ 158 134 extern void call_int_handler(uint32_t intno); 159 135 160 136 /* 161 * CPU ä¾å¤ãã³ãã©ã®å¼ã³åºã137 * CPU例外ハンドラの呼び出し 162 138 */ 163 139 extern void call_exc_handler(void *p_excinf, uint32_t excno); 164 140 165 141 /* 166 * FIQãã³ãã©ã®å¼ã³åºã 167 * å 168 ¨ã¦ã®ä¾å¤ããã¹ã¯ãããç¶æ 169 ã§å¼ã³åºããã 170 * ä¾å¤è¦å ã®å¤å¥ãå«ããã(ãããã¯ããããå¼ã³åºãããã«ã¼ãã³)ã§è¡ã 142 * FIQハンドラの呼び出し 143 * 全ての例外がマスクされた状態で呼び出される 144 * 例外要因の判別も含めここ(あるいはここから呼び出されるルーチン)で行う 171 145 */ 172 146 extern void call_fiq_handler(void); 173 147 174 148 /* 175 * ç»é²ããã¦ããªãä¾å¤ãçºçããã¨å¼ã³åºããã149 * 登録されていない例外が発生すると呼び出される 176 150 */ 177 151 extern void default_exc_handler(void *p_excinf); 178 152 179 153 /* 180 * æªç»é²ã®å²è¾¼ã¿ãçºçããå ´åã«å¼ã³åºããã154 * 未登録の割込みが発生した場合に呼び出される 181 155 */ 182 156 extern void default_int_handler(void); -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_design.txt
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 1 1 ===================================================================== 2 ARM64 ããã»ããµä¾åé¨è¨è¨ã¡ã¢2 ARM64プロセッサ依存部設計メモ 3 3 Last Modified: 16 Apr 2019 4 4 ===================================================================== 5 5 6 â ãã®ããã¥ã¡ã³ãã®ä½ç½®ã¥ã 7 8 ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/SSPã«ã¼ãã«ãARMv8-Aããã»ããµã«ç§»æ¤ããé 9 ã®è¨è¨ã¡ã¢ã§ããï¼ 10 11 12 â ARMv8-Aã®ä»æ§ã¾ã¨ã 13 14 ARMv8-Aã®ä»æ§ã®ãã¡ï¼ã«ã¼ãã«ã®è¨è¨ã«é¢ä¿ããäºé 15 ã«ã¤ãã¦ã¾ã¨ããï¼ 16 17 â ã¬ã¸ã¹ã¿ 18 19 æ±ç¨ã¬ã¸ã¹ã¿ã¯r0ãr30 (ç¹ã«64ãããã¬ã¸ã¹ã¿ã¯X0..X30ã§è¡¨ç¾)ã®31種é¡ãããªãï¼ 20 ï¼åèï¼ãProcedure Call Standard for the ARM 64-bit Architectureã 21 22 r0...r7 Parameter/result registers(å¼æ°ããã³è¿å¤ã®åã渡ãç¨) 23 r8 Indirect result location register (大ããªãã¼ã¿æ§é ã 24 è¿å¤ã¨ãã¦è¿ãå ´åãªã©ï¼å¼ã³åºãå´ãçµæãåãåºãããã« 25 éæ¥ã¢ãã¬ãã·ã³ã°ãå¤ç¨ããéï¼ãã®ãã¼ã¹ã¢ãã¬ã¹ãåã渡ã 26 ããããã«ä½¿ããã) 27 r9..r15 Caller-saved Temporary registers(å¼ã³åºãå´ã§ä¿åãã¹ãã¬ã¸ã¹ã¿) 6 ○ このドキュメントの位置づけ 7 8 このドキュメントは,TOPPERS/SSPカーネルをARMv8-Aプロセッサに移植する際 9 の設計メモである. 10 11 12 ○ ARMv8-Aの仕様まとめ 13 14 ARMv8-Aの仕様のうち,カーネルの設計に関係する事項についてまとめる. 15 16 ● レジスタ 17 18 汎用レジスタはr0〜r30 (特に64ビットレジスタはX0..X30で表現)の31種類からなる. 19 (参考)「Procedure Call Standard for the ARM 64-bit Architecture」 20 21 r0...r7 Parameter/result registers(引数および返値の受け渡し用) 22 r8 Indirect result location register (大きなデータ構造を 23 返値として返す場合など,呼び出し側が結果を取り出すために 24 間接アドレッシングを多用する際,そのベースアドレスを受け渡し 25 するために使われる) 26 r9..r15 Caller-saved Temporary registers(呼び出し側で保存すべきレジスタ) 28 27 r16(IP0) The first intra-procedure-call scratch register 29 ãªã³ã«ã«ãã£ã¦ veneer(注1) ããã³ PLT(Procedure Linkage Table,注2) ã³ã¼ã 30 ã®å¼ã³åºãã§ä½¿ãããï¼ãã以å¤ã®æã¯ãã³ãã©ãªã¬ã¸ã¹ã¿ã¨ãã¦ä½¿ããããã¨ãããï¼ 31 (注1)ãªã³ã«ã«ãã£ã¦æ¿å 32 ¥ãããå°ããªã³ã¼ãçã§ï¼ 33 åå²å½ä»¤ã®ã¿ã¼ã²ãããç¯å²å¤ã®å ´åãªã©ã«ä½¿ããã 34 (注2)å 35 ±æã©ã¤ãã©ãªã®å¼ã³åºãã§ã·ã³ãã«è§£æ±ºãè¡ãããã«ä½¿ç¨ããã 36 é¢æ°ãã¼ãã« 37 r17(IP1) The second intra-procedure-call temporary register(r16ã¨å½¹å²ã¯åã) 38 r18 The Platform Register(ãã©ãããã©ã¼ã ABIã§ä½¿ç¨ãããã¬ã¸ã¹ã¿ï¼ 39 ABIã§ä½¿ãããªãå ´åã¯ãã³ãã©ãªã¬ã¸ã¹ã¿ã¨ãã¦ä½¿ããã) 40 r19..r28 Callee-saved registers(å¼ã³åºãããå´ã§ä¿åãã¦ä½¿ãã¬ã¸ã¹ã¿) 41 r29(FP) The Frame Pointer(ãã¬ã¼ã ãã¤ã³ã¿) 42 r30(LR) The Link Register(ãªã³ã¯ã¬ã¸ã¹ã¿) 43 44 SSPã«ã¼ãã«ã®ã¢ã»ã³ãã©ã«ããå®è£ 45 ã§ã¯r8, r16...r18ã¯ä½¿ç¨ãã¦ããªãï¼ 46 47 48 â ã³ã¼ãªã³ã°ã³ã³ãã³ã·ã§ã³ 49 50 r0...r7 ãå¼æ°ããã³è¿å¤ã«ä½¿ãããï¼ 51 ARMã«ããè¦å®ããã¦ããããï¼ã³ã³ãã¤ã©ã«ä¾åãããã®ã«ã¼ã«ã¨ãªã 52 53 54 â PSTATE 55 56 AArch64ã§ã¯ããã»ããµã®ç¶æ 57 ã表ããã©ã°ã®éã¾ããã¾ã¨ãã¦PSTATEã¨å¼ã³ï¼ 58 ããããã®ãã©ã°ã¸å¥ã 59 ã«ã¢ã¯ã»ã¹ããããã®ç¹å¥ãªã¬ã¸ã¹ã¿åãå®ç¾©ããã¦ããï¼ 60 61 PSTATEã®è©³ç´°ã¯ï¼ARM Architecture Reference Manual 62 ARMv8, for ARMv8-A architecture profile ã® D1.7 ãªã©ãåç 63 §ã®ãã¨ï¼ 64 65 ã»spsel 66 EL1ããä¸ã®ä¾å¤ã¬ãã«ã§ã¯ï¼spsel ã¨ããç¹å¥ãªå称ã®ã¬ã¸ã¹ã¿ã«ã¢ã¯ã»ã¹ãï¼ 67 PSTATE.SPãã©ã°ã®å¤ãã»ãããã¦ä½¿ç¨ã¹ã¿ãã¯ã®åãæ¿ããè¡ãï¼ 68 69 ã»daif 70 daif ã¨ããå称ã®ã¬ã¸ã¹ã¿ã使ç¨ãã¦PSTATEã®D,A,I,Fããããæä½ãï¼ 71 å種ä¾å¤ããã³å²è¾¼ã¿ã®ç¦æ¢/許å¯ãå¶å¾¡ãã 72 73 74 SSPã«ã¼ãã«ã®å®è£ 75 ã§ã¯ï¼ã¹ã¿ãã¯ã¯SP_EL1ã®ã¿ã使ç¨ããï¼ 76 ã¾ãï¼CPUããã¯ç¶æ 77 ããã³å²è¾¼ã¿ããã¯ç¶æ 78 ã®å®è£ 79 ã«PSTATEã®Iããã³Fãã©ã°ã 80 å©ç¨ãã¦ããï¼ 81 82 83 â å²è¾¼ã¿ãã¯ã¿ 84 85 ãã¯ã¿ãã¼ãã«ã®ã¢ãã¬ã¹ã¯ãªã»ããæã«ï¼ã·ã¹ãã ã¬ã¸ã¹ã¿ã®ä¸ã¤Vector Base 86 Address Register(VBAR, ã·ã¹ãã ã¬ã¸ã¹ã¿)ã«ã¢ãã¬ã¹ãã»ãããããã¨ã§ï¼ 87 2048ãã¤ãå¢çã®ä»»æã®ã¢ãã¬ã¹ã«é 88 ç½®å¯è½ã§ããï¼ 89 90 SSPã«ã¼ãã«ã®å®è£ 91 ã§ã¯ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã§è¨å®ãã¦ããï¼ 92 93 94 â å²è¾¼ã¿ 95 96 ããã§ã¯GICãæè¼ããããã»ããµã®å ´åã«ã¤ãã¦è¿°ã¹ãï¼ 97 ãã以å¤ã®å ´åã«ã¤ãã¦ã¯ãããä¾åé¨ã®ããã¥ã¡ã³ãã«è¨è¼ããï¼ 98 99 100 âå²è¾¼ã¿åªå 101 度 102 103 GICã«ããã¦ã¯å²è¾¼ã¿åªå 104 度ã¯è¨å®å¤ã®å°ããæ¹ãé«åªå 105 度ã¨ãªãï¼ 106 107 åªå 108 度ã¯æ大8bitã§ããï¼SoCæ¯ã«å®è£ 109 ããã¦ãããããå¹ 110 ãç°ãªãï¼å®è£ 111 ã 112 ãããããã8bit以ä¸ã®å ´åã¯ï¼LSBããç¡å¹ã«ãªãï¼ä¾ãã°ï¼å®è£ 113 ããã¦ã 114 ããããå¹ 115 ã7bitã®å ´åã¯ï¼ããã0ãç¡å¹ã¨ãªãï¼ 116 117 åªå 118 度ã®ããããã£ã¼ã«ãã®LSBããæ°ãããããµãåªå 119 度ã¨å¼ã¶ãã£ã¼ã«ã 120 ã«è¨å®ãããã¨ãå¯è½ã§ããï¼æ®ãã®ä¸ä½ããããããªã¨ã³ãã·ã§ã³åªå 121 度㨠122 å¼ã¶ï¼ããªã¨ã³ãã·ã§ã³åªå 123 度ãåãã§ï¼ãµãåªå 124 度ãç°ãªãåªå 125 度ã®ã°ã«ã¼ 126 ãã¯ï¼ãäºããããªã¨ã³ãããããã¨ãã§ããªãï¼ 127 128 ä¾ã¨ãã¦ï¼QEMU Virtãã¼ãåãSSPã®å®è£ 129 ã§ã¯ Cortex-A53ããã»ããµã 130 ã¿ã¼ã²ããã¨ãã¦ããï¼åªå 131 度ã¯16段é(4bit)ã§ããã0ãã3ãç¡å¹ã§ããï¼ 132 133 âå²è¾¼ã¿/ä¾å¤ã®åä» 134 135 GICã®å ´åï¼å²è¾¼ã¿ãåãä»ããã¨åãä»ããå²è¾¼ã¿ã®çªå·ãGICC_IARã«ã»ãããããï¼ 136 å²è¾¼ã¿çªå·ã¯ãã®ã¬ã¸ã¹ã¿ã«ã»ãããããå¤ã使ç¨ããï¼ 137 138 ä¾å¤çªå·ã¯ï¼ä¾å¤çºçæã®ããã»ããµç¶æ 139 ã«å¿ãã¦æ±ºå®ãããï¼ãã¯ã¿ãã¼ãã«ä¸ã® 140 ã¸ã£ã³ãå 141 ãªãã»ããæ¯ã«ç°ãªãçªå·ãå²ãæ¯ããã¨ã«ãã¦ããï¼ 142 143 ä¾å¤çºçæã®ç¶æ 144 ä¾å¤ã®ç¨®é¡ ä¾å¤çªå· ãä¾å¤ãã¯ã¿å 145 é ããã®ãªãã»ãã 28 リンカによって veneer(注1) および PLT(Procedure Linkage Table,注2) コード 29 の呼び出しで使われる.それ以外の時はテンポラリレジスタとして使われることもある. 30 (注1)リンカによって挿入される小さなコード片で, 31 分岐命令のターゲットが範囲外の場合などに使われる 32 (注2)共有ライブラリの呼び出しでシンボル解決を行うために使用される 33 関数テーブル 34 r17(IP1) The second intra-procedure-call temporary register(r16と役割は同じ) 35 r18 The Platform Register(プラットフォームABIで使用されるレジスタ. 36 ABIで使われない場合はテンポラリレジスタとして使われる) 37 r19..r28 Callee-saved registers(呼び出された側で保存して使うレジスタ) 38 r29(FP) The Frame Pointer(フレームポインタ) 39 r30(LR) The Link Register(リンクレジスタ) 40 41 SSPカーネルのアセンブラによる実装ではr8, r16...r18は使用していない. 42 43 44 ● コーリングコンベンション 45 46 r0...r7 が引数および返値に使われる. 47 ARMにより規定されているため,コンパイラに依存せずこのルールとなる 48 49 50 ● PSTATE 51 52 AArch64ではプロセッサの状態を表すフラグの集まりをまとめてPSTATEと呼び, 53 それぞれのフラグへ別々にアクセスするための特別なレジスタ名が定義されている. 54 55 PSTATEの詳細は,ARM Architecture Reference Manual 56 ARMv8, for ARMv8-A architecture profile の D1.7 などを参照のこと. 57 58 ・spsel 59 EL1より上の例外レベルでは,spsel という特別な名称のレジスタにアクセスし, 60 PSTATE.SPフラグの値をセットして使用スタックの切り替えを行う. 61 62 ・daif 63 daif という名称のレジスタを使用してPSTATEのD,A,I,Fビットを操作し, 64 各種例外および割込みの禁止/許可を制御する 65 66 67 SSPカーネルの実装では,スタックはSP_EL1のみを使用する. 68 また,CPUロック状態および割込みロック状態の実装にPSTATEのIおよびFフラグを 69 利用している. 70 71 72 ● 割込みベクタ 73 74 ベクタテーブルのアドレスはリセット時に,システムレジスタの一つVector Base 75 Address Register(VBAR, システムレジスタ)にアドレスをセットすることで, 76 2048バイト境界の任意のアドレスに配置可能である. 77 78 SSPカーネルの実装ではスタートアップルーチンで設定している. 79 80 81 ● 割込み 82 83 ここではGICを搭載するプロセッサの場合について述べる. 84 それ以外の場合についてはチップ依存部のドキュメントに記載する. 85 86 87 ●割込み優先度 88 89 GICにおいては割込み優先度は設定値の小さい方が高優先度となる. 90 91 優先度は最大8bitであり,SoC毎に実装されているビット幅が異なる.実装さ 92 れるビットが8bit以下の場合は,LSBから無効になる.例えば,実装されてい 93 るビット幅が7bitの場合は,ビット0が無効となる. 94 95 優先度のビットフィールドのLSBから数ビットをサブ優先度と呼ぶフィールド 96 に設定することが可能である.残りの上位ビットをプリエンプション優先度と 97 呼ぶ.プリエンプション優先度が同じで,サブ優先度が異なる優先度のグルー 98 プは,お互いをプリエンプトすることができない. 99 100 例として,QEMU Virtボード向けSSPの実装では Cortex-A53プロセッサを 101 ターゲットとしており,優先度は16段階(4bit)でビット0から3が無効である. 102 103 ●割込み/例外の受付 104 105 GICの場合,割込みを受け付けると受け付けた割込みの番号がGICC_IARにセットされる. 106 割込み番号はこのレジスタにセットされる値を使用する. 107 108 例外番号は,例外発生時のプロセッサ状態に応じて決定される,ベクタテーブル中の 109 ジャンプ先オフセット毎に異なる番号を割り振ることにしている. 110 111 例外発生時の状態 例外の種類 例外番号 例外ベクタ先頭からのオフセット 146 112 AArch64, EL1t(EL1, SP_EL0) Synchronous 0 0x0000 147 113 AArch64, EL1t(EL1, SP_EL0) SError 1 0x0180 … … 153 119 AArch32, EL0 (EL0, SP_EL0) SError 7 0x0780 154 120 155 å²è¾¼ã¿ãåãä»ããéï¼åãä»ããå²è¾¼ã¿ã«è¨å®ãããåªå 156 度ããä½ãå²è¾¼ã¿ã 157 ç¦æ¢ããããï¼GICC_RPRããåå¾ããå²è¾¼ã¿è¦å ã®å²è¾¼ã¿åªå 158 度ã GICC_PMR㸠159 ã»ãããã¦ããï¼ããã¦ãã³ãã©çµäºå¾ã«å²è¾¼ã¿çºçåã®å²ãè¾¼ã¿åªå 160 度ã«æ»ãï¼ 161 162 163 [CPUã¢ã¼ã] 164 165 ããã»ããµã¯ï¼EL0ããEL3ã¾ã§ã®ä¾å¤ã¬ãã«ã®ããããã§åä½ããï¼ 166 ã¾ãããããã®ã¬ãã«ã§64ãããã¢ã¼ã(AArch64) ã¾ãã¯32ãããã¢ã¼ã(AArch32)ã 167 é¸æãããã¨ãã§ããï¼ãã ãï¼ããä¾å¤ã¬ãã«ã32ãããã¢ã¼ãã§åä½ããå ´å㯠168 ããããä½ãä¾å¤ã¬ãã«ã§ã¯64ãããã¢ã¼ããé¸æãããã¨ãã§ããªãï¼ 169 170 ã¾ãï¼ã»ãã¥ãªãã£æ¡å¼µæ©è½ãæè¼ããããã»ããµã§ã¯ã»ãã¥ã¢ã¢ã¼ãããã³ 171 éã»ãã¥ã¢ã¢ã¼ããé¸æãããã¨ãã§ããï¼ 172 173 SSPã®å®è£ 174 ã§ã¯ï¼64ãããã¢ã¼ã(AArch64)ï¼éã»ãã¥ã¢ï¼ä¾å¤ã¬ãã«1(EL1) ã§åä½ããï¼ 175 176 177 âãªã»ããæã®ç¶æ 178 179 180 ãªã»ããæã¯ããã»ããµãããããµãã¼ãããæ大ã®ä¾å¤ã¬ãã«ããã³ãã®ã¬ãã«ã® 181 ã¹ã¿ãã¯(SP_ELx)ãæå¹ã¨ãªã£ã¦ããï¼ 182 183 ä¾ã¨ãã¦QEMUåãVirtãã¼ã(Cortex-A53) ã§ã¯ï¼æ¢å®ã§EL1ãæ大ä¾å¤ã¬ãã«ã®ãã 184 ãªã»ããç´å¾ã¯SP_EL1ãæå¹ã¨ãªã£ã¦ããï¼ 185 186 187 â ã¹ã¿ãã¯ãã¤ã³ã¿ï¼SP_EL0ã¨SP_ELxï¼ 188 189 ã¹ã¿ãã¯ãã¤ã³ã¿ã¯ï¼ä¾å¤ã¬ãã«0ã®ã¹ã¿ãã¯ãã¤ã³ã¿(SP_EL0)ããã³å®è¡ä¸ã® 190 ä¾å¤ã¬ãã«ã®ã¹ã¿ãã¯ãã¤ã³ã¿(SP_ELx)ãé¸æå¯è½ã§ããï¼ 191 ã¹ã¿ãã¯ã®é¸æã¯spselã¬ã¸ã¹ã¿ã¸1ãè¨å®ããã¨SP_ELxãï¼0ãè¨å®ãã㨠192 SP_EL0 ãé¸æããï¼ 193 194 SSPã®å®è£ 195 ã§ã¯ï¼EL1 㧠SP_EL1 ã®ã¿ã使ç¨ãã¦åä½ããï¼ 196 197 198 âä¾å¤ã¬ãã«ã®é·ç§» 199 200 ä¾å¤ã¬ãã«(EL)ã®é·ç§»ã¯å²è¾¼ã¿/ä¾å¤ã®åä»ããã³ä¾å¤ãªã¿ã¼ã³å½ä»¤(eret)ã«ããè¡ãï¼ 201 202 å²è¾¼ã¿ããã³ä¾å¤ãåãä»ãããã¨ã§çºçåã¨åãã¾ãã¯ããé«ãä¾å¤ã¬ãã«ã¸é·ç§»ããï¼ 203 ä¸æ¹ï¼åãã¾ãã¯ããä½ãä¾å¤ã¬ãã«ã¸ã®é·ç§»ã¯ä¾å¤ãªã¿ã¼ã³å½ä»¤(eret)ã«ããè¡ãï¼ 204 205 åä»æã®é·ç§»å 206 ã¨ãªãä¾å¤ã¬ãã«ã®æå®ã¯ã·ã¹ãã ã¬ã¸ã¹ã¿ã«ããè¨å®ãããã¨ã§è¡ãï¼ 207 å²è¾¼ã¿/ä¾å¤ãªã¿ã¼ã³æã®é·ç§»å 208 ã¨ãªãä¾å¤ã¬ãã«ã¯ï¼SPSR_ELxã®ããã2ããã³3㧠209 æå®ããï¼å²è¾¼ã¿/ä¾å¤åä»æï¼PSTATEã®ç¶æ 210 ãSPSR_ELxã«ï¼ãªã¿ã¼ã³ã¢ãã¬ã¹ãELR_ELxã«ï¼ 211 ããããä¿åããeretå½ä»¤ã®å®è¡ã«ãããã®æ ¼ç´å¤ã復帰ãããããï¼eretå®è¡åã« 212 ãããããSPSR_ELxã«ã»ãããã¦ãããã¨ã§æå®ããä¾å¤ã¬ãã«ã¸é·ç§»ãããã¨ãå¯è½ã§ããï¼ 213 åãã¿ã¤ãã³ã°ã§ä½¿ç¨ã¹ã¿ãã¯ã64ããã/32ãããã¢ã¼ãã®æå®ãè¡ããã¨ãã§ããï¼ 214 215 QEMU VirtåãSSPã®å®è£ 216 ã§ã¯EL1ã®ã¿ã使ç¨ããããï¼ä¾å¤ã¬ãã«éã®é·ç§»å¦çã¯è¡ã£ã¦ããªãï¼ 217 218 219 âä¾å¤ã¬ãã«ã®å¤å® 220 221 ç¾ç¶ã®ä¾å¤ã¬ãã«ãå¤å®ããã«ã¯ï¼CPSRã®ããã2ããã³ããã3ã®å¤ã使ç¨ããï¼ 222 bit[3:2]ã®å¤ã 223 '11'ã®å ´åï¼EL3 224 '10'ã®å ´åï¼EL2 225 '01'ã®å ´åï¼EL1 226 '00'ã®å ´åï¼EL0 227 228 âGICC_PMRã¬ã¸ã¹ã¿ 229 230 è¨å®ããåªå 231 度以ä¸(å¤ã¨ãã¦ã¯ä»¥ä¸)ã®åªå 232 度ã®å²è¾¼ã¿ã®åä»ãç¦æ¢ããï¼ 233 è¨å®å¯è½ãªæ大å¤ãè¨å®ããã¨ï¼å 234 ¨ã¦ã®å²è¾¼ã¿ã許å¯ããï¼ 235 ä¾ãã°åªå 236 度ã16段éã®å ´åã¯0xf0(=0x0f << 4)ãã»ããããã¨ãã¹ã¦ã®å²è¾¼ã¿è¨±å¯ 237 ã¨ãªãï¼å¤ã¯ä¾å¤/å²è¾¼ã¿ã®åä»ã¨ãªã¿ã¼ã³ã«ããå¤åããªãããï¼åãä»ããå²è¾¼ã¿ 238 ã®åªå 239 度ãå²è¾¼ã¿ã®å 240 ¥å£å¦çã§è¨å®ããå¿ 241 è¦ãããï¼ 242 243 âä¾å¤/å²è¾¼ã¿ã®åä» 244 245 ã»ä¾å¤/å²è¾¼ã¿ãåä»ããã¨ï¼åä»ãæã«ã¢ã¯ãã£ããªã¹ã¿ãã¯ä¸ã«ä»¥ä¸ã®ã³ 246 ã³ããã¹ããä¿åããï¼ 121 割込みを受け付けた際,受け付けた割込みに設定された優先度より低い割込みを 122 禁止するため,GICC_RPRから取得した割込み要因の割込み優先度を GICC_PMRへ 123 セットしている.そしてハンドラ終了後に割込み発生前の割り込み優先度に戻す. 124 125 126 [CPUモード] 127 128 プロセッサは,EL0からEL3までの例外レベルのいずれかで動作する. 129 またそれぞれのレベルで64ビットモード(AArch64) または32ビットモード(AArch32)を 130 選択することができる.ただし,ある例外レベルが32ビットモードで動作する場合は 131 それより低い例外レベルでは64ビットモードを選択することができない. 132 133 また,セキュリティ拡張機能を搭載するプロセッサではセキュアモードおよび 134 非セキュアモードを選択することができる. 135 136 SSPの実装では,64ビットモード(AArch64),非セキュア,例外レベル1(EL1) で動作する. 137 138 139 ●リセット時の状態 140 141 リセット時はプロセッサチップがサポートする最大の例外レベルおよびそのレベルの 142 スタック(SP_ELx)が有効となっている. 143 144 例としてQEMU向けVirtボード(Cortex-A53) では,既定でEL1が最大例外レベルのため 145 リセット直後はSP_EL1が有効となっている. 146 147 148 ● スタックポインタ(SP_EL0とSP_ELx) 149 150 スタックポインタは,例外レベル0のスタックポインタ(SP_EL0)および実行中の 151 例外レベルのスタックポインタ(SP_ELx)が選択可能である. 152 スタックの選択はspselレジスタへ1を設定するとSP_ELxを,0を設定すると 153 SP_EL0 を選択する. 154 155 SSPの実装では,EL1 で SP_EL1 のみを使用して動作する. 156 157 158 ●例外レベルの遷移 159 160 例外レベル(EL)の遷移は割込み/例外の受付および例外リターン命令(eret)により行う. 161 162 割込みおよび例外を受け付けることで発生前と同じまたはより高い例外レベルへ遷移する. 163 一方,同じまたはより低い例外レベルへの遷移は例外リターン命令(eret)により行う. 164 165 受付時の遷移先となる例外レベルの指定はシステムレジスタにより設定することで行う. 166 割込み/例外リターン時の遷移先となる例外レベルは,SPSR_ELxのビット2および3で 167 指定する.割込み/例外受付時,PSTATEの状態がSPSR_ELxに,リターンアドレスがELR_ELxに, 168 それぞれ保存されeret命令の実行によりその格納値が復帰されるため,eret実行前に 169 あらかじめSPSR_ELxにセットしておくことで指定した例外レベルへ遷移することが可能である. 170 同じタイミングで使用スタックや64ビット/32ビットモードの指定も行うことができる. 171 172 QEMU Virt向けSSPの実装ではEL1のみを使用するため,例外レベル間の遷移処理は行っていない. 173 174 175 ●例外レベルの判定 176 177 現状の例外レベルを判定するには,CPSRのビット2およびビット3の値を使用する. 178 bit[3:2]の値が 179 '11'の場合:EL3 180 '10'の場合:EL2 181 '01'の場合:EL1 182 '00'の場合:EL0 183 184 ●GICC_PMRレジスタ 185 186 設定した優先度以下(値としては以上)の優先度の割込みの受付を禁止する. 187 設定可能な最大値を設定すると,全ての割込みを許可する. 188 例えば優先度が16段階の場合は0xf0(=0x0f << 4)をセットするとすべての割込み許可 189 となる.値は例外/割込みの受付とリターンにより変化しないため,受け付けた割込み 190 の優先度を割込みの入口処理で設定する必要がある. 191 192 ●例外/割込みの受付 193 194 ・例外/割込みを受付けると,受付け時にアクティブなスタック上に以下のコ 195 ンテキストを保存する. 247 196 248 197 --------------- <- new SP 249 198 | GICC_PMR | 250 199 ---------------- 251 | å²è¾¼ã¿/ä¾å¤çªå·|200 | 割込み/例外番号| 252 201 ---------------- 253 202 | ESR_ELx | … … 261 210 | X29 | 262 211 ---------------- 263 | ï¼|264 | ï¼|212 | : | 213 | : | 265 214 ---------------- 266 215 | X1 | … … 271 220 272 221 273 å²è¾¼ã¿/ä¾å¤çºçæã®ä¸»ãªã·ã¼ã±ã³ã¹ã¯æ¬¡ã®ããã«ãªãï¼é·ç§»å 274 ã®ä¾å¤ã¬ãã«ãELxã¨è¡¨ç¾ããï¼ 275 276 ï¼ãã¼ãã¦ã§ã¢ã®å¦çï¼ 277 ã»PSTATEãSPSR_ELxã«ä¿åãã 278 ã»ãªã¿ã¼ã³ã¢ãã¬ã¹ãELR_ELxã«ä¿åãã 279 ã»PSTATE.{D,A,I,F}ã1ã«ã»ãããã 280 ã»åæä¾å¤ããã³SErrorå²è¾¼ã¿ã®ã¨ãï¼ä¾å¤è¦å æ 281 å ±ãESR_ELxã«ä¿åãã 282 ã»ã¹ã¿ãã¯ãã¤ã³ã¿ãSP_ELxã«åãæ¿ãã 283 ã»ELxã¸é·ç§»ãã 284 285 ï¼ã½ããã¦ã§ã¢ã§ã®å¦çï¼ 286 ã»(çºçæã«SP_EL0ã使ç¨ãã¦ããå ´å)ã¹ã¿ãã¯ãå²è¾¼ã¿çºçå(SP_EL0)ã«æ»ã 287 ã»æ±ç¨ã¬ã¸ã¹ã¿(X0-X30)ãã¹ã¿ãã¯ã«ä¿å 288 ã»SPSR_ELx, ESR_ELx, ELR_ELxãã¹ã¿ãã¯ã«ä¿å 289 ã»ã¹ã¿ãã¯ãã¤ã³ã¿ã®ã¢ã©ã¤ã¡ã³ããèª¿æ´ 290 ã»å²è¾¼ã¿çªå·(GICC_IARããåå¾)ï¼ä¾å¤çªå·(ãªãã»ããæ¯ã«å®ç¾©ããå¤)ãã¹ã¿ãã¯ã«ä¿å 291 ã»å²è¾¼ã¿çºçåã®å²è¾¼ã¿åªå 292 度ãã¹ã¯ãã¹ã¿ãã¯ã«ä¿å 293 ã»GICC_PMRã«åãä»ããå²è¾¼ã¿ã®å²è¾¼ã¿åªå 294 度ãã»ãã 295 ã»å²è¾¼ã¿/ä¾å¤ãã¹ãã«ã¦ã³ã¿ã®ã¤ã³ã¯ãªã¡ã³ã 296 ã»(å²è¾¼ã¿ã®å ´å)CPUããã¯è§£é¤ 297 ã»ãã¯ã¿ãã¼ãã«ãèªã¿è¾¼ã¿ãã³ãã©ãå®è¡ãã 298 299 âä¾å¤/å²è¾¼ã¿ããã®ãªã¿ã¼ã³ 300 301 ï¼ã½ããã¦ã§ã¢ã§ã®å¦çï¼ 302 ã»CPUããã¯ç¶æ 303 ã¸ç§»è¡ 304 ã»å²è¾¼ã¿/ä¾å¤ãã¹ã¨ã«ã¦ã³ã¿ã®ãã¯ãªã¡ã³ã 305 ã»GICC_PMRã«å²è¾¼ã¿çºçåã®åªå 306 度ãã¹ã¯ãæ»ã 307 ã»ã¹ã¿ãã¯ãã¤ã³ã¿ã®ã¢ã©ã¤ã¡ã³ã調æ´åãæ»ã 308 ã»æ»ãå 309 ã®ã³ã³ããã¹ããã·ã¹ãã ç¶æ 310 ã«å¿ãã¦å²è¾¼ã¿/ä¾å¤çºçå 311 ã¸ãªã¿ã¼ã³ 312 ã¾ãã¯é 313 延ãã£ã¹ããããå®è¡ãã 314 ã»ELR_ELxã«æ»ãå 315 ã¢ãã¬ã¹ï¼SPSR_ELxã«ããã»ããµç¶æ 316 ããããã 317 ã»ããããã¦ããç¶æ 318 ã§eretå½ä»¤ãå®è¡ãï¼å²è¾¼ã¿/ä¾å¤ãããªã¿ã¼ã³ 319 320 321 âOSã®å®è£ 322 323 324 1.ã³ã¢ä¾åé¨å称: arm64 325 326 ARMv8 ã§ã¯ï¼64ãããã¢ã¼ã(AArch64)ããã³32ãããã¢ã¼ã(AArch32)ã®ä¸¡æ¹ããµãã¼ãããã 327 æ¬å®è£ 328 ã¯64ãããã¢ã¼ãã®ã¿ããµãã¼ããããã¨ãæ示ããããããã»ããµä¾åé¨å称ã arm64 ã¨ãã 329 330 2. ä¾å¤ã¢ã¼ãã®ä½¿ãåã 331 332 æ¬å®è£ 333 ã§ã¯ã¿ã¹ã¯ã³ã³ããã¹ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãããããä¾å¤ã¬ãã«1(EL1)ã§åä½ããï¼ 334 ã¿ã¹ã¯ã³ã³ããã¹ããEL0ã§åä½ããæ¡ãèããããï¼ãã®å ´åã¯å²è¾¼ã¿/ä¾å¤ã®åºå£å¦çã«ãã㦠335 é 336 延ãã£ã¹ãããã®åã«ä¾å¤ã¬ãã«ã®åãæ¿ããå¿ 337 è¦ã¨ãªãï¼ 338 339 3.ãã£ã¹ãããã£ã®å®è¡ã¢ã¼ã 340 341 æ¬å®è£ 342 ã§ã¯ãã¹ã¦ä¾å¤ã¬ãã«1ã§åä½ããããï¼ãã£ã¹ãããã£ã¯ä¾å¤ã¬ãã«1(EL1)ã§åä½ããï¼ 343 344 345 4.ã¹ã¿ãã¯ã®ä½¿ãåã 346 347 SSPã§ã¯ã¿ã¹ã¯ã³ã³ããã¹ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãå 348 ±ã«ä¸ã¤ã®ã¹ã¿ãã¯ãå 349 ±ç¨ããï¼ 350 æ¬å®è£ 351 ã§ã¯SP_ELxã使ç¨ãã¦ããï¼ 352 ãã®ä»ã«SP_EL0ã使ç¨ããå®è£ 353 ãèããããï¼ãã®å ´åã¯å²è¾¼ã¿/ä¾å¤ã®å 354 ¥å£å¦çã«ã¦ 355 ã¬ã¸ã¹ã¿ãä¿åããåã«SP_EL0ã¸ã®ã¹ã¿ãã¯åãæ¿ããè¡ãï¼ 356 357 5.ã³ã³ããã¹ãã®å¤å® 358 359 å²è¾¼ã¿/ä¾å¤ã®ãã¹ãåæ°ãä¿æããå¤æ°(intnest)ã0ãªãã¿ã¹ã¯ã¿ã¹ã¯ã³ã³ããã¹ãï¼ 360 1以ä¸ãªãéã¿ã¹ã¯ã³ã³ããã¹ãã¨ããï¼ 361 ã³ã³ããã¹ãæ¯ã«ä¾å¤ã¬ãã«ãåããå®è£ 362 ãåãå ´åã¯PSTATEã®ããã2ããã³3㧠363 ä¾å¤ã¬ãã«ãèªã¿åºããã¨ã«ããå¤å¥ããã¨ããæ¹æ³ãèããããï¼ 364 æ¬å®è£ 365 ã§ã¯ã³ã³ããã¹ãã«ãããåãä¾å¤ã¬ãã«ã使ç¨ãï¼ããã»ããµã® 366 ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ã§ã¯å¤å¥ãã§ããªãããå¤æ°ã§å¤å¥ããï¼ 367 368 6. CPUãã㯠369 370 CPUããã¯PSTATE.Iã«ããCPUããã¯ãå®ç¾ããï¼ 371 372 7. å²è¾¼ã¿ããã¯ã¨CPUä¾å¤ã®é¢ä¿ 373 374 FIQãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¨ããããï¼å²è¾¼ã¿ããã¯ã¯PSTATE.Iã«å ã㦠375 PSTATE.Fãç¨ãã¦å®ç¾ããï¼ãã ãï¼ãã©ã°ããäºãã«ç¬ç«ãããããï¼ 376 å²è¾¼ã¿ããã¯ç¶æ 377 ã®è¨å®/解é¤ã®éã¯ï¼ããã¯åã«CPUããã¯ãã©ã°(=PSTATE.I)ã® 378 ç¶æ 379 ãä¿åãï¼è§£é¤åã«å 380 ã®ç¶æ 381 ã«æ»ãããã«ãã¦ããï¼ 382 383 8. å¤é¨åªå 384 度ã¨å 385 é¨åªå 386 度 387 388 å¤é¨åªå 389 度ã¨ã¯APIã§æå®ããå²è¾¼ã¿åªå 390 度(PRIå)ã®ãã¨ã§ããï¼å¤ãå°ãã 391 ã»ã©åªå 392 度ãé«ãï¼å²è¾¼ã¿ãã³ãã©ã«ã¯ï¼-1ããé£ç¶ããè² ã®å¤ãè¨å®å¯è½ã§ 393 ããï¼GICã®å ´åï¼å 394 é¨åªå 395 度ã¯ï¼GICC_PMRã¬ã¸ã¹ã¿ã«è¨å®ããå¤ã§ããï¼ 396 å¤é¨åªå 397 度ã¨å 398 é¨åªå 399 度ã®å¤æã¯ä»¥ä¸ã®ãã¯ãã§è¡¨ç¾ãããï¼ 400 401 /* å¤é¨è¡¨ç¾ã¸ã®å¤æ */ 222 割込み/例外発生時の主なシーケンスは次のようになる(遷移先の例外レベルをELxと表現する) 223 224 (ハードウェアの処理) 225 ・PSTATEをSPSR_ELxに保存する 226 ・リターンアドレスをELR_ELxに保存する 227 ・PSTATE.{D,A,I,F}を1にセットする 228 ・同期例外およびSError割込みのとき,例外要因情報をESR_ELxに保存する 229 ・スタックポインタをSP_ELxに切り替える 230 ・ELxへ遷移する 231 232 (ソフトウェアでの処理) 233 ・(発生時にSP_EL0を使用していた場合)スタックを割込み発生前(SP_EL0)に戻す 234 ・汎用レジスタ(X0-X30)をスタックに保存 235 ・SPSR_ELx, ESR_ELx, ELR_ELxをスタックに保存 236 ・スタックポインタのアライメントを調整 237 ・割込み番号(GICC_IARから取得),例外番号(オフセット毎に定義した値)をスタックに保存 238 ・割込み発生前の割込み優先度マスクをスタックに保存 239 ・GICC_PMRに受け付けた割込みの割込み優先度をセット 240 ・割込み/例外ネストカウンタのインクリメント 241 ・(割込みの場合)CPUロック解除 242 ・ベクタテーブルを読み込みハンドラを実行する 243 244 ●例外/割込みからのリターン 245 246 (ソフトウェアでの処理) 247 ・CPUロック状態へ移行 248 ・割込み/例外ネスとカウンタのデクリメント 249 ・GICC_PMRに割込み発生前の優先度マスクを戻す 250 ・スタックポインタのアライメント調整分を戻す 251 ・戻り先のコンテキストやシステム状態に応じて割込み/例外発生元へリターン 252 または遅延ディスパッチを実行する 253 ・ELR_ELxに戻り先アドレス,SPSR_ELxにプロセッサ状態がそれぞれ 254 セットされている状態でeret命令を実行し,割込み/例外からリターン 255 256 257 ○OSの実装 258 259 1.コア依存部名称: arm64 260 261 ARMv8 では,64ビットモード(AArch64)および32ビットモード(AArch32)の両方をサポートするが 262 本実装は64ビットモードのみをサポートすることを明示するためプロセッサ依存部名称を arm64 とした 263 264 2. 例外モードの使い分け 265 266 本実装ではタスクコンテキスト,非タスクコンテキストいずれも例外レベル1(EL1)で動作する. 267 タスクコンテキストをEL0で動作する案も考えられる.その場合は割込み/例外の出口処理において 268 遅延ディスパッチの前に例外レベルの切り替えが必要となる. 269 270 3.ディスパッチャの実行モード 271 272 本実装ではすべて例外レベル1で動作するため,ディスパッチャは例外レベル1(EL1)で動作する. 273 274 275 4.スタックの使い分け 276 277 SSPではタスクコンテキスト,非タスクコンテキスト共に一つのスタックを共用する. 278 本実装ではSP_ELxを使用している. 279 この他にSP_EL0を使用する実装も考えられる.その場合は割込み/例外の入口処理にて 280 レジスタを保存する前にSP_EL0へのスタック切り替えを行う. 281 282 5.コンテキストの判定 283 284 割込み/例外のネスト回数を保持する変数(intnest)が0ならタスクタスクコンテキスト, 285 1以上なら非タスクコンテキストとする. 286 コンテキスト毎に例外レベルを分ける実装を取る場合はPSTATEのビット2および3で 287 例外レベルを読み出すことにより判別するという方法も考えられる. 288 本実装ではコンテキストによらず同じ例外レベルを使用し,プロセッサの 289 ステータスレジスタでは判別ができないため変数で判別する. 290 291 6. CPUロック 292 293 CPUロックPSTATE.IによりCPUロックを実現する. 294 295 7. 割込みロックとCPU例外の関係 296 297 FIQをカーネル管理外の割込みとするため,割込みロックはPSTATE.Iに加えて 298 PSTATE.Fも用いて実現する.ただし,フラグをお互いに独立させるため, 299 割込みロック状態の設定/解除の際は,ロック前にCPUロックフラグ(=PSTATE.I)の 300 状態を保存し,解除前に元の状態に戻すようにしている. 301 302 8. 外部優先度と内部優先度 303 304 外部優先度とはAPIで指定する割込み優先度(PRI型)のことであり,値が小さい 305 ほど優先度が高い.割込みハンドラには,-1から連続した負の値を設定可能で 306 ある.GICの場合,内部優先度は,GICC_PMRレジスタに設定する値である. 307 外部優先度と内部優先度の変換は以下のマクロで表現される. 308 309 /* 外部表現への変換 */ 402 310 #define EXT_IPM(pri) \ 403 311 (((PRI)((pri) >> GIC_PRI_SHIFT)) - (GIC_PRI_LEVEL - 1)) 404 312 405 /* å 406 é¨è¡¨ç¾ã¸ã®å¤æ */ 313 /* 内部表現への変換 */ 407 314 #define INT_IPM(ipm) \ 408 315 (((uint_t)((ipm) + (GIC_PRI_LEVEL - 1))) << GIC_PRI_SHIFT) 409 316 410 ããã§GIC_PRI_LEVELã¯ãµãã¼ãããå²è¾¼ã¿åªå 411 度ã®æ°ï¼GIC_PRI_SHIFTã¯GICC_PMRã¬ã¸ã¹ã¿å 412 413 ã®ï¼å 414 é¨åªå 415 度ã®å¤ãæ ¼ç´ãããä½ç½®ï¼ããã0ããã®ãªãã»ããï¼ã表ãï¼ 416 417 418 9. ã«ã¼ãã«ç®¡çå 419 ã®æé«åªå 420 度(CPUããã¯ç¶æ 421 ã§ã®åªå 422 度ãã¹ã¯) 423 424 GICã®å ´åï¼ã«ã¼ãã«ç®¡çå 425 ã®å²è¾¼ã¿ã®æé«åªå 426 度ã¯è¨å®å¯è½ãªå¤é¨åªå 427 度ã®æé«å¤ã¨åãã¨ããï¼ 428 429 430 以ä¸ï¼ 317 ここでGIC_PRI_LEVELはサポートする割込み優先度の数,GIC_PRI_SHIFTはGICC_PMRレジスタ内 318 の,内部優先度の値が格納される位置(ビット0からのオフセット)を表す. 319 320 321 9. カーネル管理内の最高優先度(CPUロック状態での優先度マスク) 322 323 GICの場合,カーネル管理内の割込みの最高優先度は設定可能な外部優先度の最高値と同じとする. 324 325 326 以上. -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_kernel.h
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 * å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 * ã¨ï¼ 29 * (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 * (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 * å ±åãããã¨ï¼ 37 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 * 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 * å 45 責ãããã¨ï¼ 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 46 32 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 53 38 * 54 39 * @(#) $Id$ … … 56 41 57 42 /* 58 * kernel.h ã®ããã»ããµä¾åé¨ï¼ARMv8-Aç¨ï¼43 * kernel.hのプロセッサ依存部(ARMv8-A用) 59 44 * 60 * ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼target_kernel.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯61 * ã«ã¼ãããããã¡ã¤ã«ï¼ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡ã¤ã«ãã62 * ç´æ¥ã¤ã³ã¯ã«ã¼ããã¦ã¯ãªããªãï¼45 * このインクルードファイルは,target_kernel.h(または,そこからインク 46 * ルードされるファイル)のみからインクルードされる.他のファイルから 47 * 直接インクルードしてはならない. 63 48 */ 64 49 … … 67 52 68 53 /* 69 * ã¿ã¤ã ãã£ãã¯ã®å®ç¾©54 * タイムティックの定義 70 55 */ 71 56 #ifndef TIC_NUME 72 #define TIC_NUME 1U /* ã¿ã¤ã ãã£ãã¯ã®å¨æã®åå*/57 #define TIC_NUME 1U /* タイムティックの周期の分子 */ 73 58 #endif 74 59 #ifndef TIC_DENO 75 #define TIC_DENO 1U /* ã¿ã¤ã ãã£ãã¯ã®å¨æã®åæ¯*/60 #define TIC_DENO 1U /* タイムティックの周期の分母 */ 76 61 #endif 77 62 … … 79 64 80 65 /* 81 * ã¹ã¿ãã¯ã®å 82 * ã¹ã¿ãã¯ãã¤ã³ã¿ã®ã¢ã©ã¤ã¡ã³ãã¯ãã¤ã³ã¿ãµã¤ãºã®åã«ããå¿ 83 è¦ããã 66 * スタックの型 67 * スタックポインタのアライメントはポインタサイズの倍にする必要がある 84 68 */ 85 69 #define TOPPERS_STK_T uint128_t -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_kernel.trb
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 12 12 # 13 13 # 14 # ä¸è¨èä½æ¨©è 15 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 16 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 17 # å¤ã»åé 18 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 19 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 20 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 21 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 22 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 23 # ç¨ã§ããå½¢ã§åé 24 å¸ããå ´åã«ã¯ï¼åé 25 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 26 # è 27 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 28 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 29 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 30 # ç¨ã§ããªãå½¢ã§åé 31 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 32 # ã¨ï¼ 33 # (a) åé 34 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 35 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 36 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 37 # (b) åé 38 å¸ã®å½¢æ 39 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 40 # å ±åãããã¨ï¼ 41 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 42 # 害ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ããå 44 責ãããã¨ï¼ 45 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 46 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 47 ããã³TOPPERSããã¸ã§ã¯ãã 48 # å 49 責ãããã¨ï¼ 14 # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 15 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 16 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 17 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 18 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 19 # スコード中に含まれていること. 20 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 21 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 22 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 23 # の無保証規定を掲載すること. 24 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 25 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 26 # と. 27 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 28 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 29 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 30 # 報告すること. 31 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 32 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 33 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 34 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 35 # 免責すること. 50 36 # 51 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 52 ã 53 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 54 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 55 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 56 # ã®è²¬ä»»ãè² ããªãï¼ 37 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 38 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 39 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 40 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 41 # の責任を負わない. 57 42 # 58 43 # $Id$ … … 60 45 61 46 # 62 # ãã¹2ã®çæã¹ã¯ãªããã®ã³ã¢ä¾åé¨ï¼ARMv8-Aç¨ï¼47 # パス2の生成スクリプトのコア依存部(ARMv8-A用) 63 48 # 64 49 65 50 # 66 # ãã§ãã¯æ¹æ³ã®æå®51 # チェック方法の指定 67 52 # 68 53 $CHECK_STKSZ_ALIGN = 16 69 54 70 55 # 71 # ã¿ã¼ã²ããéä¾åé¨ã®ã¤ã³ã¯ã«ã¼ã56 # ターゲット非依存部のインクルード 72 57 # 73 58 IncludeTrb("kernel/kernel.trb") -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_rename.def
-
Property svn:mime-type
set to
text/plain; charset=utf-8
-
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_rename.h
-
Property svn:mime-type
set to
text/plain; charset=utf-8
-
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_sil.h
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 * å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 * ã¨ï¼ 29 * (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 * (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 * å ±åãããã¨ï¼ 37 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 * 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 * å 45 責ãããã¨ï¼ 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 46 32 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 53 38 * 54 39 * @(#) $Id$ … … 56 41 57 42 /* 58 * sil.h ã®ã³ã¢ä¾åé¨ï¼ARMv8-Aç¨ï¼43 * sil.hのコア依存部(ARMv8-A用) 59 44 */ 60 45 … … 65 50 66 51 /* 67 * ã¨ã³ãã£ã¢ã³ã®å®ç¾©52 * エンディアンの定義 68 53 */ 69 54 #define SIL_ENDIAN_LITTLE … … 72 57 73 58 /* 74 * å 75 ¨å²è¾¼ã¿ããã¯ãã©ã°ã®ã»ãã(NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ã®ç¦æ¢) 59 * 全割込みロックフラグのセット(NMIを除くすべての割込みの禁止) 76 60 */ 77 61 Inline bool_t … … 93 77 94 78 /* 95 * å 96 ¨å²è¾¼ã¿ããã¯ãã©ã°ã®è§£é¤ 79 * 全割込みロックフラグの解除 97 80 */ 98 81 Inline void … … 109 92 110 93 /* 111 * å 112 ¨å²è¾¼ã¿ããã¯ç¶æ 113 ã®å¶å¾¡ 94 * 全割込みロック状態の制御 114 95 */ 115 96 #define SIL_PRE_LOC bool_t TOPPERS_locked -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_stddef.h
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 * å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 * ã¨ï¼ 29 * (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 * (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 * å ±åãããã¨ï¼ 37 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 * 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 * å 45 責ãããã¨ï¼ 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 46 32 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 53 38 * 54 39 * @(#) $Id$ … … 56 41 57 42 /* 58 * t_stddef.h ã®ã³ã¢ä¾åé¨ï¼ARMv8-Aç¨ï¼43 * t_stddef.hのコア依存部(ARMv8-A用) 59 44 * 60 * ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼target_stddef.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯61 * ã«ã¼ãããããã¡ã¤ã«ï¼ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡ã¤ã«ãã62 * ç´æ¥ã¤ã³ã¯ã«ã¼ããã¦ã¯ãªããªãï¼45 * このインクルードファイルは,target_stddef.h(または,そこからインク 46 * ルードされるファイル)のみからインクルードされる.他のファイルから 47 * 直接インクルードしてはならない. 63 48 */ 64 49 … … 67 52 68 53 /* 69 * ã¿ã¼ã²ãããèå¥ããããã®ãã¯ãã®å®ç¾©54 * ターゲットを識別するためのマクロの定義 70 55 */ 71 #define TOPPERS_ARM64 /* ã³ã¢ç¥ç§°*/56 #define TOPPERS_ARM64 /* コア略称 */ 72 57 73 58 #ifndef TOPPERS_MACRO_ONLY 74 59 75 60 /* 76 * ãã¼ã¿åã®å®ç¾©61 * データ型の定義 77 62 */ 78 63 typedef __int128_t int128_t; -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_support.S
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 * å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 * ã¨ï¼ 29 * (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 * (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 * å ±åãããã¨ï¼ 37 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 * 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 * å 45 責ãããã¨ï¼ 46 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 53 * 54 */ 55 56 /* 57 * ããã»ããµä¾åã¢ã¸ã¥ã¼ã« ã¢ã»ã³ããªè¨èªé¨ï¼ARM64ç¨ï¼ 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 32 * 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 38 * 39 */ 40 41 /* 42 * プロセッサ依存モジュール アセンブリ言語部(ARM64用) 58 43 */ 59 44 60 45 #define TOPPERS_MACRO_ONLY 61 #define UINT_C(val) (val) /* uint_t åã®å®æ°ãä½ããã¯ã*/62 #define ULONG_C(val) (val) /* ulong_t åã®å®æ°ãä½ããã¯ã*/63 #define UINT64_C(val) (val) /* uint64_t åã®å®æ°ãä½ããã¯ã*/64 #define CAST(type, val) (val) /* åãã£ã¹ããè¡ããã¯ã*/46 #define UINT_C(val) (val) /* uint_t型の定数を作るマクロ */ 47 #define ULONG_C(val) (val) /* ulong_t型の定数を作るマクロ */ 48 #define UINT64_C(val) (val) /* uint64_t型の定数を作るマクロ */ 49 #define CAST(type, val) (val) /* 型キャストを行うマクロ */ 65 50 66 51 #include "kernel_impl.h" 67 52 68 53 /* 69 * ãã£ã¹ãããã£ã®åä½éå§54 * ディスパッチャの動作開始 70 55 */ 71 56 .text … … 75 60 start_dispatch: 76 61 /* 77 * ãã®ã«ã¼ãã³ã¯ï¼ã«ã¼ãã«èµ·åæã«ï¼ä»¥ä¸ã®ç¶æ 78 ã§å¼ã³åºãããï¼ 79 * ã»ãã¹ã¦ã®å²è¾¼ã¿ãç¦æ¢ããç¶æ 80 å²è¾¼ã¿ããã¯ç¶æ 81 ã¨åçï¼ 82 * ã»å²è¾¼ã¿åªå 83 度ãã¹ã¯å 84 ¨è§£é¤ç¶æ 85 62 * このルーチンは,カーネル起動時に,以下の状態で呼び出される. 63 * ・すべての割込みを禁止した状態割込みロック状態と同等) 64 * ・割込み優先度マスク全解除状態 86 65 * 87 * ããã§ã¯ dispatcher ãå¼ã³åºãåã®åæè¨å®ãè¡ãï¼ 88 * (1) ã·ã¹ãã ç¶æ 89 ã®åæåï¼ä»¥ä¸ã®ç¶æ 90 ã¸ç§»è¡ããï¼ 91 * ã»å 92 ¨å²è¾¼ã¿ããã¯è§£é¤ç¶æ 93 (ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿è¨±å¯) 94 * ã»CPUããã¯ç¶æ 95 (ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ç¦æ¢) 96 * ã»å²è¾¼ã¿åªå 97 度ãã¹ã¯å 98 ¨è§£é¤ç¶æ 99 100 * ã»ãã£ã¹ããã許å¯ç¶æ 101 66 * ここでは dispatcher を呼び出す前の初期設定を行う. 67 * (1) システム状態の初期化.以下の状態へ移行する. 68 * ・全割込みロック解除状態(カーネル管理外の割込み許可) 69 * ・CPUロック状態(カーネル管理の割込み禁止) 70 * ・割込み優先度マスク全解除状態 71 * ・ディスパッチ許可状態 102 72 * 103 * (1-1) å²è¾¼ã¿åªå 104 度ãã¹ã¯ã¯åæãããã§ã« 105 * ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 106 度ãã¹ã¯å 107 ¨è§£é¤ç¶æ 108 ã«ãªã£ã¦ããï¼ 109 * (1-2) ãã£ã¹ãããç¦æ¢ãã©ã°ã¯ task_initialize 㧠disdsp ã false ã« 110 * åæåãã¦ããããï¼ãã§ã«ãã£ã¹ããã許å¯ç¶æ 111 ã«ãªã£ã¦ããï¼ 112 * (1-3) ããã§ã¯å²è¾¼ã¿ããã¯ç¶æ 113 ã解é¤ãï¼CPUããã¯ç¶æ 114 ã®è¨å®ãè¡ãï¼ 73 * (1-1) 割込み優先度マスクは前提よりすでに 74 * モデル上の)割込み優先度マスク全解除状態になっている. 75 * (1-2) ディスパッチ禁止フラグは task_initialize で disdsp を false に 76 * 初期化しているため,すでにディスパッチ許可状態になっている. 77 * (1-3) ここでは割込みロック状態を解除し,CPUロック状態の設定を行う. 115 78 * 116 * (2) ã¹ã¿ãã¯ãã¤ã³ã¿ã®åæå117 * start_dispatch ãå¼ã³åºãããã¨ï¼ä»å¾ããã«æ»ã£ã¦ãããã¨ã¯ãªããã118 * ã¹ã¿ãã¯ãã¤ã³ã¿ãããã§åæåããï¼79 * (2) スタックポインタの初期化 80 * start_dispatch が呼び出されると,今後ここに戻ってくることはないため 81 * スタックポインタをここで初期化する. 119 82 */ 120 83 ldr x0, =_kernel_istkpt // setup stack … … 122 85 mov sp, x0 123 86 124 // F ãã©ã°ãã¯ãªã¢(å²è¾¼ã¿ããã¯è§£é¤ï¼CPUããã¯ç¸å½)87 // F フラグをクリア(割込みロック解除,CPUロック相当) 125 88 msr daifclr, #AARCH64_DAIF_FIQ 126 89 127 // dispatcher å¼ã³åºã90 // dispatcher呼び出し 128 91 b dispatcher 129 92 130 93 /* 131 * ã«ã¼ãã«ã®çµäºå¦çã®å¼åºã132 * 133 * ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã«åãæ¿ãï¼94 * カーネルの終了処理の呼出し 95 * 96 * スタックを非タスクコンテキスト用に切り替え. 134 97 * 135 98 */ … … 140 103 call_exit_kernel: 141 104 /* 142 * ã¹ã¿ãã¯ãã¤ã³ã¿ã®åæå105 * スタックポインタの初期化 143 106 */ 144 107 ldr x0, =_kernel_istkpt … … 146 109 mov sp, x0 147 110 148 // å 149 ¨ã¦ã®ä¾å¤ããã¹ã¯(å 150 ¨å²è¾¼ã¿ããã¯ç¸å½) 111 // 全ての例外をマスク(全割込みロック相当) 151 112 msr daifset, #(AARCH64_DAIF_ALL) 152 113 153 b exit_kernel /* ã«ã¼ãã«ã®çµäºå¦çãå¼ã¶*/154 155 156 /* 157 * å²è¾¼ã¿/ä¾å¤ã³ã³ããã¹ãä¿åå¦ç114 b exit_kernel /* カーネルの終了処理を呼ぶ */ 115 116 117 /* 118 * 割込み/例外コンテキスト保存処理 158 119 */ 159 120 .macro __save_context 160 121 /* 161 * x0 - x29 ã®ä¿å(x0,x1ãã¢ããx28, x29ã¾ã§)122 * x0 - x29 の保存(x0,x1ペアからx28, x29まで) 162 123 */ 163 124 stp x1, x0, [sp, #-16]! … … 178 139 179 140 /* 180 * spsr_el1, x30 ããã¢ã§ä¿å141 * spsr_el1, x30をペアで保存 181 142 */ 182 143 mrs x21, spsr_el1 … … 184 145 185 146 /* 186 * esr_el1, elr_el1 ããã¢ã§ä¿å147 * esr_el1, elr_el1 をペアで保存 187 148 */ 188 149 mrs x21, esr_el1 … … 191 152 192 153 /* 193 * 追å ã®æ ¼ç´é åã確ä¿ããããï¼SPãæ¸ç®ãã¦ãã154 * 追加の格納領域を確保するため,SPを減算しておく 194 155 */ 195 156 sub sp, sp, #16 … … 197 158 198 159 /* 199 * ã³ã³ããã¹ã復帰å¦ç160 * コンテキスト復帰処理 200 161 */ 201 162 .macro __restore_context 202 163 /* 203 * ã¹ã¿ãã¯ã«ä¿åããä¸é¨ãã¼ã¿ã®ç ´æ£164 * スタックに保存した一部データの破棄 204 165 */ 205 166 mov x1, #16 206 167 add sp, sp, x1 207 168 /* 208 * ELR ã®å¾©å 209 (ESRã¯ç ´æ£) 169 * ELR の復元(ESRは破棄) 210 170 */ 211 171 ldp x21, x22, [sp], #16 212 172 msr elr_el1, x22 213 173 /* 214 * SPSR/x30 ã®å¾©å 215 174 * SPSR/x30 の復元 216 175 */ 217 176 ldp x21, x30, [sp], #16 … … 219 178 220 179 /* 221 * x0 - x29 ã®å¾©å 222 180 * x0 - x29 の復元 223 181 */ 224 182 ldp x29, x28, [sp], #16 … … 240 198 241 199 /* 242 * ( ã«ã¼ãã«ç®¡çå¤ã®)CPUä¾å¤/FIQã®åºå£å¦ç200 * (カーネル管理外の)CPU例外/FIQの出口処理 243 201 */ 244 202 .text … … 248 206 ret_exc: 249 207 ret_fiq: 250 __restore_context // ã¬ã¸ã¹ã¿å¾©å¸°208 __restore_context // レジスタ復帰 251 209 eret 252 210 253 211 /* 254 * å²è¾¼ã¿/(ã«ã¼ãã«ç®¡çã®)CPUä¾å¤ã®åºå£å¦ç 255 * åæï¼CPUããã¯ç¶æ 256 , ãã¹ãã«ã¦ã³ã¿ãã¯ãªã¡ã³ãæ¸ã¿ 212 * 割込み/(カーネル管理の)CPU例外の出口処理 213 * 前提:CPUロック状態, ネストカウンタデクリメント済み 257 214 */ 258 215 .text … … 260 217 .global ret_int 261 218 ret_int: 262 // æ»ãå 263 ã®ã³ã³ããã¹ãã確èªãï¼å¤æ®µå²è¾¼ã¿ãªããªã¿ã¼ã³ 219 // 戻り先のコンテキストを確認し,多段割込みならリターン 264 220 ldr x1, =_kernel_intnest 265 221 ldrb w3, [x1] 266 222 cbnz w3, int_return 267 223 268 ret_int_2: // å段ã®å²è¾¼ã¿ã®å ´å 269 // reqflg ã false ãªãå¼ã³åºãå 270 ã¸æ»ã 224 ret_int_2: // 初段の割込みの場合 225 // reqflg が false なら呼び出し元へ戻る 271 226 ldr x0, =reqflg 272 227 ldr w1, [x0] 273 228 cbz w1, int_return 274 229 275 ret_int_3: // reqflg ã true ã®å ´å230 ret_int_3: // reqflg が true の場合 276 231 mov w1, #0 // reqflg = false 277 232 str w1, [x0] 278 233 279 // ãã£ã¹ãããç¦æ¢ãªãå¼ã³åºãå 280 ã¸æ»ã 234 // ディスパッチ禁止なら呼び出し元へ戻る 281 235 ldr x0, =disdsp 282 236 ldr w1, [x0] … … 284 238 285 239 /* 286 * é 287 延ãã£ã¹ããã 288 * search_schedtsk ã®è¿å¤(x0)ãå¼æ°ã¨ã㦠run_task ãå¼ã³åºã 240 * 遅延ディスパッチ 241 * search_schedtsk の返値(x0)を引数として run_task を呼び出す 289 242 */ 290 243 bl search_schedtsk … … 292 245 293 246 /* 294 * å¼ã³åºãå 295 ã¸ãªã¿ã¼ã³ 247 * 呼び出し元へリターン 296 248 */ 297 249 int_return: 298 __restore_context // ã¬ã¸ã¹ã¿å¾©å¸°250 __restore_context // レジスタ復帰 299 251 eret 300 252 301 253 /* 302 * å²è¾¼ã¿ãã¯ã¿303 * æåã«å²è¾¼ã¿çºçåã®ã¹ã¿ãã¯ã«æ»ãã¦ããã¬ã¸ã¹ã¿ãä¿åãã304 * ãã¼ãã¦ã§ã¢ã«ãã£ã¦PSTATE.{I,F} ãã»ããæ¸ã§ãããã¨ãåæã¨ãã254 * 割込みベクタ 255 * 最初に割込み発生前のスタックに戻してからレジスタを保存する 256 * ハードウェアによってPSTATE.{I,F} がセット済であることを前提とする 305 257 */ 306 258 .text … … 313 265 314 266 // Sync EL1 315 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã316 __save_context 317 mov x22, #0 // ä¾å¤çªå·ãx22ã«ã»ãã267 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 268 __save_context 269 mov x22, #0 // 例外番号をx22にセット 318 270 b chip_exc_entry 319 271 320 272 // IRQ EL1 321 273 .align 7 322 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã274 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 323 275 __save_context 324 276 b chip_int_entry … … 326 278 // FIQ EL1 327 279 .align 7 328 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã¸æ»ã280 msr spsel, #0 // 例外発生前のスタック(SP_EL0)へ戻す 329 281 __save_context 330 282 b chip_fiq_entry … … 332 284 // SError EL1 333 285 .align 7 334 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã¸æ»ã335 __save_context 336 mov x22, #1 // ä¾å¤çªå·ãx22ã«ã»ãã286 msr spsel, #0 // 例外発生前のスタック(SP_EL0)へ戻す 287 __save_context 288 mov x22, #1 // 例外番号をx22にセット 337 289 b chip_exc_entry 338 290 … … 344 296 .align 7 345 297 __save_context 346 mov x22, #2 // ä¾å¤çªå·ãx22ã«ã»ãã298 mov x22, #2 // 例外番号をx22にセット 347 299 b chip_exc_entry 348 300 … … 360 312 .align 7 361 313 __save_context 362 mov x22, #3 // ä¾å¤çªå·ãx22ã«ã»ãã314 mov x22, #3 // 例外番号をx22にセット 363 315 b chip_exc_entry 364 316 … … 369 321 // Sync EL0 370 322 .align 7 371 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã372 __save_context 373 mov x22, #4 // ä¾å¤çªå·ãx22ã«ã»ãã323 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 324 __save_context 325 mov x22, #4 // 例外番号をx22にセット 374 326 b chip_exc_entry 375 327 376 328 // IRQ EL0 377 329 .align 7 378 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã330 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 379 331 __save_context 380 332 b chip_int_entry … … 382 334 // FIQ EL0 383 335 .align 7 384 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã336 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 385 337 __save_context 386 338 b chip_fiq_entry … … 388 340 // Error EL0 389 341 .align 7 390 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã391 __save_context 392 mov x22, #5 // ä¾å¤çªå·ãx22ã«ã»ãã342 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 343 __save_context 344 mov x22, #5 // 例外番号をx22にセット 393 345 b chip_exc_entry 394 346 … … 399 351 // AArch32 sync 400 352 .align 7 401 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã402 __save_context 403 mov x22, #6 // ä¾å¤çªå·ãx22ã«ã»ãã353 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 354 __save_context 355 mov x22, #6 // 例外番号をx22にセット 404 356 b chip_exc_entry 405 357 406 358 // AArch32 IRQ 407 359 .align 7 408 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã360 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 409 361 __save_context 410 362 b chip_int_entry … … 412 364 // AArch32 FIQ 413 365 .align 7 414 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã366 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 415 367 __save_context 416 368 b chip_fiq_entry … … 418 370 // AArch32 Error 419 371 .align 7 420 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã421 __save_context 422 mov x22, #7 // ä¾å¤çªå·ãx22ã«ã»ãã423 b chip_exc_entry 372 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 373 __save_context 374 mov x22, #7 // 例外番号をx22にセット 375 b chip_exc_entry -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_sym.def
-
Property svn:mime-type
set to
text/plain; charset=utf-8
-
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_test.h
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 * å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 * ã¨ï¼ 29 * (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 * (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 * å ±åãããã¨ï¼ 37 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 * 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 * å 45 責ãããã¨ï¼ 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 46 32 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 53 38 * 54 39 * @(#) $Id$ … … 56 41 57 42 /* 58 * ãã¹ãããã°ã©ã ã®ãããä¾åå®ç¾©ï¼ARMv8-Aç¨ï¼43 * テストプログラムのチップ依存定義(ARMv8-A用) 59 44 */ 60 45 … … 63 48 64 49 /* 65 * ã³ã¢ã§å 66 ±éãªå®ç¾© 50 * コアで共通な定義 67 51 */ 68 52 -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_timer.c
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 * å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 * ã¨ï¼ 29 * (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 * (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 * å ±åãããã¨ï¼ 37 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 * 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 * å 45 責ãããã¨ï¼ 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 46 32 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 53 38 * 54 39 * $Id$ … … 56 41 57 42 /* 58 * ã¿ã¤ããã©ã¤ãï¼Generic Timerï¼43 * タイマドライバ(Generic Timer) 59 44 */ 60 45 #include "kernel_impl.h" … … 63 48 64 49 /* 65 * ã¿ã¤ãã®å¨æ³¢æ°(åä½: kHz)50 * タイマの周波数(単位: kHz) 66 51 */ 67 52 static uint32_t timer_clock; 68 53 69 54 /* 70 * ã¿ã¤ãã®è¨å®å¤(æ¯è¼å¯¾è±¡ã¨ããå¤)55 * タイマの設定値(比較対象とする値) 71 56 */ 72 57 static uint64_t timer_cval; 73 58 74 59 /* 75 * ã¿ã¤ãã®éå§60 * タイマの開始 76 61 */ 77 62 Inline void … … 86 71 87 72 /* 88 * ã¿ã¤ãã®åæ¢73 * タイマの停止 89 74 */ 90 75 Inline void … … 98 83 99 84 /* 100 * ã¿ã¤ãã®èµ·åå¦ç85 * タイマの起動処理 101 86 */ 102 87 void … … 107 92 108 93 /* 109 * ã¿ã¤ãã®åæ¢94 * タイマの停止 110 95 */ 111 96 target_timer_stop(); 112 97 113 98 /* 114 * ããªã¹ã±ã¼ã©(=2^31 --> divider=1)99 * プリスケーラ(=2^31 --> divider=1) 115 100 */ 116 101 sil_wrw_mem((uint32_t *)(0x40000008), 0x80000000); … … 120 105 121 106 /* 122 * 1 ãã£ãã¯ã®ã¯ããã¯æ°107 * 1ティックのクロック数 123 108 */ 124 109 cyc = (timer_clock * (TIC_NUME) / (TIC_DENO)); 125 110 126 111 /* 127 * ã¿ã¤ãã®éå§112 * タイマの開始 128 113 */ 129 114 clock_write_tval((uint32_t)cyc); … … 131 116 132 117 /* 133 * ã¿ã¤ãã®è¨å®å¤118 * タイマの設定値 134 119 */ 135 120 timer_cval = clock_read_cval(); … … 137 122 138 123 /* 139 * ã¿ã¤ãã®åæ¢å¦ç124 * タイマの停止処理 140 125 */ 141 126 void … … 143 128 { 144 129 /* 145 * ã¿ã¤ãã®åæ¢130 * タイマの停止 146 131 */ 147 132 clock_write_ctrl((uint32_t)0); … … 149 134 150 135 /* 151 * ã¿ã¤ãå²è¾¼ã¿ãã³ãã©136 * タイマ割込みハンドラ 152 137 */ 153 138 void … … 158 143 159 144 /* 160 * ã¿ã¤ãã®åæ¢145 * タイマの停止 161 146 */ 162 147 target_timer_stop(); 163 148 164 149 /* 165 * 1 ãã£ãã¯ã®ã¯ããã¯æ°150 * 1ティックのクロック数 166 151 */ 167 152 cyc = (timer_clock * (TIC_NUME) / (TIC_DENO)); 168 153 169 154 /* 170 * ã¿ã¤ãã®è¨å®å¤155 * タイマの設定値 171 156 */ 172 157 timer_cval = timer_cval + (uint64_t)cyc; 173 158 174 159 175 // ã«ã¦ã³ã¿ããèªã¿åºã160 // カウンタから読み出し 176 161 pct = clock_read_counter(); 177 162 … … 184 169 185 170 /* 186 * ã¿ã¤ãã®è¨å®171 * タイマの設定 187 172 */ 188 173 clock_write_cval((uint64_t)timer_cval); 189 174 190 175 /* 191 * ã¿ã¤ãã®éå§176 * タイマの開始 192 177 */ 193 178 target_timer_start(); 194 179 195 180 i_begin_int(INTNO_TIMER); 196 signal_time(); /* ã¿ã¤ã ãã£ãã¯ã®ä¾çµ¦*/181 signal_time(); /* タイムティックの供給 */ 197 182 i_end_int(INTNO_TIMER); 198 183 } -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_timer.cfg
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 4 4 5 5 /* 6 * ã¿ã¤ããã©ã¤ãã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«6 * タイマドライバのコンフィギュレーションファイル 7 7 */ 8 8 ATT_INI({ TA_NULL, 0, target_timer_initialize }); -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_timer.h
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 * å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 * ã¨ï¼ 29 * (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 * (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 * å ±åãããã¨ï¼ 37 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 * 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 * å 45 責ãããã¨ï¼ 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 46 32 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 53 38 * 54 39 * $Id$ … … 56 41 57 42 /* 58 * ã¿ã¤ããã©ã¤ãï¼Generic Timerï¼43 * タイマドライバ(Generic Timer) 59 44 */ 60 45 … … 65 50 66 51 /* 67 * ã¿ã¤ãå²è¾¼ã¿ãã³ãã©ç»é²ã®ããã®å®æ°52 * タイマ割込みハンドラ登録のための定数 68 53 */ 69 54 70 #define INTNO_TIMER TINTNO_CNTPNS /* å²è¾¼ã¿çªå·*/71 #define INHNO_TIMER INTNO_TIMER /* å²è¾¼ã¿ãã³ãã©çªå·*/55 #define INTNO_TIMER TINTNO_CNTPNS /* 割込み番号 */ 56 #define INHNO_TIMER INTNO_TIMER /* 割込みハンドラ番号 */ 72 57 73 58 #ifndef INTPRI_TIMER 74 #define INTPRI_TIMER (-3) /* å²è¾¼ã¿åªå 75 度 */ 59 #define INTPRI_TIMER (-3) /* 割込み優先度 */ 76 60 #endif 77 61 78 62 #ifndef INTATR_TIMER 79 #define INTATR_TIMER TA_NULL /* å²è¾¼ã¿å±æ§*/63 #define INTATR_TIMER TA_NULL /* 割込み属性 */ 80 64 #endif 81 65 82 66 /* 83 * å¶å¾¡ã¬ã¸ã¹ã¿ã®ãããå®ç¾©67 * 制御レジスタのビット定義 84 68 */ 85 69 #define CNTP_CTL_ENABLE (1 << 0) … … 91 75 92 76 /* 93 * ç©çã¿ã¤ãã®å¶å¾¡ã¬ã¸ã¹ã¿ããã®èªã¿åºã77 * 物理タイマの制御レジスタからの読み出し 94 78 */ 95 79 Inline uint32_t … … 104 88 105 89 /* 106 * ç©çã¿ã¤ãã®å¶å¾¡ã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿90 * 物理タイマの制御レジスタへの書き込み 107 91 */ 108 92 Inline void … … 114 98 115 99 /* 116 * ç©çã¿ã¤ã(ããªã¼ã«ã¦ã³ã¿)ã®ã«ã¦ã³ãå¤ã®èªã¿åºã100 * 物理タイマ(フリーカウンタ)のカウント値の読み出し 117 101 */ 118 102 Inline uint64_t … … 126 110 127 111 /* 128 * ç©çã¿ã¤ãå¤ã®èªã¿åºã112 * 物理タイマ値の読み出し 129 113 */ 130 114 Inline uint32_t … … 138 122 139 123 /* 140 * ç©çã¿ã¤ãå¤ã®æ¸ãè¾¼ã¿124 * 物理タイマ値の書き込み 141 125 */ 142 126 Inline void … … 147 131 148 132 /* 149 * ã¿ã¤ãã®æ¯è¼å¤ã®èªã¿åºã133 * タイマの比較値の読み出し 150 134 */ 151 135 Inline uint64_t … … 159 143 160 144 /* 161 * ã¿ã¤ãã®æ¯è¼å¤ã®æ¸ãè¾¼ã¿145 * タイマの比較値の書き込み 162 146 */ 163 147 Inline void … … 168 152 169 153 /* 170 * ã·ã¹ãã ã«ã¦ã³ã¿ã®ã¯ããã¯å¨æ³¢æ°ã®åå¾154 * システムカウンタのクロック周波数の取得 171 155 */ 172 156 Inline uint32_t … … 179 163 180 164 /* 181 * ã¿ã¤ãã®èµ·åå¦ç165 * タイマの起動処理 182 166 * 183 * ã¿ã¤ããåæåãï¼å¨æçãªã¿ã¤ãå²è¾¼ã¿è¦æ±ãçºçãããï¼167 * タイマを初期化し,周期的なタイマ割込み要求を発生させる. 184 168 */ 185 169 extern void target_timer_initialize(intptr_t exinf); 186 170 187 171 /* 188 * ã¿ã¤ãã®åæ¢å¦ç172 * タイマの停止処理 189 173 */ 190 174 extern void target_timer_terminate(intptr_t exinf); 191 175 192 176 /* 193 * ã¿ã¤ãå²è¾¼ã¿ãã³ãã©177 * タイマ割込みハンドラ 194 178 */ 195 179 extern void target_timer_handler(void); -
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_unrename.h
-
Property svn:mime-type
set to
text/plain; charset=utf-8
-
Property svn:mime-type
set to
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_user.txt
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 1 1 ===================================================================== 2 ARM64 ããã»ããµä¾åé¨2 ARM64プロセッサ依存部 3 3 Last Modified: '19/04/16 4 4 ===================================================================== 5 5 6 6 7 (1) 対å¿ãã¦ããã¿ã¼ã²ããã·ã¹ãã ã®ç¨®é¡ã»æ§æ7 (1) 対応しているターゲットシステムの種類・構成 8 8 9 ARM64 ä¾åé¨ã¯ï¼ARMv8-A ã¢ã¼ããã¯ãã£ãã¿ã¼ã²ããã¨ãã¦ããï¼ARMv8-A ã¯10 64 ãããã¢ã¼ããã¯ãã£ã§ããå½ä»¤ã»ããã¬ãã«ã§ãARMã¨ã¯ç°ãªãããï¼11 ARM ä¾åé¨ã¨åãã¦ããï¼9 ARM64依存部は,ARMv8-A アーキテクチャをターゲットとしている.ARMv8-A は 10 64ビットアーキテクチャであり命令セットレベルでもARMとは異なるため, 11 ARM依存部と分けている. 12 12 13 ã³ã¢ç¥ç§°çã¯æ¬¡ã®éãï¼ 13 コア略称等は次の通り. 14 14 15 ã³ã¢ç¥ç§°ï¼arm6416 éçºç°å¢ç¥ç§°ï¼gcc15 コア略称:arm64 16 開発環境略称:gcc 17 17 18 (2) 使ç¨ããéçºç°å¢ã¨åä½æ¤è¨¼ããæ¡ä»¶ï¼ãã¼ã¸ã§ã³ï¼ãªãã·ã§ã³çï¼18 (2) 使用する開発環境と動作検証した条件(バージョン,オプション等) 19 19 20 ã«ã¼ãã«ã¯GCCãç¨ãã¦ã³ã³ãã¤ã«ããï¼åä½ç¢ºèªãããã¼ã¸ã§ã³ã¯åã¿ã¼ã² 21 ããä¾åé¨ã®ããã¥ã¡ã³ãã«è¨è¼ããï¼ 20 カーネルはGCCを用いてコンパイルする.動作確認したバージョンは各ターゲ 21 ット依存部のドキュメントに記載する. 22 22 23 (3) ã¿ã¼ã²ããå®ç¾©äºé 24 ã®è¦å® 23 (3) ターゲット定義事項の規定 25 24 26 (3-1) ãã¼ã¿åã«é¢ããè¦å®25 (3-1) データ型に関する規定 27 26 28 ãã¼ã¿å㯠arch/gcc/tool_stddef.h ã§å®ç¾©ããã¦ããå 29 容ã§ï¼floatå㨠30 doubleåã¯ï¼ããããIEEE754æºæ ã®å精度浮åå°æ°ç¹æ°ã¨å精度浮åå°æ°ç¹ 31 æ°ã§ããï¼ 27 データ型は arch/gcc/tool_stddef.h で定義されている内容で,float型と 28 double型は,それぞれIEEE754準拠の単精度浮動小数点数と倍精度浮動小数点 29 数である. 32 30 33 ãã®ã»ãï¼ã¹ã¿ãã¯é åã確ä¿ããããã®ãã¼ã¿åã®ããã« 34 int128_t ããã³ uint128_t ãå®ç¾©ãã¦ããï¼31 このほか,スタック領域を確保するためのデータ型のために 32 int128_t および uint128_t を定義している. 35 33 36 (3-2) å²è¾¼ã¿å¦çã«é¢ããè¦å®34 (3-2) 割込み処理に関する規定 37 35 38 ãããã«æè¼ãããå²è¾¼ã¿ã³ã³ããã¼ã©ã«ããç°ãªãï¼ 39 ãã®ããï¼ä»¥ä¸ã®äºé 40 ã«ã¤ãã¦ã¯ãããä¾åé¨ã«è¨è¼ããï¼ 36 チップに搭載される割込みコントローラにより異なる. 37 そのため,以下の事項についてはチップ依存部に記載する. 41 38 42 ã»å²è¾¼ã¿ãã³ãã©çªå·ã¨å²è¾¼ã¿çªå·ã®å²å½ã¦ï¼ä¸¡è 43 ã®å¯¾å¿ 44 ã»å²è¾¼ã¿åªå 45 度ã®æ®µéæ°ï¼TMIN_INTPRIã®å¤ï¼ï¼ãã®è¨å®æ¹æ³ 46 ã»dis_intã¨ena_intã®ãµãã¼ãã®æç¡ï¼ãã®å¶éäºé 39 ・割込みハンドラ番号と割込み番号の割当て,両者の対応 40 ・割込み優先度の段階数(TMIN_INTPRIの値),その設定方法 41 ・dis_intとena_intのサポートの有無,その制限事項 42 ・CFG_INTの制限事項と拡張(ターゲット定義で使用できる割込み属性) 43 ・カーネル管理外の割込み 47 44 48 ã»CFG_INTã®å¶éäºé 49 ã¨æ¡å¼µï¼ã¿ã¼ã²ããå®ç¾©ã§ä½¿ç¨ã§ããå²è¾¼ã¿å±æ§ï¼ 50 ã»ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ 45 (3-3) CPU例外処理に関する規定 51 46 52 (3-3) CPUä¾å¤å¦çã«é¢ããè¦å® 47 ・CPU例外ハンドラ番号 53 48 54 ã»CPUä¾å¤ãã³ãã©çªå· 49 Synchronous例外およびSError例外をCPU例外として扱う. 55 50 56 Synchronousä¾å¤ããã³SErrorä¾å¤ãCPUä¾å¤ã¨ãã¦æ±ãï¼ 51 ARMv8では,例外発生時の例外レベル(EL),使用スタック,実行状態(AArch32 or AArch64), 52 発生した例外の種類により,ジャンプ先となる例外ベクタ中のオフセットアドレスが異なる. 53 CPU例外ハンドラはこのジャンプ先のオフセットアドレスで区別することにし, 54 それぞれ異なるCPU例外ハンドラ番号を割り当てる. 57 55 58 ARMv8ã§ã¯ï¼ä¾å¤çºçæã®ä¾å¤ã¬ãã«(EL)ï¼ä½¿ç¨ã¹ã¿ãã¯ï¼å®è¡ç¶æ 59 (AArch32 or AArch64)ï¼ 60 çºçããä¾å¤ã®ç¨®é¡ã«ããï¼ã¸ã£ã³ãå 61 ã¨ãªãä¾å¤ãã¯ã¿ä¸ã®ãªãã»ããã¢ãã¬ã¹ãç°ãªãï¼ 62 CPUä¾å¤ãã³ãã©ã¯ãã®ã¸ã£ã³ãå 63 ã®ãªãã»ããã¢ãã¬ã¹ã§åºå¥ãããã¨ã«ãï¼ 64 ããããç°ãªãCPUä¾å¤ãã³ãã©çªå·ãå²ãå½ã¦ãï¼ 65 66 ä¾å¤çºçæã®ç¶æ 67 ä¾å¤ã®ç¨®é¡ ä¾å¤çªå· ãä¾å¤ãã¯ã¿å 68 é ããã®ãªãã»ãã 56 例外発生時の状態 例外の種類 例外番号 例外ベクタ先頭からのオフセット 69 57 AArch64, EL1t(EL1, SP_EL0) Synchronous 0 0x0000 70 58 AArch64, EL1t(EL1, SP_EL0) SError 1 0x0180 … … 77 65 78 66 79 (3-4) CPU ããã¯ã»å²è¾¼ã¿ããã¯67 (3-4) CPUロック・割込みロック 80 68 81 ãããã«ããå®è£ 82 æ¹æ³ãç°ãªãããï¼ãããä¾åé¨ã«è¨è¼ããï¼ 69 チップにより実装方法が異なるため,チップ依存部に記載する. 83 70 84 71 85 (3-5) æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®åç 86 §ã«é¢ããè¦å® 72 (3-5) 性能評価用システム時刻の参照に関する規定 87 73 88 ã·ã¹ãã ã«ãã£ã¦ç°ãªããããããä¾åé¨ã¾ãã¯ã¿ã¼ã²ããä¾åé¨ã®ããã¥ã¡ã³ãã§è¨è¼ããï¼ 74 システムによって異なるためチップ依存部またはターゲット依存部のドキュメントで記載する. 89 75 90 76 91 (3-6) ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã§ã®åæåå 92 容 77 (3-6) スタートアップルーチンでの初期化内容 93 78 94 ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ãåæã¨ããããã»ããµã®ç¶æ 95 ã¯ã·ã¹ãã ã«ããç°ãªãããï¼ 96 ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã¯ã¿ã¼ã²ããä¾åé¨ã®ããã¥ã¡ã³ãã«è¨è¼ããï¼ 79 スタートアップルーチンが前提とするプロセッサの状態はシステムにより異なるため, 80 スタートアップルーチンはターゲット依存部のドキュメントに記載する. 97 81 98 (4) ã¿ã¤ããã©ã¤ãé¢é£ã®æ 99 å ± 82 (4) タイマドライバ関連の情報 100 83 101 ã«ã¼ãã«ã®ã¿ã¤ã ãã£ãã¯ã¨ãã¦ï¼Generic Timer ã使ç¨ããï¼ 102 ãã£ãã¯å¨æã¯1msecã¨ããï¼ã¾ãTIC_DENOåã³TIC_NUMEã®æ¢å®å¤ã¨ãã¦1ã«å®ç¾©ããï¼ 84 カーネルのタイムティックとして,Generic Timer を使用する, 85 ティック周期は1msecとする.またTIC_DENO及びTIC_NUMEの既定値として1に定義する. 103 86 104 87 105 (5) ã¿ã¼ã²ããä¾åé¨ã§ã®è¨å®å¯è½é 106 ç® 88 (5) ターゲット依存部での設定可能項目 107 89 108 ã¿ã¼ã²ããä¾åé¨ã§ã¯ä»¥ä¸ã®ãã¯ããå®ç¾©ããï¼ 109 ããã¤ãã¯ããã»ããµã®ä¾åé¨ã«ããã¦æ¢å®å¤ãå®ç¾©ããã¦ããï¼ 90 ターゲット依存部では以下のマクロを定義する. 91 いくつかはプロセッサの依存部において既定値が定義されている. 110 92 111 ã»TMIN_INTPRI : å²è¾¼ã¿åªå 112 度ã®æå°å¤ï¼æé«å¤ï¼ 113 ã»TIC_NUME : ã¿ã¤ã ãã£ãã¯ã®å¨æã®åå 114 ã»TIC_DENO : ã¿ã¤ã ãã£ãã¯ã®å¨æã®åæ¯ 115 ã»INTPRI_TIMER : ã¿ã¤ãå²è¾¼ã¿åªå 116 度 117 ã»INTATR_TIMER : ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿å±æ§ 118 ã»DEFAULT_ISTKSZ : ã¹ã¿ãã¯ãµã¤ãºï¼16byteåä½ã§æå®ï¼ 93 ・TMIN_INTPRI : 割込み優先度の最小値(最高値) 94 ・TIC_NUME : タイムティックの周期の分子 95 ・TIC_DENO : タイムティックの周期の分母 96 ・INTPRI_TIMER : タイマ割込み優先度 97 ・INTATR_TIMER : タイマ割込みの割込み属性 98 ・DEFAULT_ISTKSZ : スタックサイズ(16byte単位で指定) 119 99 120 100 121 (6) ãã£ã¬ã¯ããªæ§æã»ãã¡ã¤ã«æ§æ101 (6) ディレクトリ構成・ファイル構成 122 102 ./arch/arm64_gcc/ 123 103 MANIFEST … … 144 124 common/core_user.txt 145 125 146 (12) ãã¼ã¸ã§ã³å±¥æ´126 (12) バージョン履歴 147 127 148 128 2018/05/30 149 ã»æåã®ãªãªã¼ã¹129 ・最初のリリース 150 130 2019/04/15 151 ã»BCM283xãããä¾åé¨ã®åé¢ã«åããã¦ä¿®æ£131 ・BCM283xチップ依存部の分離に合わせて修正 -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.