Loading drivers/cpuidle/Kconfig.arm +1 −0 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ config ARM_QCOM_LPM_CPUIDLE select CPU_IDLE_MULTIPLE_DRIVERS select MSM_PM select QGKI_LPM_IPI_CHECK if QGKI select QGKI_PSCI_OSI_SUPPORT if QGKI tristate "Qualcomm Technologies, Inc. (QTI) Power Management Drivers" help Platform specific power driver to manage cores and cluster low power Loading drivers/firmware/psci/Kconfig +3 −0 Original line number Diff line number Diff line Loading @@ -12,3 +12,6 @@ config ARM_PSCI_CHECKER The torture tests may interfere with the PSCI checker by turning CPUs on and off through hotplug, so for now torture tests and PSCI checker are mutually exclusive. config QGKI_PSCI_OSI_SUPPORT bool "Set PSCI OSI mode" drivers/firmware/psci/psci.c +29 −0 Original line number Diff line number Diff line Loading @@ -536,6 +536,27 @@ static int __init psci_0_1_init(struct device_node *np) return 0; } #ifdef CONFIG_QGKI_PSCI_OSI_SUPPORT static int psci_set_osi_mode(void) { int err; /* * If SET_SUSPEND_MODE is not supported, * assume HYP/firmware are defaulting to OSI */ err = psci_features(PSCI_1_0_FN_SET_SUSPEND_MODE); if (err == PSCI_RET_NOT_SUPPORTED) { pr_info("Assuming FW runs OSI.\n"); return 0; } err = invoke_psci_fn(PSCI_1_0_FN_SET_SUSPEND_MODE, PSCI_1_0_SUSPEND_MODE_OSI, 0, 0); return psci_to_linux_errno(err); } #endif /* CONFIG_QGKI_PSCI_OSI_SUPPORT */ static int __init psci_1_0_init(struct device_node *np) { int err; Loading @@ -544,8 +565,16 @@ static int __init psci_1_0_init(struct device_node *np) if (err) return err; #ifdef CONFIG_QGKI_PSCI_OSI_SUPPORT if (psci_has_osi_support()) { pr_info("OSI mode supported.\n"); if (!psci_set_osi_mode()) pr_info("Switched to OSI mode.\n"); } #else if (psci_has_osi_support()) pr_info("OSI mode supported.\n"); #endif /* CONFIG_QGKI_PSCI_OSI_SUPPORT */ return 0; } Loading Loading
drivers/cpuidle/Kconfig.arm +1 −0 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ config ARM_QCOM_LPM_CPUIDLE select CPU_IDLE_MULTIPLE_DRIVERS select MSM_PM select QGKI_LPM_IPI_CHECK if QGKI select QGKI_PSCI_OSI_SUPPORT if QGKI tristate "Qualcomm Technologies, Inc. (QTI) Power Management Drivers" help Platform specific power driver to manage cores and cluster low power Loading
drivers/firmware/psci/Kconfig +3 −0 Original line number Diff line number Diff line Loading @@ -12,3 +12,6 @@ config ARM_PSCI_CHECKER The torture tests may interfere with the PSCI checker by turning CPUs on and off through hotplug, so for now torture tests and PSCI checker are mutually exclusive. config QGKI_PSCI_OSI_SUPPORT bool "Set PSCI OSI mode"
drivers/firmware/psci/psci.c +29 −0 Original line number Diff line number Diff line Loading @@ -536,6 +536,27 @@ static int __init psci_0_1_init(struct device_node *np) return 0; } #ifdef CONFIG_QGKI_PSCI_OSI_SUPPORT static int psci_set_osi_mode(void) { int err; /* * If SET_SUSPEND_MODE is not supported, * assume HYP/firmware are defaulting to OSI */ err = psci_features(PSCI_1_0_FN_SET_SUSPEND_MODE); if (err == PSCI_RET_NOT_SUPPORTED) { pr_info("Assuming FW runs OSI.\n"); return 0; } err = invoke_psci_fn(PSCI_1_0_FN_SET_SUSPEND_MODE, PSCI_1_0_SUSPEND_MODE_OSI, 0, 0); return psci_to_linux_errno(err); } #endif /* CONFIG_QGKI_PSCI_OSI_SUPPORT */ static int __init psci_1_0_init(struct device_node *np) { int err; Loading @@ -544,8 +565,16 @@ static int __init psci_1_0_init(struct device_node *np) if (err) return err; #ifdef CONFIG_QGKI_PSCI_OSI_SUPPORT if (psci_has_osi_support()) { pr_info("OSI mode supported.\n"); if (!psci_set_osi_mode()) pr_info("Switched to OSI mode.\n"); } #else if (psci_has_osi_support()) pr_info("OSI mode supported.\n"); #endif /* CONFIG_QGKI_PSCI_OSI_SUPPORT */ return 0; } Loading