]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
x86: Add a common function to set CPU thermal target
authorSimon Glass <sjg@chromium.org>
Wed, 25 Sep 2019 14:56:36 +0000 (08:56 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Tue, 8 Oct 2019 05:57:46 +0000 (13:57 +0800)
This code appears in a few places, so move it to a common file.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/broadwell/cpu_full.c
arch/x86/cpu/intel_common/cpu.c
arch/x86/cpu/ivybridge/model_206ax.c
arch/x86/include/asm/cpu_common.h

index 0e3d878139235fa7e1add5eeb27b42a64b2a86d5..d1f3c07109ffff3c59302a399d95ae87459f3225 100644 (file)
@@ -495,24 +495,6 @@ static void configure_misc(void)
        msr_write(MSR_IA32_PACKAGE_THERM_INTERRUPT, msr);
 }
 
-static void configure_thermal_target(struct udevice *dev)
-{
-       int tcc_offset;
-       msr_t msr;
-
-       tcc_offset = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev),
-                                   "intel,tcc-offset", 0);
-
-       /* Set TCC activaiton offset if supported */
-       msr = msr_read(MSR_PLATFORM_INFO);
-       if ((msr.lo & (1 << 30)) && tcc_offset) {
-               msr = msr_read(MSR_TEMPERATURE_TARGET);
-               msr.lo &= ~(0xf << 24); /* Bits 27:24 */
-               msr.lo |= (tcc_offset & 0xf) << 24;
-               msr_write(MSR_TEMPERATURE_TARGET, msr);
-       }
-}
-
 static void configure_dca_cap(void)
 {
        struct cpuid_result cpuid_regs;
@@ -562,7 +544,7 @@ static void cpu_core_init(struct udevice *dev)
        configure_misc();
 
        /* Thermal throttle activation offset */
-       configure_thermal_target(dev);
+       cpu_configure_thermal_target(dev);
 
        /* Enable Direct Cache Access */
        configure_dca_cap();
index 3a0d505a321a4b702fabe3345b5c1c5c6f8f7290..7d0ed73b4b6bf933fa66bb082a7e20f0b1cc0a4e 100644 (file)
@@ -123,3 +123,25 @@ int cpu_intel_get_info(struct cpu_info *info, int bclk)
 
        return 0;
 }
+
+int cpu_configure_thermal_target(struct udevice *dev)
+{
+       u32 tcc_offset;
+       msr_t msr;
+       int ret;
+
+       ret = dev_read_u32(dev, "tcc-offset", &tcc_offset);
+       if (!ret)
+               return -ENOENT;
+
+       /* Set TCC activaiton offset if supported */
+       msr = msr_read(MSR_PLATFORM_INFO);
+       if (msr.lo & (1 << 30)) {
+               msr = msr_read(MSR_TEMPERATURE_TARGET);
+               msr.lo &= ~(0xf << 24); /* Bits 27:24 */
+               msr.lo |= (tcc_offset & 0xf) << 24;
+               msr_write(MSR_TEMPERATURE_TARGET, msr);
+       }
+
+       return 0;
+}
index 68e78e9478b45632316f1b2b621f132d656b4413..ed66d2dd8d72b74b11feb99ad8c0a2dc808f7895 100644 (file)
@@ -283,26 +283,6 @@ static void configure_c_states(void)
        msr_write(MSR_PP1_CURRENT_CONFIG, msr);
 }
 
-static int configure_thermal_target(struct udevice *dev)
-{
-       int tcc_offset;
-       msr_t msr;
-
-       tcc_offset = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev),
-                                   "tcc-offset", 0);
-
-       /* Set TCC activaiton offset if supported */
-       msr = msr_read(MSR_PLATFORM_INFO);
-       if ((msr.lo & (1 << 30)) && tcc_offset) {
-               msr = msr_read(MSR_TEMPERATURE_TARGET);
-               msr.lo &= ~(0xf << 24); /* Bits 27:24 */
-               msr.lo |= (tcc_offset & 0xf) << 24;
-               msr_write(MSR_TEMPERATURE_TARGET, msr);
-       }
-
-       return 0;
-}
-
 static void configure_misc(void)
 {
        msr_t msr;
@@ -414,10 +394,11 @@ static int model_206ax_init(struct udevice *dev)
        configure_misc();
 
        /* Thermal throttle activation offset */
-       ret = configure_thermal_target(dev);
+       ret = cpu_configure_thermal_target(dev);
        if (ret) {
                debug("Cannot set thermal target\n");
-               return ret;
+               if (ret != -ENOENT)
+                       return ret;
        }
 
        /* Enable Direct Cache Access */
index 7ae3bd1c535388572836269f666f4f1c1923140c..e158c96ce6a624d4324081ed03662e93c42e4955 100644 (file)
@@ -45,4 +45,15 @@ int cpu_set_flex_ratio_to_tdp_nominal(void);
  */
 int cpu_intel_get_info(struct cpu_info *info, int bclk_mz);
 
+/**
+ * cpu_configure_thermal_target() - Set the thermal target for a CPU
+ *
+ * This looks up the tcc-offset property and uses it to set the
+ * MSR_TEMPERATURE_TARGET value.
+ *
+ * @dev: CPU device
+ * @return 0 if OK, -ENOENT if no target is given in device tree
+ */
+int cpu_configure_thermal_target(struct udevice *dev);
+
 #endif