Lines Matching +full:psci +full:- +full:suspend +full:- +full:param
14 #define pr_fmt(fmt) "psci: " fmt
17 #include <linux/arm-smccc.h>
24 #include <linux/psci.h>
27 #include <linux/suspend.h>
29 #include <uapi/linux/psci.h>
35 #include <asm/suspend.h>
38 * While a 64-bit OS can make calls with SMC32 calling conventions, for some
39 * calls it is necessary to use SMC64 to pass or return 64-bit values.
41 * (native-width) function ID.
52 * a Trusted OS even if it claims to be capable of migration -- doing so will
55 static int resident_cpu = -1;
142 return -EOPNOTSUPP; in psci_to_linux_errno()
145 return -EINVAL; in psci_to_linux_errno()
147 return -EPERM; in psci_to_linux_errno()
150 return -EINVAL; in psci_to_linux_errno()
226 WARN(1, "Unexpected PSCI conduit %d\n", conduit); in set_conduit()
240 return -ENXIO; in get_set_conduit_method()
249 return -EINVAL; in get_set_conduit_method()
280 while ((state_node = of_parse_phandle(cpu_node, "cpu-idle-states", in psci_dt_cpu_init_idle()
287 return -ENODEV; in psci_dt_cpu_init_idle()
291 return -ENOMEM; in psci_dt_cpu_init_idle()
296 state_node = of_parse_phandle(cpu_node, "cpu-idle-states", i); in psci_dt_cpu_init_idle()
299 "arm,psci-suspend-param", in psci_dt_cpu_init_idle()
302 pr_warn(" * %pOF missing arm,psci-suspend-param property\n", in psci_dt_cpu_init_idle()
309 pr_debug("psci-power-state %#x index %d\n", state, i); in psci_dt_cpu_init_idle()
311 pr_warn("Invalid PSCI power state %#x\n", state); in psci_dt_cpu_init_idle()
312 ret = -EINVAL; in psci_dt_cpu_init_idle()
317 /* Idle states parsed correctly, initialize per-cpu pointer */ in psci_dt_cpu_init_idle()
336 if (unlikely(!pr || !pr->flags.has_lpi)) in psci_acpi_cpu_init_idle()
337 return -EINVAL; in psci_acpi_cpu_init_idle()
339 count = pr->power.count - 1; in psci_acpi_cpu_init_idle()
341 return -ENODEV; in psci_acpi_cpu_init_idle()
345 return -ENOMEM; in psci_acpi_cpu_init_idle()
350 lpi = &pr->power.lpi_states[i + 1]; in psci_acpi_cpu_init_idle()
352 * Only bits[31:0] represent a PSCI power_state while in psci_acpi_cpu_init_idle()
355 state = lpi->address; in psci_acpi_cpu_init_idle()
357 pr_warn("Invalid PSCI power state %#x\n", state); in psci_acpi_cpu_init_idle()
359 return -EINVAL; in psci_acpi_cpu_init_idle()
363 /* Idle states parsed correctly, initialize per-cpu pointer */ in psci_acpi_cpu_init_idle()
370 return -EINVAL; in psci_acpi_cpu_init_idle()
380 * If the PSCI cpu_suspend function hook has not been initialized in psci_cpu_init_idle()
384 return -EOPNOTSUPP; in psci_cpu_init_idle()
391 return -ENODEV; in psci_cpu_init_idle()
404 return psci_ops.cpu_suspend(state[index - 1], in psci_suspend_finisher()
417 return -EINVAL; in psci_cpu_suspend_enter()
419 if (!psci_power_state_loses_context(state[index - 1])) in psci_cpu_suspend_enter()
420 ret = psci_ops.cpu_suspend(state[index - 1], 0); in psci_cpu_suspend_enter()
430 .suspend = psci_cpu_suspend_enter,
434 CPUIDLE_METHOD_OF_DECLARE(psci, "psci", &psci_cpuidle_ops);
482 int type, cpu = -1; in psci_init_migrate()
510 resident_cpu = cpu >= 0 ? cpu : -1; in psci_init_migrate()
532 * Conveniently, the SMCCC and PSCI versions are encoded the in psci_init_smccc()
542 pr_info("Using standard PSCI v0.2 function IDs\n"); in psci_0_2_set_functions()
568 * Probe function for PSCI firmware versions >= 0.2
579 pr_err("Conflicting PSCI version detected.\n"); in psci_probe()
580 return -EINVAL; in psci_probe()
599 * PSCI init function for PSCI versions >=0.2
601 * Probe based on PSCI PSCI_VERSION function
612 * Starting with v0.2, the PSCI specification introduced a call in psci_0_2_init()
614 * that PSCI function IDs and version specific initialization in psci_0_2_init()
626 * PSCI < v0.2 get PSCI Function IDs via DT.
638 pr_info("Using PSCI v0.1 Function IDs from DT\n"); in psci_0_1_init()
666 { .compatible = "arm,psci", .data = psci_0_1_init},
667 { .compatible = "arm,psci-0.2", .data = psci_0_2_init},
668 { .compatible = "arm,psci-1.0", .data = psci_0_2_init},
681 return -ENODEV; in psci_dt_init()
683 init_fn = (psci_initcall_t)matched_np->data; in psci_dt_init()
689 * We use PSCI 0.2+ when ACPI is deployed on ARM64 and it's
696 return -EOPNOTSUPP; in psci_acpi_init()