[FOSS_TLK]platform: tegra: create a "true" monitor for ARM v7
Varun Wadekar [Thu, 5 Mar 2015 07:35:29 +0000 (12:35 +0530)]
The monitor code has been moved over the the secure monitor now. This
converts TLK into a Trusted OS while keeping the monitor code separate.

Change-Id: I8aaa5685e30ffb53c2cfc9e152b946a348cdb566
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Reviewed-on: http://git-master/r/752884
Reviewed-by: Automatic_Commit_Validation_User
Tested-by: Inamdar Sharif <isharif@nvidia.com>

19 files changed:
arch/arm/arm/asm.S
arch/arm/arm/faults.c
arch/arm/arm/monitor_vectors.S [deleted file]
arch/arm/include/arch/arm.h
arch/arm/include/arch/arm/monitor_vectors.h [deleted file]
arch/arm/rules.mk
include/lib/monitor/monitor_vector.h
platform/tegra/common/boot_secondary.S [deleted file]
platform/tegra/common/cpu.c [deleted file]
platform/tegra/common/platform.c
platform/tegra/common/pm.c [deleted file]
platform/tegra/common/tz.c
platform/tegra/include/platform/boot_secondary.h [deleted file]
platform/tegra/include/platform/platform_cpu.h
platform/tegra/include/platform/platform_p.h
platform/tegra/include/platform/tzrammap.h [deleted file]
platform/tegra/rules.mk
platform/tegra/tegra4/platform.c
platform/tegra/tegra4i/platform.c

index 4b55c33..1456d1f 100644 (file)
@@ -113,6 +113,9 @@ FUNCTION(arm_save_mode_regs)
        cps             #0x13                   /* svc */
        str             r13, [r0], #4
        str             r14, [r0], #4
+       cps             #0x16                   /* mon */
+       str             r13, [r0], #4
+       str             r14, [r0], #4
        cps             #0x17                   /* abt */
        str             r13, [r0], #4
        str             r14, [r0], #4
index 0f96836..c365a15 100644 (file)
@@ -81,6 +81,8 @@ static void dump_fault_frame(struct arm_fault_frame *frame)
        dputs(CRITICAL, str);
        sprintf(str, "%c%s r13 0x%08x r14 0x%08x\n", ((frame->spsr & MODE_MASK) == MODE_SVC) ? '*' : ' ', "svc", regs.svc_r13, regs.svc_r14);
        dputs(CRITICAL, str);
+       sprintf(str, "%c%s r13 0x%08x r14 0x%08x\n", ((frame->spsr & MODE_MASK) == MODE_MON) ? '*' : ' ', "mon", regs.mon_r13, regs.mon_r14);
+       dputs(CRITICAL, str);
        sprintf(str, "%c%s r13 0x%08x r14 0x%08x\n", ((frame->spsr & MODE_MASK) == MODE_UND) ? '*' : ' ', "und", regs.und_r13, regs.und_r14);
        dputs(CRITICAL, str);
        sprintf(str, "%c%s r13 0x%08x r14 0x%08x\n", ((frame->spsr & MODE_MASK) == MODE_SYS) ? '*' : ' ', "sys", regs.sys_r13, regs.sys_r14);
@@ -204,7 +206,7 @@ void arm_data_abort_handler(struct arm_fault_frame *frame)
        __asm volatile ("mrc    p15, 0, %0, c5, c0, 0" : "=r" (dfsr));
 
        dputs(CRITICAL, "TLK data abort handler\n");
-       printf("dfar: 0x%08x dfsr: 0x%08x\n", dfar, dfsr);
+       printf("dfar: 0x%08x dfsr: 0x%08x pc: 0x%08x\n", dfar, dfsr, frame->pc);
        mode = frame->spsr & MODE_MASK;
        printf("mode: 0x%02x / %s\n", mode, get_mode_str(mode));
 
