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