summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThierry Reding <treding@nvidia.com>2015-08-20 11:52:15 +0200
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>2015-10-15 14:47:03 +0200
commitb1964c72bdb9ca44de3a56d40927409b8cab2a76 (patch)
treeb86e32cca2240d66de202308c3fd154d79d1057d
parentad3d6e88a1a4e6aacc55b39c2bad1528100784c0 (diff)
downloadu-boot-imx-b1964c72bdb9ca44de3a56d40927409b8cab2a76.zip
u-boot-imx-b1964c72bdb9ca44de3a56d40927409b8cab2a76.tar.gz
u-boot-imx-b1964c72bdb9ca44de3a56d40927409b8cab2a76.tar.bz2
armv8/gic: Fix GIC v2 initialization
Initialize all GICD_IGROUPRn registers and set up GICC_CTLR to enable interrupts to the primary CPU. This fixes issues seen after booting a Linux kernel from U-Boot. Suggested-by: Marc Zyngier <marc.zyngier@arm.com> Suggested-by: Mark Rutland <mark.rutland@arm.com> Cc: Albert Aribaud <albert.u.boot@aribaud.net> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--arch/arm/lib/gic_64.S10
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/arm/lib/gic_64.S b/arch/arm/lib/gic_64.S
index a3e18f7..62d0022 100644
--- a/arch/arm/lib/gic_64.S
+++ b/arch/arm/lib/gic_64.S
@@ -46,11 +46,19 @@ ENTRY(gic_init_secure)
ldr w9, [x0, GICD_TYPER]
and w10, w9, #0x1f /* ITLinesNumber */
cbz w10, 1f /* No SPIs */
- add x11, x0, (GICD_IGROUPRn + 4)
+ add x11, x0, GICD_IGROUPRn
mov w9, #~0 /* Config SPIs as Grp1 */
+ str w9, [x11], #0x4
0: str w9, [x11], #0x4
sub w10, w10, #0x1
cbnz w10, 0b
+
+ ldr x1, =GICC_BASE /* GICC_CTLR */
+ mov w0, #3 /* EnableGrp0 | EnableGrp1 */
+ str w0, [x1]
+
+ mov w0, #1 << 7 /* allow NS access to GICC_PMR */
+ str w0, [x1, #4] /* GICC_PMR */
#endif
1:
ret