xref: /rk3399_ARM-atf/plat/amlogic/common/aml_sip_svc.c (revision e65d3f45d777f086388d13adf2ad8252d60a93a6)
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