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