xref: /aosp_15_r20/external/arm-trusted-firmware/docs/components/arm-sip-service.rst (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong ParkArm SiP Services
2*54fd6939SJiyong Park================
3*54fd6939SJiyong Park
4*54fd6939SJiyong ParkThis document enumerates and describes the Arm SiP (Silicon Provider) services.
5*54fd6939SJiyong Park
6*54fd6939SJiyong ParkSiP services are non-standard, platform-specific services offered by the silicon
7*54fd6939SJiyong Parkimplementer or platform provider. They are accessed via ``SMC`` ("SMC calls")
8*54fd6939SJiyong Parkinstruction executed from Exception Levels below EL3. SMC calls for SiP
9*54fd6939SJiyong Parkservices:
10*54fd6939SJiyong Park
11*54fd6939SJiyong Park-  Follow `SMC Calling Convention`_;
12*54fd6939SJiyong Park-  Use SMC function IDs that fall in the SiP range, which are ``0xc2000000`` -
13*54fd6939SJiyong Park   ``0xc200ffff`` for 64-bit calls, and ``0x82000000`` - ``0x8200ffff`` for 32-bit
14*54fd6939SJiyong Park   calls.
15*54fd6939SJiyong Park
16*54fd6939SJiyong ParkThe Arm SiP implementation offers the following services:
17*54fd6939SJiyong Park
18*54fd6939SJiyong Park-  Performance Measurement Framework (PMF)
19*54fd6939SJiyong Park-  Execution State Switching service
20*54fd6939SJiyong Park-  DebugFS interface
21*54fd6939SJiyong Park
22*54fd6939SJiyong ParkSource definitions for Arm SiP service are located in the ``arm_sip_svc.h`` header
23*54fd6939SJiyong Parkfile.
24*54fd6939SJiyong Park
25*54fd6939SJiyong ParkPerformance Measurement Framework (PMF)
26*54fd6939SJiyong Park---------------------------------------
27*54fd6939SJiyong Park
28*54fd6939SJiyong ParkThe :ref:`Performance Measurement Framework <firmware_design_pmf>`
29*54fd6939SJiyong Parkallows callers to retrieve timestamps captured at various paths in TF-A
30*54fd6939SJiyong Parkexecution.
31*54fd6939SJiyong Park
32*54fd6939SJiyong ParkExecution State Switching service
33*54fd6939SJiyong Park---------------------------------
34*54fd6939SJiyong Park
35*54fd6939SJiyong ParkExecution State Switching service provides a mechanism for a non-secure lower
36*54fd6939SJiyong ParkException Level (either EL2, or NS EL1 if EL2 isn't implemented) to request to
37*54fd6939SJiyong Parkswitch its execution state (a.k.a. Register Width), either from AArch64 to
38*54fd6939SJiyong ParkAArch32, or from AArch32 to AArch64, for the calling CPU. This service is only
39*54fd6939SJiyong Parkavailable when Trusted Firmware-A (TF-A) is built for AArch64 (i.e. when build
40*54fd6939SJiyong Parkoption ``ARCH`` is set to ``aarch64``).
41*54fd6939SJiyong Park
42*54fd6939SJiyong Park``ARM_SIP_SVC_EXE_STATE_SWITCH``
43*54fd6939SJiyong Park~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
44*54fd6939SJiyong Park
45*54fd6939SJiyong Park::
46*54fd6939SJiyong Park
47*54fd6939SJiyong Park    Arguments:
48*54fd6939SJiyong Park        uint32_t Function ID
49*54fd6939SJiyong Park        uint32_t PC hi
50*54fd6939SJiyong Park        uint32_t PC lo
51*54fd6939SJiyong Park        uint32_t Cookie hi
52*54fd6939SJiyong Park        uint32_t Cookie lo
53*54fd6939SJiyong Park
54*54fd6939SJiyong Park    Return:
55*54fd6939SJiyong Park        uint32_t
56*54fd6939SJiyong Park
57*54fd6939SJiyong ParkThe function ID parameter must be ``0x82000020``. It uniquely identifies the
58*54fd6939SJiyong ParkExecution State Switching service being requested.
59*54fd6939SJiyong Park
60*54fd6939SJiyong ParkThe parameters *PC hi* and *PC lo* defines upper and lower words, respectively,
61*54fd6939SJiyong Parkof the entry point (physical address) at which execution should start, after
62*54fd6939SJiyong ParkExecution State has been switched. When calling from AArch64, *PC hi* must be 0.
63*54fd6939SJiyong Park
64*54fd6939SJiyong ParkWhen execution starts at the supplied entry point after Execution State has been
65*54fd6939SJiyong Parkswitched, the parameters *Cookie hi* and *Cookie lo* are passed in CPU registers
66*54fd6939SJiyong Park0 and 1, respectively. When calling from AArch64, *Cookie hi* must be 0.
67*54fd6939SJiyong Park
68*54fd6939SJiyong ParkThis call can only be made on the primary CPU, before any secondaries were
69*54fd6939SJiyong Parkbrought up with ``CPU_ON`` PSCI call. Otherwise, the call will always fail.
70*54fd6939SJiyong Park
71*54fd6939SJiyong ParkThe effect of switching execution state is as if the Exception Level were
72*54fd6939SJiyong Parkentered for the first time, following power on. This means CPU registers that
73*54fd6939SJiyong Parkhave a defined reset value by the Architecture will assume that value. Other
74*54fd6939SJiyong Parkregisters should not be expected to hold their values before the call was made.
75*54fd6939SJiyong ParkCPU endianness, however, is preserved from the previous execution state. Note
76*54fd6939SJiyong Parkthat this switches the execution state of the calling CPU only. This is not a
77*54fd6939SJiyong Parksubstitute for PSCI ``SYSTEM_RESET``.
78*54fd6939SJiyong Park
79*54fd6939SJiyong ParkThe service may return the following error codes:
80*54fd6939SJiyong Park
81*54fd6939SJiyong Park-  ``STATE_SW_E_PARAM``: If any of the parameters were deemed invalid for
82*54fd6939SJiyong Park   a specific request.
83*54fd6939SJiyong Park-  ``STATE_SW_E_DENIED``: If the call is not successful, or when TF-A is
84*54fd6939SJiyong Park   built for AArch32.
85*54fd6939SJiyong Park
86*54fd6939SJiyong ParkIf the call is successful, the caller wouldn't observe the SMC returning.
87*54fd6939SJiyong ParkInstead, execution starts at the supplied entry point, with the CPU registers 0
88*54fd6939SJiyong Parkand 1 populated with the supplied *Cookie hi* and *Cookie lo* values,
89*54fd6939SJiyong Parkrespectively.
90*54fd6939SJiyong Park
91*54fd6939SJiyong ParkDebugFS interface
92*54fd6939SJiyong Park-----------------
93*54fd6939SJiyong Park
94*54fd6939SJiyong ParkThe optional DebugFS interface is accessed through an SMC SiP service. Refer
95*54fd6939SJiyong Parkto the component documentation for details.
96*54fd6939SJiyong Park
97*54fd6939SJiyong ParkString parameters are passed through a shared buffer using a specific union:
98*54fd6939SJiyong Park
99*54fd6939SJiyong Park.. code:: c
100*54fd6939SJiyong Park
101*54fd6939SJiyong Park    union debugfs_parms {
102*54fd6939SJiyong Park        struct {
103*54fd6939SJiyong Park            char fname[MAX_PATH_LEN];
104*54fd6939SJiyong Park        } open;
105*54fd6939SJiyong Park
106*54fd6939SJiyong Park        struct mount {
107*54fd6939SJiyong Park            char srv[MAX_PATH_LEN];
108*54fd6939SJiyong Park            char where[MAX_PATH_LEN];
109*54fd6939SJiyong Park            char spec[MAX_PATH_LEN];
110*54fd6939SJiyong Park        } mount;
111*54fd6939SJiyong Park
112*54fd6939SJiyong Park        struct {
113*54fd6939SJiyong Park            char path[MAX_PATH_LEN];
114*54fd6939SJiyong Park            dir_t dir;
115*54fd6939SJiyong Park        } stat;
116*54fd6939SJiyong Park
117*54fd6939SJiyong Park        struct {
118*54fd6939SJiyong Park            char oldpath[MAX_PATH_LEN];
119*54fd6939SJiyong Park            char newpath[MAX_PATH_LEN];
120*54fd6939SJiyong Park        } bind;
121*54fd6939SJiyong Park    };
122*54fd6939SJiyong Park
123*54fd6939SJiyong ParkFormat of the dir_t structure as such:
124*54fd6939SJiyong Park
125*54fd6939SJiyong Park.. code:: c
126*54fd6939SJiyong Park
127*54fd6939SJiyong Park    typedef struct {
128*54fd6939SJiyong Park        char		name[NAMELEN];
129*54fd6939SJiyong Park        long		length;
130*54fd6939SJiyong Park        unsigned char	mode;
131*54fd6939SJiyong Park        unsigned char	index;
132*54fd6939SJiyong Park        unsigned char	dev;
133*54fd6939SJiyong Park        qid_t		qid;
134*54fd6939SJiyong Park    } dir_t;
135*54fd6939SJiyong Park
136*54fd6939SJiyong Park
137*54fd6939SJiyong Park* Identifiers
138*54fd6939SJiyong Park
139*54fd6939SJiyong Park======================== =============================================
140*54fd6939SJiyong ParkSMC_OK                   0
141*54fd6939SJiyong ParkSMC_UNK                  -1
142*54fd6939SJiyong ParkDEBUGFS_E_INVALID_PARAMS -2
143*54fd6939SJiyong Park======================== =============================================
144*54fd6939SJiyong Park
145*54fd6939SJiyong Park======================== =============================================
146*54fd6939SJiyong ParkMOUNT                    0
147*54fd6939SJiyong ParkCREATE                   1
148*54fd6939SJiyong ParkOPEN                     2
149*54fd6939SJiyong ParkCLOSE                    3
150*54fd6939SJiyong ParkREAD                     4
151*54fd6939SJiyong ParkWRITE                    5
152*54fd6939SJiyong ParkSEEK                     6
153*54fd6939SJiyong ParkBIND                     7
154*54fd6939SJiyong ParkSTAT                     8
155*54fd6939SJiyong ParkINIT                     10
156*54fd6939SJiyong ParkVERSION                  11
157*54fd6939SJiyong Park======================== =============================================
158*54fd6939SJiyong Park
159*54fd6939SJiyong ParkMOUNT
160*54fd6939SJiyong Park~~~~~
161*54fd6939SJiyong Park
162*54fd6939SJiyong ParkDescription
163*54fd6939SJiyong Park^^^^^^^^^^^
164*54fd6939SJiyong ParkThis operation mounts a blob of data pointed to by path stored in `src`, at
165*54fd6939SJiyong Parkfilesystem location pointed to by path stored in `where`, using driver pointed
166*54fd6939SJiyong Parkto by path in `spec`.
167*54fd6939SJiyong Park
168*54fd6939SJiyong ParkParameters
169*54fd6939SJiyong Park^^^^^^^^^^
170*54fd6939SJiyong Park======== ============================================================
171*54fd6939SJiyong Parkuint32_t FunctionID (0x82000030 / 0xC2000030)
172*54fd6939SJiyong Parkuint32_t ``MOUNT``
173*54fd6939SJiyong Park======== ============================================================
174*54fd6939SJiyong Park
175*54fd6939SJiyong ParkReturn values
176*54fd6939SJiyong Park^^^^^^^^^^^^^
177*54fd6939SJiyong Park
178*54fd6939SJiyong Park=============== ==========================================================
179*54fd6939SJiyong Parkint32_t         w0 == SMC_OK on success
180*54fd6939SJiyong Park
181*54fd6939SJiyong Park                w0 == DEBUGFS_E_INVALID_PARAMS if mount operation failed
182*54fd6939SJiyong Park=============== ==========================================================
183*54fd6939SJiyong Park
184*54fd6939SJiyong ParkOPEN
185*54fd6939SJiyong Park~~~~
186*54fd6939SJiyong Park
187*54fd6939SJiyong ParkDescription
188*54fd6939SJiyong Park^^^^^^^^^^^
189*54fd6939SJiyong ParkThis operation opens the file path pointed to by `fname`.
190*54fd6939SJiyong Park
191*54fd6939SJiyong ParkParameters
192*54fd6939SJiyong Park^^^^^^^^^^
193*54fd6939SJiyong Park
194*54fd6939SJiyong Park======== ============================================================
195*54fd6939SJiyong Parkuint32_t FunctionID (0x82000030 / 0xC2000030)
196*54fd6939SJiyong Parkuint32_t ``OPEN``
197*54fd6939SJiyong Parkuint32_t mode
198*54fd6939SJiyong Park======== ============================================================
199*54fd6939SJiyong Park
200*54fd6939SJiyong Parkmode can be one of:
201*54fd6939SJiyong Park
202*54fd6939SJiyong Park.. code:: c
203*54fd6939SJiyong Park
204*54fd6939SJiyong Park    enum mode {
205*54fd6939SJiyong Park        O_READ   = 1 << 0,
206*54fd6939SJiyong Park        O_WRITE  = 1 << 1,
207*54fd6939SJiyong Park        O_RDWR   = 1 << 2,
208*54fd6939SJiyong Park        O_BIND   = 1 << 3,
209*54fd6939SJiyong Park        O_DIR    = 1 << 4,
210*54fd6939SJiyong Park        O_STAT   = 1 << 5
211*54fd6939SJiyong Park    };
212*54fd6939SJiyong Park
213*54fd6939SJiyong ParkReturn values
214*54fd6939SJiyong Park^^^^^^^^^^^^^
215*54fd6939SJiyong Park
216*54fd6939SJiyong Park=============== ==========================================================
217*54fd6939SJiyong Parkint32_t         w0 == SMC_OK on success
218*54fd6939SJiyong Park
219*54fd6939SJiyong Park                w0 == DEBUGFS_E_INVALID_PARAMS if open operation failed
220*54fd6939SJiyong Park
221*54fd6939SJiyong Parkuint32_t        w1: file descriptor id on success.
222*54fd6939SJiyong Park=============== ==========================================================
223*54fd6939SJiyong Park
224*54fd6939SJiyong ParkCLOSE
225*54fd6939SJiyong Park~~~~~
226*54fd6939SJiyong Park
227*54fd6939SJiyong ParkDescription
228*54fd6939SJiyong Park^^^^^^^^^^^
229*54fd6939SJiyong Park
230*54fd6939SJiyong ParkThis operation closes a file described by a file descriptor obtained by a
231*54fd6939SJiyong Parkprevious call to OPEN.
232*54fd6939SJiyong Park
233*54fd6939SJiyong ParkParameters
234*54fd6939SJiyong Park^^^^^^^^^^
235*54fd6939SJiyong Park
236*54fd6939SJiyong Park======== ============================================================
237*54fd6939SJiyong Parkuint32_t FunctionID (0x82000030 / 0xC2000030)
238*54fd6939SJiyong Parkuint32_t ``CLOSE``
239*54fd6939SJiyong Parkuint32_t File descriptor id returned by OPEN
240*54fd6939SJiyong Park======== ============================================================
241*54fd6939SJiyong Park
242*54fd6939SJiyong ParkReturn values
243*54fd6939SJiyong Park^^^^^^^^^^^^^
244*54fd6939SJiyong Park=============== ==========================================================
245*54fd6939SJiyong Parkint32_t         w0 == SMC_OK on success
246*54fd6939SJiyong Park
247*54fd6939SJiyong Park                w0 == DEBUGFS_E_INVALID_PARAMS if close operation failed
248*54fd6939SJiyong Park=============== ==========================================================
249*54fd6939SJiyong Park
250*54fd6939SJiyong ParkREAD
251*54fd6939SJiyong Park~~~~
252*54fd6939SJiyong Park
253*54fd6939SJiyong ParkDescription
254*54fd6939SJiyong Park^^^^^^^^^^^
255*54fd6939SJiyong Park
256*54fd6939SJiyong ParkThis operation reads a number of bytes from a file descriptor obtained by
257*54fd6939SJiyong Parka previous call to OPEN.
258*54fd6939SJiyong Park
259*54fd6939SJiyong ParkParameters
260*54fd6939SJiyong Park^^^^^^^^^^
261*54fd6939SJiyong Park
262*54fd6939SJiyong Park======== ============================================================
263*54fd6939SJiyong Parkuint32_t FunctionID (0x82000030 / 0xC2000030)
264*54fd6939SJiyong Parkuint32_t ``READ``
265*54fd6939SJiyong Parkuint32_t File descriptor id returned by OPEN
266*54fd6939SJiyong Parkuint32_t Number of bytes to read
267*54fd6939SJiyong Park======== ============================================================
268*54fd6939SJiyong Park
269*54fd6939SJiyong ParkReturn values
270*54fd6939SJiyong Park^^^^^^^^^^^^^
271*54fd6939SJiyong Park
272*54fd6939SJiyong ParkOn success, the read data is retrieved from the shared buffer after the
273*54fd6939SJiyong Parkoperation.
274*54fd6939SJiyong Park
275*54fd6939SJiyong Park=============== ==========================================================
276*54fd6939SJiyong Parkint32_t         w0 == SMC_OK on success
277*54fd6939SJiyong Park
278*54fd6939SJiyong Park                w0 == DEBUGFS_E_INVALID_PARAMS if read operation failed
279*54fd6939SJiyong Park
280*54fd6939SJiyong Parkuint32_t        w1: number of bytes read on success.
281*54fd6939SJiyong Park=============== ==========================================================
282*54fd6939SJiyong Park
283*54fd6939SJiyong ParkSEEK
284*54fd6939SJiyong Park~~~~
285*54fd6939SJiyong Park
286*54fd6939SJiyong ParkDescription
287*54fd6939SJiyong Park^^^^^^^^^^^
288*54fd6939SJiyong Park
289*54fd6939SJiyong ParkMove file pointer for file described by given `file descriptor` of given
290*54fd6939SJiyong Park`offset` related to `whence`.
291*54fd6939SJiyong Park
292*54fd6939SJiyong ParkParameters
293*54fd6939SJiyong Park^^^^^^^^^^
294*54fd6939SJiyong Park
295*54fd6939SJiyong Park======== ============================================================
296*54fd6939SJiyong Parkuint32_t FunctionID (0x82000030 / 0xC2000030)
297*54fd6939SJiyong Parkuint32_t ``SEEK``
298*54fd6939SJiyong Parkuint32_t File descriptor id returned by OPEN
299*54fd6939SJiyong Parksint32_t offset in the file relative to whence
300*54fd6939SJiyong Parkuint32_t whence
301*54fd6939SJiyong Park======== ============================================================
302*54fd6939SJiyong Park
303*54fd6939SJiyong Parkwhence can be one of:
304*54fd6939SJiyong Park
305*54fd6939SJiyong Park========= ============================================================
306*54fd6939SJiyong ParkKSEEK_SET 0
307*54fd6939SJiyong ParkKSEEK_CUR 1
308*54fd6939SJiyong ParkKSEEK_END 2
309*54fd6939SJiyong Park========= ============================================================
310*54fd6939SJiyong Park
311*54fd6939SJiyong ParkReturn values
312*54fd6939SJiyong Park^^^^^^^^^^^^^
313*54fd6939SJiyong Park
314*54fd6939SJiyong Park=============== ==========================================================
315*54fd6939SJiyong Parkint32_t         w0 == SMC_OK on success
316*54fd6939SJiyong Park
317*54fd6939SJiyong Park                w0 == DEBUGFS_E_INVALID_PARAMS if seek operation failed
318*54fd6939SJiyong Park=============== ==========================================================
319*54fd6939SJiyong Park
320*54fd6939SJiyong ParkBIND
321*54fd6939SJiyong Park~~~~
322*54fd6939SJiyong Park
323*54fd6939SJiyong ParkDescription
324*54fd6939SJiyong Park^^^^^^^^^^^
325*54fd6939SJiyong Park
326*54fd6939SJiyong ParkCreate a link from `oldpath` to `newpath`.
327*54fd6939SJiyong Park
328*54fd6939SJiyong ParkParameters
329*54fd6939SJiyong Park^^^^^^^^^^
330*54fd6939SJiyong Park
331*54fd6939SJiyong Park======== ============================================================
332*54fd6939SJiyong Parkuint32_t FunctionID (0x82000030 / 0xC2000030)
333*54fd6939SJiyong Parkuint32_t ``BIND``
334*54fd6939SJiyong Park======== ============================================================
335*54fd6939SJiyong Park
336*54fd6939SJiyong ParkReturn values
337*54fd6939SJiyong Park^^^^^^^^^^^^^
338*54fd6939SJiyong Park
339*54fd6939SJiyong Park=============== ==========================================================
340*54fd6939SJiyong Parkint32_t         w0 == SMC_OK on success
341*54fd6939SJiyong Park
342*54fd6939SJiyong Park                w0 == DEBUGFS_E_INVALID_PARAMS if bind operation failed
343*54fd6939SJiyong Park=============== ==========================================================
344*54fd6939SJiyong Park
345*54fd6939SJiyong ParkSTAT
346*54fd6939SJiyong Park~~~~
347*54fd6939SJiyong Park
348*54fd6939SJiyong ParkDescription
349*54fd6939SJiyong Park^^^^^^^^^^^
350*54fd6939SJiyong Park
351*54fd6939SJiyong ParkPerform a stat operation on provided file `name` and returns the directory
352*54fd6939SJiyong Parkentry statistics into `dir`.
353*54fd6939SJiyong Park
354*54fd6939SJiyong ParkParameters
355*54fd6939SJiyong Park^^^^^^^^^^
356*54fd6939SJiyong Park
357*54fd6939SJiyong Park======== ============================================================
358*54fd6939SJiyong Parkuint32_t FunctionID (0x82000030 / 0xC2000030)
359*54fd6939SJiyong Parkuint32_t ``STAT``
360*54fd6939SJiyong Park======== ============================================================
361*54fd6939SJiyong Park
362*54fd6939SJiyong ParkReturn values
363*54fd6939SJiyong Park^^^^^^^^^^^^^
364*54fd6939SJiyong Park
365*54fd6939SJiyong Park=============== ==========================================================
366*54fd6939SJiyong Parkint32_t         w0 == SMC_OK on success
367*54fd6939SJiyong Park
368*54fd6939SJiyong Park                w0 == DEBUGFS_E_INVALID_PARAMS if stat operation failed
369*54fd6939SJiyong Park=============== ==========================================================
370*54fd6939SJiyong Park
371*54fd6939SJiyong ParkINIT
372*54fd6939SJiyong Park~~~~
373*54fd6939SJiyong Park
374*54fd6939SJiyong ParkDescription
375*54fd6939SJiyong Park^^^^^^^^^^^
376*54fd6939SJiyong ParkInitial call to setup the shared exchange buffer. Notice if successful once,
377*54fd6939SJiyong Parksubsequent calls fail after a first initialization. The caller maps the same
378*54fd6939SJiyong Parkpage frame in its virtual space and uses this buffer to exchange string
379*54fd6939SJiyong Parkparameters with filesystem primitives.
380*54fd6939SJiyong Park
381*54fd6939SJiyong ParkParameters
382*54fd6939SJiyong Park^^^^^^^^^^
383*54fd6939SJiyong Park
384*54fd6939SJiyong Park======== ============================================================
385*54fd6939SJiyong Parkuint32_t FunctionID (0x82000030 / 0xC2000030)
386*54fd6939SJiyong Parkuint32_t ``INIT``
387*54fd6939SJiyong Parkuint64_t Physical address of the shared buffer.
388*54fd6939SJiyong Park======== ============================================================
389*54fd6939SJiyong Park
390*54fd6939SJiyong ParkReturn values
391*54fd6939SJiyong Park^^^^^^^^^^^^^
392*54fd6939SJiyong Park
393*54fd6939SJiyong Park=============== ======================================================
394*54fd6939SJiyong Parkint32_t         w0 == SMC_OK on success
395*54fd6939SJiyong Park
396*54fd6939SJiyong Park                w0 == DEBUGFS_E_INVALID_PARAMS if already initialized,
397*54fd6939SJiyong Park                or internal error occurred.
398*54fd6939SJiyong Park=============== ======================================================
399*54fd6939SJiyong Park
400*54fd6939SJiyong ParkVERSION
401*54fd6939SJiyong Park~~~~~~~
402*54fd6939SJiyong Park
403*54fd6939SJiyong ParkDescription
404*54fd6939SJiyong Park^^^^^^^^^^^
405*54fd6939SJiyong ParkReturns the debugfs interface version if implemented in TF-A.
406*54fd6939SJiyong Park
407*54fd6939SJiyong ParkParameters
408*54fd6939SJiyong Park^^^^^^^^^^
409*54fd6939SJiyong Park
410*54fd6939SJiyong Park======== ============================================================
411*54fd6939SJiyong Parkuint32_t FunctionID (0x82000030 / 0xC2000030)
412*54fd6939SJiyong Parkuint32_t ``VERSION``
413*54fd6939SJiyong Park======== ============================================================
414*54fd6939SJiyong Park
415*54fd6939SJiyong ParkReturn values
416*54fd6939SJiyong Park^^^^^^^^^^^^^
417*54fd6939SJiyong Park
418*54fd6939SJiyong Park=============== ======================================================
419*54fd6939SJiyong Parkint32_t         w0 == SMC_OK on success
420*54fd6939SJiyong Park
421*54fd6939SJiyong Park                w0 == SMC_UNK if interface is not implemented
422*54fd6939SJiyong Park
423*54fd6939SJiyong Parkuint32_t        w1: On success, debugfs interface version, 32 bits
424*54fd6939SJiyong Park                value with major version number in upper 16 bits and
425*54fd6939SJiyong Park                minor version in lower 16 bits.
426*54fd6939SJiyong Park=============== ======================================================
427*54fd6939SJiyong Park
428*54fd6939SJiyong Park* CREATE(1) and WRITE (5) command identifiers are unimplemented and
429*54fd6939SJiyong Park  return `SMC_UNK`.
430*54fd6939SJiyong Park
431*54fd6939SJiyong Park--------------
432*54fd6939SJiyong Park
433*54fd6939SJiyong Park*Copyright (c) 2017-2020, Arm Limited and Contributors. All rights reserved.*
434*54fd6939SJiyong Park
435*54fd6939SJiyong Park.. _SMC Calling Convention: https://developer.arm.com/docs/den0028/latest
436