source: ssp_rpi3/trunk/target/rpi_arm64_gcc/start.S@ 386

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

modify svn:mimetype of files

  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/plain; charset=utf-8
File size: 4.9 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 * Copyright (C) 2018, 2019 by Naoki Saito
10 * Nagoya Municipal Industrial Research Institute, JAPAN
11 *
12 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
20 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * の無保証規定を掲載すること.
22 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
23 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * と.
25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
26 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * 報告すること.
29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
30 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
32 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
33 * 免責すること.
34 *
35 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
36 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
37 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
38 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
39 * の責任を負わない.
40 *
41 * $Id: start.S 386 2019-04-17 03:13:00Z nmir-saito $
42 */
43
44#define TOPPERS_MACRO_ONLY
45#define UINT64_C(val) (val) /* uint64_t型の定数を作るマクロ */
46#include "kernel_impl.h"
47
48 .text
49 .align 4
50 .global start
51 .global vectors
52start:
53 // コア0のみ利用
54 mrs x0, mpidr_el1
55 and x0, x0, #3
56 cbz x0, 2f
571:
58 // コア0以外
59 wfi
60 b 1b
612:
62 // これ以降はコア0のみ
63 msr daifset, #(AARCH64_DAIF_IRQ | AARCH64_DAIF_FIQ) // CPSR.{I,F}=1
64
65 /*
66 * スタック先頭番地を取り出しておく
67 */
68 adrp x1, _kernel_istkpt
69 add x1, x1, :lo12:_kernel_istkpt
70 ldr x1, [x1]
71
72 /*
73 * EL毎の処理
74 */
75 mrs x0, CurrentEL
76 and x0, x0, #(0x3 << 2)
77 cmp x0, #(0x3 << 2) // EL3?
78 bne start_el2
79
80 /*
81 * EL3
82 */
83start_el3:
84 mov x2, #0x5b1 // RW=1(EL2 is AArch64), HCE=1, SMD=1, NS=1(non-secure)
85 msr scr_el3, x2
86 isb
87
88 /* Set up CNTFRQ_EL0 */
89 ldr x0, =19200000 // 19.2MHz
90 msr CNTFRQ_EL0, x0
91
92 // EL2へ移行
93 mov x2, #0x0c9 // I=F=1, MODE=1001 (EL2h)
94 msr spsr_el3, x2
95 adr x2, start_el2
96 msr elr_el3, x2
97 eret
98
99 /*
100 * EL2
101 */
102start_el2:
103 cmp x0, #(0x1 << 2) // EL2?
104 beq start_el1
105
106 msr sp_el1, x1
107
108 mov x0, #(1 << 31) // RW=1(EL1 is AArch64)
109 orr x0, x0, #(1 << 1) // SWIO hardwired on Pi3
110 msr hcr_el2, x0 // TSC=0(SMC is not trapped)
111 isb
112
113 mrs x0, cnthctl_el2 // EL1PCTEN=1, EL1PCEN=1
114 orr x0, x0, #3
115 msr cnthctl_el2, x0
116 msr cntvoff_el2, xzr
117 isb
118
119 // EL1へ移行
120 mov x2, #0x0c5 // I,F=1, mode=0101(EL1h)
121 msr spsr_el2, x2
122 adr x2, start_el1
123 msr elr_el2, x2
124 eret
125
126 /*
127 * EL1h
128 */
129start_el1:
130 // スタックポインタとフレームポインタの初期化
131 mov sp, x1
132 mov x29, xzr
133
134 /*
135 * 例外ベクタテーブルのベースアドレス設定
136 */
137 ldr x0, =vectors
138 msr vbar_el1, x0
139
140 /*
141 * bssセクションのクリア
142 */
143 ldr x1, =__start_bss
144 ldr x2, =__end_bss
145 cmp x1, x2
146 b.hs 4f
1473:
148 str xzr, [x1], #8
149 cmp x1, x2
150 b.lo 3b
151
1524:
153 /*
154 * sta_ker呼び出し
155 */
156 bl sta_ker
157 b .
Note: See TracBrowser for help on using the repository browser.