xref: /rk3399_ARM-atf/include/drivers/arm/ethosn.h (revision 84de50c7d8ca416e504aedb228bb4cab6eed806f)
176a21174SMikael Olsson /*
2fa37d308SJoshua Pimm  * Copyright (c) 2021-2023, Arm Limited. All rights reserved.
376a21174SMikael Olsson  *
476a21174SMikael Olsson  * SPDX-License-Identifier: BSD-3-Clause
576a21174SMikael Olsson  */
676a21174SMikael Olsson 
776a21174SMikael Olsson #ifndef ETHOSN_H
876a21174SMikael Olsson #define ETHOSN_H
976a21174SMikael Olsson 
1076a21174SMikael Olsson #include <lib/smccc.h>
1176a21174SMikael Olsson 
1276a21174SMikael Olsson /* Function numbers */
1376a21174SMikael Olsson #define ETHOSN_FNUM_VERSION		U(0x50)
1476a21174SMikael Olsson #define ETHOSN_FNUM_IS_SEC		U(0x51)
1576a21174SMikael Olsson #define ETHOSN_FNUM_HARD_RESET		U(0x52)
1676a21174SMikael Olsson #define ETHOSN_FNUM_SOFT_RESET		U(0x53)
172a2e3e87SMikael Olsson #define ETHOSN_FNUM_IS_SLEEPING		U(0x54)
18e9812ddcSMikael Olsson #define ETHOSN_FNUM_GET_FW_PROP		U(0x55)
196dcf3e77SMikael Olsson #define ETHOSN_FNUM_BOOT_FW		U(0x56)
206dcf3e77SMikael Olsson /* 0x57-0x5F reserved for future use */
21e9812ddcSMikael Olsson 
22e9812ddcSMikael Olsson /* Properties for ETHOSN_FNUM_TZMP_GET_FW_PROP */
23e9812ddcSMikael Olsson #define ETHOSN_FW_PROP_VERSION		U(0xF00)
24e9812ddcSMikael Olsson #define ETHOSN_FW_PROP_MEM_INFO		U(0xF01)
25e9812ddcSMikael Olsson #define ETHOSN_FW_PROP_OFFSETS		U(0xF02)
26e9812ddcSMikael Olsson #define ETHOSN_FW_PROP_VA_MAP		U(0xF03)
2776a21174SMikael Olsson 
2876a21174SMikael Olsson /* SMC64 function IDs */
2976a21174SMikael Olsson #define ETHOSN_FID_64(func_num)		U(0xC2000000 | func_num)
3076a21174SMikael Olsson #define ETHOSN_FID_VERSION_64		ETHOSN_FID_64(ETHOSN_FNUM_VERSION)
3176a21174SMikael Olsson #define ETHOSN_FID_IS_SEC_64		ETHOSN_FID_64(ETHOSN_FNUM_IS_SEC)
3276a21174SMikael Olsson #define ETHOSN_FID_HARD_RESET_64	ETHOSN_FID_64(ETHOSN_FNUM_HARD_RESET)
3376a21174SMikael Olsson #define ETHOSN_FID_SOFT_RESET_64	ETHOSN_FID_64(ETHOSN_FNUM_SOFT_RESET)
3476a21174SMikael Olsson 
3576a21174SMikael Olsson /* SMC32 function IDs */
3676a21174SMikael Olsson #define ETHOSN_FID_32(func_num)		U(0x82000000 | func_num)
3776a21174SMikael Olsson #define ETHOSN_FID_VERSION_32		ETHOSN_FID_32(ETHOSN_FNUM_VERSION)
3876a21174SMikael Olsson #define ETHOSN_FID_IS_SEC_32		ETHOSN_FID_32(ETHOSN_FNUM_IS_SEC)
3976a21174SMikael Olsson #define ETHOSN_FID_HARD_RESET_32	ETHOSN_FID_32(ETHOSN_FNUM_HARD_RESET)
4076a21174SMikael Olsson #define ETHOSN_FID_SOFT_RESET_32	ETHOSN_FID_32(ETHOSN_FNUM_SOFT_RESET)
4176a21174SMikael Olsson 
4276a21174SMikael Olsson #define ETHOSN_NUM_SMC_CALLS	8
4376a21174SMikael Olsson 
4476a21174SMikael Olsson /* Macro to identify function calls */
4576a21174SMikael Olsson #define ETHOSN_FID_MASK		U(0xFFF0)
4676a21174SMikael Olsson #define ETHOSN_FID_VALUE	U(0x50)
4776a21174SMikael Olsson #define is_ethosn_fid(_fid) (((_fid) & ETHOSN_FID_MASK) == ETHOSN_FID_VALUE)
4876a21174SMikael Olsson 
4976a21174SMikael Olsson /* Service version  */
50*4796d2d9SRob Hughes #define ETHOSN_VERSION_MAJOR U(4)
516dcf3e77SMikael Olsson #define ETHOSN_VERSION_MINOR U(0)
5276a21174SMikael Olsson 
5376a21174SMikael Olsson /* Return codes for function calls */
5476a21174SMikael Olsson #define ETHOSN_SUCCESS			 0
5576a21174SMikael Olsson #define ETHOSN_NOT_SUPPORTED		-1
5676a21174SMikael Olsson /* -2 Reserved for NOT_REQUIRED */
57fa37d308SJoshua Pimm #define ETHOSN_INVALID_PARAMETER	-3
5876a21174SMikael Olsson #define ETHOSN_FAILURE			-4
591c65989eSLaurent Carlier #define ETHOSN_UNKNOWN_CORE_ADDRESS	-5
60b139f1cfSMikael Olsson #define ETHOSN_UNKNOWN_ALLOCATOR_IDX	-6
617820777fSMikael Olsson #define ETHOSN_INVALID_CONFIGURATION    -7
626dcf3e77SMikael Olsson #define ETHOSN_INVALID_STATE		-8
6376a21174SMikael Olsson 
64fa37d308SJoshua Pimm /*
65fa37d308SJoshua Pimm  * Argument types for soft and hard resets to indicate whether to reset
66fa37d308SJoshua Pimm  * and reconfigure the NPU or only halt it
67fa37d308SJoshua Pimm  */
68fa37d308SJoshua Pimm #define ETHOSN_RESET_TYPE_FULL		U(0)
69fa37d308SJoshua Pimm #define ETHOSN_RESET_TYPE_HALT		U(1)
70fa37d308SJoshua Pimm 
71a2cdbb1dSMikael Olsson int ethosn_smc_setup(void);
72a2cdbb1dSMikael Olsson 
7376a21174SMikael Olsson uintptr_t ethosn_smc_handler(uint32_t smc_fid,
741c65989eSLaurent Carlier 			     u_register_t core_addr,
75b139f1cfSMikael Olsson 			     u_register_t asset_alloc_idx,
76fa37d308SJoshua Pimm 			     u_register_t reset_type,
7776a21174SMikael Olsson 			     u_register_t x4,
7876a21174SMikael Olsson 			     void *cookie,
7976a21174SMikael Olsson 			     void *handle,
8076a21174SMikael Olsson 			     u_register_t flags);
8176a21174SMikael Olsson 
8276a21174SMikael Olsson #endif  /* ETHOSN_H */
83