Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

thermal: intel: intel_tcc_cooling: Detect TCC lock bit

When MSR_IA32_TEMPERATURE_TARGET is locked, TCC Offset can not be
updated even if the PROGRAMMABE Bit is set.

Yield the driver on platforms with MSR_IA32_TEMPERATURE_TARGET locked.

Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

authored by

Zhang Rui and committed by
Rafael J. Wysocki
be6abd3e 54d9135c

+10
+10
drivers/thermal/intel/intel_tcc_cooling.c
··· 14 14 #define TCC_SHIFT 24 15 15 #define TCC_MASK (0x3fULL<<24) 16 16 #define TCC_PROGRAMMABLE BIT(30) 17 + #define TCC_LOCKED BIT(31) 17 18 18 19 static struct thermal_cooling_device *tcc_cdev; 19 20 ··· 108 107 109 108 if (!(val & TCC_PROGRAMMABLE)) 110 109 return -ENODEV; 110 + 111 + err = rdmsrl_safe(MSR_IA32_TEMPERATURE_TARGET, &val); 112 + if (err) 113 + return err; 114 + 115 + if (val & TCC_LOCKED) { 116 + pr_info("TCC Offset locked\n"); 117 + return -ENODEV; 118 + } 111 119 112 120 pr_info("Programmable TCC Offset detected\n"); 113 121