thermal/intel/intel_soc_dts_iosf: Use Intel TCC library
authorZhang Rui <rui.zhang@intel.com>
Mon, 19 Dec 2022 15:46:17 +0000 (23:46 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 30 Dec 2022 18:57:38 +0000 (19:57 +0100)
Cleanup the code by using Intel TCC library for TCC (Thermal Control
Circuitry) MSR access.

Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/thermal/intel/Kconfig
drivers/thermal/intel/intel_soc_dts_iosf.c

index 6b938c0..329c0ee 100644 (file)
@@ -32,6 +32,7 @@ config INTEL_SOC_DTS_IOSF_CORE
        tristate
        depends on X86 && PCI
        select IOSF_MBI
+       select INTEL_TCC
        help
          This is becoming a common feature for Intel SoCs to expose the additional
          digital temperature sensors (DTSs) using side band interface (IOSF). This
index 342b0bb..2138693 100644 (file)
@@ -7,6 +7,7 @@
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
 #include <linux/bitops.h>
+#include <linux/intel_tcc.h>
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
 /* DTS0 and DTS 1 */
 #define SOC_MAX_DTS_SENSORS            2
 
-static int get_tj_max(u32 *tj_max)
-{
-       u32 eax, edx;
-       u32 val;
-       int err;
-
-       err = rdmsr_safe(MSR_IA32_TEMPERATURE_TARGET, &eax, &edx);
-       if (err)
-               goto err_ret;
-       else {
-               val = (eax >> 16) & 0xff;
-               if (val)
-                       *tj_max = val * 1000;
-               else {
-                       err = -EINVAL;
-                       goto err_ret;
-               }
-       }
-
-       return 0;
-err_ret:
-       *tj_max = 0;
-
-       return err;
-}
-
 static int sys_get_trip_temp(struct thermal_zone_device *tzd, int trip,
                             int *temp)
 {
@@ -415,8 +390,9 @@ struct intel_soc_dts_sensors *intel_soc_dts_iosf_init(
        if (!trip_count || read_only_trip_count > trip_count)
                return ERR_PTR(-EINVAL);
 
-       if (get_tj_max(&tj_max))
-               return ERR_PTR(-EINVAL);
+       tj_max = intel_tcc_get_tjmax(-1);
+       if (tj_max < 0)
+               return ERR_PTR(tj_max);
 
        sensors = kzalloc(sizeof(*sensors), GFP_KERNEL);
        if (!sensors)
@@ -475,4 +451,5 @@ void intel_soc_dts_iosf_exit(struct intel_soc_dts_sensors *sensors)
 }
 EXPORT_SYMBOL_GPL(intel_soc_dts_iosf_exit);
 
+MODULE_IMPORT_NS(INTEL_TCC);
 MODULE_LICENSE("GPL v2");