Skip to contentSkip to conversation

power: enable CPPC support in power library

PATCH In review Wathsala Vithanage 2 participants 4 messages Oct 10, 2024 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): 20240906210637.630356

#1 lore raw

PATCH v3 1/2 power: enable CPPC support in power library

Power library already supports Linux CPPC driver. Enable its use and fix the name of the CPPC driver name.

---
 lib/power/power_cppc_cpufreq.c |  2 +-
 lib/power/rte_power_pmd_mgmt.c | 11 ++++++-----
 2 files changed, 7 insertions(+), 6 deletions(-)
lib/power/power_cppc_cpufreq.c +1 -1
index 32aaacb948..e68b39b424 100644
@@ -36,7 +36,7 @@
 #define POWER_SYSFILE_SYS_MAX \
 		"/sys/devices/system/cpu/cpu%u/cpufreq/cpuinfo_max_freq"
 
-#define POWER_CPPC_DRIVER "cppc-cpufreq"
+#define POWER_CPPC_DRIVER "cppc_cpufreq"
 #define BUS_FREQ     100000
 
 enum power_state {
lib/power/rte_power_pmd_mgmt.c +6 -5
index b1c18a5f56..830a6c7a97 100644
@@ -419,11 +419,12 @@ check_scale(unsigned int lcore)
 {
 	enum power_management_env env;
 
-	/* only PSTATE and ACPI modes are supported */
+	/* only PSTATE, AMD-PSTATE, ACPI and CPPC modes are supported */
 	if (!rte_power_check_env_supported(PM_ENV_ACPI_CPUFREQ) &&
 			!rte_power_check_env_supported(PM_ENV_PSTATE_CPUFREQ) &&
-			!rte_power_check_env_supported(PM_ENV_AMD_PSTATE_CPUFREQ)) {
-		POWER_LOG(DEBUG, "Neither ACPI nor PSTATE modes are supported");
+			!rte_power_check_env_supported(PM_ENV_AMD_PSTATE_CPUFREQ) &&
+			!rte_power_check_env_supported(PM_ENV_CPPC_CPUFREQ)) {
+		POWER_LOG(DEBUG, "Only ACPI, PSTATE, AMD-PSTATE, or CPPC modes are supported");
 		return -ENOTSUP;
 	}
 	/* ensure we could initialize the power library */
@@ -433,8 +434,8 @@ check_scale(unsigned int lcore)
 	/* ensure we initialized the correct env */
 	env = rte_power_get_env();
 	if (env != PM_ENV_ACPI_CPUFREQ && env != PM_ENV_PSTATE_CPUFREQ &&
-			env != PM_ENV_AMD_PSTATE_CPUFREQ) {
-		POWER_LOG(DEBUG, "Neither ACPI nor PSTATE modes were initialized");
+			env != PM_ENV_AMD_PSTATE_CPUFREQ && env != PM_ENV_CPPC_CPUFREQ) {
+		POWER_LOG(DEBUG, "Unable to initialize ACPI, PSTATE, AMD-PSTATE, or CPPC modes");
 		return -ENOTSUP;
 	}
 
Signature · 1 line
2.34.1
#2 lore raw

PATCH v3 2/2 power: detect supported driver

Check if the frequency scaling driver is supported before attempting to initialize.

---
 lib/power/power_acpi_cpufreq.c       | 6 ++++++
 lib/power/power_amd_pstate_cpufreq.c | 6 ++++++
 lib/power/power_cppc_cpufreq.c       | 6 ++++++
 lib/power/power_pstate_cpufreq.c     | 6 ++++++
 4 files changed, 24 insertions(+)
lib/power/power_acpi_cpufreq.c +6 -0
index 81996e1c13..abad53bef1 100644
@@ -236,6 +236,12 @@ power_acpi_cpufreq_init(unsigned int lcore_id)
 	struct acpi_power_info *pi;
 	uint32_t exp_state;
 
+	if (!power_acpi_cpufreq_check_supported()) {
+		POWER_LOG(ERR, "%s driver is not supported",
+				POWER_ACPI_DRIVER);
+		return -1;
+	}
+
 	if (lcore_id >= RTE_MAX_LCORE) {
 		POWER_LOG(ERR, "Lcore id %u can not exceeds %u",
 				lcore_id, RTE_MAX_LCORE - 1U);
lib/power/power_amd_pstate_cpufreq.c +6 -0
index 090a0d96cb..4809d45a22 100644
@@ -354,6 +354,12 @@ power_amd_pstate_cpufreq_init(unsigned int lcore_id)
 	struct amd_pstate_power_info *pi;
 	uint32_t exp_state;
 
+	if (!power_amd_pstate_cpufreq_check_supported()) {
+		POWER_LOG(ERR, "%s driver is not supported",
+				POWER_AMD_PSTATE_DRIVER);
+		return -1;
+	}
+
 	if (lcore_id >= RTE_MAX_LCORE) {
 		POWER_LOG(ERR, "Lcore id %u can not exceeds %u",
 				lcore_id, RTE_MAX_LCORE - 1U);
lib/power/power_cppc_cpufreq.c +6 -0
index e68b39b424..e73f4520d0 100644
@@ -340,6 +340,12 @@ power_cppc_cpufreq_init(unsigned int lcore_id)
 	struct cppc_power_info *pi;
 	uint32_t exp_state;
 
+	if (!power_cppc_cpufreq_check_supported()) {
+		POWER_LOG(ERR, "%s driver is not supported",
+				POWER_CPPC_DRIVER);
+		return -1;
+	}
+
 	if (lcore_id >= RTE_MAX_LCORE) {
 		POWER_LOG(ERR, "Lcore id %u can not exceeds %u",
 				lcore_id, RTE_MAX_LCORE - 1U);
lib/power/power_pstate_cpufreq.c +6 -0
index 2343121621..1c2a91a178 100644
@@ -542,6 +542,12 @@ power_pstate_cpufreq_init(unsigned int lcore_id)
 	struct pstate_power_info *pi;
 	uint32_t exp_state;
 
+	if (!power_pstate_cpufreq_check_supported()) {
+		POWER_LOG(ERR, "%s driver is not supported",
+				POWER_PSTATE_DRIVER);
+		return -1;
+	}
+
 	if (lcore_id >= RTE_MAX_LCORE) {
 		POWER_LOG(ERR, "Lcore id %u can not exceed %u",
 				lcore_id, RTE_MAX_LCORE - 1U);
Signature · 1 line
2.34.1