xref: /arm-trusted-firmware/include/plat/marvell/armada/a8k/common/plat_marvell.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (C) 2018 Marvell International Ltd.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier:     BSD-3-Clause
5*91f16700Schasinglulu  * https://spdx.org/licenses
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu #ifndef PLAT_MARVELL_H
9*91f16700Schasinglulu #define PLAT_MARVELL_H
10*91f16700Schasinglulu 
11*91f16700Schasinglulu #include <stdint.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu #include <common/bl_common.h>
14*91f16700Schasinglulu #include <lib/cassert.h>
15*91f16700Schasinglulu #include <lib/el3_runtime/cpu_data.h>
16*91f16700Schasinglulu #include <lib/utils.h>
17*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables_v2.h>
18*91f16700Schasinglulu 
19*91f16700Schasinglulu /*
20*91f16700Schasinglulu  * Extern declarations common to Marvell standard platforms
21*91f16700Schasinglulu  */
22*91f16700Schasinglulu extern const mmap_region_t plat_marvell_mmap[];
23*91f16700Schasinglulu 
24*91f16700Schasinglulu #define MARVELL_CASSERT_MMAP						\
25*91f16700Schasinglulu 	CASSERT((ARRAY_SIZE(plat_marvell_mmap) + MARVELL_BL_REGIONS)	\
26*91f16700Schasinglulu 		<= MAX_MMAP_REGIONS,					\
27*91f16700Schasinglulu 		assert_max_mmap_regions)
28*91f16700Schasinglulu 
29*91f16700Schasinglulu struct marvell_bl31_params {
30*91f16700Schasinglulu        param_header_t h;
31*91f16700Schasinglulu        image_info_t *bl31_image_info;
32*91f16700Schasinglulu        entry_point_info_t *bl32_ep_info;
33*91f16700Schasinglulu        image_info_t *bl32_image_info;
34*91f16700Schasinglulu        entry_point_info_t *bl33_ep_info;
35*91f16700Schasinglulu        image_info_t *bl33_image_info;
36*91f16700Schasinglulu };
37*91f16700Schasinglulu 
38*91f16700Schasinglulu /*
39*91f16700Schasinglulu  * Utility functions common to Marvell standard platforms
40*91f16700Schasinglulu  */
41*91f16700Schasinglulu void marvell_setup_page_tables(uintptr_t total_base,
42*91f16700Schasinglulu 			       size_t total_size,
43*91f16700Schasinglulu 			       uintptr_t code_start,
44*91f16700Schasinglulu 			       uintptr_t code_limit,
45*91f16700Schasinglulu 			       uintptr_t rodata_start,
46*91f16700Schasinglulu 			       uintptr_t rodata_limit
47*91f16700Schasinglulu #if USE_COHERENT_MEM
48*91f16700Schasinglulu 			     , uintptr_t coh_start,
49*91f16700Schasinglulu 			       uintptr_t coh_limit
50*91f16700Schasinglulu #endif
51*91f16700Schasinglulu );
52*91f16700Schasinglulu 
53*91f16700Schasinglulu /* Console utility functions */
54*91f16700Schasinglulu void marvell_console_boot_init(void);
55*91f16700Schasinglulu void marvell_console_boot_end(void);
56*91f16700Schasinglulu void marvell_console_runtime_init(void);
57*91f16700Schasinglulu void marvell_console_runtime_end(void);
58*91f16700Schasinglulu 
59*91f16700Schasinglulu /* IO storage utility functions */
60*91f16700Schasinglulu void marvell_io_setup(void);
61*91f16700Schasinglulu 
62*91f16700Schasinglulu /* Systimer utility function */
63*91f16700Schasinglulu void marvell_configure_sys_timer(void);
64*91f16700Schasinglulu 
65*91f16700Schasinglulu /* Topology utility function */
66*91f16700Schasinglulu int marvell_check_mpidr(u_register_t mpidr);
67*91f16700Schasinglulu 
68*91f16700Schasinglulu /* BLE utility functions */
69*91f16700Schasinglulu int ble_plat_setup(int *skip);
70*91f16700Schasinglulu void plat_marvell_dram_update_topology(void);
71*91f16700Schasinglulu void ble_plat_pcie_ep_setup(void);
72*91f16700Schasinglulu struct pci_hw_cfg *plat_get_pcie_hw_data(void);
73*91f16700Schasinglulu 
74*91f16700Schasinglulu /* BL1 utility functions */
75*91f16700Schasinglulu void marvell_bl1_early_platform_setup(void);
76*91f16700Schasinglulu void marvell_bl1_platform_setup(void);
77*91f16700Schasinglulu void marvell_bl1_plat_arch_setup(void);
78*91f16700Schasinglulu 
79*91f16700Schasinglulu /* BL2 utility functions */
80*91f16700Schasinglulu void marvell_bl2_early_platform_setup(meminfo_t *mem_layout);
81*91f16700Schasinglulu void marvell_bl2_platform_setup(void);
82*91f16700Schasinglulu void marvell_bl2_plat_arch_setup(void);
83*91f16700Schasinglulu uint32_t marvell_get_spsr_for_bl32_entry(void);
84*91f16700Schasinglulu uint32_t marvell_get_spsr_for_bl33_entry(void);
85*91f16700Schasinglulu 
86*91f16700Schasinglulu /* BL31 utility functions */
87*91f16700Schasinglulu void marvell_bl31_early_platform_setup(void *from_bl2,
88*91f16700Schasinglulu 				       uintptr_t soc_fw_config,
89*91f16700Schasinglulu 				       uintptr_t hw_config,
90*91f16700Schasinglulu 				       void *plat_params_from_bl2);
91*91f16700Schasinglulu void marvell_bl31_platform_setup(void);
92*91f16700Schasinglulu void marvell_bl31_plat_runtime_setup(void);
93*91f16700Schasinglulu void marvell_bl31_plat_arch_setup(void);
94*91f16700Schasinglulu 
95*91f16700Schasinglulu /* Power management config to power off the SoC */
96*91f16700Schasinglulu void *plat_marvell_get_pm_cfg(void);
97*91f16700Schasinglulu 
98*91f16700Schasinglulu /* Check if MSS AP CM3 firmware contains PM support */
99*91f16700Schasinglulu _Bool is_pm_fw_running(void);
100*91f16700Schasinglulu 
101*91f16700Schasinglulu /* Bootrom image recovery utility functions */
102*91f16700Schasinglulu void *plat_marvell_get_skip_image_data(void);
103*91f16700Schasinglulu 
104*91f16700Schasinglulu /* FIP TOC validity check */
105*91f16700Schasinglulu int marvell_io_is_toc_valid(void);
106*91f16700Schasinglulu 
107*91f16700Schasinglulu /*
108*91f16700Schasinglulu  * PSCI functionality
109*91f16700Schasinglulu  */
110*91f16700Schasinglulu void marvell_psci_arch_init(int ap_idx);
111*91f16700Schasinglulu void plat_marvell_system_reset(void);
112*91f16700Schasinglulu 
113*91f16700Schasinglulu /*
114*91f16700Schasinglulu  * Miscellaneous platform SMC routines
115*91f16700Schasinglulu  */
116*91f16700Schasinglulu #ifdef MVEBU_PMU_IRQ_WA
117*91f16700Schasinglulu void mvebu_pmu_interrupt_enable(void);
118*91f16700Schasinglulu void mvebu_pmu_interrupt_disable(void);
119*91f16700Schasinglulu #endif
120*91f16700Schasinglulu 
121*91f16700Schasinglulu /*
122*91f16700Schasinglulu  * Optional functions required in Marvell standard platforms
123*91f16700Schasinglulu  */
124*91f16700Schasinglulu void plat_marvell_io_setup(void);
125*91f16700Schasinglulu int plat_marvell_get_alt_image_source(
126*91f16700Schasinglulu 	unsigned int image_id,
127*91f16700Schasinglulu 	uintptr_t *dev_handle,
128*91f16700Schasinglulu 	uintptr_t *image_spec);
129*91f16700Schasinglulu unsigned int plat_marvell_calc_core_pos(u_register_t mpidr);
130*91f16700Schasinglulu 
131*91f16700Schasinglulu const mmap_region_t *plat_marvell_get_mmap(void);
132*91f16700Schasinglulu void marvell_ble_prepare_exit(void);
133*91f16700Schasinglulu void marvell_exit_bootrom(uintptr_t base);
134*91f16700Schasinglulu 
135*91f16700Schasinglulu int plat_marvell_early_cpu_powerdown(void);
136*91f16700Schasinglulu int bl2_plat_handle_scp_bl2(image_info_t *scp_bl2_image_info);
137*91f16700Schasinglulu 
138*91f16700Schasinglulu #endif /* PLAT_MARVELL_H */
139