[302] | 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 | 以ä¸
|
---|