1 /* 2 * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <common/debug.h> 8 #include <common/runtime_svc.h> 9 #include <lib/mmio.h> 10 #include <platform_def.h> 11 #include <stdint.h> 12 13 #include "aml_private.h" 14 15 /******************************************************************************* 16 * This function is responsible for handling all SiP calls 17 ******************************************************************************/ 18 static uintptr_t aml_sip_handler(uint32_t smc_fid, 19 u_register_t x1, u_register_t x2, 20 u_register_t x3, u_register_t x4, 21 void *cookie, void *handle, 22 u_register_t flags) 23 { 24 switch (smc_fid) { 25 26 case AML_SM_GET_SHARE_MEM_INPUT_BASE: 27 SMC_RET1(handle, AML_SHARE_MEM_INPUT_BASE); 28 29 case AML_SM_GET_SHARE_MEM_OUTPUT_BASE: 30 SMC_RET1(handle, AML_SHARE_MEM_OUTPUT_BASE); 31 32 case AML_SM_EFUSE_READ: 33 { 34 void *dst = (void *)AML_SHARE_MEM_OUTPUT_BASE; 35 uint64_t ret = aml_efuse_read(dst, (uint32_t)x1, x2); 36 37 SMC_RET1(handle, ret); 38 } 39 case AML_SM_EFUSE_USER_MAX: 40 SMC_RET1(handle, aml_efuse_user_max()); 41 42 case AML_SM_JTAG_ON: 43 aml_scpi_jtag_set_state(AML_JTAG_STATE_ON, x1); 44 SMC_RET1(handle, 0); 45 46 case AML_SM_JTAG_OFF: 47 aml_scpi_jtag_set_state(AML_JTAG_STATE_OFF, x1); 48 SMC_RET1(handle, 0); 49 50 default: 51 ERROR("BL31: Unhandled SIP SMC: 0x%08x\n", smc_fid); 52 break; 53 } 54 55 SMC_RET1(handle, SMC_UNK); 56 } 57 58 DECLARE_RT_SVC( 59 aml_sip_handler, 60 61 OEN_SIP_START, 62 OEN_SIP_END, 63 SMC_TYPE_FAST, 64 NULL, 65 aml_sip_handler 66 ); 67