1 |
|
---|
2 | TOPPERS/ASP3ã«ã¼ãã«
|
---|
3 | GICï¼ARM Generic Interrupt Controllerï¼ä¾åé¨ è¨è¨ã¡ã¢
|
---|
4 |
|
---|
5 | 対å¿ãã¼ã¸ã§ã³: Release 3.B.0
|
---|
6 | æçµæ´æ°: 2015å¹´7æ24æ¥
|
---|
7 |
|
---|
8 | ----------------------------------------------------------------------
|
---|
9 |
|
---|
10 | âç®æ¬¡
|
---|
11 |
|
---|
12 | ã»åèæç®
|
---|
13 | ã»GICä¾åé¨ã®ä½ç½®ã¥ã
|
---|
14 | - GICä¾åé¨ãæ§æãããã¡ã¤ã«
|
---|
15 | ã»ãããä¾åã®ãã©ã¡ã¼ã¿
|
---|
16 | ã»GICã«ãããå²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ã®åºå
|
---|
17 | ¥å£å¦ç
|
---|
18 | - GICã«ãããå²è¾¼ã¿ãã³ãã©ã®åºå
|
---|
19 | ¥å£å¦ç
|
---|
20 |
|
---|
21 | âåèæç®
|
---|
22 |
|
---|
23 | [1] TOPPERSããã¸ã§ã¯ã è¨è¨ã¡ã¢ãGICï¼ARM Generic Interrupt
|
---|
24 | Controllerï¼ã«é¢ããã¡ã¢ãï¼
|
---|
25 |
|
---|
26 | âGICä¾åé¨ã®ä½ç½®ã¥ã
|
---|
27 |
|
---|
28 | GICä¾åé¨ã¯ï¼ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã®ä¸ã§ï¼GICã¢ã¼ããã¯ãã£
|
---|
29 | ï¼GICv1ããã³GICv2ï¼ã«æºæ ããå²è¾¼ã¿ã³ã³ããã¼ã©ãæã¤ãããã«å
|
---|
30 | ±éã«ä½¿
|
---|
31 | ç¨ã§ããé¨åã§ããï¼ã¾ãï¼GICã®å身ã¨æãããARM11 MPCoreã®Distributed
|
---|
32 | Interrupt Controllerã«ãé©ç¨ã§ããããã«å®è£
|
---|
33 | ããï¼
|
---|
34 |
|
---|
35 | TOPPERS_SAFEG_SECUREããã¯ãå®ç¾©ããã¦ããå ´åã«ã¯ï¼GICãã»ãã¥ãªãã£æ¡
|
---|
36 | å¼µããã¦ãããã¨ãæ³å®ãï¼ã»ãã¥ã¢ã¢ã¼ãã§ä½¿ç¨ãããã®ã¨ããï¼
|
---|
37 |
|
---|
38 | GICv1ã¨GICv2ã§ã¬ã¸ã¹ã¿åãå¤æ´ã«ãªã£ã¦ãããï¼ã½ã¼ã¹ã³ã¼ãä¸ã§ã¯ï¼
|
---|
39 | GICv2ã®ã¬ã¸ã¹ã¿åã使ç¨ããï¼
|
---|
40 |
|
---|
41 | âGICä¾åé¨ãæ§æãããã¡ã¤ã«
|
---|
42 |
|
---|
43 | GICä¾åé¨ã¯ï¼æ¬¡ã®3ã¤ã®ãã¡ã¤ã«ã§æ§æãããï¼
|
---|
44 |
|
---|
45 | gic_kernel_impl.h
|
---|
46 | gic_kernel_impl.c
|
---|
47 | gic_support.S
|
---|
48 |
|
---|
49 | âãããä¾åã®ãã©ã¡ã¼ã¿
|
---|
50 |
|
---|
51 | TMIN_INTPRI
|
---|
52 | TMAX_INTPRI
|
---|
53 |
|
---|
54 | ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã®ããããã¡ã¤ã«ããgic_kernel_impl.hãã¤ã³ã¯
|
---|
55 | ã«ã¼ãããåã«ï¼å¿
|
---|
56 | è¦ã«å¿ãã¦ï¼ä»¥ä¸ã®å®æ°ããã¯ãå®ç¾©ãã¦ããï¼
|
---|
57 |
|
---|
58 | (1) GIC_TNUM_INTNO å²è¾¼ã¿ã®æ°
|
---|
59 |
|
---|
60 | ã¿ã¼ã²ãããããã®GICããµãã¼ãããå²è¾¼ã¿ã®æ°ï¼SGIï¼Software Generated
|
---|
61 | Interruptï¼ï¼PPIï¼Private Peripheral Interruptï¼ï¼SPIï¼Shared
|
---|
62 | Peripheral Interruptï¼ã®åè¨æ°ï¼
|
---|
63 |
|
---|
64 | (2) GIC_PRI_LEVEL å²è¾¼ã¿åªå
|
---|
65 | 度ã®æ®µæ°
|
---|
66 |
|
---|
67 | ã¿ã¼ã²ãããããã®GICããµãã¼ãããå²è¾¼ã¿åªå
|
---|
68 | 度ã®æ®µæ°ï¼16ï¼32ï¼64ï¼128ï¼
|
---|
69 | 256ã®ããããï¼
|
---|
70 |
|
---|
71 | (3) GICC_BASE CPUã¤ã³ã¿ãã§ã¼ã¹ã®ãã¼ã¹ã¢ãã¬ã¹
|
---|
72 | (4) GICD_BASE ãã£ã¹ããªãã¥ã¼ã¿ã®ãã¼ã¹ã¢ãã¬ã¹
|
---|
73 |
|
---|
74 | GICã®CPUã¤ã³ã¿ãã§ã¼ã¹ããã³ãã£ã¹ããªãã¥ã¼ã¿ã®ãã¼ã¹ã¢ãã¬ã¹ï¼
|
---|
75 |
|
---|
76 | (5) TOPPERS_SAFEG_SECURE ã»ãã¥ã¢ã¢ã¼ãï¼ãªãã·ã§ã³ï¼
|
---|
77 |
|
---|
78 | ã»ãã¥ã¢ã¢ã¼ãã§ã«ã¼ãã«ãåä½ããï¼FIQãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ã¨æ±ãå ´å
|
---|
79 | ã«ï¼ãã®ã·ã³ãã«ããã¯ãå®ç¾©ããï¼
|
---|
80 |
|
---|
81 | (6) GIC_ARM11MOCORE ARM11 MPCoreã¸ã®å¯¾å¿ï¼ãªãã·ã§ã³ï¼
|
---|
82 |
|
---|
83 | ARM11 MPCoreã®Distributed Interrupt Controllerã®å ´åã«ã¯ï¼ãã®ã·ã³ãã«
|
---|
84 | ããã¯ãå®ç¾©ããï¼
|
---|
85 |
|
---|
86 | âGICã«ãããå²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ã®åºå
|
---|
87 | ¥å£å¦ç
|
---|
88 |
|
---|
89 | âGICã«ãããå²è¾¼ã¿ãã³ãã©ã®åºå
|
---|
90 | ¥å£å¦ç
|
---|
91 |
|
---|
92 | GICã«ãããå²è¾¼ã¿ãã³ãã©ã®åºå
|
---|
93 | ¥å£å¦çï¼irc_begin_intããã³irc_end_intï¼
|
---|
94 | ã®å®ç¾æ¹æ³ã«ã¯ï¼ããã¤ãã®ã¢ããã¼ããããï¼
|
---|
95 |
|
---|
96 | ãã¢ããã¼ã1ã
|
---|
97 |
|
---|
98 | ãã®ã¢ããã¼ãã¯ï¼GICã®æ³å®ãã¦ããï¼ãã£ã¦ï¼æãã·ã³ãã«ãªï¼ãã®ã§ããï¼
|
---|
99 | å²è¾¼ã¿ãã³ãã©ã®å
|
---|
100 | ¥å£ã§ã¯ä½ãè¡ããï¼å²è¾¼ã¿ãã³ãã©ã®åºå£ã§EOIãçºè¡ããï¼
|
---|
101 |
|
---|
102 | ----------------------------------------
|
---|
103 | ALABEL(irc_begin_int)
|
---|
104 | /*
|
---|
105 | * å²è¾¼ã¿è¦å ãåå¾ããï¼
|
---|
106 | */
|
---|
107 | ldr r1, =GICC_IAR
|
---|
108 | ldr r3, [r1]
|
---|
109 | push {r3} /* irc_end_intã§ç¨ããæ
|
---|
110 | å ±ãä¿å */
|
---|
111 |
|
---|
112 | /*
|
---|
113 | * å²è¾¼ã¿çªå·ãè¿å¤ã¨ãã¦ãªã¿ã¼ã³ããï¼
|
---|
114 | */
|
---|
115 | lsl r0, r3, #22 /* ä¸ä½10ããããåãåºã */
|
---|
116 | lsr r0, r0, #22
|
---|
117 | bx lr
|
---|
118 |
|
---|
119 | ALABEL(irc_end_int)
|
---|
120 | /*
|
---|
121 | * EOIãçºè¡ãã¦ãªã¿ã¼ã³ããï¼
|
---|
122 | */
|
---|
123 | pop {r3} /* irc_begin_intã§ä¿åããæ
|
---|
124 | å ±ã復帰 */
|
---|
125 | ldr r1, =GICC_EOIR /* EOIã¬ã¸ã¹ã¿ã¸ã®æ¸è¾¼ã¿ */
|
---|
126 | str r3, [r1]
|
---|
127 | bx lr
|
---|
128 | ----------------------------------------
|
---|
129 |
|
---|
130 | ãã®ã¢ããã¼ãã«ã¯ï¼æ¬¡ã®åé¡ç¹ãããï¼
|
---|
131 |
|
---|
132 | (1) å²è¾¼ã¿ãã³ãã©ããã®ãªã¿ã¼ã³æã«ï¼å²è¾¼ã¿åªå
|
---|
133 | 度ãã¹ã¯ãå
|
---|
134 | ã«æ»ãã¨ã
|
---|
135 | ãä»æ§ãå®è£
|
---|
136 | ãã¦ããã¨è¨ãããå¾®å¦ã§ããï¼ç¹ã«ï¼CPUä¾å¤ãã³ãã©ãããã¨
|
---|
137 | æ´åããããã«å®è£
|
---|
138 | ããå ´åï¼å²è¾¼ã¿åªå
|
---|
139 | 度ãã¹ã¯ãä¸åæä½ããªãã¨ããå®
|
---|
140 | è£
|
---|
141 | ã«ãªãï¼ä»æ§ã«æºæ ãã¦ããªãããã«æãããï¼
|
---|
142 |
|
---|
143 | (2) å²è¾¼ã¿åªå
|
---|
144 | 度ã256段éããæï¼ãã®å ´åï¼ARM GICã§ã¯ï¼å²è¾¼ã¿åªå
|
---|
145 | 度ã®
|
---|
146 | ãã¹ã¦ã®ããããããªã¨ã³ãã·ã§ã³ã«ä½¿ãã¨ããè¨å®ãã§ããªãï¼ã«ï¼ãã®ã¢
|
---|
147 | ããã¼ãã§ã¯ï¼å²è¾¼ã¿åªå
|
---|
148 | 度ã®ãã¹ã¦ã®ããããããªã¨ã³ãã·ã§ã³ã«ä½¿ããã¨
|
---|
149 | ãã§ããï¼TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ããã®é¸è±ã¨ãªãï¼
|
---|
150 |
|
---|
151 | (3) å²è¾¼ã¿ãã³ãã©ããå²è¾¼ã¿åªå
|
---|
152 | 度ãã¹ã¯ãåç
|
---|
153 | §ï¼è¨å®ãããã¨ãã§ããªãï¼
|
---|
154 | ASP3ã«ã¼ãã«ã§ã¯åé¡ãªããï¼ATK2ã«ã¼ãã«ã§ã¯ï¼ãã®ã¢ããã¼ãã¯ç¨ããã
|
---|
155 | ã¨ãã§ããªãï¼
|
---|
156 |
|
---|
157 | ãã¢ããã¼ã2ã
|
---|
158 |
|
---|
159 | åé¡ç¹(1)ã¨(3)ã解決ããããã«ã¯ï¼çºçããå²è¾¼ã¿è¦å ã®å²è¾¼ã¿åªå
|
---|
160 | 度ãï¼
|
---|
161 | å²è¾¼ã¿åªå
|
---|
162 | 度ãã¹ã¯ã«è¨å®ãã¦ããæ¹æ³ãèããããï¼
|
---|
163 |
|
---|
164 | ----------------------------------------
|
---|
165 | ALABEL(irc_begin_int)
|
---|
166 | /*
|
---|
167 | * å²è¾¼ã¿è¦å ãåå¾ããï¼
|
---|
168 | */
|
---|
169 | ldr r1, =GICC_IAR
|
---|
170 | ldr r3, [r1]
|
---|
171 |
|
---|
172 | /*
|
---|
173 | * å²è¾¼ã¿è¦å ã®å²è¾¼ã¿åªå
|
---|
174 | 度ãæ±ãï¼å²è¾¼ã¿åªå
|
---|
175 | 度ãã¹ã¯ã«è¨å®ããï¼
|
---|
176 | */
|
---|
177 | ldr r1, =GICC_RPR /* åãä»ããå²è¾¼ã¿ã®å²è¾¼ã¿åªå
|
---|
178 | 度ãåå¾ */
|
---|
179 | ldr r0, [r1]
|
---|
180 | ldr r1, =GICC_PMR /* å²è¾¼ã¿çºçåã®å²è¾¼ã¿åªå
|
---|
181 | 度ãåå¾ */
|
---|
182 | ldr r2, [r1]
|
---|
183 | str r0, [r1] /* æ°ããå²è¾¼ã¿åªå
|
---|
184 | 度ãã¹ã¯ãã»ãããã */
|
---|
185 | DATA_SYNC_BARRIER /* å²è¾¼ã¿åªå
|
---|
186 | 度ãã¹ã¯ãã»ãããããã®ãå¾
|
---|
187 | 㤠*/
|
---|
188 | push {r2,r3} /* irc_end_intã§ç¨ããæ
|
---|
189 | å ±ãä¿å */
|
---|
190 |
|
---|
191 | /*
|
---|
192 | * å²è¾¼ã¿çªå·ãè¿å¤ã¨ãã¦ãªã¿ã¼ã³ããï¼
|
---|
193 | */
|
---|
194 | lsl r0, r3, #22 /* ä¸ä½10ããããåãåºã */
|
---|
195 | lsr r0, r0, #22
|
---|
196 | bx lr
|
---|
197 |
|
---|
198 | ALABEL(irc_end_int)
|
---|
199 | /*
|
---|
200 | * EOIãçºè¡ããï¼
|
---|
201 | */
|
---|
202 | pop {r2,r3} /* irc_begin_intã§ä¿åããæ
|
---|
203 | å ±ã復帰 */
|
---|
204 | ldr r1, =GICC_EOIR /* EOIã¬ã¸ã¹ã¿ã¸ã®æ¸è¾¼ã¿ */
|
---|
205 | str r3, [r1]
|
---|
206 |
|
---|
207 | /*
|
---|
208 | * å²è¾¼ã¿åªå
|
---|
209 | 度ãã¹ã¯ãå
|
---|
210 | ã«æ»ãã¦ãªã¿ã¼ã³ããï¼
|
---|
211 | */
|
---|
212 | ldr r1, =GICC_PMR
|
---|
213 | str r2, [r1]
|
---|
214 | bx lr
|
---|
215 | ----------------------------------------
|
---|
216 |
|
---|
217 | ãããï¼ãã®ã¢ããã¼ãã§ã¯ï¼ã¢ããã¼ã1ã®2ã¤ãã®æ¬ ç¹ã¯è§£æ±ºã§ããªãï¼
|
---|
218 |
|
---|
219 | ãã¢ããã¼ã3ã
|
---|
220 |
|
---|
221 | ã¢ããã¼ã1ã®2ã¤ãã®æ¬ ç¹ã解決ããããã«ã¯ï¼å²è¾¼ã¿ãã³ãã©ã®å
|
---|
222 | ¥å£å¦çã§
|
---|
223 | EOIãçºè¡ãã¦ãã¾ãæ¹æ³ãèããããï¼
|
---|
224 |
|
---|
225 | ----------------------------------------
|
---|
226 | ALABEL(irc_begin_int)
|
---|
227 | /*
|
---|
228 | * å²è¾¼ã¿è¦å ãåå¾ããï¼
|
---|
229 | */
|
---|
230 | ldr r1, =GICC_IAR
|
---|
231 | ldr r3, [r1]
|
---|
232 |
|
---|
233 | /*
|
---|
234 | * å²è¾¼ã¿è¦å ã®å²è¾¼ã¿åªå
|
---|
235 | 度ãæ±ãï¼å²è¾¼ã¿åªå
|
---|
236 | 度ãã¹ã¯ã«è¨å®ããï¼
|
---|
237 | */
|
---|
238 | ldr r1, =GICC_RPR /* åãä»ããå²è¾¼ã¿ã®å²è¾¼ã¿åªå
|
---|
239 | 度ãåå¾ */
|
---|
240 | ldr r0, [r1]
|
---|
241 | ldr r1, =GICC_PMR /* å²è¾¼ã¿çºçåã®å²è¾¼ã¿åªå
|
---|
242 | 度ãåå¾ */
|
---|
243 | ldr r2, [r1]
|
---|
244 | str r0, [r1] /* æ°ããå²è¾¼ã¿åªå
|
---|
245 | 度ãã¹ã¯ãã»ãããã */
|
---|
246 | DATA_SYNC_BARRIER /* å²è¾¼ã¿åªå
|
---|
247 | 度ãã¹ã¯ãã»ãããããã®ãå¾
|
---|
248 | 㤠*/
|
---|
249 | push {r2} /* irc_end_intã§ç¨ããæ
|
---|
250 | å ±ãä¿å */
|
---|
251 |
|
---|
252 | /*
|
---|
253 | * EOIãçºè¡ããï¼
|
---|
254 | */
|
---|
255 | ldr r1, =GICC_EOIR /* EOIã¬ã¸ã¹ã¿ã¸ã®æ¸è¾¼ã¿ */
|
---|
256 | str r3, [r1]
|
---|
257 |
|
---|
258 | /*
|
---|
259 | * å²è¾¼ã¿çªå·ãè¿å¤ã¨ãã¦ãªã¿ã¼ã³ããï¼
|
---|
260 | */
|
---|
261 | lsl r0, r3, #22 /* ä¸ä½10ããããåãåºã */
|
---|
262 | lsr r0, r0, #22
|
---|
263 | bx lr
|
---|
264 |
|
---|
265 | ALABEL(irc_end_int)
|
---|
266 | /*
|
---|
267 | * å²è¾¼ã¿åªå
|
---|
268 | 度ãã¹ã¯ãå
|
---|
269 | ã«æ»ãã¦ãªã¿ã¼ã³ããï¼
|
---|
270 | */
|
---|
271 | pop {r2} /* irc_begin_intã§ä¿åããæ
|
---|
272 | å ±ã復帰 */
|
---|
273 | ldr r1, =GICC_PMR /* å²è¾¼ã¿åªå
|
---|
274 | 度ãã¹ã¯ãå
|
---|
275 | ã«æ»ã */
|
---|
276 | str r2, [r1]
|
---|
277 | bx lr
|
---|
278 | ----------------------------------------
|
---|
279 |
|
---|
280 | ç¾å¨ã®å®è£
|
---|
281 | ã§ã¯ï¼ã¢ããã¼ã3ãæ¡ç¨ãã¦ããï¼
|
---|
282 |
|
---|
283 | âGICã«ãããCPUä¾å¤ãã³ãã©ã®åºå
|
---|
284 | ¥å£å¦ç
|
---|
285 |
|
---|
286 |
|
---|
287 |
|
---|
288 | 以ä¸
|
---|