From: Mario Limonciello <mario.limonciello@amd.com>
AMD systems that support preferred cores will use "166" as their
numerator for max frequency calculations instead of "255".
Add a function for detecting preferred cores by looking at the
highest perf value on all cores.
If preferred cores are enabled return 166 and if disabled the
value in the highest perf register. As the function will be called
multiple times, cache the values for the boost numerator and if
preferred cores will be enabled in global variables.
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
v1->v2:
* Add a comment into amd_get_boost_ratio_numerator() as well
---
arch/x86/kernel/acpi/cppc.c | 93 ++++++++++++++++++++++++++++++++----
drivers/cpufreq/amd-pstate.c | 34 +++++--------
include/acpi/cppc_acpi.h | 7 +++
3 files changed, 103 insertions(+), 31 deletions(-)
diff --git a/arch/x86/kernel/acpi/cppc.c b/arch/x86/kernel/acpi/cppc.c
index a75dcb382c786..df367bc359308 100644
--- a/arch/x86/kernel/acpi/cppc.c
+++ b/arch/x86/kernel/acpi/cppc.c
@@ -9,6 +9,16 @@
#include <asm/processor.h>
#include <asm/topology.h>
+#define CPPC_HIGHEST_PERF_PREFCORE 166
+
+enum amd_pref_core {
+ AMD_PREF_CORE_UNKNOWN = 0,
+ AMD_PREF_CORE_SUPPORTED,
+ AMD_PREF_CORE_UNSUPPORTED,
+};
+static enum amd_pref_core amd_pref_core_detected;
+static u64 boost_numerator;
+
/* Refer to drivers/acpi/cppc_acpi.c for the description of functions */
bool cpc_supported_by_cpu(void)
@@ -146,6 +156,66 @@ int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf)
}
EXPORT_SYMBOL_GPL(amd_get_highest_perf);
+/**
+ * amd_detect_prefcore: Detect if CPUs in the system support preferred cores
+ * @detected: Output variable for the result of the detection.
+ *
+ * Determine whether CPUs in the system support preferred cores. On systems
+ * that support preferred cores, different highest perf values will be found
+ * on different cores. On other systems, the highest perf value will be the
+ * same on all cores.
+ *
+ * The result of the detection will be stored in the 'detected' parameter.
+ *
+ * Return: 0 for success, negative error code otherwise
+ */
+int amd_detect_prefcore(bool *detected)
+{
+ int cpu, count = 0;
+ u64 highest_perf[2] = {0};
+
+ if (WARN_ON(!detected))
+ return -EINVAL;
+
+ switch (amd_pref_core_detected) {
+ case AMD_PREF_CORE_SUPPORTED:
+ *detected = true;
+ return 0;
+ case AMD_PREF_CORE_UNSUPPORTED:
+ *detected = false;
+ return 0;
+ default:
+ break;
+ }
+
+ for_each_present_cpu(cpu) {
+ u32 tmp;
+ int ret;
+
+ ret = amd_get_highest_perf(cpu, &tmp);
+ if (ret)
+ return ret;
+
+ if (!count || (count == 1 && tmp != highest_perf[0]))
+ highest_perf[count++] = tmp;
+
+ if (count == 2)
+ break;
+ }
+
+ *detected = (count == 2);
+ boost_numerator = highest_perf[0];
+
+ amd_pref_core_detected = *detected ? AMD_PREF_CORE_SUPPORTED :
+ AMD_PREF_CORE_UNSUPPORTED;
+
+ pr_debug("AMD CPPC preferred core is %ssupported (highest perf: 0x%llx)\n",
+ *detected ? "" : "un", highest_perf[0]);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(amd_detect_prefcore);
+
/**
* amd_get_boost_ratio_numerator: Get the numerator to use for boost ratio calculation
* @cpu: CPU to get numerator for.
@@ -155,24 +225,27 @@ EXPORT_SYMBOL_GPL(amd_get_highest_perf);
* a CPU. On systems that support preferred cores, this will be a hardcoded
* value. On other systems this will the highest performance register value.
*
+ * If booting the system with amd-pstate enabled but preferred cores disabled then
+ * the correct boost numerator will be returned to match hardware capabilities
+ * even if the preferred cores scheduling hints are not enabled.
+ *
* Return: 0 for success, negative error code otherwise.
*/
int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator)
{
- struct cpuinfo_x86 *c = &boot_cpu_data;
+ bool prefcore;
+ int ret;
- if (c->x86 == 0x17 && ((c->x86_model >= 0x30 && c->x86_model < 0x40) ||
- (c->x86_model >= 0x70 && c->x86_model < 0x80))) {
- *numerator = 166;
- return 0;
- }
+ ret = amd_detect_prefcore(&prefcore);
+ if (ret)
+ return ret;
- if (c->x86 == 0x19 && ((c->x86_model >= 0x20 && c->x86_model < 0x30) ||
- (c->x86_model >= 0x40 && c->x86_model < 0x70))) {
- *numerator = 166;
+ /* without preferred cores, return the highest perf register value */
+ if (!prefcore) {
+ *numerator = boost_numerator;
return 0;
}
- *numerator = 255;
+ *numerator = CPPC_HIGHEST_PERF_PREFCORE;
return 0;
}
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index 44df6ef66b5fa..c29cdf2d3882c 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -807,32 +807,18 @@ static DECLARE_WORK(sched_prefcore_work, amd_pstste_sched_prefcore_workfn);
static void amd_pstate_init_prefcore(struct amd_cpudata *cpudata)
{
- int ret, prio;
- u32 highest_perf;
-
- ret = amd_get_highest_perf(cpudata->cpu, &highest_perf);
- if (ret)
+ /* user disabled or not detected */
+ if (!amd_pstate_prefcore)
return;
cpudata->hw_prefcore = true;
- /* check if CPPC preferred core feature is enabled*/
- if (highest_perf < CPPC_MAX_PERF)
- prio = (int)highest_perf;
- else {
- pr_debug("AMD CPPC preferred core is unsupported!\n");
- cpudata->hw_prefcore = false;
- return;
- }
-
- if (!amd_pstate_prefcore)
- return;
/*
* The priorities can be set regardless of whether or not
* sched_set_itmt_support(true) has been called and it is valid to
* update them at any time after it has been called.
*/
- sched_set_itmt_core_prio(prio, cpudata->cpu);
+ sched_set_itmt_core_prio((int)READ_ONCE(cpudata->highest_perf), cpudata->cpu);
schedule_work(&sched_prefcore_work);
}
@@ -998,12 +984,12 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
cpudata->cpu = policy->cpu;
- amd_pstate_init_prefcore(cpudata);
-
ret = amd_pstate_init_perf(cpudata);
if (ret)
goto free_cpudata1;
+ amd_pstate_init_prefcore(cpudata);
+
ret = amd_pstate_init_freq(cpudata);
if (ret)
goto free_cpudata1;
@@ -1453,12 +1439,12 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
cpudata->cpu = policy->cpu;
cpudata->epp_policy = 0;
- amd_pstate_init_prefcore(cpudata);
-
ret = amd_pstate_init_perf(cpudata);
if (ret)
goto free_cpudata1;
+ amd_pstate_init_prefcore(cpudata);
+
ret = amd_pstate_init_freq(cpudata);
if (ret)
goto free_cpudata1;
@@ -1920,6 +1906,12 @@ static int __init amd_pstate_init(void)
static_call_update(amd_pstate_update_perf, cppc_update_perf);
}
+ if (amd_pstate_prefcore) {
+ ret = amd_detect_prefcore(&amd_pstate_prefcore);
+ if (ret)
+ return ret;
+ }
+
/* enable amd pstate feature */
ret = amd_pstate_enable(true);
if (ret) {
diff --git a/include/acpi/cppc_acpi.h b/include/acpi/cppc_acpi.h
index f7c7abf2a95e9..67325a9294ba1 100644
--- a/include/acpi/cppc_acpi.h
+++ b/include/acpi/cppc_acpi.h
@@ -136,6 +136,8 @@ struct cppc_cpudata {
cpumask_var_t shared_cpu_map;
};
+extern int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf);
+extern int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator);
#ifdef CONFIG_ACPI_CPPC_LIB
extern int cppc_get_desired_perf(int cpunum, u64 *desired_perf);
extern int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf);
@@ -161,6 +163,7 @@ extern int cppc_get_auto_sel_caps(int cpunum, struct cppc_perf_caps *perf_caps);
extern int cppc_set_auto_sel(int cpu, bool enable);
extern int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf);
extern int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator);
+extern int amd_detect_prefcore(bool *detected);
#else /* !CONFIG_ACPI_CPPC_LIB */
static inline int cppc_get_desired_perf(int cpunum, u64 *desired_perf)
{
@@ -242,6 +245,10 @@ static inline int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator
{
return -EOPNOTSUPP;
}
+static inline int amd_detect_prefcore(bool *detected)
+{
+ return -ENODEV;
+}
#endif /* !CONFIG_ACPI_CPPC_LIB */
#endif /* _CPPC_ACPI_H*/
--
2.43.0
Hi Mario,
kernel test robot noticed the following build errors:
[auto build test ERROR on rafael-pm/linux-next]
[also build test ERROR on rafael-pm/bleeding-edge tip/x86/core tip/master linus/master v6.11-rc6 next-20240904]
[cannot apply to tip/auto-latest]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/x86-amd-Move-amd_get_highest_perf-from-amd-c-to-cppc-c/20240904-044140
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link: https://lore.kernel.org/r/20240903203701.2695040-8-superm1%40kernel.org
patch subject: [PATCH v2 07/11] x86/amd: Detect preferred cores in amd_get_boost_ratio_numerator()
config: i386-allmodconfig (https://download.01.org/0day-ci/archive/20240905/202409050432.AoAbkkyJ-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240905/202409050432.AoAbkkyJ-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409050432.AoAbkkyJ-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from drivers/cpufreq/amd-pstate.c:42:
>> include/acpi/cppc_acpi.h:242:19: error: static declaration of 'amd_get_highest_perf' follows non-static declaration
242 | static inline int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf)
| ^~~~~~~~~~~~~~~~~~~~
include/acpi/cppc_acpi.h:141:12: note: previous declaration of 'amd_get_highest_perf' with type 'int(unsigned int, u32 *)' {aka 'int(unsigned int, unsigned int *)'}
141 | extern int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf);
| ^~~~~~~~~~~~~~~~~~~~
>> include/acpi/cppc_acpi.h:246:19: error: static declaration of 'amd_get_boost_ratio_numerator' follows non-static declaration
246 | static inline int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/acpi/cppc_acpi.h:142:12: note: previous declaration of 'amd_get_boost_ratio_numerator' with type 'int(unsigned int, u64 *)' {aka 'int(unsigned int, long long unsigned int *)'}
142 | extern int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/amd_get_highest_perf +242 include/acpi/cppc_acpi.h
337aadff8e4567 Ashwin Chaugule 2015-10-02 140
7885bc49834406 Mario Limonciello 2024-09-03 141 extern int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf);
7885bc49834406 Mario Limonciello 2024-09-03 142 extern int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator);
8a02d99876362f Rafael J. Wysocki 2021-03-16 143 #ifdef CONFIG_ACPI_CPPC_LIB
1757d05f3112ac Xiongfeng Wang 2019-02-17 144 extern int cppc_get_desired_perf(int cpunum, u64 *desired_perf);
0654cf05d17bc4 Rafael J. Wysocki 2021-09-04 145 extern int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf);
12753d71e8c5c3 Meng Li 2024-01-19 146 extern int cppc_get_highest_perf(int cpunum, u64 *highest_perf);
337aadff8e4567 Ashwin Chaugule 2015-10-02 147 extern int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs);
337aadff8e4567 Ashwin Chaugule 2015-10-02 148 extern int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls);
fb0b00af04d083 Jinzhou Su 2021-12-24 149 extern int cppc_set_enable(int cpu, bool enable);
337aadff8e4567 Ashwin Chaugule 2015-10-02 150 extern int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps);
ae2df912d1a557 Jeremy Linton 2022-09-12 151 extern bool cppc_perf_ctrs_in_pcc(void);
50b813b147e9eb Vincent Guittot 2023-12-11 152 extern unsigned int cppc_perf_to_khz(struct cppc_perf_caps *caps, unsigned int perf);
50b813b147e9eb Vincent Guittot 2023-12-11 153 extern unsigned int cppc_khz_to_perf(struct cppc_perf_caps *caps, unsigned int freq);
a28b2bfc099c6b Ionela Voinescu 2020-12-14 154 extern bool acpi_cpc_valid(void);
3cc30dd00a580c Pierre Gondois 2022-05-18 155 extern bool cppc_allow_fast_switch(void);
a28b2bfc099c6b Ionela Voinescu 2020-12-14 156 extern int acpi_get_psd_map(unsigned int cpu, struct cppc_cpudata *cpu_data);
be8b88d7d98771 Prakash, Prashanth 2016-08-16 157 extern unsigned int cppc_get_transition_latency(int cpu);
ad3bc25a320742 Borislav Petkov 2018-12-05 158 extern bool cpc_ffh_supported(void);
8b356e536e69f3 Mario Limonciello 2022-07-05 159 extern bool cpc_supported_by_cpu(void);
ad3bc25a320742 Borislav Petkov 2018-12-05 160 extern int cpc_read_ffh(int cpunum, struct cpc_reg *reg, u64 *val);
ad3bc25a320742 Borislav Petkov 2018-12-05 161 extern int cpc_write_ffh(int cpunum, struct cpc_reg *reg, u64 val);
7bc1fcd3990182 Perry Yuan 2023-01-31 162 extern int cppc_get_epp_perf(int cpunum, u64 *epp_perf);
7bc1fcd3990182 Perry Yuan 2023-01-31 163 extern int cppc_set_epp_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls, bool enable);
c984f5d5d45bd5 Wyes Karny 2023-03-07 164 extern int cppc_get_auto_sel_caps(int cpunum, struct cppc_perf_caps *perf_caps);
c984f5d5d45bd5 Wyes Karny 2023-03-07 165 extern int cppc_set_auto_sel(int cpu, bool enable);
cfa6630658f7de Mario Limonciello 2024-09-03 166 extern int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf);
402eea79aece78 Mario Limonciello 2024-09-03 167 extern int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator);
7885bc49834406 Mario Limonciello 2024-09-03 168 extern int amd_detect_prefcore(bool *detected);
8a02d99876362f Rafael J. Wysocki 2021-03-16 169 #else /* !CONFIG_ACPI_CPPC_LIB */
8a02d99876362f Rafael J. Wysocki 2021-03-16 170 static inline int cppc_get_desired_perf(int cpunum, u64 *desired_perf)
8a02d99876362f Rafael J. Wysocki 2021-03-16 171 {
e224a868e488cf Mario Limonciello 2024-09-03 172 return -EOPNOTSUPP;
8a02d99876362f Rafael J. Wysocki 2021-03-16 173 }
0654cf05d17bc4 Rafael J. Wysocki 2021-09-04 174 static inline int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf)
0654cf05d17bc4 Rafael J. Wysocki 2021-09-04 175 {
e224a868e488cf Mario Limonciello 2024-09-03 176 return -EOPNOTSUPP;
0654cf05d17bc4 Rafael J. Wysocki 2021-09-04 177 }
12753d71e8c5c3 Meng Li 2024-01-19 178 static inline int cppc_get_highest_perf(int cpunum, u64 *highest_perf)
12753d71e8c5c3 Meng Li 2024-01-19 179 {
e224a868e488cf Mario Limonciello 2024-09-03 180 return -EOPNOTSUPP;
12753d71e8c5c3 Meng Li 2024-01-19 181 }
8a02d99876362f Rafael J. Wysocki 2021-03-16 182 static inline int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs)
8a02d99876362f Rafael J. Wysocki 2021-03-16 183 {
e224a868e488cf Mario Limonciello 2024-09-03 184 return -EOPNOTSUPP;
8a02d99876362f Rafael J. Wysocki 2021-03-16 185 }
8a02d99876362f Rafael J. Wysocki 2021-03-16 186 static inline int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls)
8a02d99876362f Rafael J. Wysocki 2021-03-16 187 {
e224a868e488cf Mario Limonciello 2024-09-03 188 return -EOPNOTSUPP;
8a02d99876362f Rafael J. Wysocki 2021-03-16 189 }
fb0b00af04d083 Jinzhou Su 2021-12-24 190 static inline int cppc_set_enable(int cpu, bool enable)
fb0b00af04d083 Jinzhou Su 2021-12-24 191 {
e224a868e488cf Mario Limonciello 2024-09-03 192 return -EOPNOTSUPP;
fb0b00af04d083 Jinzhou Su 2021-12-24 193 }
8a02d99876362f Rafael J. Wysocki 2021-03-16 194 static inline int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps)
8a02d99876362f Rafael J. Wysocki 2021-03-16 195 {
e224a868e488cf Mario Limonciello 2024-09-03 196 return -EOPNOTSUPP;
8a02d99876362f Rafael J. Wysocki 2021-03-16 197 }
ae2df912d1a557 Jeremy Linton 2022-09-12 198 static inline bool cppc_perf_ctrs_in_pcc(void)
ae2df912d1a557 Jeremy Linton 2022-09-12 199 {
ae2df912d1a557 Jeremy Linton 2022-09-12 200 return false;
ae2df912d1a557 Jeremy Linton 2022-09-12 201 }
8a02d99876362f Rafael J. Wysocki 2021-03-16 202 static inline bool acpi_cpc_valid(void)
8a02d99876362f Rafael J. Wysocki 2021-03-16 203 {
8a02d99876362f Rafael J. Wysocki 2021-03-16 204 return false;
8a02d99876362f Rafael J. Wysocki 2021-03-16 205 }
3cc30dd00a580c Pierre Gondois 2022-05-18 206 static inline bool cppc_allow_fast_switch(void)
3cc30dd00a580c Pierre Gondois 2022-05-18 207 {
3cc30dd00a580c Pierre Gondois 2022-05-18 208 return false;
3cc30dd00a580c Pierre Gondois 2022-05-18 209 }
8a02d99876362f Rafael J. Wysocki 2021-03-16 210 static inline unsigned int cppc_get_transition_latency(int cpu)
8a02d99876362f Rafael J. Wysocki 2021-03-16 211 {
8a02d99876362f Rafael J. Wysocki 2021-03-16 212 return CPUFREQ_ETERNAL;
8a02d99876362f Rafael J. Wysocki 2021-03-16 213 }
8a02d99876362f Rafael J. Wysocki 2021-03-16 214 static inline bool cpc_ffh_supported(void)
8a02d99876362f Rafael J. Wysocki 2021-03-16 215 {
8a02d99876362f Rafael J. Wysocki 2021-03-16 216 return false;
8a02d99876362f Rafael J. Wysocki 2021-03-16 217 }
8a02d99876362f Rafael J. Wysocki 2021-03-16 218 static inline int cpc_read_ffh(int cpunum, struct cpc_reg *reg, u64 *val)
8a02d99876362f Rafael J. Wysocki 2021-03-16 219 {
e224a868e488cf Mario Limonciello 2024-09-03 220 return -EOPNOTSUPP;
8a02d99876362f Rafael J. Wysocki 2021-03-16 221 }
8a02d99876362f Rafael J. Wysocki 2021-03-16 222 static inline int cpc_write_ffh(int cpunum, struct cpc_reg *reg, u64 val)
8a02d99876362f Rafael J. Wysocki 2021-03-16 223 {
e224a868e488cf Mario Limonciello 2024-09-03 224 return -EOPNOTSUPP;
8a02d99876362f Rafael J. Wysocki 2021-03-16 225 }
7bc1fcd3990182 Perry Yuan 2023-01-31 226 static inline int cppc_set_epp_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls, bool enable)
7bc1fcd3990182 Perry Yuan 2023-01-31 227 {
e224a868e488cf Mario Limonciello 2024-09-03 228 return -EOPNOTSUPP;
7bc1fcd3990182 Perry Yuan 2023-01-31 229 }
7bc1fcd3990182 Perry Yuan 2023-01-31 230 static inline int cppc_get_epp_perf(int cpunum, u64 *epp_perf)
7bc1fcd3990182 Perry Yuan 2023-01-31 231 {
e224a868e488cf Mario Limonciello 2024-09-03 232 return -EOPNOTSUPP;
7bc1fcd3990182 Perry Yuan 2023-01-31 233 }
c984f5d5d45bd5 Wyes Karny 2023-03-07 234 static inline int cppc_set_auto_sel(int cpu, bool enable)
c984f5d5d45bd5 Wyes Karny 2023-03-07 235 {
e224a868e488cf Mario Limonciello 2024-09-03 236 return -EOPNOTSUPP;
c984f5d5d45bd5 Wyes Karny 2023-03-07 237 }
c984f5d5d45bd5 Wyes Karny 2023-03-07 238 static inline int cppc_get_auto_sel_caps(int cpunum, struct cppc_perf_caps *perf_caps)
c984f5d5d45bd5 Wyes Karny 2023-03-07 239 {
e224a868e488cf Mario Limonciello 2024-09-03 240 return -EOPNOTSUPP;
c984f5d5d45bd5 Wyes Karny 2023-03-07 241 }
cfa6630658f7de Mario Limonciello 2024-09-03 @242 static inline int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf)
cfa6630658f7de Mario Limonciello 2024-09-03 243 {
cfa6630658f7de Mario Limonciello 2024-09-03 244 return -ENODEV;
cfa6630658f7de Mario Limonciello 2024-09-03 245 }
402eea79aece78 Mario Limonciello 2024-09-03 @246 static inline int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator)
402eea79aece78 Mario Limonciello 2024-09-03 247 {
402eea79aece78 Mario Limonciello 2024-09-03 248 return -EOPNOTSUPP;
402eea79aece78 Mario Limonciello 2024-09-03 249 }
7885bc49834406 Mario Limonciello 2024-09-03 250 static inline int amd_detect_prefcore(bool *detected)
7885bc49834406 Mario Limonciello 2024-09-03 251 {
7885bc49834406 Mario Limonciello 2024-09-03 252 return -ENODEV;
7885bc49834406 Mario Limonciello 2024-09-03 253 }
8a02d99876362f Rafael J. Wysocki 2021-03-16 254 #endif /* !CONFIG_ACPI_CPPC_LIB */
337aadff8e4567 Ashwin Chaugule 2015-10-02 255
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2025 Red Hat, Inc.