|
@@ -0,0 +1,32 @@
|
|
|
+/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
+/*
|
|
|
+ * Copyright (C) 2014 Renesas Electronics Corporation
|
|
|
+ *
|
|
|
+ * Initialization of CNTVOFF register from secure mode
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+#include <linux/linkage.h>
|
|
|
+#include <asm/assembler.h>
|
|
|
+
|
|
|
+ENTRY(secure_cntvoff_init)
|
|
|
+ .arch armv7-a
|
|
|
+ /*
|
|
|
+ * CNTVOFF has to be initialized either from non-secure Hypervisor
|
|
|
+ * mode or secure Monitor mode with SCR.NS==1. If TrustZone is enabled
|
|
|
+ * then it should be handled by the secure code. The CPU must implement
|
|
|
+ * the virtualization extensions.
|
|
|
+ */
|
|
|
+ cps #MON_MODE
|
|
|
+ mrc p15, 0, r1, c1, c1, 0 /* Get Secure Config */
|
|
|
+ orr r0, r1, #1
|
|
|
+ mcr p15, 0, r0, c1, c1, 0 /* Set Non Secure bit */
|
|
|
+ isb
|
|
|
+ mov r0, #0
|
|
|
+ mcrr p15, 4, r0, r0, c14 /* CNTVOFF = 0 */
|
|
|
+ isb
|
|
|
+ mcr p15, 0, r1, c1, c1, 0 /* Set Secure bit */
|
|
|
+ isb
|
|
|
+ cps #SVC_MODE
|
|
|
+ ret lr
|
|
|
+ENDPROC(secure_cntvoff_init)
|