[Docs] Added Information about Secure Monitor
[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 /*
30  * Note: normal world sp/lr aren't kept in the tz_monitor_frame,
31  * but instead are saved/restored from the global nonsecure_state
32  * in monitor_vector.S.
33  */
34 struct tz_monitor_frame {
35         uint64_t r[13];         /* r0-r12 */
36         uint64_t pc;            /* return pc */
37         uint64_t spsr;
38 };
39 typedef struct tz_monitor_frame tz_monitor_frame_t;
40
41 void platform_init_memory(uint32_t sec_base, uint32_t sec_size);
42 void platform_setup_keys(void);
43 void platform_init_cpu(void);
44 void platform_disable_debug_intf(void);
45 void platform_enable_debug_intf(void);
46 void platform_set_intr_ready_state(bool, struct tz_monitor_frame *frame);
47 status_t platform_ss_register_handler(struct tz_monitor_frame *frame);
48 int platform_ss_request_handler(void);
49 void platform_ss_get_config(uint32_t *ss_config);
50 void platform_get_device_id(te_device_id_args_t *args);
51 uint32_t platform_get_time_us(void);
52 void platform_clean_invalidate_cache_range(vaddr_t range, uint32_t size);
53
54 struct tz_monitor_frame *tz_switch_to_ns(uint32_t smc_type, struct tz_monitor_frame *frame);
55 void tz_stdcall_handler(struct tz_monitor_frame *frame);
56 void tz_fastcall_handler(struct tz_monitor_frame *frame);
57 void tz_handle_smc_l2(unsigned int smc);
58 void tz_handle_smc_deep_sleep(void);
59 vaddr_t tz_map_shared_mem(nsaddr_t ns_addr, uint32_t size);
60 void tz_add_dram_range(paddr_t base, paddr_t size);
61
62 uint64_t platform_translate_nsaddr(uint64_t vaddr, uint32_t type);
63 struct tz_monitor_frame *monitor_send_receive(uint32_t smc_type, struct tz_monitor_frame *frame);
64
65 void pm_init(void);
66 void pm_handle_platform_smc(struct tz_monitor_frame *frame);
67
68 #if ARM_WITH_SCU
69 void cpu_enable_scu(void);
70 void cpu_enable_scu_access(void);
71 #endif
72 void mon_cpu_gic_setup(void);
73
74 status_t set_log_phy_addr(nsaddr_t _ns_cb_struct_addr);
75
76 void fuse_load_table(uint32_t fuse_id_max, uint32_t *fuse_table);
77
78 #endif