linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/5] cpupower: Add various feature control support for amd_pstate
@ 2023-06-19 19:04 Wyes Karny
  2023-06-19 19:04 ` [PATCH v3 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
                   ` (5 more replies)
  0 siblings, 6 replies; 18+ messages in thread
From: Wyes Karny @ 2023-06-19 19:04 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:
v2->v3:
- Use common prefix to recognise amd-pstate-epp driver.
- Picked up review tag from Mario.

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] 18+ messages in thread

* [PATCH v3 1/5] cpupower: Recognise amd-pstate active mode driver
  2023-06-19 19:04 [PATCH v3 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
@ 2023-06-19 19:04 ` Wyes Karny
  2023-06-19 19:08   ` Limonciello, Mario
                     ` (2 more replies)
  2023-06-19 19:05 ` [PATCH v3 2/5] cpupower: Add is_valid_path API Wyes Karny
                   ` (4 subsequent siblings)
  5 siblings, 3 replies; 18+ messages in thread
From: Wyes Karny @ 2023-06-19 19:04 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". Use common
prefix for 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..0c56fc77f93b 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 (!strncmp(driver, "amd", 3))
 		ret = true;
 
 	cpufreq_put_driver(driver);
-- 
2.34.1


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

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

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

Suggested-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@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 related	[flat|nested] 18+ messages in thread

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

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

Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
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 0c56fc77f93b..583df38ab13c 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 related	[flat|nested] 18+ messages in thread

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

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>
Reviewed-by: Mario Limonciello <mario.limonciello@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 583df38ab13c..075c136a100c 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 related	[flat|nested] 18+ messages in thread

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

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>
Reviewed-by: Mario Limonciello <mario.limonciello@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 075c136a100c..76e461ff4f74 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 related	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/5] cpupower: Recognise amd-pstate active mode driver
  2023-06-19 19:04 ` [PATCH v3 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
@ 2023-06-19 19:08   ` Limonciello, Mario
  2023-06-20  3:10   ` Yuan, Perry
  2023-06-20 12:49   ` Huang Rui
  2 siblings, 0 replies; 18+ messages in thread
From: Limonciello, Mario @ 2023-06-19 19:08 UTC (permalink / raw)
  To: Wyes Karny, trenn, shuah
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang,
	Perry.Yuan


On 6/19/2023 2:04 PM, Wyes Karny wrote:
> amd-pstate active mode driver name is "amd-pstate-epp". Use common
> prefix for 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>
Reviewed-by: Mario Limonciello <mario.limonciello@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..0c56fc77f93b 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 (!strncmp(driver, "amd", 3))
>   		ret = true;
>   
>   	cpufreq_put_driver(driver);

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

* RE: [PATCH v3 5/5] cpupower: Add turbo-boost support in cpupower
  2023-06-19 19:05 ` [PATCH v3 5/5] cpupower: Add turbo-boost support in cpupower Wyes Karny
@ 2023-06-20  3:07   ` Yuan, Perry
  2023-06-20  4:49     ` Wyes Karny
  0 siblings, 1 reply; 18+ messages in thread
From: Yuan, Perry @ 2023-06-20  3:07 UTC (permalink / raw)
  To: Karny, Wyes, trenn@suse.com, shuah@kernel.org
  Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	rafael@kernel.org, Shenoy, Gautham Ranjal, Limonciello, Mario,
	Huang, Ray, Huang, Ray, Limonciello, Mario, Yuan, Perry

[AMD Official Use Only - General]

 Hi Wyes.

> -----Original Message-----
> From: Karny, Wyes <Wyes.Karny@amd.com>
> Sent: Tuesday, June 20, 2023 3:05 AM
> To: trenn@suse.com; shuah@kernel.org
> Cc: linux-pm@vger.kernel.org; linux-kernel@vger.kernel.org; rafael@kernel.org;
> Shenoy, Gautham Ranjal <gautham.shenoy@amd.com>; Limonciello, Mario
> <Mario.Limonciello@amd.com>; Huang, Ray <Ray.Huang@amd.com>; Yuan,
> Perry <Perry.Yuan@amd.com>; Karny, Wyes <Wyes.Karny@amd.com>; Huang,
> Ray <Ray.Huang@amd.com>; Limonciello, Mario
> <Mario.Limonciello@amd.com>
> Subject: [PATCH v3 5/5] cpupower: Add turbo-boost support in cpupower
>
> 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>
> Reviewed-by: Mario Limonciello <mario.limonciello@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 075c136a100c..76e461ff4f74 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

Thanks for the  new commands for pstate driver

Tested-by: Perry Yuan <Perry.Yuan@amd.com>

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

* RE: [PATCH v3 4/5] cpupower: Add support for amd_pstate mode change
  2023-06-19 19:05 ` [PATCH v3 4/5] cpupower: Add support for amd_pstate mode change Wyes Karny
@ 2023-06-20  3:08   ` Yuan, Perry
  0 siblings, 0 replies; 18+ messages in thread
From: Yuan, Perry @ 2023-06-20  3:08 UTC (permalink / raw)
  To: Karny, Wyes, trenn@suse.com, shuah@kernel.org
  Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	rafael@kernel.org, Shenoy, Gautham Ranjal, Limonciello, Mario,
	Huang, Ray, Huang, Ray, Limonciello, Mario

[AMD Official Use Only - General]

> -----Original Message-----
> From: Karny, Wyes <Wyes.Karny@amd.com>
> Sent: Tuesday, June 20, 2023 3:05 AM
> To: trenn@suse.com; shuah@kernel.org
> Cc: linux-pm@vger.kernel.org; linux-kernel@vger.kernel.org; rafael@kernel.org;
> Shenoy, Gautham Ranjal <gautham.shenoy@amd.com>; Limonciello, Mario
> <Mario.Limonciello@amd.com>; Huang, Ray <Ray.Huang@amd.com>; Yuan,
> Perry <Perry.Yuan@amd.com>; Karny, Wyes <Wyes.Karny@amd.com>; Huang,
> Ray <Ray.Huang@amd.com>; Limonciello, Mario
> <Mario.Limonciello@amd.com>
> Subject: [PATCH v3 4/5] cpupower: Add support for amd_pstate mode change
>
> 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>
> Reviewed-by: Mario Limonciello <mario.limonciello@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 583df38ab13c..075c136a100c 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

Tested-by: Perry Yuan <Perry.Yuan@amd.com>

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

* RE: [PATCH v3 3/5] cpupower: Add EPP value change support
  2023-06-19 19:05 ` [PATCH v3 3/5] cpupower: Add EPP value change support Wyes Karny
@ 2023-06-20  3:08   ` Yuan, Perry
  2023-06-20 12:59   ` Huang Rui
  1 sibling, 0 replies; 18+ messages in thread
From: Yuan, Perry @ 2023-06-20  3:08 UTC (permalink / raw)
  To: Karny, Wyes, trenn@suse.com, shuah@kernel.org
  Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	rafael@kernel.org, Shenoy, Gautham Ranjal, Limonciello, Mario,
	Huang, Ray, Limonciello, Mario

[AMD Official Use Only - General]

> -----Original Message-----
> From: Karny, Wyes <Wyes.Karny@amd.com>
> Sent: Tuesday, June 20, 2023 3:05 AM
> To: trenn@suse.com; shuah@kernel.org
> Cc: linux-pm@vger.kernel.org; linux-kernel@vger.kernel.org; rafael@kernel.org;
> Shenoy, Gautham Ranjal <gautham.shenoy@amd.com>; Limonciello, Mario
> <Mario.Limonciello@amd.com>; Huang, Ray <Ray.Huang@amd.com>; Yuan,
> Perry <Perry.Yuan@amd.com>; Karny, Wyes <Wyes.Karny@amd.com>;
> Limonciello, Mario <Mario.Limonciello@amd.com>
> Subject: [PATCH v3 3/5] cpupower: Add EPP value change support
>
> 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
>
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> 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 0c56fc77f93b..583df38ab13c 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

Tested-by: Perry Yuan <Perry.Yuan@amd.com>

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

* RE: [PATCH v3 2/5] cpupower: Add is_valid_path API
  2023-06-19 19:05 ` [PATCH v3 2/5] cpupower: Add is_valid_path API Wyes Karny
@ 2023-06-20  3:09   ` Yuan, Perry
  2023-06-20 12:59   ` Huang Rui
  1 sibling, 0 replies; 18+ messages in thread
From: Yuan, Perry @ 2023-06-20  3:09 UTC (permalink / raw)
  To: Karny, Wyes, trenn@suse.com, shuah@kernel.org
  Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	rafael@kernel.org, Shenoy, Gautham Ranjal, Limonciello, Mario,
	Huang, Ray, Limonciello, Mario, Yuan, Perry

[AMD Official Use Only - General]

> -----Original Message-----
> From: Karny, Wyes <Wyes.Karny@amd.com>
> Sent: Tuesday, June 20, 2023 3:05 AM
> To: trenn@suse.com; shuah@kernel.org
> Cc: linux-pm@vger.kernel.org; linux-kernel@vger.kernel.org; rafael@kernel.org;
> Shenoy, Gautham Ranjal <gautham.shenoy@amd.com>; Limonciello, Mario
> <Mario.Limonciello@amd.com>; Huang, Ray <Ray.Huang@amd.com>; Yuan,
> Perry <Perry.Yuan@amd.com>; Karny, Wyes <Wyes.Karny@amd.com>;
> Limonciello, Mario <Mario.Limonciello@amd.com>
> Subject: [PATCH v3 2/5] cpupower: Add is_valid_path API
>
> Add is_valid_path API to check whether the sysfs file is present or not.
>
> Suggested-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> Reviewed-by: Mario Limonciello <mario.limonciello@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

Tested-by: Perry Yuan <Perry.Yuan@amd.com>

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

* RE: [PATCH v3 1/5] cpupower: Recognise amd-pstate active mode driver
  2023-06-19 19:04 ` [PATCH v3 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
  2023-06-19 19:08   ` Limonciello, Mario
@ 2023-06-20  3:10   ` Yuan, Perry
  2023-06-20 12:49   ` Huang Rui
  2 siblings, 0 replies; 18+ messages in thread
From: Yuan, Perry @ 2023-06-20  3:10 UTC (permalink / raw)
  To: Karny, Wyes, trenn@suse.com, shuah@kernel.org
  Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	rafael@kernel.org, Shenoy, Gautham Ranjal, Limonciello, Mario,
	Huang, Ray

[AMD Official Use Only - General]

> -----Original Message-----
> From: Karny, Wyes <Wyes.Karny@amd.com>
> Sent: Tuesday, June 20, 2023 3:05 AM
> To: trenn@suse.com; shuah@kernel.org
> Cc: linux-pm@vger.kernel.org; linux-kernel@vger.kernel.org; rafael@kernel.org;
> Shenoy, Gautham Ranjal <gautham.shenoy@amd.com>; Limonciello, Mario
> <Mario.Limonciello@amd.com>; Huang, Ray <Ray.Huang@amd.com>; Yuan,
> Perry <Perry.Yuan@amd.com>; Karny, Wyes <Wyes.Karny@amd.com>
> Subject: [PATCH v3 1/5] cpupower: Recognise amd-pstate active mode driver
>
> amd-pstate active mode driver name is "amd-pstate-epp". Use common prefix
> for 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..0c56fc77f93b 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 (!strncmp(driver, "amd", 3))
>               ret = true;
>
>       cpufreq_put_driver(driver);
> --
> 2.34.1

Tested-by: Perry Yuan <Perry.Yuan@amd.com>

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

* Re: [PATCH v3 5/5] cpupower: Add turbo-boost support in cpupower
  2023-06-20  3:07   ` Yuan, Perry
@ 2023-06-20  4:49     ` Wyes Karny
  0 siblings, 0 replies; 18+ messages in thread
From: Wyes Karny @ 2023-06-20  4:49 UTC (permalink / raw)
  To: Yuan, Perry
  Cc: trenn@suse.com, shuah@kernel.org, linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org, rafael@kernel.org,
	Shenoy, Gautham Ranjal, Limonciello, Mario, Huang, Ray

On 20 Jun 08:37, Yuan, Perry wrote:
> [AMD Official Use Only - General]
> 
>  Hi Wyes.
> 
> > -----Original Message-----
> > From: Karny, Wyes <Wyes.Karny@amd.com>
> > Sent: Tuesday, June 20, 2023 3:05 AM
> > To: trenn@suse.com; shuah@kernel.org
> > Cc: linux-pm@vger.kernel.org; linux-kernel@vger.kernel.org; rafael@kernel.org;
> > Shenoy, Gautham Ranjal <gautham.shenoy@amd.com>; Limonciello, Mario
> > <Mario.Limonciello@amd.com>; Huang, Ray <Ray.Huang@amd.com>; Yuan,
> > Perry <Perry.Yuan@amd.com>; Karny, Wyes <Wyes.Karny@amd.com>; Huang,
> > Ray <Ray.Huang@amd.com>; Limonciello, Mario
> > <Mario.Limonciello@amd.com>
> > Subject: [PATCH v3 5/5] cpupower: Add turbo-boost support in cpupower
> >
> > 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>
> > Reviewed-by: Mario Limonciello <mario.limonciello@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 075c136a100c..76e461ff4f74 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
> 
> Thanks for the  new commands for pstate driver
> 
> Tested-by: Perry Yuan <Perry.Yuan@amd.com>

Thanks Perry for the tested-by.

Regards,
Wyes

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

* Re: [PATCH v3 1/5] cpupower: Recognise amd-pstate active mode driver
  2023-06-19 19:04 ` [PATCH v3 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
  2023-06-19 19:08   ` Limonciello, Mario
  2023-06-20  3:10   ` Yuan, Perry
@ 2023-06-20 12:49   ` Huang Rui
  2 siblings, 0 replies; 18+ messages in thread
From: Huang Rui @ 2023-06-20 12:49 UTC (permalink / raw)
  To: Karny, Wyes
  Cc: trenn@suse.com, shuah@kernel.org, linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org, rafael@kernel.org,
	Shenoy, Gautham Ranjal, Limonciello, Mario, Yuan, Perry

On Tue, Jun 20, 2023 at 03:04:59AM +0800, Karny, Wyes wrote:
> amd-pstate active mode driver name is "amd-pstate-epp". Use common
> prefix for 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>

Acked-by: Huang Rui <ray.huang@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..0c56fc77f93b 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 (!strncmp(driver, "amd", 3))
>  		ret = true;
>  
>  	cpufreq_put_driver(driver);
> -- 
> 2.34.1
> 

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

* Re: [PATCH v3 2/5] cpupower: Add is_valid_path API
  2023-06-19 19:05 ` [PATCH v3 2/5] cpupower: Add is_valid_path API Wyes Karny
  2023-06-20  3:09   ` Yuan, Perry
@ 2023-06-20 12:59   ` Huang Rui
  1 sibling, 0 replies; 18+ messages in thread
From: Huang Rui @ 2023-06-20 12:59 UTC (permalink / raw)
  To: Karny, Wyes
  Cc: trenn@suse.com, shuah@kernel.org, linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org, rafael@kernel.org,
	Shenoy, Gautham Ranjal, Limonciello, Mario, Yuan, Perry

On Tue, Jun 20, 2023 at 03:05:00AM +0800, Karny, Wyes 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>
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>

Acked-by: Huang Rui <ray.huang@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] 18+ messages in thread

* Re: [PATCH v3 3/5] cpupower: Add EPP value change support
  2023-06-19 19:05 ` [PATCH v3 3/5] cpupower: Add EPP value change support Wyes Karny
  2023-06-20  3:08   ` Yuan, Perry
@ 2023-06-20 12:59   ` Huang Rui
  1 sibling, 0 replies; 18+ messages in thread
From: Huang Rui @ 2023-06-20 12:59 UTC (permalink / raw)
  To: Karny, Wyes
  Cc: trenn@suse.com, shuah@kernel.org, linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org, rafael@kernel.org,
	Shenoy, Gautham Ranjal, Limonciello, Mario, Yuan, Perry

On Tue, Jun 20, 2023 at 03:05:01AM +0800, Karny, Wyes 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
> 
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>

Acked-by: Huang Rui <ray.huang@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 0c56fc77f93b..583df38ab13c 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] 18+ messages in thread

* Re: [PATCH v3 0/5] cpupower: Add various feature control support for amd_pstate
  2023-06-19 19:04 [PATCH v3 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
                   ` (4 preceding siblings ...)
  2023-06-19 19:05 ` [PATCH v3 5/5] cpupower: Add turbo-boost support in cpupower Wyes Karny
@ 2023-07-14 11:19 ` Thomas Renninger
  2023-07-18 22:17   ` Shuah Khan
  5 siblings, 1 reply; 18+ messages in thread
From: Thomas Renninger @ 2023-07-14 11:19 UTC (permalink / raw)
  To: trenn, shuah, Wyes Karny
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Mario.Limonciello,
	Ray.Huang, Perry.Yuan, Wyes Karny

Hi,

sorry for the late answer, I wanted to give this a test, but could not
make it (yet).

My 2 cents on this one:

what Ray already mentioned is greatly appreciated: Find common APIs, not only 
AMD vs Intel, but general ones, outside of the driver specific sysfs dir, e.g.:
/sys/devices/system/cpu/cpufreq/...

But not at all costs and if the epp part is (AMD) specific and varies to others 
in meaning or in values, it has to be a specific file/API.

(Another Example/Request at the end)

And...: It would be nice to see some documentation in form of manpage 
enhancements. At least for the newly introduced arguments.
If not yet, there should be: possible value range, which machines (CPU flags, 
Zen 4, ...), if more complex technology, some kind of introduction or 
reference where to find things would be really great.

I wonder whether it could be possible to connect this with:
Documentation/admin-guide/pm/intel_pstate.rst
Documentation/admin-guide/pm/amd-pstate.rst

I guess there is a static web site address people could rely on where above
kernel docs are hosted forever?
Then it would make sense to link the cpupower manpage with it and keep the 
description short and avoid duplication?

             Thomas


Another Example/Request at the end:

One example I recently got asked for, the bug is private:
"cpupower is not returning max turbo active cores information on latest Intel 
processors."

Here are examples of 2 newer cpus that don't return the active core 
information like this: 
    3600 MHz max turbo 4 active cores
    3600 MHz max turbo 3 active cores
    3700 MHz max turbo 2 active cores
    3800 MHz max turbo 1 active cores

Not sure whether there finally is some kind of consolidation on turbo/boost/
dynamic/hw/bios interfaces in respect to turbo/boosting technology. But if 
anyhow possible and it makes sense, it would be really great to see one sysfs 
file exposed to userspace to read/enable/disable.

Possible cpufreqs (including or only) boost freqs, maybe with active cores if 
this is a general technique optionally added if avail?

Nothing which has to be implemented at all costs and right now, just an idea 
on how things could be consolidated at some point of time which might be wise 
to think about now already...




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

* Re: [PATCH v3 0/5] cpupower: Add various feature control support for amd_pstate
  2023-07-14 11:19 ` [PATCH v3 0/5] cpupower: Add various feature control support for amd_pstate Thomas Renninger
@ 2023-07-18 22:17   ` Shuah Khan
  0 siblings, 0 replies; 18+ messages in thread
From: Shuah Khan @ 2023-07-18 22:17 UTC (permalink / raw)
  To: Thomas Renninger, trenn, shuah, Wyes Karny
  Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Mario.Limonciello,
	Ray.Huang, Perry.Yuan, Shuah Khan

On 7/14/23 05:19, Thomas Renninger wrote:
> Hi,
> 
> sorry for the late answer, I wanted to give this a test, but could not
> make it (yet).
> 
> My 2 cents on this one:
> 
> what Ray already mentioned is greatly appreciated: Find common APIs, not only
> AMD vs Intel, but general ones, outside of the driver specific sysfs dir, e.g.:
> /sys/devices/system/cpu/cpufreq/...
> 
> But not at all costs and if the epp part is (AMD) specific and varies to others
> in meaning or in values, it has to be a specific file/API.
> 
> (Another Example/Request at the end)
> 
> And...: It would be nice to see some documentation in form of manpage
> enhancements. At least for the newly introduced arguments.
> If not yet, there should be: possible value range, which machines (CPU flags,
> Zen 4, ...), if more complex technology, some kind of introduction or
> reference where to find things would be really great.
> 
> I wonder whether it could be possible to connect this with:
> Documentation/admin-guide/pm/intel_pstate.rst
> Documentation/admin-guide/pm/amd-pstate.rst
> 
> I guess there is a static web site address people could rely on where above
> kernel docs are hosted forever?
> Then it would make sense to link the cpupower manpage with it and keep the
> description short and avoid duplication?
> 
>               Thomas
> 
> 
> Another Example/Request at the end:
> 
> One example I recently got asked for, the bug is private:
> "cpupower is not returning max turbo active cores information on latest Intel
> processors."
> 
> Here are examples of 2 newer cpus that don't return the active core
> information like this:
>      3600 MHz max turbo 4 active cores
>      3600 MHz max turbo 3 active cores
>      3700 MHz max turbo 2 active cores
>      3800 MHz max turbo 1 active cores
> 
> Not sure whether there finally is some kind of consolidation on turbo/boost/
> dynamic/hw/bios interfaces in respect to turbo/boosting technology. But if
> anyhow possible and it makes sense, it would be really great to see one sysfs
> file exposed to userspace to read/enable/disable.
> 
> Possible cpufreqs (including or only) boost freqs, maybe with active cores if
> this is a general technique optionally added if avail?
> 
> Nothing which has to be implemented at all costs and right now, just an idea
> on how things could be consolidated at some point of time which might be wise
> to think about now already...
> 

I applied these for Linux 6.6-rc1 - ran quick tests.

Please act on feedback from Thomas and send me patches on top of

https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux.git/log/?h=cpupower

thanks,
-- Shuah



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

end of thread, other threads:[~2023-07-18 22:18 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-19 19:04 [PATCH v3 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
2023-06-19 19:04 ` [PATCH v3 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
2023-06-19 19:08   ` Limonciello, Mario
2023-06-20  3:10   ` Yuan, Perry
2023-06-20 12:49   ` Huang Rui
2023-06-19 19:05 ` [PATCH v3 2/5] cpupower: Add is_valid_path API Wyes Karny
2023-06-20  3:09   ` Yuan, Perry
2023-06-20 12:59   ` Huang Rui
2023-06-19 19:05 ` [PATCH v3 3/5] cpupower: Add EPP value change support Wyes Karny
2023-06-20  3:08   ` Yuan, Perry
2023-06-20 12:59   ` Huang Rui
2023-06-19 19:05 ` [PATCH v3 4/5] cpupower: Add support for amd_pstate mode change Wyes Karny
2023-06-20  3:08   ` Yuan, Perry
2023-06-19 19:05 ` [PATCH v3 5/5] cpupower: Add turbo-boost support in cpupower Wyes Karny
2023-06-20  3:07   ` Yuan, Perry
2023-06-20  4:49     ` Wyes Karny
2023-07-14 11:19 ` [PATCH v3 0/5] cpupower: Add various feature control support for amd_pstate Thomas Renninger
2023-07-18 22:17   ` Shuah Khan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).