|
@@ -0,0 +1,132 @@
|
|
|
+/*++
|
|
|
+
|
|
|
+Copyright (c) 2016 Minoca Corp. All Rights Reserved
|
|
|
+
|
|
|
+Module Name:
|
|
|
+
|
|
|
+ minttbl.S
|
|
|
+
|
|
|
+Abstract:
|
|
|
+
|
|
|
+ This module implements the monitor mode interrupt jump vector table for the
|
|
|
+ RK3288 Veyron SoC.
|
|
|
+
|
|
|
+Author:
|
|
|
+
|
|
|
+ Chris Stevens 8-Jun-2016
|
|
|
+
|
|
|
+Environment:
|
|
|
+
|
|
|
+ Firmware
|
|
|
+
|
|
|
+--*/
|
|
|
+
|
|
|
+##
|
|
|
+## ------------------------------------------------------------------ Includes
|
|
|
+##
|
|
|
+
|
|
|
+#include <minoca/kernel/arm.inc>
|
|
|
+
|
|
|
+##
|
|
|
+## --------------------------------------------------------------- Definitions
|
|
|
+##
|
|
|
+
|
|
|
+##
|
|
|
+## ---------------------------------------------------------------------- Code
|
|
|
+##
|
|
|
+
|
|
|
+ASSEMBLY_FILE_HEADER
|
|
|
+.arch_extension virt
|
|
|
+
|
|
|
+##
|
|
|
+## .globl allows these labels to be visible to the linker.
|
|
|
+##
|
|
|
+
|
|
|
+.globl EfipRk32MonitorInterruptTable
|
|
|
+
|
|
|
+##
|
|
|
+## This address must be aligned to a 32 byte address so that it can be set in
|
|
|
+## the MVBAR register.
|
|
|
+##
|
|
|
+
|
|
|
+.balign 32
|
|
|
+
|
|
|
+EfipRk32MonitorInterruptTable:
|
|
|
+.word 0
|
|
|
+.word 0
|
|
|
+ ldr %pc, EfipRk32SecureMonitorCallVector
|
|
|
+ ldr %pc, EfipRk32PrefetchAbortVector
|
|
|
+ ldr %pc, EfipRk32DataAbortVector
|
|
|
+.word 0
|
|
|
+ ldr %pc, EfipRk32IrqInterruptVector
|
|
|
+ ldr %pc, EfipRk32FiqInterruptVector
|
|
|
+
|
|
|
+EfipRk32SecureMonitorCallVector:
|
|
|
+ .word EfipRk32SecureMonitorCallEntry
|
|
|
+
|
|
|
+EfipRk32PrefetchAbortVector:
|
|
|
+ .word 0
|
|
|
+
|
|
|
+EfipRk32DataAbortVector:
|
|
|
+ .word 0
|
|
|
+
|
|
|
+EfipRk32IrqInterruptVector:
|
|
|
+ .word 0
|
|
|
+
|
|
|
+EfipRk32FiqInterruptVector:
|
|
|
+ .word 0
|
|
|
+
|
|
|
+##
|
|
|
+## --------------------------------------------------------- Internal Functions
|
|
|
+##
|
|
|
+
|
|
|
+##
|
|
|
+## VOID
|
|
|
+## EfipRk32SecureMonitorCallEntry (
|
|
|
+## VOID
|
|
|
+## )
|
|
|
+##
|
|
|
+
|
|
|
+/*++
|
|
|
+
|
|
|
+Routine Description:
|
|
|
+
|
|
|
+ This routine directly handles an exception generated by a secure monitor
|
|
|
+ call.
|
|
|
+
|
|
|
+Arguments:
|
|
|
+
|
|
|
+ None.
|
|
|
+
|
|
|
+Return Value:
|
|
|
+
|
|
|
+ None.
|
|
|
+
|
|
|
+--*/
|
|
|
+
|
|
|
+FUNCTION EfipRk32SecureMonitorCallEntry
|
|
|
+
|
|
|
+ ##
|
|
|
+ ## The ARM Generic Timer's virtual offset can bet set in HYP mode and in
|
|
|
+ ## Monitor Mode when the SCR.NS bit is set to 1. Set the NS bit and zero
|
|
|
+ ## the offset.
|
|
|
+ ##
|
|
|
+
|
|
|
+ mrc p15, 0, %r0, %c1, %c1, 0 @ Get the SCR
|
|
|
+ orr %r0, %r0, #SCR_NON_SECURE
|
|
|
+ mcr p15, 0, %r0, %c1, %c1, 0 @ Set the SCR
|
|
|
+ mov %r2, #0
|
|
|
+ mov %r3, #0
|
|
|
+ mcrr p15, 4, %r2, %r3, %c14
|
|
|
+
|
|
|
+ ##
|
|
|
+ ## Clear the NS bit before returing from the exception to remain in secure
|
|
|
+ ## mode.
|
|
|
+ ##
|
|
|
+
|
|
|
+ bic %r0, %r0, #SCR_NON_SECURE
|
|
|
+ mcr p15, 0, %r0, %c1, %c1, 0 @ Set the SCR
|
|
|
+ eret
|
|
|
+
|
|
|
+END_FUNCTION EfipRk32SecureMonitorCallEntry
|
|
|
+
|