1b5c850d4SMarcin Wojtas /* 2b5c850d4SMarcin Wojtas * Copyright (C) 2016 Marvell International Ltd. 3b5c850d4SMarcin Wojtas * 4b5c850d4SMarcin Wojtas * SPDX-License-Identifier: BSD-3-Clause 5b5c850d4SMarcin Wojtas * https://spdx.org/licenses 6b5c850d4SMarcin Wojtas */ 7b5c850d4SMarcin Wojtas 8b5c850d4SMarcin Wojtas #ifndef PLAT_MARVELL_H 9b5c850d4SMarcin Wojtas #define PLAT_MARVELL_H 10b5c850d4SMarcin Wojtas 11b5c850d4SMarcin Wojtas #include <stdint.h> 12b5c850d4SMarcin Wojtas 13b5c850d4SMarcin Wojtas #include <common/bl_common.h> 14b5c850d4SMarcin Wojtas #include <lib/cassert.h> 15b5c850d4SMarcin Wojtas #include <lib/el3_runtime/cpu_data.h> 16b5c850d4SMarcin Wojtas #include <lib/xlat_tables/xlat_tables_v2.h> 17b5c850d4SMarcin Wojtas 18b5c850d4SMarcin Wojtas /* 19b5c850d4SMarcin Wojtas * Extern declarations common to Marvell standard platforms 20b5c850d4SMarcin Wojtas */ 21b5c850d4SMarcin Wojtas extern const mmap_region_t plat_marvell_mmap[]; 22b5c850d4SMarcin Wojtas 23b5c850d4SMarcin Wojtas #define MARVELL_CASSERT_MMAP \ 24b5c850d4SMarcin Wojtas CASSERT((ARRAY_SIZE(plat_marvell_mmap) + MARVELL_BL_REGIONS) \ 25b5c850d4SMarcin Wojtas <= MAX_MMAP_REGIONS, \ 26b5c850d4SMarcin Wojtas assert_max_mmap_regions) 27b5c850d4SMarcin Wojtas 28b5c850d4SMarcin Wojtas /* 29b5c850d4SMarcin Wojtas * Utility functions common to Marvell standard platforms 30b5c850d4SMarcin Wojtas */ 31b5c850d4SMarcin Wojtas void marvell_setup_page_tables(uintptr_t total_base, 32b5c850d4SMarcin Wojtas size_t total_size, 33b5c850d4SMarcin Wojtas uintptr_t code_start, 34b5c850d4SMarcin Wojtas uintptr_t code_limit, 35b5c850d4SMarcin Wojtas uintptr_t rodata_start, 36b5c850d4SMarcin Wojtas uintptr_t rodata_limit 37b5c850d4SMarcin Wojtas #if USE_COHERENT_MEM 38b5c850d4SMarcin Wojtas , uintptr_t coh_start, 39b5c850d4SMarcin Wojtas uintptr_t coh_limit 40b5c850d4SMarcin Wojtas #endif 41b5c850d4SMarcin Wojtas ); 42b5c850d4SMarcin Wojtas 43b5c850d4SMarcin Wojtas /* Console utility functions */ 44b5c850d4SMarcin Wojtas void marvell_console_boot_init(void); 45b5c850d4SMarcin Wojtas void marvell_console_boot_end(void); 46b5c850d4SMarcin Wojtas void marvell_console_runtime_init(void); 47b5c850d4SMarcin Wojtas void marvell_console_runtime_end(void); 48b5c850d4SMarcin Wojtas 49b5c850d4SMarcin Wojtas /* IO storage utility functions */ 50b5c850d4SMarcin Wojtas void marvell_io_setup(void); 51b5c850d4SMarcin Wojtas 52b5c850d4SMarcin Wojtas /* Systimer utility function */ 53b5c850d4SMarcin Wojtas void marvell_configure_sys_timer(void); 54b5c850d4SMarcin Wojtas 55b5c850d4SMarcin Wojtas /* Topology utility function */ 56b5c850d4SMarcin Wojtas int marvell_check_mpidr(u_register_t mpidr); 57b5c850d4SMarcin Wojtas 58b5c850d4SMarcin Wojtas /* BL1 utility functions */ 59b5c850d4SMarcin Wojtas void marvell_bl1_early_platform_setup(void); 60b5c850d4SMarcin Wojtas void marvell_bl1_platform_setup(void); 61b5c850d4SMarcin Wojtas void marvell_bl1_plat_arch_setup(void); 62b5c850d4SMarcin Wojtas 63b5c850d4SMarcin Wojtas /* BL2 utility functions */ 64b5c850d4SMarcin Wojtas void marvell_bl2_early_platform_setup(meminfo_t *mem_layout); 65b5c850d4SMarcin Wojtas void marvell_bl2_platform_setup(void); 66b5c850d4SMarcin Wojtas void marvell_bl2_plat_arch_setup(void); 67b5c850d4SMarcin Wojtas uint32_t marvell_get_spsr_for_bl32_entry(void); 68b5c850d4SMarcin Wojtas uint32_t marvell_get_spsr_for_bl33_entry(void); 69b5c850d4SMarcin Wojtas 70b5c850d4SMarcin Wojtas /* BL31 utility functions */ 71b5c850d4SMarcin Wojtas void marvell_bl31_early_platform_setup(void *from_bl2, 72b5c850d4SMarcin Wojtas uintptr_t soc_fw_config, 73b5c850d4SMarcin Wojtas uintptr_t hw_config, 74b5c850d4SMarcin Wojtas void *plat_params_from_bl2); 75b5c850d4SMarcin Wojtas void marvell_bl31_platform_setup(void); 76b5c850d4SMarcin Wojtas void marvell_bl31_plat_runtime_setup(void); 77b5c850d4SMarcin Wojtas void marvell_bl31_plat_arch_setup(void); 78b5c850d4SMarcin Wojtas 79b5c850d4SMarcin Wojtas /* FIP TOC validity check */ 80b5c850d4SMarcin Wojtas int marvell_io_is_toc_valid(void); 81b5c850d4SMarcin Wojtas 82b5c850d4SMarcin Wojtas /* 83b5c850d4SMarcin Wojtas * PSCI functionality 84b5c850d4SMarcin Wojtas */ 85b5c850d4SMarcin Wojtas void marvell_psci_arch_init(int idx); 86b5c850d4SMarcin Wojtas void plat_marvell_system_reset(void); 87b5c850d4SMarcin Wojtas 88b5c850d4SMarcin Wojtas /* 89b5c850d4SMarcin Wojtas * Optional functions required in Marvell standard platforms 90b5c850d4SMarcin Wojtas */ 91b5c850d4SMarcin Wojtas void plat_marvell_io_setup(void); 92b5c850d4SMarcin Wojtas int plat_marvell_get_alt_image_source( 93b5c850d4SMarcin Wojtas unsigned int image_id, 94b5c850d4SMarcin Wojtas uintptr_t *dev_handle, 95b5c850d4SMarcin Wojtas uintptr_t *image_spec); 96b5c850d4SMarcin Wojtas unsigned int plat_marvell_calc_core_pos(u_register_t mpidr); 97b5c850d4SMarcin Wojtas 98b5c850d4SMarcin Wojtas void plat_marvell_interconnect_init(void); 99b5c850d4SMarcin Wojtas void plat_marvell_interconnect_enter_coherency(void); 100b5c850d4SMarcin Wojtas 101b5c850d4SMarcin Wojtas const mmap_region_t *plat_marvell_get_mmap(void); 102b5c850d4SMarcin Wojtas 103*5a91c439SPali Rohár uint32_t get_ref_clk(void); 104*5a91c439SPali Rohár 105b5c850d4SMarcin Wojtas #endif /* PLAT_MARVELL_H */ 106