mirror of https://github.com/OpenIPC/firmware.git
70 lines
1.8 KiB
Diff
70 lines
1.8 KiB
Diff
--- linux-4.9.37/drivers/firmware/psci.c 2017-07-12 16:42:41.000000000 +0300
|
|
+++ linux-4.9.y/drivers/firmware/psci.c 2021-06-07 13:01:33.000000000 +0300
|
|
@@ -59,7 +59,9 @@
|
|
return cpu == resident_cpu;
|
|
}
|
|
|
|
-struct psci_operations psci_ops;
|
|
+struct psci_operations psci_ops = {
|
|
+ .conduit = PSCI_CONDUIT_NONE,
|
|
+};
|
|
|
|
typedef unsigned long (psci_fn)(unsigned long, unsigned long,
|
|
unsigned long, unsigned long);
|
|
@@ -210,6 +212,22 @@
|
|
0, 0, 0);
|
|
}
|
|
|
|
+static void set_conduit(enum psci_conduit conduit)
|
|
+{
|
|
+ switch (conduit) {
|
|
+ case PSCI_CONDUIT_HVC:
|
|
+ invoke_psci_fn = __invoke_psci_fn_hvc;
|
|
+ break;
|
|
+ case PSCI_CONDUIT_SMC:
|
|
+ invoke_psci_fn = __invoke_psci_fn_smc;
|
|
+ break;
|
|
+ default:
|
|
+ WARN(1, "Unexpected PSCI conduit %d\n", conduit);
|
|
+ }
|
|
+
|
|
+ psci_ops.conduit = conduit;
|
|
+}
|
|
+
|
|
static int get_set_conduit_method(struct device_node *np)
|
|
{
|
|
const char *method;
|
|
@@ -222,9 +240,9 @@
|
|
}
|
|
|
|
if (!strcmp("hvc", method)) {
|
|
- invoke_psci_fn = __invoke_psci_fn_hvc;
|
|
+ set_conduit(PSCI_CONDUIT_HVC);
|
|
} else if (!strcmp("smc", method)) {
|
|
- invoke_psci_fn = __invoke_psci_fn_smc;
|
|
+ set_conduit(PSCI_CONDUIT_SMC);
|
|
} else {
|
|
pr_warn("invalid \"method\" property: %s\n", method);
|
|
return -EINVAL;
|
|
@@ -496,6 +514,8 @@
|
|
static void __init psci_0_2_set_functions(void)
|
|
{
|
|
pr_info("Using standard PSCI v0.2 function IDs\n");
|
|
+ psci_ops.get_version = psci_get_version;
|
|
+
|
|
psci_function_id[PSCI_FN_CPU_SUSPEND] =
|
|
PSCI_FN_NATIVE(0_2, CPU_SUSPEND);
|
|
psci_ops.cpu_suspend = psci_cpu_suspend;
|
|
@@ -652,9 +672,9 @@
|
|
pr_info("probing for conduit method from ACPI.\n");
|
|
|
|
if (acpi_psci_use_hvc())
|
|
- invoke_psci_fn = __invoke_psci_fn_hvc;
|
|
+ set_conduit(PSCI_CONDUIT_HVC);
|
|
else
|
|
- invoke_psci_fn = __invoke_psci_fn_smc;
|
|
+ set_conduit(PSCI_CONDUIT_SMC);
|
|
|
|
return psci_probe();
|
|
}
|