mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate
@ 2023-06-16 12:06 Wyes Karny
  2023-06-16 12:06 ` [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:06 UTC (permalink / raw)
  To: trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
	Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny

In this series, three feature control support for amd_pstate has been
added.

 1. EPP: User can control Energy Performance Preference (EPP) value,
which conveys user's performance vs energy preference to platform. This
feature is present on amd_pstate and intel_pstate active mode.

 2. amd_pstate mode switch: amd_pstate has various working modes such as
'active', 'passive' and 'guided', which can be changed dynamically. 

 3. Turbo boost: Turbo boost feature is present in amd_pstate as well as
acpi-cpufreq. By default this is enabled, but user can control this
feature dynamically.

These features can be controlled with `cpupower set` command. The
options are respectively --epp, --amd-pstate-mode, --turbo-boost

Also, make cpupower recognise amd-pstate-epp driver.

Changelog:
v1->v2:
- Drop patch 1, which was amd-pstate-epp driver rename change.
- Picked ACKs from Ray.

Wyes Karny (5):
  cpupower: Recognise amd-pstate active mode driver
  cpupower: Add is_valid_path API
  cpupower: Add EPP value change support
  cpupower: Add support for amd_pstate mode change
  cpupower: Add turbo-boost support in cpupower

 tools/power/cpupower/lib/cpupower.c          |  7 +++
 tools/power/cpupower/lib/cpupower_intern.h   |  1 +
 tools/power/cpupower/utils/cpupower-set.c    | 65 +++++++++++++++++++-
 tools/power/cpupower/utils/helpers/helpers.h | 11 ++++
 tools/power/cpupower/utils/helpers/misc.c    | 57 ++++++++++++++++-
 5 files changed, 138 insertions(+), 3 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver
  2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
@ 2023-06-16 12:06 ` Wyes Karny
  2023-06-19  1:58   ` Mario Limonciello
  2023-06-16 12:06 ` [PATCH v2 2/5] cpupower: Add is_valid_path API Wyes Karny
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:06 UTC (permalink / raw)
  To: trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
	Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny

amd-pstate active mode driver name is "amd-pstate-epp".  Add this to the
string matching condition to recognise amd-pstate active mode driver.

Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
---
 tools/power/cpupower/utils/helpers/misc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
index 9547b29254a7..21f653cd472c 100644
--- a/tools/power/cpupower/utils/helpers/misc.c
+++ b/tools/power/cpupower/utils/helpers/misc.c
@@ -95,7 +95,7 @@ bool cpupower_amd_pstate_enabled(void)
 	if (!driver)
 		return ret;
 
-	if (!strcmp(driver, "amd-pstate"))
+	if (!strcmp(driver, "amd-pstate") || !strcmp(driver, "amd-pstate-epp"))
 		ret = true;
 
 	cpufreq_put_driver(driver);
-- 
2.34.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 2/5] cpupower: Add is_valid_path API
  2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
  2023-06-16 12:06 ` [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
@ 2023-06-16 12:06 ` Wyes Karny
  2023-06-19  1:58   ` Mario Limonciello
  2023-06-16 12:09 ` [PATCH v2 3/5] cpupower: Add EPP value change support Wyes Karny
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:06 UTC (permalink / raw)
  To: trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
	Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny

Add is_valid_path API to check whether the sysfs file is present or not.

Suggested-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
---
 tools/power/cpupower/lib/cpupower.c        | 7 +++++++
 tools/power/cpupower/lib/cpupower_intern.h | 1 +
 2 files changed, 8 insertions(+)

diff --git a/tools/power/cpupower/lib/cpupower.c b/tools/power/cpupower/lib/cpupower.c
index 3f7d0c0c5067..7a2ef691b20e 100644
--- a/tools/power/cpupower/lib/cpupower.c
+++ b/tools/power/cpupower/lib/cpupower.c
@@ -14,6 +14,13 @@
 #include "cpupower.h"
 #include "cpupower_intern.h"
 
+int is_valid_path(const char *path)
+{
+	if (access(path, F_OK) == -1)
+		return 0;
+	return 1;
+}
+
 unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen)
 {
 	ssize_t numread;
diff --git a/tools/power/cpupower/lib/cpupower_intern.h b/tools/power/cpupower/lib/cpupower_intern.h
index ac1112b956ec..5fdb8620d41b 100644
--- a/tools/power/cpupower/lib/cpupower_intern.h
+++ b/tools/power/cpupower/lib/cpupower_intern.h
@@ -7,5 +7,6 @@
 
 #define SYSFS_PATH_MAX 255
 
+int is_valid_path(const char *path);
 unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen);
 unsigned int cpupower_write_sysfs(const char *path, char *buf, size_t buflen);
-- 
2.34.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 3/5] cpupower: Add EPP value change support
  2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
  2023-06-16 12:06 ` [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
  2023-06-16 12:06 ` [PATCH v2 2/5] cpupower: Add is_valid_path API Wyes Karny
