TLK: Clean up obsolete files
[3rdparty/ote_partner/tlk.git] / lib / monitor / arm64 / monitor_psci.S
1 /*
2  * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files
6  * (the "Software"), to deal in the Software without restriction,
7  * including without limitation the rights to use, copy, modify, merge,
8  * publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23 #include <config.h>
24 #include <asm.h>
25 #include <arch/arm.h>
26 #include <arm64/asm.h>
27 #include <psci.h>
28
29 /* calling convention arg defines */
30 #define ARM_SMC_CC_NARGS        8
31 #define ARM_SMC_CC_NARGS_BYTES  (8 * 8)
32 #define ARM_SMC_CC_NARGS_BITS   (3 + 3)
33
34 .weak platform_psci_init
35 FUNCTION(platform_psci_init)
36         ret
37
38 .weak platform_psci_coldboot_epilog
39 FUNCTION(platform_psci_coldboot_epilog)
40         ret
41
42 .weak platform_psci_cpu_has_reset
43 FUNCTION(platform_psci_cpu_has_reset)
44         mov     x0, #PSCI_RETURN_NOT_SUPPORTED
45         ret
46
47 .weak platform_psci_handler
48 FUNCTION(platform_psci_handler)
49         mov     x0, #PSCI_RETURN_NOT_SUPPORTED
50         ret
51
52 /*
53  * At the moment, the only ARM standard call supported is PSCI
54  */
55 FUNCTION(arm_std_fastcall)
56         cpuidx  x9
57         mov     x10, #ARM_SMC_CC_NARGS_BITS     // args in 2^bits
58         lsl     x10, x9, x10                    // per-cpu offset
59         adr     x9, psci_frame
60         add     x9, x10, x9             // per-cpu psci frame ptr
61
62         /* load psci frame */
63         stp     x0, x1, [x9]
64         stp     x2, x3, [x9, 0x10]
65         stp     x4, x5, [x9, 0x20]
66         str     x6, [x9, 0x30]
67         str     w7, [x9, 0x38]
68
69         str     lr, [sp, #-8]!          // save lr
70         mov     x0, x9
71         cpuidx  x1
72         bl      platform_psci_handler
73
74         ldr     lr, [sp], #8            // restore lr
75         ret
76
77 .ltorg
78 .align 3
79 .global psci_frame
80 psci_frame:
81         .rept   (MONCPUS * ARM_SMC_CC_NARGS)    // x0 -> x7 args
82         .quad   0
83         .endr