thermal: intel: intel_tcc_cooling: Detect TCC lock bit
authorZhang Rui <rui.zhang@intel.com>
Tue, 8 Nov 2022 08:12:19 +0000 (16:12 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 9 Nov 2022 13:58:02 +0000 (14:58 +0100)
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>
drivers/thermal/intel/intel_tcc_cooling.c

index 95adac4..c9e84e6 100644 (file)
@@ -14,6 +14,7 @@
 #define TCC_SHIFT 24
 #define TCC_MASK       (0x3fULL<<24)
 #define TCC_PROGRAMMABLE       BIT(30)
+#define TCC_LOCKED             BIT(31)
 
 static struct thermal_cooling_device *tcc_cdev;
 
@@ -108,6 +109,15 @@ static int __init tcc_cooling_init(void)
        if (!(val & TCC_PROGRAMMABLE))
                return -ENODEV;
 
+       err = rdmsrl_safe(MSR_IA32_TEMPERATURE_TARGET, &val);
+       if (err)
+               return err;
+
+       if (val & TCC_LOCKED) {
+               pr_info("TCC Offset locked\n");
+               return -ENODEV;
+       }
+
        pr_info("Programmable TCC Offset detected\n");
 
        tcc_cdev =