diff --git a/arch/arm/arm/monitor_vectors.S b/arch/arm/arm/monitor_vectors.S
deleted file mode 100644 (file)
index 6a6fde5..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright (c) 2012-2015, NVIDIA CORPORATION. All rights reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files
- * (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <arch/arm/monitor_vectors.h>
-#include <lib/monitor/monitor_vector.h>
-#include <platform/platform_tos.h>
-
-#define L1_CACHE_ALIGN         5
-
-/* loads a 32-bit value into a register */
-.macro mov32, reg, val
-       movw    \reg, #:lower16:\val
-       movt    \reg, #:upper16:\val
-.endm
-
-.macro RESTORE_NS_STATE
-       /* restore monitor frame from arg */
-       adr     r0, mon_stdcall_frame_addr
-       ldr     r0, [r0]
-       RESTORE_MON_FRAME_FROM_ARG r0
-.endm
-
-/*****************************************************************************/
-/* The monitor entry table stuff                                             */
-/*****************************************************************************/
-.p2align 5
-.globl monitor_vector_base
-monitor_vector_base:
-       nop                             /* RESET        */
-       b       mon_undef_entry         /* UNDEF        */
-       b       mon_swi_entry           /* SWI          */
-       b       mon_inst_abort_entry    /* IABORT       */
-       b       mon_data_abort_entry    /* DABORT       */
-       nop                             /* reserved     */
-       b       mon_irq_entry           /* IRQ          */
-       b       mon_fiq_entry           /* FIQ          */
-
-mon_undef_entry:
-       b       .
-
-mon_swi_entry:
-       b       handle_exception
-
-mon_inst_abort_entry:
-       b       .
-
-mon_data_abort_entry:
-       b       .
-
-mon_irq_entry:
-       b       .
-
-mon_fiq_entry:
-       b       .
-
-/*
- * Go to secure world, handle the exception and then switch back to non-secure
- * world.
- *
- */
-handle_exception:
-       stmfd   sp!, {r1-r2}            @ create scratch regs
-
-       SWITCH_SCR_TO_SECURE r1
-
-       /* check if is mmu is currently enabled */
-       mrc     p15, 0, r1, c1, c0, 0
-       tst     r1, #0x1
-       bne     cont_handle_exc         @ enabled, just continue
-
-       /* it won't be on exit from LP1, so handle it now */
-       adr     r1, mon_p2v_offset
-       ldr     r2, [r1]
-       add     sp, sp, r2              @ convert sp to virt
-
-       ldr     r2, =monitor_vector_base
-       mcr     p15, 0, r2, c12, c0, 1  @ reload virt mvbar
-
-       mrc     p15, 0, r2, c1, c0, 0
-       orr     r2, r2, #1
-       mcr     p15, 0, r2, c1, c0, 0   @ enable mmu
-
-       ldr     r1, =cont_handle_exc
-       mov     pc, r1                  @ convert pc to virt
-
-cont_handle_exc:
-       tst     r0, #(1 << 31)          @ Check if fastcall
-       bne     handle_fastcall
-
-       /* continue for handling standard calls */
-       SAVE_NONSECURE_STATE r1, r2     @ save NS state
-       RESTORE_SECURE_STATE r1, r2     @ restore S state
-
-       /* handle restart SMC */
-       ldr     r1, =SMC_TOS_RESTART_LEGACY
-       cmp     r0, r1                  @ legacy restart SMC?
-       beq     go_restart
-       ldr     r1, =SMC_TOS_RESTART
-       cmp     r0, r1                  @ restart SMC?
-       beq     go_restart
-
-       /* if returning from FS req, skip CPU save (r1 is still scratch) */
-       mov32   r1, 0x32000009
-       cmp     r0, r1                  @ fs completion?
-       beq     go_restart
-
-       ldmia   sp!, {r1-r2}            @ restore scratch regs
-
-       /* save tz_monitor_frame to r0 */
-       SAVE_MON_FRAME_TO_ARG mon_stdcall_frame_addr
-       adr     r0, mon_stdcall_frame_addr
-       ldr     r0, [r0]
-
-return_go_nonsecure:
-       /* frame in r0 (register not part of restored CPU state) */
-       adr     r1, secure_exit_mode
-       ldr     r2, [r1]                @ get previous exit mode
-       msr     cpsr_cfsx, r2           @ switch to it
-       ldmia   sp!, { r4-r12, pc }     @ restore CPU state from stack (and return)
-
-go_restart:
-       /* store new r14/spsr to use after RESTART SMC handling */
-       ldmia   sp!, {r1-r2}            @ restore scratch regs
-       adr     r0, mon_stdcall_frame_addr
-       ldr     r0, [r0]
-       str     r14, [r0, #0x68]
-       mrs     r14, spsr
-       str     r14, [r0, #0x70]
-       mov     r0, #0                  @ no incoming SMC
-       b       return_go_nonsecure
-
-/*
-* Handle fast calls - keep interrupts disabled, do not save/restore secure
-* world context, handle the SMC and return to non-secure world
-*/
-handle_fastcall:
-       /* restore scratch regs */
-       ldmia   sp!, {r1-r2}
-
-       /* save monitor frame */
-       SAVE_MON_FRAME_TO_ARG mon_fastcall_frame_addr
-
-       /* handle the SMC, r0 = smc_frame */
-       adr     r0, mon_fastcall_frame_addr
-       ldr     r0, [r0]
-       bl      tz_fastcall_handler
-
-       SWITCH_SCR_TO_NONSECURE r0
-
-       /* restore monitor frame */
-       adr     r0, mon_fastcall_frame_addr
-       ldr     r0, [r0]
-       RESTORE_MON_FRAME_FROM_ARG r0
-       movs    pc, r14
-
-/*
- * Go to nonsecure world
- *
- */
-.globl go_nonsecure
-go_nonsecure:
-       /* r0 = smc_type, r1 = frame ptr arg */
-       stmfd   sp!, { r4-r12, lr }     @ save CPU state to stack
-
-       adr     r2, secure_exit_mode
-       mrs     r3, cpsr
-       str     r3, [r2]                @ save current mode
-       cpsid   iaf                     @ disable intrs
-
-       SAVE_SECURE_STATE r2, r3
-       RESTORE_NONSECURE_STATE r2, r3
-       SWITCH_SCR_TO_NONSECURE r2
-
-       /* completions always restore from the stdcall stack */
-       mov32   r2, SMC_TOS_COMPLETION
-       cmp     r0, r2
-       beq     restore_stdcall_state
-
-       mov32   r2, SMC_TOS_PREEMPTED
-       cmp     r0, r2
-       beq     return_preempted
-
-       /* for INITIAL_NS_RETURN restore from arg */
-       RESTORE_MON_FRAME_FROM_ARG r1
-       movs    pc, r14
-
-restore_stdcall_state:
-       RESTORE_NS_STATE
-       movs    pc, r14
-
-return_preempted:
-       /* return the preempted-by code */
-       ldr     r0, [r1]        /* load frame->r[0] */
-       push    { r0 }
-       RESTORE_NS_STATE
-       pop     { r0 }
-       movs    pc, r14
-
-.globl mon_fastcall_frame_addr
-mon_fastcall_frame_addr:
-       .long   0
-
-.globl mon_stdcall_frame_addr
-mon_stdcall_frame_addr:
-       .long   0
-
-.align L1_CACHE_ALIGN
-
-/* save area for NS and S worlds */
-secure_state:
-       .rept   SAVED_STATE_WORDS
-       .long   0
-       .endr
-
-nonsecure_state:
-       .rept   SAVED_STATE_WORDS
-       .long   0
-       .endr
-
-/* cpsr mode from last secure world exit */
-secure_exit_mode:
-       .long   0
-
-.globl mon_stack_top
-mon_stack_top:
-       .long   0
-
-.globl mon_p2v_offset
-mon_p2v_offset:
-       .long   0
index c470f17..067d71a 100644 (file)
@@ -121,6 +121,7 @@ struct arm_mode_regs {
        uint32_t fiq_r13, fiq_r14;
        uint32_t irq_r13, irq_r14;
        uint32_t svc_r13, svc_r14;
+       uint32_t mon_r13, mon_r14;
        uint32_t abt_r13, abt_r14;
        uint32_t und_r13, und_r14;
        uint32_t sys_r13, sys_r14;
diff --git a/arch/arm/include/arch/arm/monitor_vectors.h b/arch/arm/include/arch/arm/monitor_vectors.h
deleted file mode 100644 (file)
index c37f871..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 2012-2014, NVIDIA CORPORATION. All rights reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files
- * (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-#ifndef __MONITOR_VECTORS_H
-#define __MONITOR_VECTORS_H
-
-#define SAVED_STATE_WORDS      7
-
-/* save exception SP and VFP state (assumes SCR.NS=0) */
-.macro SAVE_STATE, base, tmp
-       cps     #0x11                   /* fiq */
-       str     sp, [\base], #4
-       cps     #0x12                   /* irq */
-       str     sp, [\base], #4
-       cps     #0x13                   /* svc */
-       str     sp, [\base], #4
-       str     lr, [\base], #4
-       cps     #0x17                   /* abt */
-       str     sp, [\base], #4
-       cps     #0x1b                   /* und */
-       str     sp, [\base], #4
-       cps     #0x1f                   /* sys */
-       str     sp, [\base], #4
-
-       /* return in monitor mode */
-       cps     #0x16                   /* mon */
-.endm
-
-/* restore exception SP and VFP state (assumes SCR.NS=0) */
-.macro RESTORE_STATE, base, tmp
-       cps     #0x11                   /* fiq */
-       ldr     sp, [\base], #4
-       cps     #0x12                   /* irq */
-       ldr     sp, [\base], #4
-       cps     #0x13                   /* svc */
-       ldr     sp, [\base], #4
-       ldr     lr, [\base], #4
-       cps     #0x17                   /* abt */
-       ldr     sp, [\base], #4
-       cps     #0x1b                   /* und */
-       ldr     sp, [\base], #4
-       cps     #0x1f                   /* sys */
-       ldr     sp, [\base], #4
-
-       /* return in monitor mode */
-       cps     #0x16                   /* mon */
-.endm
-
-.macro SAVE_SECURE_STATE, base, tmp
-       ldr             \base, =secure_state
-       SAVE_STATE      \base, \tmp
-.endm
-
-.macro RESTORE_SECURE_STATE, base, tmp
-       ldr             \base, =secure_state
-       RESTORE_STATE   \base, \tmp
-.endm
-
-.macro SAVE_NONSECURE_STATE, base, tmp
-       ldr             \base, =nonsecure_state
-       SAVE_STATE      \base, \tmp
-.endm
-
-.macro RESTORE_NONSECURE_STATE, base, tmp
-       ldr             \base, =nonsecure_state
-       RESTORE_STATE   \base, \tmp
-.endm
-
-/* sets SCR.NS bit to 1 (assumes monitor mode) */
-.macro SWITCH_SCR_TO_NONSECURE, tmp
-       mrc     p15, 0, \tmp, c1, c1, 0
-       orr     \tmp, \tmp, #0x1
-       mcr     p15, 0, \tmp, c1, c1, 0
-       isb
-.endm
-
-/* sets SCR.NS bit to 0 (assumes monitor mode) */
-.macro SWITCH_SCR_TO_SECURE, tmp
-       mrc     p15, 0, \tmp, c1, c1, 0
-       bic     \tmp, \tmp, #0x1
-       mcr     p15, 0, \tmp, c1, c1, 0
-       isb
-.endm
-
-.macro SAVE_MON_FRAME_TO_ARG, arg
-       push    { r14 }
-       adr     r14, \arg
-       ldr     r14, [r14]
-       str     r0, [r14, #0x00]
-       str     r1, [r14, #0x08]
-       str     r2, [r14, #0x10]
-       str     r3, [r14, #0x18]
-       str     r4, [r14, #0x20]
-       str     r5, [r14, #0x28]
-       str     r6, [r14, #0x30]
-       str     r7, [r14, #0x38]
-       str     r8, [r14, #0x40]
-       str     r9, [r14, #0x48]
-       str     r10, [r14, #0x50]
-       str     r11, [r14, #0x58]
-       str     r12, [r14, #0x60]
-       pop     { r12 }
-       str     r12, [r14, #0x68]
-       mrs     r12, spsr
-       str     r12, [r14, #0x70]
-.endm
-
-.macro RESTORE_MON_FRAME_FROM_ARG, arg
-       mov     r14, \arg
-       ldr     \arg,  [r14, #0x70]
-       msr     spsr_cfsx, \arg
-       ldr     r0,  [r14, #0x00]
-       ldr     r1,  [r14, #0x08]
-       ldr     r2,  [r14, #0x10]
-       ldr     r3,  [r14, #0x18]
-       ldr     r4,  [r14, #0x20]
-       ldr     r5,  [r14, #0x28]
-       ldr     r6,  [r14, #0x30]
-       ldr     r7,  [r14, #0x38]
-       ldr     r8,  [r14, #0x40]
-       ldr     r9,  [r14, #0x48]
-       ldr     r10, [r14, #0x50]
-       ldr     r11, [r14, #0x58]
-       ldr     r12, [r14, #0x60]
-       ldr     r14, [r14, #0x68]
-.endm
-
-#endif
index 70f8f52..db0b629 100644 (file)
@@ -91,11 +91,7 @@ MODULE_SRCS += \
 # monitor support is part of the image by including monitor_vectors.S
 # in the build.
 
-ifeq ($(MONITOR_BIN),)
-# full native support
-MODULE_SRCS += \
-       $(LOCAL_DIR)/arm/monitor_vectors.S
-else
+ifeq ($(MONITOR_BIN),true)
 # interface support
 MODULE_SRCS += \
        $(LOCAL_DIR)/arm/monitor_interface.S
index 43dcded..d0eba25 100644 (file)
 #define UL(x)  (x)
 #endif
 
-#if !defined(ASSEMBLY) && defined(WITH_MONITOR_BIN)
+#if !defined(ASSEMBLY)
+
+uint32_t mon_cpu_id(void);
+void mon_atomic_or(volatile uint32_t *ptr, uint32_t bits);
+void mon_atomic_and(volatile uint32_t *ptr, uint32_t bits);
+
+/* holds arguments/return value during fastcalls */
+struct fastcall_frame {
+       uint64_t r[8];  /* r0-r7 */
+};
+
+#if defined(WITH_MONITOR_BIN)
+
 /*
  * Exported monitor data structures and functions which can be
  * referenced by routines also linked into the monitor binary.
@@ -39,11 +51,6 @@ extern uintptr_t __mon_cpu_reset_vector;
 extern uintptr_t __mon_phys_base;
 extern uintptr_t __mon_phys_size;
 
-/* holds arguments/return value during fastcalls */
-struct fastcall_frame {
-       uint64_t r[8];  /* r0-r7 */
-};
-
 paddr_t mon_virt_to_phys(void *vaddr);
 void *mon_phys_to_virt(uint64_t paddr);
 
@@ -51,9 +58,6 @@ int mon_mmu_map_mmio(uintptr_t vaddr, uint64_t paddr, uint32_t length);
 void mon_mmu_map_uncached(uintptr_t vaddr, uint64_t paddr, uint32_t length);
 void mon_mmu_unmap(uintptr_t vaddr, uint32_t length);
 
-void mon_atomic_or(volatile uint32_t *ptr, uint32_t bits);
-void mon_atomic_and(volatile uint32_t *ptr, uint32_t bits);
-
 uint32_t mon_get_cpu_id(void);
 
 /*
@@ -64,7 +68,16 @@ uint32_t mon_get_cpu_id(void);
  */
 void mon_cpu_power_down(int l2_flush);
 
-#endif // !ASSEMBLY && WITH_MONITOR_BIN
+/*
+ * CPU debug register save before powering down
+ *
+ * this function clobbers registers x0, x1, and x4.
+ */
+void mon_cpu_dbg_save(void);
+
+#endif // WITH_MONITOR_BIN
+
+#endif // !ASSEMBLY
 
 
 #define SMC_STDCALL                    (UL(0) << 31)
@@ -95,19 +108,20 @@ void mon_cpu_power_down(int l2_flush);
 /* Silicon Partner issued SMCs */
 #define SMC_SIP_CALL                   (SMC_OWNER_SIP_SERVICE << SMC_OWNER_SHIFT)
 #define SMC_SIP_AARCH_SWITCH           (SMC_FASTCALL | SMC_SIP_CALL | 0x4)
+#define SMC_SIP_GET_FIQ_REGS           (SMC_FASTCALL | SMC_SIP_CALL | 0x6)
 
 /* Trusted OS issued SMC (i.e. generated from the TLK kernel) */
 #define SMC_TOS_CALL                   (0x32 << SMC_OWNER_SHIFT)
 
 #if ARCH_ARM
 /* TOS 32bit secure fastcalls */
-#define SMC_TOS_SECURE (SMC_FASTCALL | SMC_TOS_CALL | \
-                        SMC_CALLING_CONVENTION_32)
+#define SMC_TOS_SECURE (SMC_FASTCALL | SMC_CALLING_CONVENTION_32 | \
+                        SMC_TOS_CALL)
 #endif
 #if ARCH_ARM64
 /* TOS 64bit secure fastcalls */
-#define SMC_TOS_SECURE (SMC_FASTCALL | SMC_TOS_CALL | \
-                        SMC_CALLING_CONVENTION_64)
+#define SMC_TOS_SECURE (SMC_FASTCALL | SMC_CALLING_CONVENTION_64 \
+                        SMC_TOS_CALL)
 #endif
 
 /* low byte used as jump table idx */
@@ -119,6 +133,10 @@ void mon_cpu_power_down(int l2_flush);
 #define        SMC_TOS_INITIAL_NS_RETURN       (SMC_TOS_SECURE | 0x3)
 #define        SMC_TOS_ADDR_TRANSLATE          (SMC_TOS_SECURE | 0x4)
 #define        SMC_TOS_INIT_SHARED_ADDR        (SMC_TOS_SECURE | 0x5)
+#define        SMC_TOS_MAX_FUNC_IDX            0x5
+
+/* restart pre-empted SMC handling */
+#define SMC_TOS_RESTART                        (60 << 24)
 
 /* informs the NS world that we were pre-empted by an irq */
 #define SMC_ERR_PREEMPT_BY_IRQ         0xFFFFFFFD
diff --git a/platform/tegra/common/boot_secondary.S b/platform/tegra/common/boot_secondary.S
deleted file mode 100644 (file)
index a958030..0000000
+++ /dev/null
@@ -1,579 +0,0 @@
-/*
- * Copyright (c) 2012-2014, NVIDIA CORPORATION. All rights reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files
- * (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-#include <platform/boot_secondary.h>
-
-#define DEBUG_CPU_RESET_HANDLER                0
-#define SCRATCH_WORDS                  8
-#define CLK_RESET_CCLK_BURST           0x20
-#define CLK_RESET_CCLK_DIVIDER         0x24
-#define CLK_RESET_SCLK_BURST           0x28
-#define CLK_RESET_SCLK_DIVIDER         0x2c
-
-.globl invalidate_l1_v7
-invalidate_l1_v7:
-       mov     r0, #0
-       mcr     p15, 2, r0, c0, c0, 0
-       mrc     p15, 1, r0, c0, c0, 0
-
-       movw    r1, #0x7fff
-       and     r2, r1, r0, lsr #13     @ get number of sets
-
-       movw    r1, #0x3ff
-
-       and     r3, r1, r0, lsr #3      @ NumWays - 1
-       add     r2, r2, #1              @ NumSets
-
-       and     r0, r0, #0x7
-       add     r0, r0, #4              @ SetShift
-
-       clz     r1, r3                  @ WayShift
-       add     r4, r3, #1              @ NumWays
-1:     sub     r2, r2, #1              @ NumSets--
-       mov     r3, r4                  @ Temp = NumWays
-2:     subs    r3, r3, #1              @ Temp--
-       mov     r5, r3, lsl r1
-       mov     r6, r2, lsl r0
-       orr     r5, r5, r6              @ Reg = (Temp<<WayShift)|(NumSets<<SetShift)
-       mcr     p15, 0, r5, c7, c6, 2
-       bgt     2b
-       cmp     r2, #0
-       bgt     1b
-       dsb
-       isb
-       mov     pc, lr
-
-.globl _boot_secondary_cpu
-_boot_secondary_cpu:
-       clrex
-
-       cpsid   aif, 0x13                       @ SVC mode, interrupts disabled
-#if ARM_CPU_CORTEX_A9
-       mrc     p15, 0, r0, c0, c0, 0           @ read main ID register
-       and     r5, r0, #0x00f00000             @ variant
-       and     r6, r0, #0x0000000f             @ revision
-       orr     r6, r6, r5, lsr #20-4           @ combine variant and revision
-       /* ARM_ERRATA_743622 */
-       teq     r6, #0x20                       @ present in r2p0
-       teqne   r6, #0x21                       @ present in r2p1
-       teqne   r6, #0x22                       @ present in r2p2
-       teqne   r6, #0x27                       @ present in r2p7
-       teqne   r6, #0x29                       @ present in r2p9
-       mrceq   p15, 0, r10, c15, c0, 1         @ read diagnostic register
-       orreq   r10, r10, #1 << 6               @ set bit #6
-       mcreq   p15, 0, r10, c15, c0, 1         @ write diagnostic register
-#endif
-#if ARM_CPU_CORTEX_A15
-       mov     r0, #0
-       mcr     p15, 0, r0, c1, c0, 1           @ disable SMP, prefetch, broadcast
-       isb
-#endif
-
-#if DEBUG_CPU_RESET_HANDLER
-       b       .
-#endif
-
-#if ARM_CPU_CORTEX_A15
-       mrc     p15, 0x1, r0, c15, c0, 3        @ L2 prefetch control reg
-       tst     r0, #0x1000
-       orreq   r0, r0, #0x1000                 @ disable throttling
-       mcreq   p15, 0x1, r0, c15, c0, 3
-
-       mrc     p15, 0, r0, c0, c0, 0           @ main ID register
-       ubfx    r1, r0, #20, #4
-       cmp     r1, #0x3                        @ Compare to rev 3
-       mrcge   p15, 0x1, r0, c15, c0, 4        @ ACTLR2
-       orrge   r0, #(1<<31)                    @ Enable regional clock gates
-       mcrge   p15, 0x1, r0, c15, c0, 4        @ Rev 3 or higher
-
-#if ARM_CLUSTER0_INIT_L2
-       /* This is only needed for cluster 0 with integrated L2 cache */
-       mrc     p15, 0, r0, c0, c0, 5
-       ubfx    r0, r0, #8, #4
-       tst     r0, #1
-       bne     __enable_i_cache
-       mrc     p15, 0x1, r0, c9, c0, 2
-       and     r1, r0, #7
-       cmp     r1, #2
-       beq     __enable_i_cache
-       bic     r0, r0, #7
-       orr     r0, r0, #2
-       mcr     p15, 0x1, r0, c9, c0, 2
-__enable_i_cache:
-#endif
-       mrc     p15, 0, r0, c1, c0, 0
-       orr     r0, r0, #0x1000
-       mcr     p15, 0, r0, c1, c0, 0           @ enable i-cache
-       b       cpu_context_restore
-#endif
-
-#if ARM_CPU_CORTEX_A9
-       mcr     p15, 0, r0, c7, c5, 0           @ invalidate BTAC, i-cache
-       mcr     p15, 0, r0, c7, c5, 6           @ invalidate branch pred array
-       mcr     p15, 0, r0, c8, c5, 0           @ invalidate instruction TLB
-       mcr     p15, 0, r0, c8, c6, 0           @ invalidate data TLB
-       mcr     p15, 0, r0, c8, c7, 0           @ invalidate unified TLB
-       dsb
-       isb
-#endif
-
-#if ARM_WITH_SCU
-       cpu_id  r0
-       cmp     r0, #0
-       ldrne   r1, =TEGRA_ARM_SCU_BASE
-       movne   r0, r0, lsl #2
-       movne   r2, #0xf
-       movne   r2, r2, lsl r0
-       strne   r2, [r1, #0xC]          @ invalidate SCU tags for CPU
-#endif
-
-#if ARM_CPU_CORTEX_A9
-       dsb
-       ldr     r0, =0x1000
-       mcr     p15, 0, r0, c1, c0, 0           @ enable i-cache
-       isb
-
-       bl      invalidate_l1_v7        @ invalidate D$
-#endif
-
-cpu_context_restore:
-       ldr     r0, =_cpu_context
-       ldr     r1, =VMEMBASE
-       sub     r0, r0, r1
-       adr     r1, _boot_secondary_phys_base
-       ldr     r1, [r1]
-
-       /* restore cpu context */
-       add     r0, r0, r1                      @ phys base of context
-       mov     r1, #1                          @ enable MMU
-       cpu_restore_context r0, r1, r2, r3
-
-       /* go virtual now */
-       ldr     r1, =go_virtual
-       mov     pc, r1
-go_virtual:
-
-       cpu_id  r0
-       cmp     r0, #0                          @ CPU 0?
-       bne     1110f
-
-       ldr     r0, =svc_scratch_space
-       add     sp, r0, #(SCRATCH_WORDS * 4)    @ temporary svc_sp
-#if ARM_WITH_SCU
-       ldr     r0, =cpu_enable_scu             @ enable SCU
-       blx     r0
-
-       ldr     r0, =cpu_enable_scu_access      @ r/w scu regs from all cpus
-       blx     r0
-#endif
-       /* allow full access to CP10 and CP11 */
-       mrc     p15, 0, r0, c1, c0, 2           @ CPACR
-       orr     r0, r0, #0x00F00000
-       mcr     p15, 0, r0, c1, c0, 2           @ CPACR
-       isb
-
-       ldr     r0, =pm_early_init
-       blx     r0
-
-       ldr     r0, =cpu_power_down_mode
-       ldr     r0, [r0]
-       cmp     r0, #CPU_IN_LP0
-       ldreq   r0, =platform_restore_memory
-       blxeq   r0
-
-       /* enable user space perf counter access */
-       mrc     p15, 0, r0, c9, c12, 0
-       lsr     r0, #11
-       and     r0, r0, #0x1f
-       mov     r1, #1
-       lsl     r1, r1, r0
-       sub     r1, r1, #1
-       movt    r1, #0x8000
-       mcr     p15, 0, r1, c9, c14, 2
-       mov     r0, #1
-       mcr     p15, 0, r0, c9, c14, 0
-
-       /* enable user space CNTVCT access */
-       mrc     p15, 0, r0, c14, c1, 0
-       orr     r0, r0, #(1 << 1)
-       mcr     p15, 0, r0, c14, c1, 0
-
-1110:
-       ldr     r0, =platform_config_interrupts
-       blx     r0
-
-       /* enable SCR.FW */
-       mov     r0, #(1 << 4)           @ SCR.FW
-       mcr     p15, 0, r0, c1, c1, 0
-       isb
-
-       /* let normal world enable SMP, lock TLB, access CP10/11 */
-       mrc     p15, 0, r0, c1, c1, 2           @ NSACR
-       orr     r0, r0, #0x00000C00
-       orr     r0, r0, #0x00060000
-       mcr     p15, 0, r0, c1, c1, 2           @ NSACR
-
-#if ARM_CPU_CORTEX_A9
-       /* normal world can write SMP, but not FW */
-       mrc     p15, 0, r0, c1, c0, 1
-       orr     r0, r0, #(0x1 << 0)             @ enable FW
-       mcr     p15, 0, r0, c1, c0, 1           @ ACTLR
-#endif
-
-       /* mark banked CPU intrs (31:0) be non-secure */
-       ldr     r0, =cpu_gic_setup
-       blx     r0
-
-       /* goto monitor mode */
-       cpu_id  r0
-       cmp     r0, #0                          @ are we CPU #0?
-       ldreq   lr, =mon_stack_top
-       ldreq   r0, [lr]
-       cps     #0x16                           @ monitor mode
-       moveq   sp, r0                          @ restore mon_sp
-
-       /* NS world's entry point */
-       ldr     r0, =cpu_power_down_mode
-       ldr     r1, [r0]
-       cmp     r1, #CPU_IN_LP0
-       ldreq   lr, =_ns_resume_addr
-       moveq   r1, #0
-       streq   r1, [r0]
-       ldrne   lr, =_ns_addr_secondary_cpus
-       ldr     lr, [lr]
-       cmp     lr, #0
-       beq     .                               @ error: if NULL entry point
-
-       /* NS=1 */
-       mrc     p15, 0, r0, c1, c1, 0           @ SCR
-       orr     r0, r0, #0x1
-       mcr     p15, 0, r0, c1, c1, 0           @ NS=1 mode
-       isb
-
-       /*
-        * set shadow spsr_mon, with current reset CPSR state
-        * (e.g. intrs disabled) and changed the mode to SVC
-        */
-       mrs     r0, cpsr
-       bic     r0, #0x1f
-       orr     r0, #0x13
-       msr     spsr_cxfs, r0
-       movs    pc, lr
-
-.globl boot_secondary_cpu_addr
-boot_secondary_cpu_addr:       .word   _boot_secondary_cpu
-
-.globl svc_scratch_space
-svc_scratch_space:
-       .rept   SCRATCH_WORDS
-       .long   0
-       .endr
-
-.globl _ns_resume_addr
-_ns_resume_addr:
-       .word   0
-
-.global _boot_secondary_phys_base
-_boot_secondary_phys_base:
-       .int 0
-
-/*
- * LP1 resume code.  This code is executed out of TZRAM.  Note that DRAM
- * is in self-refresh while this code is executing.
- */
-.globl _lp1_resume
-_lp1_resume:
-       clrex
-
-       cpsid   aif, 0x13                       @ SVC mode, interrupts disabled
-#if ARM_CPU_CORTEX_A9
-       mrc     p15, 0, r0, c0, c0, 0           @ read main ID register
-       and     r5, r0, #0x00f00000             @ variant
-       and     r6, r0, #0x0000000f             @ revision
-       orr     r6, r6, r5, lsr #20-4           @ combine variant and revision
-       /* ARM_ERRATA_743622 */
-       teq     r6, #0x20                       @ present in r2p0
-       teqne   r6, #0x21                       @ present in r2p1
-       teqne   r6, #0x22                       @ present in r2p2
-       teqne   r6, #0x27                       @ present in r2p7
-       teqne   r6, #0x29                       @ present in r2p9
-       mrceq   p15, 0, r10, c15, c0, 1         @ read diagnostic register
-       orreq   r10, r10, #1 << 6               @ set bit #6
-       mcreq   p15, 0, r10, c15, c0, 1         @ write diagnostic register
-#endif
-#if ARM_CPU_CORTEX_A15
-       mov     r0, #0
-       mcr     p15, 0, r0, c1, c0, 1           @ disable SMP, prefetch, broadcast
-       isb
-#endif
-
-#if DEBUG_CPU_RESET_HANDLER
-       b       .
-#endif
-
-#if ARM_CPU_CORTEX_A15
-       mrc     p15, 0x1, r0, c15, c0, 3        @ L2 prefetch control reg
-       tst     r0, #0x1000
-       orreq   r0, r0, #0x1000                 @ disable throttling
-       mcreq   p15, 0x1, r0, c15, c0, 3
-
-       mrc     p15, 0, r0, c0, c0, 0           @ main ID register
-       ubfx    r1, r0, #20, #4
-       cmp     r1, #0x3                        @ Compare to rev 3
-       mrcge   p15, 0x1, r0, c15, c0, 4        @ ACTLR2
-       orrge   r0, #(1<<31)                    @ Enable regional clock gates
-       mcrge   p15, 0x1, r0, c15, c0, 4        @ Rev 3 or higher
-
-#if ARM_CLUSTER0_INIT_L2
-       /* set up L2 for cluster0 */
-       mrc     p15, 0, r0, c0, c0, 5
-       ubfx    r0, r0, #8, #4                  @ get cluster id
-       cmp     r0, #0                          @ C0 = 0, C1 = 1
-       bne     not_on_cluster0
-
-       mrc     p15, 0x1, r0, c9, c0, 0x2       @ read L2CTLR
-       bic     r0, r0, #0x7                    @ clear data ram latency field
-       orr     r0, r0, #0x2                    @ pipeline depth of 3
-       mcr     p15, 0x1, r0, c9, c0, 0x2       @ write L2CTLR
-
-not_on_cluster0:
-#endif
-#endif
-
-       /* check if we should avoid switching to CLKM */
-       ldr     r0, =TZRAM_CPU_AVOID_CLKM_SWITCH
-       ldr     r0, [r0]
-       cmp     r0, #1
-       beq     avoid_clkm_switch
-
-       /* resuming from LP1 so handle 32KHz to CLKM/OSC clock switch */
-       ldr     r0, =TEGRA_CLK_RESET_BASE
-       mov     r1, #(1<<28)
-       str     r1, [r0, #CLK_RESET_SCLK_BURST]
-       str     r1, [r0, #CLK_RESET_CCLK_BURST]
-       mov     r1, #0
-       str     r1, [r0, #CLK_RESET_SCLK_DIVIDER]
-       str     r1, [r0, #CLK_RESET_CCLK_DIVIDER]
-
-avoid_clkm_switch:
-       mov     r1, #0
-       ldr     r0, =TZRAM_CPU_AVOID_CLKM_SWITCH
-       str     r1, [r0]                @ clear the clkm switch flag
-
-#if ARM_CPU_CORTEX_A15
-       mrc     p15, 0x1, r0, c15, c0, 3        @ L2 prefetch control reg
-       tst     r0, #0x1000
-       orreq   r0, r0, #0x1000                 @ disable throttling
-       mcreq   p15, 0x1, r0, c15, c0, 3
-
-       mrc     p15, 0, r0, c0, c0, 0           @ main ID register
-       ubfx    r1, r0, #20, #4
-       cmp     r1, #0x3                        @ Compare to rev 3
-       mrcge   p15, 0x1, r0, c15, c0, 4        @ ACTLR2
-       orrge   r0, #(1<<31)                    @ Enable regional clock gates
-       mcrge   p15, 0x1, r0, c15, c0, 4        @ Rev 3 or higher
-
-       /* This is only needed for cluster 0 with integrated L2 cache */
-       mrc     p15, 0, r0, c0, c0, 5
-       ubfx    r0, r0, #8, #4
-       tst     r0, #1
-       bne     lp1_enable_i_cache
-       mrc     p15, 0x1, r0, c9, c0, 2
-       and     r1, r0, #7
-       cmp     r1, #2
-       beq     lp1_enable_i_cache
-       bic     r0, r0, #7
-       orr     r0, r0, #2
-       mcr     p15, 0x1, r0, c9, c0, 2
-lp1_enable_i_cache:
-       mrc     p15, 0, r0, c1, c0, 0
-       orr     r0, r0, #0x1000
-       mcr     p15, 0, r0, c1, c0, 0           @ enable i-cache
-       b       lp1_cpu_context_restore
-#endif
-
-#if ARM_CPU_CORTEX_A9
-       mcr     p15, 0, r0, c7, c5, 0           @ invalidate BTAC, i-cache
-       mcr     p15, 0, r0, c7, c5, 6           @ invalidate branch pred array
-       mcr     p15, 0, r0, c8, c5, 0           @ invalidate instruction TLB
-       mcr     p15, 0, r0, c8, c6, 0           @ invalidate data TLB
-       mcr     p15, 0, r0, c8, c7, 0           @ invalidate unified TLB
-       dsb
-       isb
-#endif
-
-#if ARM_WITH_SCU
-       cpu_id  r0
-       cmp     r0, #0
-       ldrne   r1, =TEGRA_ARM_SCU_BASE
-       movne   r0, r0, lsl #2
-       movne   r2, #0xf
-       movne   r2, r2, lsl r0
-       strne   r2, [r1, #0xC]                  @ invalidate SCU tags for CPU
-#endif
-
-#if ARM_CPU_CORTEX_A9
-       dsb
-       ldr     r0, =0x1000
-       mcr     p15, 0, r0, c1, c0, 0           @ enable i-cache
-       isb
-
-       /* invalidate dcache */
-       mov     r0, #0
-       mcr     p15, 2, r0, c0, c0, 0
-       mrc     p15, 1, r0, c0, c0, 0
-
-       movw    r1, #0x7fff
-       and     r2, r1, r0, lsr #13     @ get number of sets
-
-       movw    r1, #0x3ff
-
-       and     r3, r1, r0, lsr #3      @ NumWays - 1
-       add     r2, r2, #1              @ NumSets
-
-       and     r0, r0, #0x7
-       add     r0, r0, #4              @ SetShift
-
-       clz     r1, r3                  @ WayShift
-       add     r4, r3, #1              @ NumWays
-1:     sub     r2, r2, #1              @ NumSets--
-       mov     r3, r4                  @ Temp = NumWays
-2:     subs    r3, r3, #1              @ Temp--
-       mov     r5, r3, lsl r1
-       mov     r6, r2, lsl r0
-       orr     r5, r5, r6              @ Reg = (Temp<<WayShift)|(NumSets<<SetShift)
-       mcr     p15, 0, r5, c7, c6, 2
-       bgt     2b
-       cmp     r2, #0
-       bgt     1b
-       dsb
-       isb
-#endif
-
-lp1_cpu_context_restore:
-       /* restore cpu context */
-       ldr     r0, =TZRAM_CPU_CONTEXT          @ phys base of context
-       mov     r1, #0                          @ leave MMU disabled
-       cpu_restore_context r0, r1, r2, r3
-       isb
-
-       ldr     r0, =TZRAM_TEMP_SVC_SP          @ setup tempory svc sp
-       add     sp, r0, #(SCRATCH_WORDS * 4)
-
-#if ARM_WITH_SCU
-       ldr     r3, =TEGRA_ARM_SCU_BASE         @ enable SCU
-       mov     r2, #1
-       str     r2, [r3]
-
-       ldr     r2, =0xf                        @ r/w scu regs from all cpus
-       str     r2, [r3, #0x50]
-       ldr     r2, =0xfff
-       str     r2, [r3, #0x54]
-#endif
-       /* allow full access to CP10 and CP11 */
-       mrc     p15, 0, r0, c1, c0, 2           @ CPACR
-       orr     r0, r0, #0x00F00000
-       mcr     p15, 0, r0, c1, c0, 2           @ CPACR
-       isb
-
-       /* configure interrupts */
-       mov     r3, #0
-       mvn     r1, #0
-interrupt_loop:
-       ldr     r2, =TEGRA_ARM_INT_DIST_BASE    @ should be better way to handle
-       add     r2, r2, #0x80                   @ add here
-       asr     r0, r3, #0x3
-       add     r3, r3, #0x20
-       cmp     r3, #0x320
-       add     r2, r0, r2
-       str     r1, [r2]
-       bne     interrupt_loop
-
-       /* restore reset vector */
-       ldr     r3, =TZRAM_BOOT_SECONDARY_CPU_ADDR
-       ldr     r2, [r3]
-       ldr     r3, =TEGRA_EXCEPTION_VECTORS_BASE
-       str     r2, [r3, #0x100]
-       dmb     sy
-       ldr     r3, [r3, #0x100]                @ dummy read to ensure write
-
-       /* mark banked CPU intrs (31:0) be non-secure */
-       ldr     r3, =TEGRA_ARM_INT_DIST_BASE
-       mvn     r2, #0x0
-       str     r2, [r3, #0x80]                 @ DIST_IRQ_SEC
-       ldr     r3, =TEGRA_ARM_INT_CPU_BASE
-       ldr     r2, =0xff
-       str     r2, [r3, #0x4]                  @ GIC_CPU_PRIMASK
-
-       /* restore monitor_vector base */
-       ldr     r3, =TZRAM_MVBAR
-       ldr     r3, [r3]
-       mcr     p15, 0, r3, c12, c0, 1
-
-       /* let normal world enable SMP, lock TLB, access CP10/11 */
-       mrc     p15, 0, r0, c1, c1, 2           @ NSACR
-       orr     r0, r0, #0x00000C00
-       orr     r0, r0, #0x00060000
-       mcr     p15, 0, r0, c1, c1, 2           @ NSACR
-
-#if ARM_CPU_CORTEX_A9
-       /* normal world can write SMP, but not FW */
-       mrc     p15, 0, r0, c1, c0, 1
-       orr     r0, r0, #(0x1 << 0)             @ enable FW
-       mcr     p15, 0, r0, c1, c0, 1           @ ACTLR
-#endif
-
-       /* goto monitor mode */
-       ldr     lr, =TZRAM_MON_STACK_TOP
-       ldr     r0, [lr]
-       cps     #0x16                           @ monitor mode
-       mov     sp, r0                          @ restore mon_sp
-
-       /* NS world's entry point */
-       ldr     lr, =TZRAM_NS_RESUME_ADDR
-       ldr     lr, [lr]
-       cmp     lr, #0
-       beq     .                               @ error: if NULL entry point
-
-       /* enable SCR.FW and NS=1 */
-       mrc     p15, 0, r0, c1, c1, 0           @ SCR
-       mov     r0, #(1 << 4) | 0x1             @ SCR.FW and NS=1
-       mcr     p15, 0, r0, c1, c1, 0
-       isb
-
-       /*
-        * set shadow spsr_mon, with current reset CPSR state
-        * (e.g. intrs disabled) and changed the mode to SVC
-        */
-       mrs     r0, cpsr
-       bic     r0, #0x1f
-       orr     r0, #0x13
-       msr     spsr_cxfs, r0
-       movs    pc, lr
-
-.ltorg
-.globl _lp1_resume_end
-_lp1_resume_end:
-       b       .
-
-.globl lp1_resume_addr
-lp1_resume_addr:       .word   _lp1_resume
diff --git a/platform/tegra/common/cpu.c b/platform/tegra/common/cpu.c
deleted file mode 100644 (file)
index 3b4b9ec..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2012-2013, NVIDIA CORPORATION. All rights reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files
- * (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <sys/types.h>
-#include <debug.h>
-#include <arch/arm.h>
-#include <platform/memmap.h>
-#include <platform/irqs.h>
-#include <platform/platform_p.h>
-
-#if ARM_WITH_SCU
-void cpu_enable_scu(void)
-{
-       *(volatile uint32_t *)TEGRA_ARM_SCU_BASE = 0x1;
-}
-
-void cpu_enable_scu_access(void)
-{
-       /* SCU access control register */
-       *(volatile uint32_t *)(TEGRA_ARM_SCU_BASE + 0x50) = 0xF;
-       /* SCU NSACR */
-       *(volatile uint32_t *)(TEGRA_ARM_SCU_BASE + 0x54) = 0xFFF;
-}
-#endif
-
-void cpu_gic_setup(void)
-{
-       uint32_t gic_int_dist_sec = TEGRA_ARM_INT_DIST_BASE;
-       uint32_t gic_cpu_phys_base = TEGRA_ARM_INT_CPU_BASE;
-
-       /* DIST_IRQ_SEC */
-       *(volatile uint32_t *)(gic_int_dist_sec + 128) = ~0UL;
-       /* GIC_CPU_PRIMASK */
-       *(volatile uint32_t *)(gic_cpu_phys_base + 4) = 0xFF;
-}
index d48865b..b182600 100644 (file)
@@ -44,7 +44,7 @@
 #include <arch/outercache.h>
 #endif
 #include <platform/platform_p.h>
-#include <platform/platform_monitor.h>
+#include <ote_intf.h>
 
 #define        MB              (1024 * 1024)
 
@@ -89,11 +89,6 @@ void platform_idle(void)
 #endif
 
 #if !defined(WITH_MONITOR_BIN)
-       /* mark the entire TLK carveout as secure in the MC */
-       platform_secure_dram_aperture();
-#endif
-
-#if !defined(WITH_MONITOR_BIN)
        memset(&frame, 0, sizeof(frame));
 
        ASSERT(__jumpback_addr);
@@ -132,6 +127,8 @@ void platform_init(void)
 
        platform_fuse_init();
 
+       te_intf_init();
+
        /*
         * Set SE_TZRAM_SECURITY sticky bit to respect secure TZRAM accesses.
         * Note: No need to reprogram it after LP0 exit as it's part of SE's
diff --git a/platform/tegra/common/pm.c b/platform/tegra/common/pm.c
deleted file mode 100644 (file)
index 4b33a9d..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * Copyright (c) 2012-2014, NVIDIA CORPORATION. All rights reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files
- * (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <err.h>
-#include <errno.h>
-#include <debug.h>
-#include <assert.h>
-#include <malloc.h>
-#include <string.h>
-#include <platform.h>
-#include <arch.h>
-#include <stdlib.h>
-#include <lib/heap.h>
-#include <arch/outercache.h>
-#include <platform/memmap.h>
-#include <platform/tzrammap.h>
-#include <platform/irqs.h>
-#include <arch/arm.h>
-#include <arch/arm/mmu.h>
-#include <platform/platform_p.h>
-#include <platform/platform_monitor.h>
-#include <platform/platform_cpu.h>
-#include <platform/platform_sip.h>
-#include <ote_intf.h>
-
-#define MONITOR_MODE_STACK_SZ  4096
-
-/* referenced APBDEV_PMC_SECURE registers */
-#define PMC_SECURE_DISABLE2    0x2c4
-#define PMC_SECURE_SCRATCH22   0x338
-
-/*
- * The PSCI spec from ARM states the following for power mgmt:
- * SMC         (r0) - CPU_SUSPEND  = 0x84000001
- * power_state (r1) - Bits [0:15]  = StateID
- *                    Bit  [16]    = StateType <0=Stdby, 1=PwrDn>
- *                    Bits [17:23] = MBZ
- *                    Bits [24:25] = AffinityLevel <0=cpu, 1=cluster>
- *                    Bits [26:31] = MBZ
- * entry_addr  (r2) - CPU wake up addr
- * context_id  (r3) - args in r0 when cpu wakes up from pwrdn state and enters
- *                    exception level of caller
- * returns     (r0) - SUCCESS/INVALID PARAM
- */
-#define LP0                            ((1 << 16) | (1 << 24) | 1)
-#define LP1                            ((1 << 16) | 2)
-#define LP1_MC_CLK_STOP                        ((1 << 16) | 3)
-#define LP2_CLUSTER_PWR_DN             ((1 << 16) | (1 << 24) | 4)
-#define LP2_CLUSTER_PWR_DN_LEGACY      ((1 << 16) | 4)
-#define LP2_NO_FLUSH_LEGACY            ((1 << 16) | 5)
-
-extern unsigned int monitor_vector_base;
-extern unsigned long mon_stack_top;
-extern unsigned long _ns_resume_addr;
-extern unsigned long boot_secondary_cpu_addr;
-
-/* location in NS to boot cpus */
-unsigned long _ns_addr_secondary_cpus = 0;
-
-unsigned int cpu_power_down_mode = 0;
-
-/* tracks if we need to load resume handlers into tzram */
-static bool load_tzram_lp1_resume_handler = true;
-
-static void pm_set_monitor_stack(void)
-{
-       void *stack_top_mon;
-       int stack_size = MONITOR_MODE_STACK_SZ;
-
-       stack_top_mon = heap_alloc(stack_size, 0);
-       if (stack_top_mon)
-       {
-               __asm__ volatile (
-                       "mrs    r2, cpsr        \n" // save current mode
-                       "cps    #0x16           \n" // change to monitor mode
-                       "mov    sp, %0          \n" // set mon_sp
-                       "add    sp, sp, %1      \n" // set mon_sp
-                       "msr    cpsr, r2        \n" // restore previous mode
-                       : : "r" (stack_top_mon),
-                           "r" (stack_size / 2) : "memory"
-               );
-       } else {
-               panic("no memory available for monitor stack");
-       }
-
-       memset(stack_top_mon, 0, stack_size);
-       mon_stack_top = (unsigned long)(stack_top_mon + (stack_size / 2));
-}
-
-static void pm_set_mvbar(unsigned int val)
-{
-       __asm__ volatile (
-               "mcr    p15, 0, %0, c12, c0, 1          \n"
-               : : "r" (val)
-       );
-}
-
-static void pm_set_reset_vector(unsigned long vector_addr)
-{
-       uint32_t evp_cpu_reset = TEGRA_EXCEPTION_VECTORS_BASE + 0x100;
-       uint32_t sb_ctrl = TEGRA_SB_BASE;
-       uint32_t reg;
-
-       /* set new reset vector */
-       *(volatile uint32_t *)evp_cpu_reset = (uint32_t)vector_addr;
-       __asm__ volatile ("dmb" : : : "memory");
-
-       /* dummy read to ensure successful write */
-       reg = *(volatile uint32_t *)evp_cpu_reset;
-
-       /* lock reset vector */
-       reg = *(volatile uint32_t *)sb_ctrl;
-       reg |= 2;
-       *(volatile uint32_t *)sb_ctrl = reg;
-       __asm__ volatile ("dmb" : : : "memory");
-}
-
-static void pm_set_nsacr(void)
-{
-       /* let normal world enable SMP, lock TLB, access CP10/11 */
-       __asm__ volatile (
-               "mrc    p15, 0, r0, c1, c1, 2           @ NSACR \n"
-               "orr    r0, r0, #(0x00000C00)                   \n"
-               "orr    r0, r0, #(0x00060000)                   \n"
-               "mcr    p15, 0, r0, c1, c1, 2           @ NSACR \n"
-               ::: "r0"
-       );
-}
-
-void pm_early_init(void)
-{
-       /* set monitor vector base address (use vaddr, since MMU's enabled) */
-       pm_set_mvbar((unsigned int)&monitor_vector_base);
-
-       /* populate the reset vector to boot all the secondary cpus */
-       pm_set_reset_vector(virtual_to_physical(boot_secondary_cpu_addr));
-}
-
-/* LP1 resume code */
-extern uint32_t _lp1_resume;
-extern uint32_t _lp1_resume_end;
-
-#define LP1_RESUME_HANDLER_SIZE \
-       ((uint32_t)&_lp1_resume_end - (uint32_t)&_lp1_resume)
-
-static void pm_load_tzram_lp1_resume_handler(void)
-{
-       ASSERT(LP1_RESUME_HANDLER_SIZE < TEGRA_TZRAM_SIZE);
-
-       memcpy((void *)(TZRAM_LP1_RESUME_HANDLER),
-              (void *)&_lp1_resume,
-              LP1_RESUME_HANDLER_SIZE);
-}
-
-static void pm_save_lp1_context(void)
-{
-       /* store any state needed for lp1 resume to tzram */
-       TZRAM_STORE(TZRAM_BOOT_SECONDARY_CPU_ADDR,
-               virtual_to_physical(boot_secondary_cpu_addr));
-       TZRAM_STORE(TZRAM_MON_STACK_TOP, virtual_to_physical(mon_stack_top));
-       TZRAM_STORE(TZRAM_NS_RESUME_ADDR, _ns_resume_addr);
-       TZRAM_STORE(TZRAM_MVBAR, virtual_to_physical(&monitor_vector_base));
-
-       cpu_copy_context((void *)TZRAM_CPU_CONTEXT);
-}
-
-void pm_init(void)
-{
-       extern unsigned long mon_p2v_offset;
-       extern uint32_t _boot_secondary_phys_base;
-       extern uint32_t __load_phys_size;
-       uint32_t reg;
-
-       pm_early_init();
-
-       /* set monitor vector stack */
-       pm_set_monitor_stack();
-
-       /* set normal world access in NSACR */
-       pm_set_nsacr();
-
-       /* save mmu setup used to bring up secondary cpus */
-       cpu_save_context();
-
-       /* save off values to help with v-to-p operations */
-       _boot_secondary_phys_base = __load_phys_base;
-       mon_p2v_offset = (VMEMBASE - __load_phys_base);
-
-       /* install the cpu resume handler to PMC_SEC_SCRATCH22 */
-       reg = readl(TEGRA_PMC_BASE + PMC_SECURE_DISABLE2);
-       writel(reg & ~(1 << 28), TEGRA_PMC_BASE + PMC_SECURE_DISABLE2); /* unlock */
-
-       writel(virtual_to_physical(boot_secondary_cpu_addr), TEGRA_PMC_BASE + PMC_SECURE_SCRATCH22);
-
-       reg = readl(TEGRA_PMC_BASE + PMC_SECURE_DISABLE2);
-       writel(reg | 1 << 28, TEGRA_PMC_BASE + PMC_SECURE_DISABLE2);    /* lock */
-
-       platform_init_memory(__load_phys_base, __load_phys_size);
-       platform_config_interrupts();
-}
-
-/*
- * Stubs for routines not used by all platforms
- */
-__WEAK void pm_handle_smc_l2(unsigned int smc)
-{
-       dprintf(CRITICAL, "stubbed L2 SMC handler (shouldn't have been issued)\n");
-       return;
-}
-
-__WEAK void pm_handle_smc_deep_sleep(void)
-{
-       return;
-}
-
-/*
- * Suspend-related SMCs.
- */
-static void pm_handle_lp0_suspend_smc(struct tz_monitor_frame *frame)
-{
-       cpu_power_down_mode = CPU_IN_LP0;
-
-       /* store passed in non-secure resume handler address */
-       _ns_resume_addr = frame->r[2];
-
-       /* set our LP0 reset vector */
-       pm_set_reset_vector(virtual_to_physical(boot_secondary_cpu_addr));
-
-       /* save off current state */
-       cpu_save_context();
-
-       /* need to reload LP1 handler into tzram before next LP1 suspend */
-       load_tzram_lp1_resume_handler = true;
-
-       /* handle any chip-specific steps */
-       pm_handle_smc_deep_sleep();
-
-       platform_disable_debug_intf();
-
-       /* flush/disable dcache last */
-       arch_disable_cache(DCACHE);
-}
-
-static void pm_handle_lp1_suspend_smc(struct tz_monitor_frame *frame)
-{
-       cpu_power_down_mode = CPU_IN_LP1;
-
-       /* store passed in non-secure resume handler address */
-       _ns_resume_addr = frame->r[2];
-
-       /* set our LP1 reset vector */
-       pm_set_reset_vector(TZRAM_LP1_RESUME_HANDLER);
-
-       /* save off current state */
-       cpu_save_context();
-
-       /* save off state needed by LP1 resume handler */
-       TZRAM_STORE(TZRAM_CPU_AVOID_CLKM_SWITCH,
-               frame->r[1] == LP1_MC_CLK_STOP);
-       TZRAM_STORE(TZRAM_BOOT_SECONDARY_CPU_ADDR,
-               virtual_to_physical(boot_secondary_cpu_addr));
-       pm_save_lp1_context();
-
-       /* load LP1 resume handler to TZRAM if necessary */
-       if (load_tzram_lp1_resume_handler) {
-               pm_load_tzram_lp1_resume_handler();
-               load_tzram_lp1_resume_handler = false;
-       }
-
-       /* flush/disable dcache last */
-       arch_disable_cache(DCACHE);
-}
-
-static void pm_handle_lp2_suspend_smc(struct tz_monitor_frame *frame)
-{
-       cpu_power_down_mode = CPU_IN_LP2;
-
-       /* set our LP2 reset vector */
-       pm_set_reset_vector(virtual_to_physical(boot_secondary_cpu_addr));
-
-       /* save off current state */
-       cpu_save_context();
-
-       /* flush/disable dcache last */
-       arch_disable_cache(DCACHE);
-}
-
-/*
- * System related SMCs handled on the current idle stack.
- * These should be simple operations that can't block.
- */
-void pm_handle_platform_smc(struct tz_monitor_frame *frame)
-{
-       int error = 0;
-
-       switch (frame->r[0]) {
-               case SMC_SIP_L2_MANAGEMENT:
-                       pm_handle_smc_l2(frame->r[1]);
-                       break;
-
-               case SMC_SIP_CPU_RESET_VECTOR:
-                       _ns_addr_secondary_cpus = frame->r[1];
-                       if (frame->r[1] == 0)
-                               _ns_addr_secondary_cpus = frame->r[2];
-#if defined(ARM_USE_CPU_CACHING)
-                       platform_clean_invalidate_cache_range(
-                               (vaddr_t)&_ns_addr_secondary_cpus,
-                               sizeof(_ns_addr_secondary_cpus));
-#endif
-                       platform_enable_debug_intf();
-                       break;
-
-               case SMC_SIP_DEVICE_SUSPEND:
-                       switch (frame->r[1]) {
-                       case LP2_CLUSTER_PWR_DN:
-                       case LP2_CLUSTER_PWR_DN_LEGACY:
-                       case LP2_NO_FLUSH_LEGACY:
-                               pm_handle_lp2_suspend_smc(frame);
-                               break;
-                       case LP1:
-                       case LP1_MC_CLK_STOP:
-                               pm_handle_lp1_suspend_smc(frame);
-                               break;
-                       case LP0:
-                               pm_handle_lp0_suspend_smc(frame);
-                               break;
-                       default:
-                               error = -EINVAL;
-                               break;
-                       }
-                       break;
-       }
-       frame->r[0] = error;
-}
index fefb287..c32ae5b 100644 (file)
 #include <assert.h>
 #include <malloc.h>
 #include <string.h>
-#include <platform.h>
 #include <arch.h>
 #include <stdlib.h>
-#include <lib/heap.h>
-#include <arch/outercache.h>
-#include <platform/memmap.h>
-#include <platform/tzrammap.h>
-#include <platform/irqs.h>
 #include <arch/arm.h>
 #include <arch/arm/mmu.h>
 #include <platform/platform_p.h>
 #include <platform/platform_ta.h>
 #include <platform/platform_tos.h>
-#include <platform/platform_monitor.h>
-#include <platform/platform_sip.h>
 #include <ote_intf.h>
 
 #define TZ_UNSUPPORTED_PARAM   0xDEADBEEF
@@ -54,8 +46,6 @@ extern unsigned int ote_logger_enabled;
 
 #if !defined(WITH_MONITOR_BIN)
 extern struct tz_monitor_frame *go_nonsecure(uint32_t smc_type, struct tz_monitor_frame *);
-extern unsigned long mon_fastcall_frame_addr;
-extern unsigned long mon_stdcall_frame_addr;
 #endif
 
 /* location in NS of req/param structs */
@@ -147,21 +137,6 @@ vaddr_t tz_map_shared_mem(nsaddr_t ns_addr, uint32_t size)
        return vaddr + offset;
 }
 
-void tz_init(void)
-{
-#if !defined(WITH_MONITOR_BIN)
-       /* allocate space for fast/std call monitor frames */
-       mon_fastcall_frame_addr = (unsigned long)calloc(1, sizeof(uint64_t) * 15);
-       ASSERT(mon_fastcall_frame_addr);
-
-       mon_stdcall_frame_addr = (unsigned long)calloc(1, sizeof(uint64_t) * 15);
-       ASSERT(mon_stdcall_frame_addr);
-
-       pm_init();
-#endif
-       te_intf_init();
-}
-
 struct tz_monitor_frame *tz_switch_to_ns(uint32_t smc_type, struct tz_monitor_frame *frame)
 {
        struct tz_monitor_frame *incoming_smc;
@@ -527,24 +502,3 @@ void tz_stdcall_handler(struct tz_monitor_frame *frame)
                break;
        }
 }
-
-void tz_fastcall_handler(struct tz_monitor_frame *frame)
-{
-       switch (frame->r[0]) {
-#if !defined(WITH_MONITOR_BIN)
-       case SMC_SIP_L2_MANAGEMENT:
-       case SMC_SIP_CPU_RESET_VECTOR:
-       case SMC_SIP_DEVICE_SUSPEND:
-               pm_handle_platform_smc(frame);
-               break;
-
-       case SMC_SIP_PROGRAM_VPR:
-               frame->r[0] = platform_program_vpr(frame->r[1], frame->r[2]);
-               break;
-#endif
-
-       default:
-               frame->r[0] = TZ_UNSUPPORTED_PARAM;
-               break;
-       }
-}
diff --git a/platform/tegra/include/platform/boot_secondary.h b/platform/tegra/include/platform/boot_secondary.h
deleted file mode 100644 (file)
index 523f0ef..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files
- * (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-#ifndef __BOOT_SECONDARY_H
-#define __BOOT_SECONDARY_H
-
-#include <platform/memmap.h>
-#include <platform/tzrammap.h>
-
-#if ARM_WITH_LPAE
-#include <arch/arm/mmu_ldesc_macros.h>
-#else
-#include <arch/arm/mmu_sdesc_macros.h>
-#endif
-
-/* copied from Travis' upstream include/asm.h */
-#define FUNCTION(x) .global x; .type x,STT_FUNC; x:
-#define DATA(x) .global x; .type x,STT_OBJECT; x:
-
-#define LOCAL_FUNCTION(x) .type x,STT_FUNC; x:
-#define LOCAL_DATA(x) .type x,STT_OBJECT; x:
-
-/* returns the ID of the current processor */
-.macro cpu_id, rd
-       mrc     p15, 0, \rd, c0, c0, 5
-       and     \rd, \rd, #0xF
-.endm
-
-/* void cpu_save_context(void) */
-FUNCTION(cpu_save_context)
-       /* save MMU registers */
-       adr     r0, _cpu_context
-       mmu_desc_save_context r0, r1, r2
-
-       /* save CPU registers */
-       mrc     p15, 0, r1, c12, c0, 0          @ VBAR
-       str     r1, [r0, #0]
-       mrc     p15, 0, r1, c13, c0, 3          @ TLS
-       str     r1, [r0, #4]
-       mrc     p15, 0, r1, c1, c0, 0           @ SCTLR
-       str     r1, [r0, #8]
-       dsb
-       bx      lr
-
-/* referenced within boot_secondary.S */
-.macro cpu_restore_context, base, enable, tmp, tmp2
-       /* restore MMU registers */
-       mmu_desc_restore_context \base, \tmp, \tmp2
-
-       /* restore CPU registers */
-       ldr     \tmp, [\base, #0]
-       mcr     p15, 0, \tmp, c12, c0, 0        @ VBAR
-       ldr     \tmp, [\base, #4]
-       mcr     p15, 0, \tmp, c13, c0, 3        @ TLS
-       ldr     \tmp, [\base, #8]               @ saved SCTLR
-
-       /* should MMU be enabled? */
-       cmp     \enable, #0
-       biceq   \tmp, #0x1                      @ nope, clear the enable
-       mcr     p15, 0, \tmp, c1, c0, 0         @ SCTLR
-       isb
-.endm
-
-/* void cpu_copy_context(void *dstaddr) */
-FUNCTION(cpu_copy_context)
-       adr     r1, _cpu_context
-       ldr     r2, =_cpu_context_end
-       cmp     r1, r2
-       beq     2f
-1:
-       /* copy data */
-       ldr     r3, [r1], #4
-       str     r3, [r0], #4
-       cmp     r1, r2
-       blt     1b
-2:
-       bx      lr
-
-#define        CPU_CONTEXT_INTS        3
-
-LOCAL_DATA(_cpu_context)
-       .rept (CPU_CONTEXT_INTS + MMU_DESC_CONTEXT_INTS)
-       .int   0
-       .endr
-LOCAL_DATA(_cpu_context_end)
-
-#endif /*__BOOT_SECONDARY_H */
index f2c8ff5..a06da51 100644 (file)
@@ -24,7 +24,5 @@
 #ifndef __CPU_H
 #define __CPU_H
 
-void cpu_save_context(void);
-void cpu_copy_context(void *dstptr);
 void flush_dcache_all(void);
 #endif
index 5926a47..b22a91c 100644 (file)
@@ -51,7 +51,6 @@ void platform_get_device_id(te_device_id_args_t *args);
 uint32_t platform_get_time_us(void);
 void platform_clean_invalidate_cache_range(vaddr_t range, uint32_t size);
 
-void tz_init(void);
 struct tz_monitor_frame *tz_switch_to_ns(uint32_t smc_type, struct tz_monitor_frame *frame);
 void tz_stdcall_handler(struct tz_monitor_frame *frame);
 void tz_fastcall_handler(struct tz_monitor_frame *frame);
@@ -70,7 +69,7 @@ void pm_handle_platform_smc(struct tz_monitor_frame *frame);
 void cpu_enable_scu(void);
 void cpu_enable_scu_access(void);
 #endif
-void cpu_gic_setup(void);
+void mon_cpu_gic_setup(void);
 
 status_t set_log_phy_addr(nsaddr_t _ns_cb_struct_addr);
 
diff --git a/platform/tegra/include/platform/tzrammap.h b/platform/tegra/include/platform/tzrammap.h
deleted file mode 100644 (file)
index 4ef87ab..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2012-2013, NVIDIA CORPORATION. All rights reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files
- * (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-#ifndef __PLATFORM_TEGRA_TZRAMMAP_H
-#define __PLATFORM_TEGRA_TZRAMMAP_H
-
-#define CPU_NOT_IN_LP          0
-#define CPU_IN_LP0             1
-#define CPU_IN_LP1             2
-#define CPU_IN_LP2             3
-
-/*
- * These offsets describe the layout of TZRAM as setup for LP1 resume.
- *
- * When resuming from LP1 the code at TZRAM_LP1_RESUME_HANDLER is
- * executed.  While executing this code, DRAM will be in self-refresh
- * and so all required state must be first copied into TZRAM
- * prior to entering LP1 so that it is present for later resume from LP1.
- */
-
-/* stores DRAM address of non-secure resume routine */
-#define TZRAM_NS_RESUME_ADDR           (TEGRA_TZRAM_BASE + 0x1000)
-
-/* stores DRAM address of boot_secondary_cpu routine restored by LP1 resume */
-#define TZRAM_BOOT_SECONDARY_CPU_ADDR  (TEGRA_TZRAM_BASE + 0x1004)
-
-/* indicates if we should avoid switch to CLKM during LP1 resume */
-#define TZRAM_CPU_AVOID_CLKM_SWITCH    (TEGRA_TZRAM_BASE + 0x1008)
-
-/* stores DRAM address of top of monitor stack */
-#define TZRAM_MON_STACK_TOP            (TEGRA_TZRAM_BASE + 0x1010)
-
-/* stores DRAM address of monitor vector base (MVBAR) */
-#define TZRAM_MVBAR            (TEGRA_TZRAM_BASE + 0x1020)
-
-/* stores contents of cpu_context for use in in LP1 resume */
-#define TZRAM_CPU_CONTEXT              (TEGRA_TZRAM_BASE + 0x1030)
-
-/* TZRAM offset of temporary SVC stack used in LP1 resume */
-#define TZRAM_TEMP_SVC_SP              (TEGRA_TZRAM_BASE + 0x1080)
-
-/* TZRAM offset of LP1 resume handler (needs LP1_RESUME_HANDLER_SIZE bytes) */
-#define TZRAM_LP1_RESUME_HANDLER       (TEGRA_TZRAM_BASE + 0x2000)
-
-#define TZRAM_STORE(offset,value)      (*(volatile uint32_t *)(offset) = value)
-
-#endif /*__PLATFORM_TEGRA_TZRAMMAP_H */
index 397b680..e89b97d 100644 (file)
@@ -19,41 +19,23 @@ COMMON_DIR := $(LOCAL_DIR)/common
 PLATFORM_SOC_DIR := $(LOCAL_DIR)/$(PLATFORM_SOC)
 
 MODULE_SRCS += \
-       $(COMMON_DIR)/cpu_early_init.S  \
        $(COMMON_DIR)/fuse.c            \
        $(COMMON_DIR)/tz.c              \
-       $(COMMON_DIR)/cpu.c             \
        $(COMMON_DIR)/platform.c        \
        $(COMMON_DIR)/timer.c           \
        $(COMMON_DIR)/interrupts.c      \
        $(COMMON_DIR)/memory.c          \
        $(COMMON_DIR)/debug.c           \
 
+ifeq ($(MONITOR_BIN),true)
+MODULE_SRCS += \
+       $(COMMON_DIR)/cpu_early_init.S
+endif
+
 MODULE_DEPS += \
        lib/libfdt \
        lib/version
 
-
-# The code within the monitor dir builds to a lib that's either
-# linked into a mon.bin (when MONITOR_BIN is true) or into the
-# secureos when it's not.
-#
-# Routines in the monitor dir are those that restore HW state.
-# In particular, SOC level state is restored there, while CPU
-# state was handled by lib/monitor or boot_secondary.S,
-#
-# In platform/tegra/common, there are still memory and interrupt
-# routines, but they're only called for secureos handling
-# (i.e. aren't part of the monitor or for restoring HW state).
-
-# Add power management into the secureos build if
-# there's not a separate monitor being built.
-ifeq ($(MONITOR_BIN),)
-MODULE_SRCS += \
-       $(COMMON_DIR)/pm.c      \
-       $(COMMON_DIR)/boot_secondary.S
-endif
-
 include $(PLATFORM_SOC_DIR)/rules.mk
 
 # Disable all prints for release builds, only CRITICAL prints will be
index 7f0f9c3..c49b047 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved
+ * Copyright (c) 2013-2015, NVIDIA CORPORATION. All rights reserved
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
  */
 
 #include <platform/platform_p.h>
-#include <platform/platform_cpu.h>
+
+#if !defined(WITH_MONITOR_BIN)
+extern void psci_init(uint32_t cpu);
+#endif
 
 void platform_init_cpu(void)
 {
-       tz_init();
-       cpu_gic_setup();
+#if !defined(WITH_MONITOR_BIN)
+       /* initialize PSCI */
+       psci_init(0);
+#endif
 }
index 75294c0..878178a 100644 (file)
@@ -93,6 +93,5 @@ void platform_init_cpu(void)
         cpu_enable_scu();
         cpu_enable_scu_access();
 
-       tz_init();
        cpu_gic_setup();
 }