14353bb20SYann Gautier /* 24353bb20SYann Gautier * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. 34353bb20SYann Gautier * 44353bb20SYann Gautier * SPDX-License-Identifier: BSD-3-Clause 54353bb20SYann Gautier */ 64353bb20SYann Gautier 74353bb20SYann Gautier #include <arch_helpers.h> 84353bb20SYann Gautier #include <assert.h> 94353bb20SYann Gautier #include <bl_common.h> 104353bb20SYann Gautier #include <boot_api.h> 114353bb20SYann Gautier #include <console.h> 124353bb20SYann Gautier #include <debug.h> 134353bb20SYann Gautier #include <delay_timer.h> 144353bb20SYann Gautier #include <desc_image_load.h> 154353bb20SYann Gautier #include <generic_delay_timer.h> 164353bb20SYann Gautier #include <mmio.h> 174353bb20SYann Gautier #include <platform.h> 184353bb20SYann Gautier #include <platform_def.h> 19*7839a050SYann Gautier #include <stm32mp1_clk.h> 20*7839a050SYann Gautier #include <stm32mp1_dt.h> 214353bb20SYann Gautier #include <stm32mp1_private.h> 224353bb20SYann Gautier #include <stm32mp1_pwr.h> 234353bb20SYann Gautier #include <stm32mp1_rcc.h> 244353bb20SYann Gautier #include <string.h> 254353bb20SYann Gautier #include <xlat_tables_v2.h> 264353bb20SYann Gautier 274353bb20SYann Gautier void bl2_el3_early_platform_setup(u_register_t arg0, u_register_t arg1, 284353bb20SYann Gautier u_register_t arg2, u_register_t arg3) 294353bb20SYann Gautier { 304353bb20SYann Gautier stm32mp1_save_boot_ctx_address(arg0); 314353bb20SYann Gautier } 324353bb20SYann Gautier 334353bb20SYann Gautier void bl2_platform_setup(void) 344353bb20SYann Gautier { 354353bb20SYann Gautier INFO("BL2 runs SP_MIN setup\n"); 364353bb20SYann Gautier } 374353bb20SYann Gautier 384353bb20SYann Gautier void bl2_el3_plat_arch_setup(void) 394353bb20SYann Gautier { 404353bb20SYann Gautier /* 414353bb20SYann Gautier * Disable the backup domain write protection. 424353bb20SYann Gautier * The protection is enable at each reset by hardware 434353bb20SYann Gautier * and must be disabled by software. 444353bb20SYann Gautier */ 454353bb20SYann Gautier mmio_setbits_32(PWR_BASE + PWR_CR1, PWR_CR1_DBP); 464353bb20SYann Gautier 474353bb20SYann Gautier while ((mmio_read_32(PWR_BASE + PWR_CR1) & PWR_CR1_DBP) == 0U) { 484353bb20SYann Gautier ; 494353bb20SYann Gautier } 504353bb20SYann Gautier 514353bb20SYann Gautier /* Reset backup domain on cold boot cases */ 524353bb20SYann Gautier if ((mmio_read_32(RCC_BASE + RCC_BDCR) & RCC_BDCR_RTCSRC_MASK) == 0U) { 534353bb20SYann Gautier mmio_setbits_32(RCC_BASE + RCC_BDCR, RCC_BDCR_VSWRST); 544353bb20SYann Gautier 554353bb20SYann Gautier while ((mmio_read_32(RCC_BASE + RCC_BDCR) & RCC_BDCR_VSWRST) == 564353bb20SYann Gautier 0U) { 574353bb20SYann Gautier ; 584353bb20SYann Gautier } 594353bb20SYann Gautier 604353bb20SYann Gautier mmio_clrbits_32(RCC_BASE + RCC_BDCR, RCC_BDCR_VSWRST); 614353bb20SYann Gautier } 624353bb20SYann Gautier 634353bb20SYann Gautier mmap_add_region(BL_CODE_BASE, BL_CODE_BASE, 644353bb20SYann Gautier BL_CODE_END - BL_CODE_BASE, 654353bb20SYann Gautier MT_CODE | MT_SECURE); 664353bb20SYann Gautier 674353bb20SYann Gautier /* Prevent corruption of preloaded BL32 */ 684353bb20SYann Gautier mmap_add_region(BL32_BASE, BL32_BASE, 694353bb20SYann Gautier BL32_LIMIT - BL32_BASE, 704353bb20SYann Gautier MT_MEMORY | MT_RO | MT_SECURE); 714353bb20SYann Gautier 724353bb20SYann Gautier /* Prevent corruption of preloaded Device Tree */ 734353bb20SYann Gautier mmap_add_region(DTB_BASE, DTB_BASE, 744353bb20SYann Gautier DTB_LIMIT - DTB_BASE, 754353bb20SYann Gautier MT_MEMORY | MT_RO | MT_SECURE); 764353bb20SYann Gautier 774353bb20SYann Gautier configure_mmu(); 784353bb20SYann Gautier 794353bb20SYann Gautier generic_delay_timer_init(); 804353bb20SYann Gautier 81*7839a050SYann Gautier if (dt_open_and_check() < 0) { 82*7839a050SYann Gautier panic(); 83*7839a050SYann Gautier } 84*7839a050SYann Gautier 85*7839a050SYann Gautier if (stm32mp1_clk_probe() < 0) { 86*7839a050SYann Gautier panic(); 87*7839a050SYann Gautier } 88*7839a050SYann Gautier 89*7839a050SYann Gautier if (stm32mp1_clk_init() < 0) { 90*7839a050SYann Gautier panic(); 91*7839a050SYann Gautier } 92*7839a050SYann Gautier 934353bb20SYann Gautier stm32mp1_io_setup(); 944353bb20SYann Gautier } 95