1 /* 2 * Renesas SCP/MCP Software 3 * Copyright (c) 2020-2022, Renesas Electronics Corporation. All rights 4 * reserved. 5 * 6 * SPDX-License-Identifier: BSD-3-Clause 7 */ 8 9 #include <fwk_arch.h> 10 #include <fwk_attributes.h> 11 #include <fwk_noreturn.h> 12 #include <fwk_status.h> 13 14 #include <arch_gic.h> 15 #include <arch_helpers.h> 16 17 #include <stdbool.h> 18 19 /* 20 * This variable is used to ensure spurious nested calls won't 21 * enable interrupts. This is been accessed from inline function defined in 22 * arch_helpers.h 23 */ 24 unsigned int critical_section_nest_level; 25 _platform_init(void * params)26FWK_WEAK int _platform_init(void *params) 27 { 28 return FWK_SUCCESS; 29 } 30 31 /* 32 * Error handler for failures that occur during early initialization. 33 */ panic(void)34void panic(void) 35 { 36 while (true) 37 wfi(); 38 } 39 40 static struct fwk_arch_init_driver arch_init_driver = { 41 .interrupt = arm_gic_init, 42 }; 43 arm_main(void)44void arm_main(void) 45 { 46 int status; 47 48 _platform_init(NULL); 49 50 #ifdef BUILD_MODE_DEBUG 51 uint32_t cntv_ctl = 0; 52 __asm__ volatile("msr cntv_ctl_el0, %0" ::"r"(cntv_ctl)); 53 #endif /* BUILD_MODE_DEBUG */ 54 55 status = fwk_arch_init(&arch_init_driver); 56 if (status != FWK_SUCCESS) 57 panic(); 58 } 59