xref: /arm-trusted-firmware/plat/nvidia/tegra/include/tegra_private.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  * Copyright (c) 2020-2023, NVIDIA Corporation. All rights reserved.
4*91f16700Schasinglulu  *
5*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu #ifndef TEGRA_PRIVATE_H
9*91f16700Schasinglulu #define TEGRA_PRIVATE_H
10*91f16700Schasinglulu 
11*91f16700Schasinglulu #include <platform_def.h>
12*91f16700Schasinglulu #include <stdbool.h>
13*91f16700Schasinglulu 
14*91f16700Schasinglulu #include <arch.h>
15*91f16700Schasinglulu #include <arch_helpers.h>
16*91f16700Schasinglulu #include <drivers/ti/uart/uart_16550.h>
17*91f16700Schasinglulu #include <lib/psci/psci.h>
18*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables_v2.h>
19*91f16700Schasinglulu 
20*91f16700Schasinglulu #include <tegra_gic.h>
21*91f16700Schasinglulu 
22*91f16700Schasinglulu /*******************************************************************************
23*91f16700Schasinglulu  * Implementation defined ACTLR_EL1 bit definitions
24*91f16700Schasinglulu  ******************************************************************************/
25*91f16700Schasinglulu #define ACTLR_EL1_PMSTATE_MASK		(ULL(0xF) << 0)
26*91f16700Schasinglulu 
27*91f16700Schasinglulu /*******************************************************************************
28*91f16700Schasinglulu  * Implementation defined ACTLR_EL2 bit definitions
29*91f16700Schasinglulu  ******************************************************************************/
30*91f16700Schasinglulu #define ACTLR_EL2_PMSTATE_MASK		(ULL(0xF) << 0)
31*91f16700Schasinglulu 
32*91f16700Schasinglulu /*******************************************************************************
33*91f16700Schasinglulu  * Struct for parameters received from BL2
34*91f16700Schasinglulu  ******************************************************************************/
35*91f16700Schasinglulu typedef struct plat_params_from_bl2 {
36*91f16700Schasinglulu 	/* TZ memory size */
37*91f16700Schasinglulu 	uint64_t tzdram_size;
38*91f16700Schasinglulu 	/* TZ memory base */
39*91f16700Schasinglulu 	uint64_t tzdram_base;
40*91f16700Schasinglulu 	/* UART port ID */
41*91f16700Schasinglulu 	int32_t uart_id;
42*91f16700Schasinglulu 	/* L2 ECC parity protection disable flag */
43*91f16700Schasinglulu 	int32_t l2_ecc_parity_prot_dis;
44*91f16700Schasinglulu 	/* SHMEM base address for storing the boot logs */
45*91f16700Schasinglulu 	uint64_t boot_profiler_shmem_base;
46*91f16700Schasinglulu 	/* System Suspend Entry Firmware size */
47*91f16700Schasinglulu 	uint64_t sc7entry_fw_size;
48*91f16700Schasinglulu 	/* System Suspend Entry Firmware base address */
49*91f16700Schasinglulu 	uint64_t sc7entry_fw_base;
50*91f16700Schasinglulu 	/* Enable dual execution */
51*91f16700Schasinglulu 	uint8_t enable_ccplex_lock_step;
52*91f16700Schasinglulu } plat_params_from_bl2_t;
53*91f16700Schasinglulu 
54*91f16700Schasinglulu /*******************************************************************************
55*91f16700Schasinglulu  * Helper function to access l2ctlr_el1 register on Cortex-A57 CPUs
56*91f16700Schasinglulu  ******************************************************************************/
57*91f16700Schasinglulu DEFINE_RENAME_SYSREG_RW_FUNCS(l2ctlr_el1, CORTEX_A57_L2CTLR_EL1)
58*91f16700Schasinglulu 
59*91f16700Schasinglulu /*******************************************************************************
60*91f16700Schasinglulu  * Struct describing parameters passed to bl31
61*91f16700Schasinglulu  ******************************************************************************/
62*91f16700Schasinglulu struct tegra_bl31_params {
63*91f16700Schasinglulu        param_header_t h;
64*91f16700Schasinglulu        image_info_t *bl31_image_info;
65*91f16700Schasinglulu        entry_point_info_t *bl32_ep_info;
66*91f16700Schasinglulu        image_info_t *bl32_image_info;
67*91f16700Schasinglulu        entry_point_info_t *bl33_ep_info;
68*91f16700Schasinglulu        image_info_t *bl33_image_info;
69*91f16700Schasinglulu };
70*91f16700Schasinglulu 
71*91f16700Schasinglulu /*******************************************************************************
72*91f16700Schasinglulu * To suppress Coverity MISRA C-2012 Rule 2.2 violations
73*91f16700Schasinglulu *******************************************************************************/
74*91f16700Schasinglulu #define UNUSED_FUNC_NOP()	asm("nop")
75*91f16700Schasinglulu 
76*91f16700Schasinglulu /* Declarations for plat_psci_handlers.c */
77*91f16700Schasinglulu int32_t tegra_soc_validate_power_state(uint32_t power_state,
78*91f16700Schasinglulu 		psci_power_state_t *req_state);
79*91f16700Schasinglulu 
80*91f16700Schasinglulu /* Declarations for plat_setup.c */
81*91f16700Schasinglulu const mmap_region_t *plat_get_mmio_map(void);
82*91f16700Schasinglulu void plat_enable_console(int32_t id);
83*91f16700Schasinglulu void plat_gic_setup(void);
84*91f16700Schasinglulu struct tegra_bl31_params *plat_get_bl31_params(void);
85*91f16700Schasinglulu plat_params_from_bl2_t *plat_get_bl31_plat_params(void);
86*91f16700Schasinglulu void plat_early_platform_setup(void);
87*91f16700Schasinglulu void plat_late_platform_setup(void);
88*91f16700Schasinglulu void plat_relocate_bl32_image(const image_info_t *bl32_img_info);
89*91f16700Schasinglulu bool plat_supports_system_suspend(void);
90*91f16700Schasinglulu void plat_runtime_setup(void);
91*91f16700Schasinglulu 
92*91f16700Schasinglulu /* Declarations for plat_secondary.c */
93*91f16700Schasinglulu void plat_secondary_setup(void);
94*91f16700Schasinglulu int32_t plat_lock_cpu_vectors(void);
95*91f16700Schasinglulu 
96*91f16700Schasinglulu /* Declarations for tegra_fiq_glue.c */
97*91f16700Schasinglulu void tegra_fiq_handler_setup(void);
98*91f16700Schasinglulu int32_t tegra_fiq_get_intr_context(void);
99*91f16700Schasinglulu void tegra_fiq_set_ns_entrypoint(uint64_t entrypoint);
100*91f16700Schasinglulu 
101*91f16700Schasinglulu /* Declarations for tegra_helpers.S */
102*91f16700Schasinglulu bool plat_is_my_cpu_primary(void);
103*91f16700Schasinglulu 
104*91f16700Schasinglulu /* Declarations for tegra_security.c */
105*91f16700Schasinglulu void tegra_security_setup(void);
106*91f16700Schasinglulu void tegra_security_setup_videomem(uintptr_t base, uint64_t size);
107*91f16700Schasinglulu 
108*91f16700Schasinglulu /* Declarations for tegra_pm.c */
109*91f16700Schasinglulu void tegra_pm_system_suspend_entry(void);
110*91f16700Schasinglulu void tegra_pm_system_suspend_exit(void);
111*91f16700Schasinglulu int32_t tegra_system_suspended(void);
112*91f16700Schasinglulu int32_t tegra_soc_cpu_standby(plat_local_state_t cpu_state);
113*91f16700Schasinglulu int32_t tegra_soc_pwr_domain_suspend(const psci_power_state_t *target_state);
114*91f16700Schasinglulu int32_t tegra_soc_pwr_domain_on(u_register_t mpidr);
115*91f16700Schasinglulu int32_t tegra_soc_pwr_domain_off_early(const psci_power_state_t *target_state);
116*91f16700Schasinglulu int32_t tegra_soc_pwr_domain_off(const psci_power_state_t *target_state);
117*91f16700Schasinglulu int32_t tegra_soc_pwr_domain_on_finish(const psci_power_state_t *target_state);
118*91f16700Schasinglulu int32_t tegra_soc_pwr_domain_power_down_wfi(const psci_power_state_t *target_state);
119*91f16700Schasinglulu int32_t tegra_soc_pwr_domain_suspend_pwrdown_early(const psci_power_state_t *target_state);
120*91f16700Schasinglulu int32_t tegra_soc_prepare_system_reset(void);
121*91f16700Schasinglulu __dead2 void tegra_soc_prepare_system_off(void);
122*91f16700Schasinglulu plat_local_state_t tegra_soc_get_target_pwr_state(uint32_t lvl,
123*91f16700Schasinglulu 					     const plat_local_state_t *states,
124*91f16700Schasinglulu 					     uint32_t ncpu);
125*91f16700Schasinglulu 
126*91f16700Schasinglulu /* Declarations for tegraXXX_pm.c */
127*91f16700Schasinglulu int tegra_prepare_cpu_suspend(unsigned int id, unsigned int afflvl);
128*91f16700Schasinglulu int tegra_prepare_cpu_on_finish(unsigned long mpidr);
129*91f16700Schasinglulu 
130*91f16700Schasinglulu /* Declarations for tegra_bl31_setup.c */
131*91f16700Schasinglulu plat_params_from_bl2_t *bl31_get_plat_params(void);
132*91f16700Schasinglulu int32_t bl31_check_ns_address(uint64_t base, uint64_t size_in_bytes);
133*91f16700Schasinglulu 
134*91f16700Schasinglulu /* Declarations for tegra_delay_timer.c */
135*91f16700Schasinglulu void tegra_delay_timer_init(void);
136*91f16700Schasinglulu 
137*91f16700Schasinglulu void tegra_secure_entrypoint(void);
138*91f16700Schasinglulu 
139*91f16700Schasinglulu /* Declarations for tegra_sip_calls.c */
140*91f16700Schasinglulu uintptr_t tegra_sip_handler(uint32_t smc_fid,
141*91f16700Schasinglulu 			    u_register_t x1,
142*91f16700Schasinglulu 			    u_register_t x2,
143*91f16700Schasinglulu 			    u_register_t x3,
144*91f16700Schasinglulu 			    u_register_t x4,
145*91f16700Schasinglulu 			    void *cookie,
146*91f16700Schasinglulu 			    void *handle,
147*91f16700Schasinglulu 			    u_register_t flags);
148*91f16700Schasinglulu int plat_sip_handler(uint32_t smc_fid,
149*91f16700Schasinglulu 		     uint64_t x1,
150*91f16700Schasinglulu 		     uint64_t x2,
151*91f16700Schasinglulu 		     uint64_t x3,
152*91f16700Schasinglulu 		     uint64_t x4,
153*91f16700Schasinglulu 		     const void *cookie,
154*91f16700Schasinglulu 		     void *handle,
155*91f16700Schasinglulu 		     uint64_t flags);
156*91f16700Schasinglulu 
157*91f16700Schasinglulu #if ENABLE_FEAT_RAS && FFH_SUPPORT
158*91f16700Schasinglulu void tegra194_ras_enable(void);
159*91f16700Schasinglulu void tegra194_ras_corrected_err_clear(uint64_t *cookie);
160*91f16700Schasinglulu #endif
161*91f16700Schasinglulu 
162*91f16700Schasinglulu #endif /* TEGRA_PRIVATE_H */
163