Lines Matching +full:cpu +full:- +full:offset
1 // SPDX-License-Identifier: GPL-2.0-only
3 * intel_tcc.c - Library for Intel TCC (thermal control circuitry) MSR access
12 * intel_tcc_get_tjmax() - returns the default TCC activation Temperature
13 * @cpu: cpu that the MSR should be run on, nagative value means any cpu.
20 int intel_tcc_get_tjmax(int cpu) in intel_tcc_get_tjmax() argument
25 if (cpu < 0) in intel_tcc_get_tjmax()
28 err = rdmsr_safe_on_cpu(cpu, MSR_IA32_TEMPERATURE_TARGET, &low, &high); in intel_tcc_get_tjmax()
34 return val ? val : -ENODATA; in intel_tcc_get_tjmax()
39 * intel_tcc_get_offset() - returns the TCC Offset value to Tjmax
40 * @cpu: cpu that the MSR should be run on, nagative value means any cpu.
42 * Get the TCC offset value to Tjmax. The effective thermal throttling or TCC
43 * activation temperature equals "Tjmax" - "TCC Offset", in degrees C.
45 * Return: Tcc offset value in degrees C on success, negative error code otherwise.
47 int intel_tcc_get_offset(int cpu) in intel_tcc_get_offset() argument
52 if (cpu < 0) in intel_tcc_get_offset()
55 err = rdmsr_safe_on_cpu(cpu, MSR_IA32_TEMPERATURE_TARGET, &low, &high); in intel_tcc_get_offset()
64 * intel_tcc_set_offset() - set the TCC offset value to Tjmax
65 * @cpu: cpu that the MSR should be run on, nagative value means any cpu.
66 * @offset: TCC offset value in degree C
68 * Set the TCC Offset value to Tjmax. The effective thermal throttling or TCC
69 * activation temperature equals "Tjmax" - "TCC Offset", in degree C.
74 int intel_tcc_set_offset(int cpu, int offset) in intel_tcc_set_offset() argument
79 if (offset < 0 || offset > 0x3f) in intel_tcc_set_offset()
80 return -EINVAL; in intel_tcc_set_offset()
82 if (cpu < 0) in intel_tcc_set_offset()
85 err = rdmsr_safe_on_cpu(cpu, MSR_IA32_TEMPERATURE_TARGET, &low, &high); in intel_tcc_set_offset()
91 return -EPERM; in intel_tcc_set_offset()
94 low |= offset << 24; in intel_tcc_set_offset()
96 if (cpu < 0) in intel_tcc_set_offset()
99 return wrmsr_safe_on_cpu(cpu, MSR_IA32_TEMPERATURE_TARGET, low, high); in intel_tcc_set_offset()
104 * intel_tcc_get_temp() - returns the current temperature
105 * @cpu: cpu that the MSR should be run on, nagative value means any cpu.
108 * Get the current temperature returned by the CPU core/package level
113 int intel_tcc_get_temp(int cpu, bool pkg) in intel_tcc_get_temp() argument
119 tjmax = intel_tcc_get_tjmax(cpu); in intel_tcc_get_temp()
123 if (cpu < 0) in intel_tcc_get_temp()
126 err = rdmsr_safe_on_cpu(cpu, msr, &low, &high); in intel_tcc_get_temp()
132 return -ENODATA; in intel_tcc_get_temp()
134 temp = tjmax - ((low >> 16) & 0x7f); in intel_tcc_get_temp()
136 /* Do not allow negative CPU temperature */ in intel_tcc_get_temp()
137 return temp >= 0 ? temp : -ENODATA; in intel_tcc_get_temp()