tlk: 6/19 update
[3rdparty/ote_partner/tlk.git] / platform / tegra / include / platform / platform_p.h
1 /*
2  * Copyright (c) 2008 Travis Geiselbrecht
3  * Copyright (c) 2012-2014, NVIDIA CORPORATION. All rights reserved
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining
6  * a copy of this software and associated documentation files
7  * (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef __PLATFORM_P_H
25 #define __PLATFORM_P_H
26
27 #include <lib/ote/ote_protocol.h>
28
29 typedef enum {
30         /* Silicon Partner SMCs */
31         SMC_SIP_CPU_RESET_VECTOR_LEGACY = 0x82000001,
32         SMC_SIP_L2_MANAGEMENT           = 0x82000002,
33         SMC_SIP_PROGRAM_VPR             = 0x82000003,
34         SMC_SIP_DEVICE_SUSPEND          = 0x84000001,
35         SMC_SIP_CPU_RESET_VECTOR        = 0x84000003,
36
37         /* Trusted OS calls */
38         SMC_TOS_NS_FS_PARAMS            = 0x32000001,
39         SMC_TOS_NS_REG_REQPARAM_BUF     = 0x32000002,
40         SMC_TOS_PROGRAM_VPR             = 0x32000003,
41         SMC_TOS_NS_IRQ_PENDING_VECTOR   = 0x32000004,
42         SMC_TOS_NS_RETURN_FROM_IRQ      = 0x32000005,
43         SMC_TOS_FS_OP_DONE              = 0x32000006,
44         SMC_TOS_INIT_LOGGER             = 0x32000007,
45         SMC_TOS_SS_REQ_COMPLETE         = 0x32000009,
46         SMC_TOS_SS_REGISTER_HANDLER     = 0x32000010,
47
48         /* Trusted Application Calls */
49         SMC_TA_OPEN_SESSION             = 0x30000001,
50         SMC_TA_CLOSE_SESSION            = 0x30000002,
51         SMC_TA_LAUNCH_OPERATION         = 0x30000003,
52 } smc_req_t;
53
54 /*
55  * Note: normal world sp/lr aren't kept in the tz_monitor_frame,
56  * but instead are saved/restored from the global nonsecure_state
57  * in monitor_vector.S.
58  */
59 struct tz_monitor_frame {
60         uint64_t r[13];         /* r0-r12 */
61         uint64_t pc;            /* return pc */
62         uint64_t spsr;
63 };
64 typedef struct tz_monitor_frame tz_monitor_frame_t;
65
66 void platform_init_interrupts(void);
67 void platform_init_timer(void);
68 void platform_init_memory(uint32_t sec_base, uint32_t sec_size);
69 void platform_restore_memory();
70 status_t platform_program_vpr(uint32_t vpr_base, uint32_t vpr_size);
71 void platform_setup_keys(void);
72 void platform_init_cpu(void);
73 void platform_config_interrupts(void);
74 void platform_disable_debug_intf(void);
75 void platform_enable_debug_intf(void);
76 void platform_set_intr_ready_state(bool, struct tz_monitor_frame *frame);
77 status_t platform_ss_register_handler(struct tz_monitor_frame *frame);
78 int platform_ss_request_handler(te_storage_request_t *req);
79 void platform_get_device_id(te_device_id_args_t *args);
80 uint32_t platform_get_time_us(void);
81 void platform_clean_invalidate_cache_range(vaddr_t range, uint32_t size);
82 void platform_secure_dram_aperture(void);
83
84 void tz_init(void);
85 struct tz_monitor_frame *tz_switch_to_ns(uint32_t smc_type, struct tz_monitor_frame *frame);
86 void tz_stdcall_handler(struct tz_monitor_frame *frame);
87 void tz_fastcall_handler(struct tz_monitor_frame *frame);
88 void tz_handle_smc_l2(unsigned int smc);
89 void tz_handle_smc_deep_sleep(void);
90 vaddr_t tz_map_shared_mem(nsaddr_t ns_addr, uint32_t size);
91 void tz_add_dram_range(paddr_t base, paddr_t size);
92
93 uint64_t platform_translate_nsaddr(uint64_t vaddr, uint32_t type);
94 struct tz_monitor_frame *monitor_send_receive(uint32_t smc_type, struct tz_monitor_frame *frame);
95
96 void pm_init(void);
97 void pm_handle_platform_smc(struct tz_monitor_frame *frame);
98
99 #if defined(WITH_MONITOR_BIN)
100 void platform_monitor_init_cpu(void);
101 #endif
102
103 #if ARM_WITH_SCU
104 void cpu_enable_scu(void);
105 void cpu_enable_scu_access(void);
106 #endif
107 void cpu_save_context(void);
108 void cpu_copy_context(void *dstptr);
109 void cpu_gic_setup(void);
110
111 status_t set_log_phy_addr(nsaddr_t _ns_cb_struct_addr);
112
113 #endif