|
19 | 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA |
20 | 20 | */ |
21 | 21 |
|
| 22 | + |
| 23 | +#define GICD_BASE 0xF9010000 |
| 24 | +#define GICD_CTLR 0x0000 |
| 25 | +#define GICD_TYPER 0x0004 |
| 26 | +#define GICD_SGIR 0x0F00 |
| 27 | +#define GICD_IGROUPRn 0x0080 |
| 28 | + |
| 29 | +#define GICC_BASE 0xF9020000 |
| 30 | +#define GICC_PMR 0x0004 |
| 31 | + |
| 32 | +#ifndef USE_BUILTIN_STARTUP |
22 | 33 | .section ".boot" |
23 | 34 | .global _vector_table |
24 | 35 | _vector_table: |
@@ -61,4 +72,30 @@ _vector_table: |
61 | 72 | 8: mov sp, x1 // set stack pointer |
62 | 73 | bl boot_entry_C // boot_entry_C never returns |
63 | 74 | b 7b // go to sleep anyhow in case. |
| 75 | +#endif /* USE_BUILTIN_STARTUP */ |
| 76 | + |
| 77 | + |
| 78 | +/* Initialize GIC 400 (GICv2) */ |
| 79 | +.global gicv2_init_secure |
| 80 | +gicv2_init_secure: |
| 81 | + ldr x0, =GICD_BASE |
| 82 | + mov w9, #0x3 /* EnableGrp0 | EnableGrp1 */ |
| 83 | + str w9, [x0, GICD_CTLR] /* Secure GICD_CTLR */ |
| 84 | + ldr w9, [x0, GICD_TYPER] |
| 85 | + and w10, w9, #0x1f /* ITLinesNumber */ |
| 86 | + cbz w10, 1f /* No SPIs */ |
| 87 | + add x11, x0, GICD_IGROUPRn |
| 88 | + mov w9, #~0 /* Config SPIs as Grp1 */ |
| 89 | + str w9, [x11], #0x4 |
| 90 | +0: str w9, [x11], #0x4 |
| 91 | + sub w10, w10, #0x1 |
| 92 | + cbnz w10, 0b |
| 93 | + |
| 94 | + ldr x1, =GICC_BASE /* GICC_CTLR */ |
| 95 | + mov w0, #3 /* EnableGrp0 | EnableGrp1 */ |
| 96 | + str w0, [x1] |
64 | 97 |
|
| 98 | + mov w0, #1 << 7 /* Allow NS access to GICC_PMR */ |
| 99 | + str w0, [x1, #4] /* GICC_PMR */ |
| 100 | +1: |
| 101 | + ret |
0 commit comments