1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright 2018-2020 NXP 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #ifndef SIPSVC_H 9*91f16700Schasinglulu #define SIPSVC_H 10*91f16700Schasinglulu 11*91f16700Schasinglulu #include <stdint.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu #define SMC_FUNC_MASK 0x0000ffff 14*91f16700Schasinglulu #define SMC32_PARAM_MASK 0xffffffff 15*91f16700Schasinglulu 16*91f16700Schasinglulu /* SMC function IDs for SiP Service queries */ 17*91f16700Schasinglulu #define SIP_SVC_CALL_COUNT 0xff00 18*91f16700Schasinglulu #define SIP_SVC_UID 0xff01 19*91f16700Schasinglulu #define SIP_SVC_VERSION 0xff03 20*91f16700Schasinglulu #define SIP_SVC_PRNG 0xff10 21*91f16700Schasinglulu #define SIP_SVC_RNG 0xff11 22*91f16700Schasinglulu #define SIP_SVC_MEM_BANK 0xff12 23*91f16700Schasinglulu #define SIP_SVC_PREFETCH_DIS 0xff13 24*91f16700Schasinglulu #define SIP_SVC_HUK 0xff14 25*91f16700Schasinglulu #define SIP_SVC_ALLOW_L1L2_ERR 0xff15 26*91f16700Schasinglulu #define SIP_SVC_ALLOW_L2_CLR 0xff16 27*91f16700Schasinglulu #define SIP_SVC_2_AARCH32 0xff17 28*91f16700Schasinglulu #define SIP_SVC_PORSR1 0xff18 29*91f16700Schasinglulu 30*91f16700Schasinglulu /* Layerscape SiP Service Calls version numbers */ 31*91f16700Schasinglulu #define LS_SIP_SVC_VERSION_MAJOR 0x0 32*91f16700Schasinglulu #define LS_SIP_SVC_VERSION_MINOR 0x1 33*91f16700Schasinglulu 34*91f16700Schasinglulu /* Number of Layerscape SiP Calls implemented */ 35*91f16700Schasinglulu #define LS_COMMON_SIP_NUM_CALLS 10 36*91f16700Schasinglulu 37*91f16700Schasinglulu /* Parameter Type Constants */ 38*91f16700Schasinglulu #define SIP_PARAM_TYPE_NONE 0x0 39*91f16700Schasinglulu #define SIP_PARAM_TYPE_VALUE_INPUT 0x1 40*91f16700Schasinglulu #define SIP_PARAM_TYPE_VALUE_OUTPUT 0x2 41*91f16700Schasinglulu #define SIP_PARAM_TYPE_VALUE_INOUT 0x3 42*91f16700Schasinglulu #define SIP_PARAM_TYPE_MEMREF_INPUT 0x5 43*91f16700Schasinglulu #define SIP_PARAM_TYPE_MEMREF_OUTPUT 0x6 44*91f16700Schasinglulu #define SIP_PARAM_TYPE_MEMREF_INOUT 0x7 45*91f16700Schasinglulu 46*91f16700Schasinglulu #define SIP_PARAM_TYPE_MASK 0xF 47*91f16700Schasinglulu 48*91f16700Schasinglulu /* 49*91f16700Schasinglulu * The macro SIP_PARAM_TYPES can be used to construct a value that you can 50*91f16700Schasinglulu * compare against an incoming paramTypes to check the type of all the 51*91f16700Schasinglulu * parameters in one comparison. 52*91f16700Schasinglulu */ 53*91f16700Schasinglulu #define SIP_PARAM_TYPES(t0, t1, t2, t3) \ 54*91f16700Schasinglulu ((t0) | ((t1) << 4) | ((t2) << 8) | ((t3) << 12)) 55*91f16700Schasinglulu 56*91f16700Schasinglulu /* 57*91f16700Schasinglulu * The macro SIP_PARAM_TYPE_GET can be used to extract the type of a given 58*91f16700Schasinglulu * parameter from paramTypes if you need more fine-grained type checking. 59*91f16700Schasinglulu */ 60*91f16700Schasinglulu #define SIP_PARAM_TYPE_GET(t, i) ((((uint32_t)(t)) >> ((i) * 4)) & 0xF) 61*91f16700Schasinglulu 62*91f16700Schasinglulu /* 63*91f16700Schasinglulu * The macro SIP_PARAM_TYPE_SET can be used to load the type of a given 64*91f16700Schasinglulu * parameter from paramTypes without specifying all types (SIP_PARAM_TYPES) 65*91f16700Schasinglulu */ 66*91f16700Schasinglulu #define SIP_PARAM_TYPE_SET(t, i) (((uint32_t)(t) & 0xF) << ((i) * 4)) 67*91f16700Schasinglulu 68*91f16700Schasinglulu #define SIP_SVC_RNG_PARAMS (SIP_PARAM_TYPE_VALUE_INPUT, \ 69*91f16700Schasinglulu SIP_PARAM_TYPE_MEMREF_OUTPUT, \ 70*91f16700Schasinglulu SIP_PARAM_TYPE_NONE, \ 71*91f16700Schasinglulu SIP_PARAM_TYPE_NONE) 72*91f16700Schasinglulu 73*91f16700Schasinglulu /* Layerscape SiP Calls error code */ 74*91f16700Schasinglulu enum { 75*91f16700Schasinglulu LS_SIP_SUCCESS = 0, 76*91f16700Schasinglulu LS_SIP_INVALID_PARAM = -1, 77*91f16700Schasinglulu LS_SIP_NOT_SUPPORTED = -2, 78*91f16700Schasinglulu }; 79*91f16700Schasinglulu 80*91f16700Schasinglulu #endif /* SIPSVC_H */ 81