@ 2023-06-16 12:09 ` Wyes Karny
  2023-06-19  1:58   ` Mario Limonciello
  2023-06-16 12:10 ` [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change Wyes Karny
  2023-06-16 12:11 ` [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower Wyes Karny
  4 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:09 UTC (permalink / raw)
  To: trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
	Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny

amd_pstate and intel_pstate active mode drivers support energy
performance preference feature. Through this user can convey it's
energy/performance preference to platform. Add this value change
capability to cpupower.

To change the EPP value use below command:
cpupower set --epp performance

Signed-off-by: Wyes Karny <wyes.karny@amd.com>
---
 tools/power/cpupower/utils/cpupower-set.c    | 23 +++++++++++++++++++-
 tools/power/cpupower/utils/helpers/helpers.h |  5 +++++
 tools/power/cpupower/utils/helpers/misc.c    | 19 ++++++++++++++++
 3 files changed, 46 insertions(+), 1 deletion(-)

diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
index 180d5ba877e6..a789b123dbd4 100644
--- a/tools/power/cpupower/utils/cpupower-set.c
+++ b/tools/power/cpupower/utils/cpupower-set.c
@@ -18,6 +18,7 @@
 
 static struct option set_opts[] = {
 	{"perf-bias", required_argument, NULL, 'b'},
+	{"epp", required_argument, NULL, 'e'},
 	{ },
 };
 
@@ -37,11 +38,13 @@ int cmd_set(int argc, char **argv)
 	union {
 		struct {
 			int perf_bias:1;
+			int epp:1;
 		};
 		int params;
 	} params;
 	int perf_bias = 0;
 	int ret = 0;
+	char epp[30];
 
 	ret = uname(&uts);
 	if (!ret && (!strcmp(uts.machine, "ppc64le") ||
@@ -55,7 +58,7 @@ int cmd_set(int argc, char **argv)
 
 	params.params = 0;
 	/* parameter parsing */
-	while ((ret = getopt_long(argc, argv, "b:",
+	while ((ret = getopt_long(argc, argv, "b:e:",
 						set_opts, NULL)) != -1) {
 		switch (ret) {
 		case 'b':
@@ -69,6 +72,15 @@ int cmd_set(int argc, char **argv)
 			}
 			params.perf_bias = 1;
 			break;
+		case 'e':
+			if (params.epp)
+				print_wrong_arg_exit();
+			if (sscanf(optarg, "%29s", epp) != 1) {
+				print_wrong_arg_exit();
+				return -EINVAL;
+			}
+			params.epp = 1;
+			break;
 		default:
 			print_wrong_arg_exit();
 		}
@@ -102,6 +114,15 @@ int cmd_set(int argc, char **argv)
 				break;
 			}
 		}
+
+		if (params.epp) {
+			ret = cpupower_set_epp(cpu, epp);
+			if (ret) {
+				fprintf(stderr,
+					"Error setting epp value on CPU %d\n", cpu);
+				break;
+			}
+		}
 	}
 	return ret;
 }
diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
index 96e4bede078b..5d998de2d291 100644
--- a/tools/power/cpupower/utils/helpers/helpers.h
+++ b/tools/power/cpupower/utils/helpers/helpers.h
@@ -116,6 +116,8 @@ extern int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val);
 extern int cpupower_intel_get_perf_bias(unsigned int cpu);
 extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
 
+extern int cpupower_set_epp(unsigned int cpu, char *epp);
+
 /* Read/Write msr ****************************/
 
 /* PCI stuff ****************************/
@@ -173,6 +175,9 @@ static inline int cpupower_intel_get_perf_bias(unsigned int cpu)
 static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)
 { return 0; };
 
+static inline int cpupower_set_epp(unsigned int cpu, char *epp)
+{ return -1; };
+
 /* Read/Write msr ****************************/
 
 static inline int cpufreq_has_boost_support(unsigned int cpu, int *support,
diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
index 21f653cd472c..63c3f26ef874 100644
--- a/tools/power/cpupower/utils/helpers/misc.c
+++ b/tools/power/cpupower/utils/helpers/misc.c
@@ -87,6 +87,25 @@ int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val)
 	return 0;
 }
 
