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