First version
[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_REGISTER_HANDLER     = 0x32000008,
46
47         /* Trusted Application Calls */
48         SMC_TA_OPEN_SESSION             = 0x30000001,
49         SMC_TA_CLOSE_SESSION            = 0x30000002,
50         SMC_TA_LAUNCH_OPERATION         = 0x30000003,
51 } smc_req_t;
52
53 /*
54  * Note: normal world sp/lr aren't kept in the tz_monitor_frame,
55  * but instead are saved/restored from the global nonsecure_state
56  * in monitor_vector.S.
57  */
58 struct tz_monitor_frame {
59         uint64_t r[13];         /* r0-r12 */
60         uint64_t pc;            /* return pc */
61         uint64_t spsr;
62 };
63 typedef struct tz_monitor_frame tz_monitor_frame_t;
64
65 void platform_init_interrupts(void);
66 void platform_init_timer(void);
67 void platform_init_memory(uint32_t sec_base, uint32_t sec_size);
68 void platform_restore_memory();
69 status_t platform_program_vpr(uint32_t vpr_base, uint32_t vpr_size);
70 void platform_setup_keys(void);
71 void platform_init_cpu(void);
72 void platform_config_interrupts(void);
73 void platform_disable_debug_intf(void);
74 void platform_enable_debug_intf(void);
75 void platform_handle_tz_smc(uint32_t smc_type, struct tz_monitor_frame *ns_frame);
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_handle_monitor(struct tz_monitor_frame *frame);
87 void tz_handle_smc_l2(unsigned int smc);
88 void tz_handle_smc_deep_sleep(void);
89 vaddr_t tz_map_shared_mem(nsaddr_t ns_addr, uint32_t size);
90 void tz_add_dram_range(paddr_t base, paddr_t size);
91
92 uint64_t platform_translate_nsaddr(uint64_t vaddr, uint32_t type);
93 struct tz_monitor_frame *monitor_send_receive(uint32_t smc_type, struct tz_monitor_frame *frame);
94
95 void pm_init(void);
96 void pm_handle_platform_smc(struct tz_monitor_frame *frame);
97
98 #if ARM_WITH_SCU
99 void cpu_enable_scu(void);
100 void cpu_enable_scu_access(void);
101 #endif
102 void cpu_save_context(void);
103 void cpu_copy_context(void *dstptr);
104 void cpu_gic_setup(void);
105 void flush_dcache_all(void);
106
107 status_t set_log_phy_addr(nsaddr_t _ns_cb_struct_addr);
108
109 #endif