+int cpupower_set_epp(unsigned int cpu, char *epp)
+{
+	char path[SYSFS_PATH_MAX];
+	char linebuf[30] = {};
+
+	snprintf(path, sizeof(path),
+		PATH_TO_CPU "cpu%u/cpufreq/energy_performance_preference", cpu);
+
+	if (!is_valid_path(path))
+		return -1;
+
+	snprintf(linebuf, sizeof(linebuf), "%s", epp);
+
+	if (cpupower_write_sysfs(path, linebuf, 30) <= 0)
+		return -1;
+
+	return 0;
+}
+
 bool cpupower_amd_pstate_enabled(void)
 {
 	char *driver = cpufreq_get_driver(0);
-- 
2.34.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change
  2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
                   ` (2 preceding siblings ...)
  2023-06-16 12:09 ` [PATCH v2 3/5] cpupower: Add EPP value change support Wyes Karny
@ 2023-06-16 12:10 ` Wyes Karny
  2023-06-19  1:59   ` Mario Limonciello
  2023-06-16 12:11 ` [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower Wyes Karny
  4 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:10 UTC (permalink / raw)
  To: trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
	Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny, Huang Rui

amd_pstate supports changing of its mode dynamically via `status` sysfs
file. Add the same capability in cpupower. To change the mode to active
mode use below command:

cpupower set --amd-pstate-mode active

Acked-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
---
 tools/power/cpupower/utils/cpupower-set.c    | 24 ++++++++++++++++++--
 tools/power/cpupower/utils/helpers/helpers.h |  3 +++
 tools/power/cpupower/utils/helpers/misc.c    | 18 +++++++++++++++
 3 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
index a789b123dbd4..c2ba69b7ea54 100644
--- a/tools/power/cpupower/utils/cpupower-set.c
+++ b/tools/power/cpupower/utils/cpupower-set.c
@@ -19,6 +19,7 @@
 static struct option set_opts[] = {
 	{"perf-bias", required_argument, NULL, 'b'},
 	{"epp", required_argument, NULL, 'e'},
+	{"amd-pstate-mode", required_argument, NULL, 'm'},
 	{ },
 };
 
@@ -39,12 +40,13 @@ int cmd_set(int argc, char **argv)
 		struct {
 			int perf_bias:1;
 			int epp:1;
+			int mode:1;
 		};
 		int params;
 	} params;
 	int perf_bias = 0;
 	int ret = 0;
-	char epp[30];
+	char epp[30], mode[20];
 
 	ret = uname(&uts);
 	if (!ret && (!strcmp(uts.machine, "ppc64le") ||
@@ -58,7 +60,7 @@ int cmd_set(int argc, char **argv)
 
 	params.params = 0;
 	/* parameter parsing */
-	while ((ret = getopt_long(argc, argv, "b:e:",
+	while ((ret = getopt_long(argc, argv, "b:e:m:",
 						set_opts, NULL)) != -1) {
 		switch (ret) {
 		case 'b':
@@ -81,6 +83,17 @@ int cmd_set(int argc, char **argv)
 			}
 			params.epp = 1;
 			break;
+		case 'm':
+			if (cpupower_cpu_info.vendor != X86_VENDOR_AMD)
+				print_wrong_arg_exit();
+			if (params.mode)
+				print_wrong_arg_exit();
+			if (sscanf(optarg, "%19s", mode) != 1) {
+				print_wrong_arg_exit();
+				return -EINVAL;
+			}
+			params.mode = 1;
+			break;
 		default:
 			print_wrong_arg_exit();
 		}
@@ -89,6 +102,12 @@ int cmd_set(int argc, char **argv)
 	if (!params.params)
 		print_wrong_arg_exit();
 
+	if (params.mode) {
+		ret = cpupower_set_amd_pstate_mode(mode);
+		if (ret)
+			fprintf(stderr, "Error setting mode\n");
+	}
+
 	/* Default is: set all CPUs */
 	if (bitmask_isallclear(cpus_chosen))
 		bitmask_setall(cpus_chosen);
@@ -123,6 +142,7 @@ int cmd_set(int argc, char **argv)
 				break;
 			}
 		}
+
 	}
 	return ret;
 }
diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
index 5d998de2d291..d35596631eef 100644
--- a/tools/power/cpupower/utils/helpers/helpers.h
+++ b/tools/power/cpupower/utils/helpers/helpers.h
@@ -117,6 +117,7 @@ extern int cpupower_intel_get_perf_bias(unsigned int cpu);
 extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
 
 extern int cpupower_set_epp(unsigned int cpu, char *epp);
+extern int cpupower_set_amd_pstate_mode(char *mode);
 
 /* Read/Write msr ****************************/
 
@@ -177,6 +178,8 @@ static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)
 
 static inline int cpupower_set_epp(unsigned int cpu, char *epp)
 { return -1; };
+static inline int cpupower_set_amd_pstate_mode(char *mode)
+{ return -1; };
 
 /* Read/Write msr ****************************/
 
diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
index 63c3f26ef874..9df9af8a969e 100644
--- a/tools/power/cpupower/utils/helpers/misc.c
+++ b/tools/power/cpupower/utils/helpers/misc.c
@@ -106,6 +106,24 @@ int cpupower_set_epp(unsigned int cpu, char *epp)
 	return 0;
 }
 
+int cpupower_set_amd_pstate_mode(char *mode)
+{
+	char path[SYSFS_PATH_MAX];
+	char linebuf[20] = {};
+
+	snprintf(path, sizeof(path), PATH_TO_CPU "amd_pstate/status");
+
+	if (!is_valid_path(path))
+		return -1;
+
+	snprintf(linebuf, sizeof(linebuf), "%s\n", mode);
+
+	if (cpupower_write_sysfs(path, linebuf, 20) <= 0)
+		return -1;
+
+	return 0;
+}
+
 bool cpupower_amd_pstate_enabled(void)
 {
 	char *driver = cpufreq_get_driver(0);
-- 
2.34.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower
  2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
                   ` (3 preceding siblings ...)
  2023-06-16 12:10 ` [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change Wyes Karny
@ 2023-06-16 12:11 ` Wyes Karny
  2023-06-19  1:59   ` Mario Limonciello
  4 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:11 UTC (permalink / raw)
  To: trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
	Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny, Huang Rui

If boost sysfs (/sys/devices/system/cpu/cpufreq/boost) file is present
turbo-boost is feature is supported in the hardware. By default this
feature should be enabled. But to disable/enable it write to the sysfs
file. Use the same to control this feature via cpupower.

To enable:
cpupower set --turbo-boost 1

To disable:
cpupower set --turbo-boost 0

Acked-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
---
 tools/power/cpupower/utils/cpupower-set.c    | 22 +++++++++++++++++++-
 tools/power/cpupower/utils/helpers/helpers.h |  3 +++
 tools/power/cpupower/utils/helpers/misc.c    | 18 ++++++++++++++++
 3 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
index c2ba69b7ea54..0677b58374ab 100644
--- a/tools/power/cpupower/utils/cpupower-set.c
+++ b/tools/power/cpupower/utils/cpupower-set.c
@@ -20,6 +20,7 @@ static struct option set_opts[] = {
 	{"perf-bias", required_argument, NULL, 'b'},
 	{"epp", required_argument, NULL, 'e'},
 	{"amd-pstate-mode", required_argument, NULL, 'm'},
+	{"turbo-boost", required_argument, NULL, 't'},
 	{ },
 };
 
@@ -41,10 +42,11 @@ int cmd_set(int argc, char **argv)
 			int perf_bias:1;
 			int epp:1;
 			int mode:1;
+			int turbo_boost:1;
 		};
 		int params;
 	} params;
-	int perf_bias = 0;
+	int perf_bias = 0, turbo_boost = 1;
 	int ret = 0;
 	char epp[30], mode[20];
 
@@ -94,6 +96,18 @@ int cmd_set(int argc, char **argv)
 			}
 			params.mode = 1;
 			break;
+		case 't':
+			if (params.turbo_boost)
+				print_wrong_arg_exit();
+			turbo_boost = atoi(optarg);
+			if (turbo_boost < 0 || turbo_boost > 1) {
+				printf("--turbo-boost param out of range [0-1]\n");
+				print_wrong_arg_exit();
+			}
+			params.turbo_boost = 1;
+			break;
+
+
 		default:
 			print_wrong_arg_exit();
 		}
@@ -108,6 +122,12 @@ int cmd_set(int argc, char **argv)
 			fprintf(stderr, "Error setting mode\n");
 	}
 
+	if (params.turbo_boost) {
+		ret = cpupower_set_turbo_boost(turbo_boost);
+		if (ret)
+			fprintf(stderr, "Error setting turbo-boost\n");
+	}
+
 	/* Default is: set all CPUs */
 	if (bitmask_isallclear(cpus_chosen))
 		bitmask_setall(cpus_chosen);
diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
index d35596631eef..95749b8ee475 100644
--- a/tools/power/cpupower/utils/helpers/helpers.h
+++ b/tools/power/cpupower/utils/helpers/helpers.h
@@ -118,6 +118,7 @@ extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
 
 extern int cpupower_set_epp(unsigned int cpu, char *epp);
 extern int cpupower_set_amd_pstate_mode(char *mode);
+extern int cpupower_set_turbo_boost(int turbo_boost);
 
 /* Read/Write msr ****************************/
 
@@ -180,6 +181,8 @@ static inline int cpupower_set_epp(unsigned int cpu, char *epp)
 { return -1; };
 static inline int cpupower_set_amd_pstate_mode(char *mode)
 { return -1; };
+static inline int cpupower_set_turbo_boost(int turbo_boost)
+{ return -1; };
 
 /* Read/Write msr ****************************/
 
diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
index 9df9af8a969e..fc822a0e6b7b 100644
--- a/tools/power/cpupower/utils/helpers/misc.c
+++ b/tools/power/cpupower/utils/helpers/misc.c
@@ -124,6 +124,24 @@ int cpupower_set_amd_pstate_mode(char *mode)
 	return 0;
 }
 
+int cpupower_set_turbo_boost(int turbo_boost)
+{
+	char path[SYSFS_PATH_MAX];
+	char linebuf[2] = {};
+
+	snprintf(path, sizeof(path), PATH_TO_CPU "cpufreq/boost");
+
+	if (!is_valid_path(path))
+		return -1;
+
+	snprintf(linebuf, sizeof(linebuf), "%d", turbo_boost);
+
+	if (cpupower_write_sysfs(path, linebuf, 2) <= 0)
+		return -1;
+
+	return 0;
+}
+
 bool cpupower_amd_pstate_enabled(void)
 {
 	char *driver = cpufreq_get_driver(0);
-- 
2.34.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver
  2023-06-16 12:06 ` [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
@ 2023-06-19  1:58   ` Mario Limonciello
  2023-06-19 17:31     ` Wyes Karny
  0 siblings, 1 reply; 13+ messages in thread
From: Mario Limonciello @ 2023-06-19  1:58 UTC (permalink / raw)
  To: Wyes Karny, trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang, Perry.Yuan

On 6/16/23 07:06, Wyes Karny wrote:
> amd-pstate active mode driver name is "amd-pstate-epp".  Add this to the
> string matching condition to recognise amd-pstate active mode driver.
> 
> Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
> ---
>   tools/power/cpupower/utils/helpers/misc.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
> index 9547b29254a7..21f653cd472c 100644
> --- a/tools/power/cpupower/utils/helpers/misc.c
> +++ b/tools/power/cpupower/utils/helpers/misc.c
> @@ -95,7 +95,7 @@ bool cpupower_amd_pstate_enabled(void)
>   	if (!driver)
>   		return ret;
>   
> -	if (!strcmp(driver, "amd-pstate"))
> +	if (!strcmp(driver, "amd-pstate") || !strcmp(driver, "amd-pstate-epp"))

To avoid getting caught in the case that a kernel didn't have the patch 
separated from this series (for example if a distro missed it in a 
backport from separate directories), how about using strncmp() instead 
and just look for the prefix?

This would also let the tool be more future proofed in the case another 
amd-pstate driver was introduced later down the road as long as it stuck 
to "amd-pstate*"

>   		ret = true;
>   
>   	cpufreq_put_driver(driver);


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 2/5] cpupower: Add is_valid_path API
  2023-06-16 12:06 ` [PATCH v2 2/5] cpupower: Add is_valid_path API Wyes Karny
@ 2023-06-19  1:58   ` Mario Limonciello
  0 siblings, 0 replies; 13+ messages in thread
From: Mario Limonciello @ 2023-06-19  1:58 UTC (permalink / raw)
  To: Wyes Karny, trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang, Perry.Yuan

On 6/16/23 07:06, Wyes Karny wrote:
> Add is_valid_path API to check whether the sysfs file is present or not.
> 
> Suggested-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

> ---
>   tools/power/cpupower/lib/cpupower.c        | 7 +++++++
>   tools/power/cpupower/lib/cpupower_intern.h | 1 +
>   2 files changed, 8 insertions(+)
> 
> diff --git a/tools/power/cpupower/lib/cpupower.c b/tools/power/cpupower/lib/cpupower.c
> index 3f7d0c0c5067..7a2ef691b20e 100644
> --- a/tools/power/cpupower/lib/cpupower.c
> +++ b/tools/power/cpupower/lib/cpupower.c
> @@ -14,6 +14,13 @@
>   #include "cpupower.h"
>   #include "cpupower_intern.h"
>   
> +int is_valid_path(const char *path)
> +{
> +	if (access(path, F_OK) == -1)
> +		return 0;
> +	return 1;
> +}
> +
>   unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen)
>   {
>   	ssize_t numread;
> diff --git a/tools/power/cpupower/lib/cpupower_intern.h b/tools/power/cpupower/lib/cpupower_intern.h
> index ac1112b956ec..5fdb8620d41b 100644
> --- a/tools/power/cpupower/lib/cpupower_intern.h
> +++ b/tools/power/cpupower/lib/cpupower_intern.h
> @@ -7,5 +7,6 @@
>   
>   #define SYSFS_PATH_MAX 255
>   
> +int is_valid_path(const char *path);
>   unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen);
>   unsigned int cpupower_write_sysfs(const char *path, char *buf, size_t buflen);


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 3/5] cpupower: Add EPP value change support
  2023-06-16 12:09 ` [PATCH v2 3/5] cpupower: Add EPP value change support Wyes Karny
@ 2023-06-19  1:58   ` Mario Limonciello
  0 siblings, 0 replies; 13+ messages in thread
