xref: /aosp_15_r20/external/arm-trusted-firmware/include/drivers/arm/ethosn.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2021, Arm Limited. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef ETHOSN_H
8*54fd6939SJiyong Park #define ETHOSN_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <lib/smccc.h>
11*54fd6939SJiyong Park 
12*54fd6939SJiyong Park /* Function numbers */
13*54fd6939SJiyong Park #define ETHOSN_FNUM_VERSION		U(0x50)
14*54fd6939SJiyong Park #define ETHOSN_FNUM_IS_SEC		U(0x51)
15*54fd6939SJiyong Park #define ETHOSN_FNUM_HARD_RESET		U(0x52)
16*54fd6939SJiyong Park #define ETHOSN_FNUM_SOFT_RESET		U(0x53)
17*54fd6939SJiyong Park /* 0x54-0x5F reserved for future use */
18*54fd6939SJiyong Park 
19*54fd6939SJiyong Park /* SMC64 function IDs */
20*54fd6939SJiyong Park #define ETHOSN_FID_64(func_num)		U(0xC2000000 | func_num)
21*54fd6939SJiyong Park #define ETHOSN_FID_VERSION_64		ETHOSN_FID_64(ETHOSN_FNUM_VERSION)
22*54fd6939SJiyong Park #define ETHOSN_FID_IS_SEC_64		ETHOSN_FID_64(ETHOSN_FNUM_IS_SEC)
23*54fd6939SJiyong Park #define ETHOSN_FID_HARD_RESET_64	ETHOSN_FID_64(ETHOSN_FNUM_HARD_RESET)
24*54fd6939SJiyong Park #define ETHOSN_FID_SOFT_RESET_64	ETHOSN_FID_64(ETHOSN_FNUM_SOFT_RESET)
25*54fd6939SJiyong Park 
26*54fd6939SJiyong Park /* SMC32 function IDs */
27*54fd6939SJiyong Park #define ETHOSN_FID_32(func_num)		U(0x82000000 | func_num)
28*54fd6939SJiyong Park #define ETHOSN_FID_VERSION_32		ETHOSN_FID_32(ETHOSN_FNUM_VERSION)
29*54fd6939SJiyong Park #define ETHOSN_FID_IS_SEC_32		ETHOSN_FID_32(ETHOSN_FNUM_IS_SEC)
30*54fd6939SJiyong Park #define ETHOSN_FID_HARD_RESET_32	ETHOSN_FID_32(ETHOSN_FNUM_HARD_RESET)
31*54fd6939SJiyong Park #define ETHOSN_FID_SOFT_RESET_32	ETHOSN_FID_32(ETHOSN_FNUM_SOFT_RESET)
32*54fd6939SJiyong Park 
33*54fd6939SJiyong Park #define ETHOSN_NUM_SMC_CALLS	8
34*54fd6939SJiyong Park 
35*54fd6939SJiyong Park /* Macro to identify function calls */
36*54fd6939SJiyong Park #define ETHOSN_FID_MASK		U(0xFFF0)
37*54fd6939SJiyong Park #define ETHOSN_FID_VALUE	U(0x50)
38*54fd6939SJiyong Park #define is_ethosn_fid(_fid) (((_fid) & ETHOSN_FID_MASK) == ETHOSN_FID_VALUE)
39*54fd6939SJiyong Park 
40*54fd6939SJiyong Park /* Service version  */
41*54fd6939SJiyong Park #define ETHOSN_VERSION_MAJOR U(1)
42*54fd6939SJiyong Park #define ETHOSN_VERSION_MINOR U(0)
43*54fd6939SJiyong Park 
44*54fd6939SJiyong Park /* Return codes for function calls */
45*54fd6939SJiyong Park #define ETHOSN_SUCCESS			 0
46*54fd6939SJiyong Park #define ETHOSN_NOT_SUPPORTED		-1
47*54fd6939SJiyong Park /* -2 Reserved for NOT_REQUIRED */
48*54fd6939SJiyong Park /* -3 Reserved for INVALID_PARAMETER */
49*54fd6939SJiyong Park #define ETHOSN_FAILURE			-4
50*54fd6939SJiyong Park #define ETHOSN_UNKNOWN_CORE_ADDRESS	-5
51*54fd6939SJiyong Park 
52*54fd6939SJiyong Park uintptr_t ethosn_smc_handler(uint32_t smc_fid,
53*54fd6939SJiyong Park 			     u_register_t core_addr,
54*54fd6939SJiyong Park 			     u_register_t x2,
55*54fd6939SJiyong Park 			     u_register_t x3,
56*54fd6939SJiyong Park 			     u_register_t x4,
57*54fd6939SJiyong Park 			     void *cookie,
58*54fd6939SJiyong Park 			     void *handle,
59*54fd6939SJiyong Park 			     u_register_t flags);
60*54fd6939SJiyong Park 
61*54fd6939SJiyong Park #endif  /* ETHOSN_H */
62