1*91f16700Schasinglulu/* 2*91f16700Schasinglulu * Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu#include <arch.h> 8*91f16700Schasinglulu#include <asm_macros.S> 9*91f16700Schasinglulu#include <drivers/console.h> 10*91f16700Schasinglulu#include <platform_def.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu .weak plat_report_exception 13*91f16700Schasinglulu .weak plat_reset_handler 14*91f16700Schasinglulu .weak plat_disable_acp 15*91f16700Schasinglulu .weak bl1_plat_prepare_exit 16*91f16700Schasinglulu .weak plat_panic_handler 17*91f16700Schasinglulu .weak bl31_plat_enable_mmu 18*91f16700Schasinglulu .weak bl32_plat_enable_mmu 19*91f16700Schasinglulu 20*91f16700Schasinglulu .weak plat_handle_uncontainable_ea 21*91f16700Schasinglulu .weak plat_handle_double_fault 22*91f16700Schasinglulu .weak plat_handle_el3_ea 23*91f16700Schasinglulu 24*91f16700Schasinglulu#define MPIDR_RES_BIT_MASK 0xff000000 25*91f16700Schasinglulu 26*91f16700Schasinglulu /* ----------------------------------------------------- 27*91f16700Schasinglulu * Placeholder function which should be redefined by 28*91f16700Schasinglulu * each platform. 29*91f16700Schasinglulu * ----------------------------------------------------- 30*91f16700Schasinglulu */ 31*91f16700Schasinglulufunc plat_report_exception 32*91f16700Schasinglulu ret 33*91f16700Schasingluluendfunc plat_report_exception 34*91f16700Schasinglulu 35*91f16700Schasinglulu /* ----------------------------------------------------- 36*91f16700Schasinglulu * Placeholder function which should be redefined by 37*91f16700Schasinglulu * each platform. This function should preserve x19 - x29. 38*91f16700Schasinglulu * ----------------------------------------------------- 39*91f16700Schasinglulu */ 40*91f16700Schasinglulufunc plat_reset_handler 41*91f16700Schasinglulu ret 42*91f16700Schasingluluendfunc plat_reset_handler 43*91f16700Schasinglulu 44*91f16700Schasinglulu /* ----------------------------------------------------- 45*91f16700Schasinglulu * Placeholder function which should be redefined by 46*91f16700Schasinglulu * each platform. This function is allowed to use 47*91f16700Schasinglulu * registers x0 - x17. 48*91f16700Schasinglulu * ----------------------------------------------------- 49*91f16700Schasinglulu */ 50*91f16700Schasinglulufunc plat_disable_acp 51*91f16700Schasinglulu ret 52*91f16700Schasingluluendfunc plat_disable_acp 53*91f16700Schasinglulu 54*91f16700Schasinglulu /* ----------------------------------------------------- 55*91f16700Schasinglulu * void bl1_plat_prepare_exit(entry_point_info_t *ep_info); 56*91f16700Schasinglulu * Called before exiting BL1. Default: do nothing 57*91f16700Schasinglulu * ----------------------------------------------------- 58*91f16700Schasinglulu */ 59*91f16700Schasinglulufunc bl1_plat_prepare_exit 60*91f16700Schasinglulu ret 61*91f16700Schasingluluendfunc bl1_plat_prepare_exit 62*91f16700Schasinglulu 63*91f16700Schasinglulu /* ----------------------------------------------------- 64*91f16700Schasinglulu * void plat_panic_handler(void) __dead2; 65*91f16700Schasinglulu * Endless loop by default. 66*91f16700Schasinglulu * ----------------------------------------------------- 67*91f16700Schasinglulu */ 68*91f16700Schasinglulufunc plat_panic_handler 69*91f16700Schasinglulu wfi 70*91f16700Schasinglulu b plat_panic_handler 71*91f16700Schasingluluendfunc plat_panic_handler 72*91f16700Schasinglulu 73*91f16700Schasinglulu /* ----------------------------------------------------- 74*91f16700Schasinglulu * void bl31_plat_enable_mmu(uint32_t flags); 75*91f16700Schasinglulu * 76*91f16700Schasinglulu * Enable MMU in BL31. 77*91f16700Schasinglulu * ----------------------------------------------------- 78*91f16700Schasinglulu */ 79*91f16700Schasinglulufunc bl31_plat_enable_mmu 80*91f16700Schasinglulu b enable_mmu_direct_el3 81*91f16700Schasingluluendfunc bl31_plat_enable_mmu 82*91f16700Schasinglulu 83*91f16700Schasinglulu /* ----------------------------------------------------- 84*91f16700Schasinglulu * void bl32_plat_enable_mmu(uint32_t flags); 85*91f16700Schasinglulu * 86*91f16700Schasinglulu * Enable MMU in BL32. 87*91f16700Schasinglulu * ----------------------------------------------------- 88*91f16700Schasinglulu */ 89*91f16700Schasinglulufunc bl32_plat_enable_mmu 90*91f16700Schasinglulu b enable_mmu_direct_el1 91*91f16700Schasingluluendfunc bl32_plat_enable_mmu 92*91f16700Schasinglulu 93*91f16700Schasinglulu 94*91f16700Schasinglulu /* ----------------------------------------------------- 95*91f16700Schasinglulu * Platform handler for Uncontainable External Abort. 96*91f16700Schasinglulu * 97*91f16700Schasinglulu * x0: EA reason 98*91f16700Schasinglulu * x1: EA syndrome 99*91f16700Schasinglulu * ----------------------------------------------------- 100*91f16700Schasinglulu */ 101*91f16700Schasinglulufunc plat_handle_uncontainable_ea 102*91f16700Schasinglulu b report_unhandled_exception 103*91f16700Schasingluluendfunc plat_handle_uncontainable_ea 104*91f16700Schasinglulu 105*91f16700Schasinglulu /* ----------------------------------------------------- 106*91f16700Schasinglulu * Platform handler for Double Fault. 107*91f16700Schasinglulu * 108*91f16700Schasinglulu * x0: EA reason 109*91f16700Schasinglulu * x1: EA syndrome 110*91f16700Schasinglulu * ----------------------------------------------------- 111*91f16700Schasinglulu */ 112*91f16700Schasinglulufunc plat_handle_double_fault 113*91f16700Schasinglulu b report_unhandled_exception 114*91f16700Schasingluluendfunc plat_handle_double_fault 115*91f16700Schasinglulu 116*91f16700Schasinglulu /* ----------------------------------------------------- 117*91f16700Schasinglulu * Platform handler for EL3 External Abort. 118*91f16700Schasinglulu * ----------------------------------------------------- 119*91f16700Schasinglulu */ 120*91f16700Schasinglulufunc plat_handle_el3_ea 121*91f16700Schasinglulu b report_unhandled_exception 122*91f16700Schasingluluendfunc plat_handle_el3_ea 123