tegra_private.h 5.14 KB
Newer Older
1
/*
Anthony Zhou's avatar
Anthony Zhou committed
2
 * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
3
 *
dp-arm's avatar
dp-arm committed
4
 * SPDX-License-Identifier: BSD-3-Clause
5
6
 */

7
8
#ifndef TEGRA_PRIVATE_H
#define TEGRA_PRIVATE_H
9

10
11
#include <platform_def.h>

12
#include <arch.h>
13
#include <arch_helpers.h>
14
15
16
#include <lib/psci/psci.h>
#include <lib/xlat_tables/xlat_tables_v2.h>

17
#include <tegra_gic.h>
18

19
20
21
/*******************************************************************************
 * Tegra DRAM memory base address
 ******************************************************************************/
22
23
#define TEGRA_DRAM_BASE		ULL(0x80000000)
#define TEGRA_DRAM_END		ULL(0x27FFFFFFF)
24

25
26
27
/*******************************************************************************
 * Struct for parameters received from BL2
 ******************************************************************************/
28
typedef struct plat_params_from_bl2 {
29
	/* TZ memory size */
30
	uint64_t tzdram_size;
31
32
	/* TZ memory base */
	uint64_t tzdram_base;
33
	/* UART port ID */
34
	int32_t uart_id;
35
	/* L2 ECC parity protection disable flag */
36
	int32_t l2_ecc_parity_prot_dis;
37
38
} plat_params_from_bl2_t;

39
40
41
42
43
/*******************************************************************************
 * Helper function to access l2ctlr_el1 register on Cortex-A57 CPUs
 ******************************************************************************/
DEFINE_RENAME_SYSREG_RW_FUNCS(l2ctlr_el1, CORTEX_A57_L2CTLR_EL1)

44
45
46
47
48
49
50
51
52
53
54
55
/*******************************************************************************
 * Struct describing parameters passed to bl31
 ******************************************************************************/
struct tegra_bl31_params {
       param_header_t h;
       image_info_t *bl31_image_info;
       entry_point_info_t *bl32_ep_info;
       image_info_t *bl32_image_info;
       entry_point_info_t *bl33_ep_info;
       image_info_t *bl33_image_info;
};

56
/* Declarations for plat_psci_handlers.c */
57
int32_t tegra_soc_validate_power_state(uint32_t power_state,
58
		psci_power_state_t *req_state);
59

60
61
/* Declarations for plat_setup.c */
const mmap_region_t *plat_get_mmio_map(void);
62
uint32_t plat_get_console_from_id(int32_t id);
63
void plat_gic_setup(void);
64
struct tegra_bl31_params *plat_get_bl31_params(void);
65
plat_params_from_bl2_t *plat_get_bl31_plat_params(void);
66
67
68

/* Declarations for plat_secondary.c */
void plat_secondary_setup(void);
69
int32_t plat_lock_cpu_vectors(void);
70

71
72
73
74
75
/* Declarations for tegra_fiq_glue.c */
void tegra_fiq_handler_setup(void);
int tegra_fiq_get_intr_context(void);
void tegra_fiq_set_ns_entrypoint(uint64_t entrypoint);

76
77
78
79
80
/* Declarations for tegra_security.c */
void tegra_security_setup(void);
void tegra_security_setup_videomem(uintptr_t base, uint64_t size);

/* Declarations for tegra_pm.c */
81
82
extern uint8_t tegra_fake_system_suspend;

83
84
void tegra_pm_system_suspend_entry(void);
void tegra_pm_system_suspend_exit(void);
Anthony Zhou's avatar
Anthony Zhou committed
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
int32_t tegra_system_suspended(void);
int32_t tegra_soc_pwr_domain_suspend(const psci_power_state_t *target_state);
int32_t tegra_soc_pwr_domain_on(u_register_t mpidr);
int32_t tegra_soc_pwr_domain_off(const psci_power_state_t *target_state);
int32_t tegra_soc_pwr_domain_on_finish(const psci_power_state_t *target_state);
int32_t tegra_soc_pwr_domain_power_down_wfi(const psci_power_state_t *target_state);
int32_t tegra_soc_prepare_system_reset(void);
__dead2 void tegra_soc_prepare_system_off(void);
plat_local_state_t tegra_soc_get_target_pwr_state(uint32_t lvl,
					     const plat_local_state_t *states,
					     uint32_t ncpu);
void tegra_get_sys_suspend_power_state(psci_power_state_t *req_state);
void tegra_cpu_standby(plat_local_state_t cpu_state);
int32_t tegra_pwr_domain_on(u_register_t mpidr);
void tegra_pwr_domain_off(const psci_power_state_t *target_state);
void tegra_pwr_domain_suspend(const psci_power_state_t *target_state);
void __dead2 tegra_pwr_domain_power_down_wfi(const psci_power_state_t *target_state);
void tegra_pwr_domain_on_finish(const psci_power_state_t *target_state);
void tegra_pwr_domain_suspend_finish(const psci_power_state_t *target_state);
__dead2 void tegra_system_off(void);
__dead2 void tegra_system_reset(void);
int32_t tegra_validate_power_state(uint32_t power_state,
				   psci_power_state_t *req_state);
int32_t tegra_validate_ns_entrypoint(uintptr_t entrypoint);
109
110
111
112
113
114
115

/* Declarations for tegraXXX_pm.c */
int tegra_prepare_cpu_suspend(unsigned int id, unsigned int afflvl);
int tegra_prepare_cpu_on_finish(unsigned long mpidr);

/* Declarations for tegra_bl31_setup.c */
plat_params_from_bl2_t *bl31_get_plat_params(void);
116
int32_t bl31_check_ns_address(uint64_t base, uint64_t size_in_bytes);
117
void plat_early_platform_setup(void);
118

119
120
121
/* Declarations for tegra_delay_timer.c */
void tegra_delay_timer_init(void);

122
123
124
void tegra_secure_entrypoint(void);
void tegra186_cpu_reset_handler(void);

125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/* Declarations for tegra_sip_calls.c */
uintptr_t tegra_sip_handler(uint32_t smc_fid,
			    u_register_t x1,
			    u_register_t x2,
			    u_register_t x3,
			    u_register_t x4,
			    void *cookie,
			    void *handle,
			    u_register_t flags);
int plat_sip_handler(uint32_t smc_fid,
		     uint64_t x1,
		     uint64_t x2,
		     uint64_t x3,
		     uint64_t x4,
		     const void *cookie,
		     void *handle,
		     uint64_t flags);

143
#endif /* TEGRA_PRIVATE_H */