aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firmware/psci/psci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firmware/psci/psci.c')
-rw-r--r--drivers/firmware/psci/psci.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
index e480e0af632c..eabd01383cd6 100644
--- a/drivers/firmware/psci/psci.c
+++ b/drivers/firmware/psci/psci.c
@@ -95,6 +95,11 @@ static inline bool psci_has_ext_power_state(void)
95 PSCI_1_0_FEATURES_CPU_SUSPEND_PF_MASK; 95 PSCI_1_0_FEATURES_CPU_SUSPEND_PF_MASK;
96} 96}
97 97
98static inline bool psci_has_osi_support(void)
99{
100 return psci_cpu_suspend_feature & PSCI_1_0_OS_INITIATED;
101}
102
98static inline bool psci_power_state_loses_context(u32 state) 103static inline bool psci_power_state_loses_context(u32 state)
99{ 104{
100 const u32 mask = psci_has_ext_power_state() ? 105 const u32 mask = psci_has_ext_power_state() ?
@@ -659,10 +664,24 @@ static int __init psci_0_1_init(struct device_node *np)
659 return 0; 664 return 0;
660} 665}
661 666
667static int __init psci_1_0_init(struct device_node *np)
668{
669 int err;
670
671 err = psci_0_2_init(np);
672 if (err)
673 return err;
674
675 if (psci_has_osi_support())
676 pr_info("OSI mode supported.\n");
677
678 return 0;
679}
680
662static const struct of_device_id psci_of_match[] __initconst = { 681static const struct of_device_id psci_of_match[] __initconst = {
663 { .compatible = "arm,psci", .data = psci_0_1_init}, 682 { .compatible = "arm,psci", .data = psci_0_1_init},
664 { .compatible = "arm,psci-0.2", .data = psci_0_2_init}, 683 { .compatible = "arm,psci-0.2", .data = psci_0_2_init},
665 { .compatible = "arm,psci-1.0", .data = psci_0_2_init}, 684 { .compatible = "arm,psci-1.0", .data = psci_1_0_init},
666 {}, 685 {},
667}; 686};
668 687