From: Mario Limonciello @ 2023-06-19  1:58 UTC (permalink / raw)
  To: Wyes Karny, trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang, Perry.Yuan

On 6/16/23 07:09, Wyes Karny wrote:
> amd_pstate and intel_pstate active mode drivers support energy
> performance preference feature. Through this user can convey it's
> energy/performance preference to platform. Add this value change
> capability to cpupower.
> 
> To change the EPP value use below command:
> cpupower set --epp performance
> 
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

> ---
>   tools/power/cpupower/utils/cpupower-set.c    | 23 +++++++++++++++++++-
>   tools/power/cpupower/utils/helpers/helpers.h |  5 +++++
>   tools/power/cpupower/utils/helpers/misc.c    | 19 ++++++++++++++++
>   3 files changed, 46 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
> index 180d5ba877e6..a789b123dbd4 100644
> --- a/tools/power/cpupower/utils/cpupower-set.c
> +++ b/tools/power/cpupower/utils/cpupower-set.c
> @@ -18,6 +18,7 @@
>   
>   static struct option set_opts[] = {
>   	{"perf-bias", required_argument, NULL, 'b'},
> +	{"epp", required_argument, NULL, 'e'},
>   	{ },
>   };
>   
> @@ -37,11 +38,13 @@ int cmd_set(int argc, char **argv)
>   	union {
>   		struct {
>   			int perf_bias:1;
> +			int epp:1;
>   		};
>   		int params;
>   	} params;
>   	int perf_bias = 0;
>   	int ret = 0;
> +	char epp[30];
>   
>   	ret = uname(&uts);
>   	if (!ret && (!strcmp(uts.machine, "ppc64le") ||
> @@ -55,7 +58,7 @@ int cmd_set(int argc, char **argv)
>   
>   	params.params = 0;
>   	/* parameter parsing */
> -	while ((ret = getopt_long(argc, argv, "b:",
> +	while ((ret = getopt_long(argc, argv, "b:e:",
>   						set_opts, NULL)) != -1) {
>   		switch (ret) {
>   		case 'b':
> @@ -69,6 +72,15 @@ int cmd_set(int argc, char **argv)
>   			}
>   			params.perf_bias = 1;
>   			break;
> +		case 'e':
> +			if (params.epp)
> +				print_wrong_arg_exit();
> +			if (sscanf(optarg, "%29s", epp) != 1) {
> +				print_wrong_arg_exit();
> +				return -EINVAL;
> +			}
> +			params.epp = 1;
> +			break;
>   		default:
>   			print_wrong_arg_exit();
>   		}
> @@ -102,6 +114,15 @@ int cmd_set(int argc, char **argv)
>   				break;
>   			}
>   		}
> +
> +		if (params.epp) {
> +			ret = cpupower_set_epp(cpu, epp);
> +			if (ret) {
> +				fprintf(stderr,
> +					"Error setting epp value on CPU %d\n", cpu);
> +				break;
> +			}
> +		}
>   	}
>   	return ret;
>   }
> diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
> index 96e4bede078b..5d998de2d291 100644
> --- a/tools/power/cpupower/utils/helpers/helpers.h
> +++ b/tools/power/cpupower/utils/helpers/helpers.h
> @@ -116,6 +116,8 @@ extern int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val);
>   extern int cpupower_intel_get_perf_bias(unsigned int cpu);
>   extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
>   
> +extern int cpupower_set_epp(unsigned int cpu, char *epp);
> +
>   /* Read/Write msr ****************************/
>   
>   /* PCI stuff ****************************/
> @@ -173,6 +175,9 @@ static inline int cpupower_intel_get_perf_bias(unsigned int cpu)
>   static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)
>   { return 0; };
>   
> +static inline int cpupower_set_epp(unsigned int cpu, char *epp)
> +{ return -1; };
> +
>   /* Read/Write msr ****************************/
>   
>   static inline int cpufreq_has_boost_support(unsigned int cpu, int *support,
> diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
> index 21f653cd472c..63c3f26ef874 100644
> --- a/tools/power/cpupower/utils/helpers/misc.c
> +++ b/tools/power/cpupower/utils/helpers/misc.c
> @@ -87,6 +87,25 @@ int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val)
>   	return 0;
>   }
>   
> +int cpupower_set_epp(unsigned int cpu, char *epp)
> +{
> +	char path[SYSFS_PATH_MAX];
> +	char linebuf[30] = {};
> +
> +	snprintf(path, sizeof(path),
> +		PATH_TO_CPU "cpu%u/cpufreq/energy_performance_preference", cpu);
> +
> +	if (!is_valid_path(path))
> +		return -1;
> +
> +	snprintf(linebuf, sizeof(linebuf), "%s", epp);
> +
> +	if (cpupower_write_sysfs(path, linebuf, 30) <= 0)
> +		return -1;
> +
> +	return 0;
> +}
> +
>   bool cpupower_amd_pstate_enabled(void)
>   {
>   	char *driver = cpufreq_get_driver(0);


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change
  2023-06-16 12:10 ` [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change Wyes Karny
@ 2023-06-19  1:59   ` Mario Limonciello
  0 siblings, 0 replies; 13+ messages in thread
From: Mario Limonciello @ 2023-06-19  1:59 UTC (permalink / raw)
  To: Wyes Karny, trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang, Perry.Yuan

On 6/16/23 07:10, Wyes Karny wrote:
> amd_pstate supports changing of its mode dynamically via `status` sysfs
> file. Add the same capability in cpupower. To change the mode to active
> mode use below command:
> 
> cpupower set --amd-pstate-mode active
> 
> Acked-by: Huang Rui <ray.huang@amd.com>
> Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

> ---
>   tools/power/cpupower/utils/cpupower-set.c    | 24 ++++++++++++++++++--
>   tools/power/cpupower/utils/helpers/helpers.h |  3 +++
>   tools/power/cpupower/utils/helpers/misc.c    | 18 +++++++++++++++
>   3 files changed, 43 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
> index a789b123dbd4..c2ba69b7ea54 100644
> --- a/tools/power/cpupower/utils/cpupower-set.c
> +++ b/tools/power/cpupower/utils/cpupower-set.c
> @@ -19,6 +19,7 @@
>   static struct option set_opts[] = {
>   	{"perf-bias", required_argument, NULL, 'b'},
>   	{"epp", required_argument, NULL, 'e'},
> +	{"amd-pstate-mode", required_argument, NULL, 'm'},
>   	{ },
>   };
>   
> @@ -39,12 +40,13 @@ int cmd_set(int argc, char **argv)
>   		struct {
>   			int perf_bias:1;
>   			int epp:1;
> +			int mode:1;
>   		};
>   		int params;
>   	} params;
>   	int perf_bias = 0;
>   	int ret = 0;
> -	char epp[30];
> +	char epp[30], mode[20];
>   
>   	ret = uname(&uts);
>   	if (!ret && (!strcmp(uts.machine, "ppc64le") ||
> @@ -58,7 +60,7 @@ int cmd_set(int argc, char **argv)
>   
>   	params.params = 0;
>   	/* parameter parsing */
> -	while ((ret = getopt_long(argc, argv, "b:e:",
> +	while ((ret = getopt_long(argc, argv, "b:e:m:",
>   						set_opts, NULL)) != -1) {
>   		switch (ret) {
>   		case 'b':
> @@ -81,6 +83,17 @@ int cmd_set(int argc, char **argv)
>   			}
>   			params.epp = 1;
>   			break;
> +		case 'm':
> +			if (cpupower_cpu_info.vendor != X86_VENDOR_AMD)
> +				print_wrong_arg_exit();
> +			if (params.mode)
> +				print_wrong_arg_exit();
> +			if (sscanf(optarg, "%19s", mode) != 1) {
> +				print_wrong_arg_exit();
> +				return -EINVAL;
> +			}
> +			params.mode = 1;
> +			break;
>   		default:
>   			print_wrong_arg_exit();
>   		}
> @@ -89,6 +102,12 @@ int cmd_set(int argc, char **argv)
>   	if (!params.params)
>   		print_wrong_arg_exit();
>   
> +	if (params.mode) {
> +		ret = cpupower_set_amd_pstate_mode(mode);
> +		if (ret)
> +			fprintf(stderr, "Error setting mode\n");
> +	}
> +
>   	/* Default is: set all CPUs */
>   	if (bitmask_isallclear(cpus_chosen))
>   		bitmask_setall(cpus_chosen);
> @@ -123,6 +142,7 @@ int cmd_set(int argc, char **argv)
>   				break;
>   			}
>   		}
> +
>   	}
>   	return ret;
>   }
> diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
> index 5d998de2d291..d35596631eef 100644
> --- a/tools/power/cpupower/utils/helpers/helpers.h
> +++ b/tools/power/cpupower/utils/helpers/helpers.h
> @@ -117,6 +117,7 @@ extern int cpupower_intel_get_perf_bias(unsigned int cpu);
>   extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
>   
>   extern int cpupower_set_epp(unsigned int cpu, char *epp);
> +extern int cpupower_set_amd_pstate_mode(char *mode);
>   
>   /* Read/Write msr ****************************/
>   
> @@ -177,6 +178,8 @@ static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)
>   
>   static inline int cpupower_set_epp(unsigned int cpu, char *epp)
>   { return -1; };
> +static inline int cpupower_set_amd_pstate_mode(char *mode)
> +{ return -1; };
>   
>   /* Read/Write msr ****************************/
>   
> diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
> index 63c3f26ef874..9df9af8a969e 100644
> --- a/tools/power/cpupower/utils/helpers/misc.c
> +++ b/tools/power/cpupower/utils/helpers/misc.c
> @@ -106,6 +106,24 @@ int cpupower_set_epp(unsigned int cpu, char *epp)
>   	return 0;
>   }
>   
> +int cpupower_set_amd_pstate_mode(char *mode)
> +{
> +	char path[SYSFS_PATH_MAX];
> +	char linebuf[20] = {};
> +
> +	snprintf(path, sizeof(path), PATH_TO_CPU "amd_pstate/status");
> +
> +	if (!is_valid_path(path))
> +		return -1;
> +
> +	snprintf(linebuf, sizeof(linebuf), "%s\n", mode);
> +
> +	if (cpupower_write_sysfs(path, linebuf, 20) <= 0)
> +		return -1;
> +
> +	return 0;
> +}
> +
>   bool cpupower_amd_pstate_enabled(void)
>   {
>   	char *driver = cpufreq_get_driver(0);


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower
  2023-06-16 12:11 ` [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower Wyes Karny
@ 2023-06-19  1:59   ` Mario Limonciello
  0 siblings, 0 replies; 13+ messages in thread
From: Mario Limonciello @ 2023-06-19  1:59 UTC (permalink / raw)
  To: Wyes Karny, trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang, Perry.Yuan

On 6/16/23 07:11, Wyes Karny wrote:
> If boost sysfs (/sys/devices/system/cpu/cpufreq/boost) file is present
> turbo-boost is feature is supported in the hardware. By default this
> feature should be enabled. But to disable/enable it write to the sysfs
> file. Use the same to control this feature via cpupower.
> 
> To enable:
> cpupower set --turbo-boost 1
> 
> To disable:
> cpupower set --turbo-boost 0
> 
> Acked-by: Huang Rui <ray.huang@amd.com>
> Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

> ---
>   tools/power/cpupower/utils/cpupower-set.c    | 22 +++++++++++++++++++-
>   tools/power/cpupower/utils/helpers/helpers.h |  3 +++
>   tools/power/cpupower/utils/helpers/misc.c    | 18 ++++++++++++++++
>   3 files changed, 42 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
> index c2ba69b7ea54..0677b58374ab 100644
> --- a/tools/power/cpupower/utils/cpupower-set.c
> +++ b/tools/power/cpupower/utils/cpupower-set.c
> @@ -20,6 +20,7 @@ static struct option set_opts[] = {
>   	{"perf-bias", required_argument, NULL, 'b'},
>   	{"epp", required_argument, NULL, 'e'},
>   	{"amd-pstate-mode", required_argument, NULL, 'm'},
> +	{"turbo-boost", required_argument, NULL, 't'},
>   	{ },
>   };
>   
> @@ -41,10 +42,11 @@ int cmd_set(int argc, char **argv)
>   			int perf_bias:1;
>   			int epp:1;
>   			int mode:1;
> +			int turbo_boost:1;
>   		};
>   		int params;
>   	} params;
> -	int perf_bias = 0;
> +	int perf_bias = 0, turbo_boost = 1;
>   	int ret = 0;
>   	char epp[30], mode[20];
>   
> @@ -94,6 +96,18 @@ int cmd_set(int argc, char **argv)
>   			}
>   			params.mode = 1;
>   			break;
> +		case 't':
> +			if (params.turbo_boost)
> +				print_wrong_arg_exit();
> +			turbo_boost = atoi(optarg);
> +			if (turbo_boost < 0 || turbo_boost > 1) {
> +				printf("--turbo-boost param out of range [0-1]\n");
> +				print_wrong_arg_exit();
> +			}
> +			params.turbo_boost = 1;
> +			break;
> +
> +
>   		default:
>   			print_wrong_arg_exit();
>   		}
> @@ -108,6 +122,12 @@ int cmd_set(int argc, char **argv)
>   			fprintf(stderr, "Error setting mode\n");
>   	}
>   
> +	if (params.turbo_boost) {
> +		ret = cpupower_set_turbo_boost(turbo_boost);
> +		if (ret)
> +			fprintf(stderr, "Error setting turbo-boost\n");
> +	}
> +
>   	/* Default is: set all CPUs */
>   	if (bitmask_isallclear(cpus_chosen))
>   		bitmask_setall(cpus_chosen);
> diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
> index d35596631eef..95749b8ee475 100644
> --- a/tools/power/cpupower/utils/helpers/helpers.h
> +++ b/tools/power/cpupower/utils/helpers/helpers.h
> @@ -118,6 +118,7 @@ extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
>   
>   extern int cpupower_set_epp(unsigned int cpu, char *epp);
>   extern int cpupower_set_amd_pstate_mode(char *mode);
> +extern int cpupower_set_turbo_boost(int turbo_boost);
>   
>   /* Read/Write msr ****************************/
>   
> @@ -180,6 +181,8 @@ static inline int cpupower_set_epp(unsigned int cpu, char *epp)
>   { return -1; };
>   static inline int cpupower_set_amd_pstate_mode(char *mode)
>   { return -1; };
> +static inline int cpupower_set_turbo_boost(int turbo_boost)
> +{ return -1; };
>   
>   /* Read/Write msr ****************************/
>   
> diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
> index 9df9af8a969e..fc822a0e6b7b 100644
> --- a/tools/power/cpupower/utils/helpers/misc.c
> +++ b/tools/power/cpupower/utils/helpers/misc.c
> @@ -124,6 +124,24 @@ int cpupower_set_amd_pstate_mode(char *mode)
>   	return 0;
>   }
>   
> +int cpupower_set_turbo_boost(int turbo_boost)
> +{
> +	char path[SYSFS_PATH_MAX];
> +	char linebuf[2] = {};
> +
> +	snprintf(path, sizeof(path), PATH_TO_CPU "cpufreq/boost");
> +
> +	if (!is_valid_path(path))
> +		return -1;
> +
> +	snprintf(linebuf, sizeof(linebuf), "%d", turbo_boost);
> +
> +	if (cpupower_write_sysfs(path, linebuf, 2) <= 0)
> +		return -1;
> +
> +	return 0;
> +}
> +
>   bool cpupower_amd_pstate_enabled(void)
>   {
>   	char *driver = cpufreq_get_driver(0);


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver
  2023-06-19  1:58   ` Mario Limonciello
@ 2023-06-19 17:31     ` Wyes Karny
  2023-06-19 17:37       ` Limonciello, Mario
  0 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-19 17:31 UTC (permalink / raw)
  To: Mario Limonciello
  Cc: trenn, shuah, linux-pm, linux-kernel, rafael, gautham.shenoy,
	Ray.Huang, Perry.Yuan

Hi Mario,

On 18 Jun 20:58, Mario Limonciello wrote:
> On 6/16/23 07:06, Wyes Karny wrote:
> > amd-pstate active mode driver name is "amd-pstate-epp".  Add this to the
> > string matching condition to recognise amd-pstate active mode driver.
> > 
> > Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> > Signed-off-by: Wyes Karny <wyes.karny@amd.com>
> > ---
> >   tools/power/cpupower/utils/helpers/misc.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
> > index 9547b29254a7..21f653cd472c 100644
> > --- a/tools/power/cpupower/utils/helpers/misc.c
> > +++ b/tools/power/cpupower/utils/helpers/misc.c
> > @@ -95,7 +95,7 @@ bool cpupower_amd_pstate_enabled(void)
> >   	if (!driver)
> >   		return ret;
> > -	if (!strcmp(driver, "amd-pstate"))
> > +	if (!strcmp(driver, "amd-pstate") || !strcmp(driver, "amd-pstate-epp"))
> 
> To avoid getting caught in the case that a kernel didn't have the patch
> separated from this series (for example if a distro missed it in a backport
> from separate directories), how about using strncmp() instead and just look
> for the prefix?

Sure, I'll update the patch.
I'm thinking of using strncmp(driver, "amd", 3), because in the above
case the epp driver would be "amd_pstate_epp" therefore common prefix is
only "amd".

Thanks,
Wyes
> 
> This would also let the tool be more future proofed in the case another
> amd-pstate driver was introduced later down the road as long as it stuck to
> "amd-pstate*"
> 
> >   		ret = true;
> >   	cpufreq_put_driver(driver);
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver
  2023-06-19 17:31     ` Wyes Karny
@ 2023-06-19 17:37       ` Limonciello, Mario
  0 siblings, 0 replies; 13+ messages in thread
From: Limonciello, Mario @ 2023-06-19 17:37 UTC (permalink / raw)
  To: Wyes Karny
  Cc: trenn, shuah, linux-pm, linux-kernel, rafael, gautham.shenoy,
	Ray.Huang, Perry.Yuan


On 6/19/2023 12:31 PM, Wyes Karny wrote:
> Hi Mario,
>
> On 18 Jun 20:58, Mario Limonciello wrote:
>> On 6/16/23 07:06, Wyes Karny wrote:
>>> amd-pstate active mode driver name is "amd-pstate-epp".  Add this to the
>>> string matching condition to recognise amd-pstate active mode driver.
>>>
>>> Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
>>> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
>>> ---
>>>    tools/power/cpupower/utils/helpers/misc.c | 2 +-
>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
>>> index 9547b29254a7..21f653cd472c 100644
>>> --- a/tools/power/cpupower/utils/helpers/misc.c
>>> +++ b/tools/power/cpupower/utils/helpers/misc.c
>>> @@ -95,7 +95,7 @@ bool cpupower_amd_pstate_enabled(void)
>>>    	if (!driver)
>>>    		return ret;
>>> -	if (!strcmp(driver, "amd-pstate"))
>>> +	if (!strcmp(driver, "amd-pstate") || !strcmp(driver, "amd-pstate-epp"))
>> To avoid getting caught in the case that a kernel didn't have the patch
>> separated from this series (for example if a distro missed it in a backport
>> from separate directories), how about using strncmp() instead and just look
>> for the prefix?
> Sure, I'll update the patch.
> I'm thinking of using strncmp(driver, "amd", 3), because in the above
> case the epp driver would be "amd_pstate_epp" therefore common prefix is
> only "amd".
>
> Thanks,
> Wyes
Sounds good, thanks!
>> This would also let the tool be more future proofed in the case another
>> amd-pstate driver was introduced later down the road as long as it stuck to
>> "amd-pstate*"
>>
>>>    		ret = true;
>>>    	cpufreq_put_driver(driver);

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2023-06-19 17:37 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
2023-06-16 12:06 ` [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
2023-06-19  1:58   ` Mario Limonciello
2023-06-19 17:31     ` Wyes Karny
2023-06-19 17:37       ` Limonciello, Mario
2023-06-16 12:06 ` [PATCH v2 2/5] cpupower: Add is_valid_path API Wyes Karny
2023-06-19  1:58   ` Mario Limonciello
2023-06-16 12:09 ` [PATCH v2 3/5] cpupower: Add EPP value change support Wyes Karny
2023-06-19  1:58   ` Mario Limonciello
2023-06-16 12:10 ` [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change Wyes Karny
2023-06-19  1:59   ` Mario Limonciello
2023-06-16 12:11 ` [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower Wyes Karny
2023-06-19  1:59   ` Mario Limonciello

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®