summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2018-01-02 16:45:41 -0500
committerCatalin Marinas <catalin.marinas@arm.com>2018-01-08 13:43:38 -0500
commitd68e3ba5303f7e1099f51fdcd155f5263da8569b (patch)
tree26dd6bb5f38353a19ac9f80989f0a30f7dfa7ca6
parent0a0d111d40fd1dc588cc590fab6b55d86ddc71d3 (diff)
drivers/firmware: Expose psci_get_version through psci_ops structure
Entry into recent versions of ARM Trusted Firmware will invalidate the CPU branch predictor state in order to protect against aliasing attacks. This patch exposes the PSCI "VERSION" function via psci_ops, so that it can be invoked outside of the PSCI driver where necessary. Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
-rw-r--r--drivers/firmware/psci.c2
-rw-r--r--include/linux/psci.h1
2 files changed, 3 insertions, 0 deletions
diff --git a/drivers/firmware/psci.c b/drivers/firmware/psci.c
index d687ca3d5049..8b25d31e8401 100644
--- a/drivers/firmware/psci.c
+++ b/drivers/firmware/psci.c
@@ -496,6 +496,8 @@ static void __init psci_init_migrate(void)
496static void __init psci_0_2_set_functions(void) 496static void __init psci_0_2_set_functions(void)
497{ 497{
498 pr_info("Using standard PSCI v0.2 function IDs\n"); 498 pr_info("Using standard PSCI v0.2 function IDs\n");
499 psci_ops.get_version = psci_get_version;
500
499 psci_function_id[PSCI_FN_CPU_SUSPEND] = 501 psci_function_id[PSCI_FN_CPU_SUSPEND] =
500 PSCI_FN_NATIVE(0_2, CPU_SUSPEND); 502 PSCI_FN_NATIVE(0_2, CPU_SUSPEND);
501 psci_ops.cpu_suspend = psci_cpu_suspend; 503 psci_ops.cpu_suspend = psci_cpu_suspend;
diff --git a/include/linux/psci.h b/include/linux/psci.h
index bdea1cb5e1db..6306ab10af18 100644
--- a/include/linux/psci.h
+++ b/include/linux/psci.h
@@ -26,6 +26,7 @@ int psci_cpu_init_idle(unsigned int cpu);
26int psci_cpu_suspend_enter(unsigned long index); 26int psci_cpu_suspend_enter(unsigned long index);
27 27
28struct psci_operations { 28struct psci_operations {
29 u32 (*get_version)(void);
29 int (*cpu_suspend)(u32 state, unsigned long entry_point); 30 int (*cpu_suspend)(u32 state, unsigned long entry_point);
30 int (*cpu_off)(u32 state); 31 int (*cpu_off)(u32 state);
31 int (*cpu_on)(unsigned long cpuid, unsigned long entry_point); 32 int (*cpu_on)(unsigned long cpuid, unsigned long entry_point);