|
@@ -23,8 +23,6 @@
|
|
|
|
|
|
#include <asm/compiler.h>
|
|
|
#include <asm/errno.h>
|
|
|
-#include <asm/opcodes-sec.h>
|
|
|
-#include <asm/opcodes-virt.h>
|
|
|
#include <asm/psci.h>
|
|
|
#include <asm/system_misc.h>
|
|
|
|
|
@@ -33,6 +31,9 @@ struct psci_operations psci_ops;
|
|
|
static int (*invoke_psci_fn)(u32, u32, u32, u32);
|
|
|
typedef int (*psci_initcall_t)(const struct device_node *);
|
|
|
|
|
|
+asmlinkage int __invoke_psci_fn_hvc(u32, u32, u32, u32);
|
|
|
+asmlinkage int __invoke_psci_fn_smc(u32, u32, u32, u32);
|
|
|
+
|
|
|
enum psci_function {
|
|
|
PSCI_FN_CPU_SUSPEND,
|
|
|
PSCI_FN_CPU_ON,
|
|
@@ -71,40 +72,6 @@ static u32 psci_power_state_pack(struct psci_power_state state)
|
|
|
& PSCI_0_2_POWER_STATE_AFFL_MASK);
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * The following two functions are invoked via the invoke_psci_fn pointer
|
|
|
- * and will not be inlined, allowing us to piggyback on the AAPCS.
|
|
|
- */
|
|
|
-static noinline int __invoke_psci_fn_hvc(u32 function_id, u32 arg0, u32 arg1,
|
|
|
- u32 arg2)
|
|
|
-{
|
|
|
- asm volatile(
|
|
|
- __asmeq("%0", "r0")
|
|
|
- __asmeq("%1", "r1")
|
|
|
- __asmeq("%2", "r2")
|
|
|
- __asmeq("%3", "r3")
|
|
|
- __HVC(0)
|
|
|
- : "+r" (function_id)
|
|
|
- : "r" (arg0), "r" (arg1), "r" (arg2));
|
|
|
-
|
|
|
- return function_id;
|
|
|
-}
|
|
|
-
|
|
|
-static noinline int __invoke_psci_fn_smc(u32 function_id, u32 arg0, u32 arg1,
|
|
|
- u32 arg2)
|
|
|
-{
|
|
|
- asm volatile(
|
|
|
- __asmeq("%0", "r0")
|
|
|
- __asmeq("%1", "r1")
|
|
|
- __asmeq("%2", "r2")
|
|
|
- __asmeq("%3", "r3")
|
|
|
- __SMC(0)
|
|
|
- : "+r" (function_id)
|
|
|
- : "r" (arg0), "r" (arg1), "r" (arg2));
|
|
|
-
|
|
|
- return function_id;
|
|
|
-}
|
|
|
-
|
|
|
static int psci_get_version(void)
|
|
|
{
|
|
|
int err;
|