Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  intel_tcc_cooling.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-only
/*
 * cooling device driver that activates the processor throttling by
 * programming the TCC Offset register.
 * Copyright (c) 2021, Intel Corporation.
 */

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/device.h>
#include <linux/intel_tcc.h>
#include <linux/module.h>
#include <linux/thermal.h>
#include <asm/cpu_device_id.h>
#include <asm/msr.h>

#define TCC_PROGRAMMABLE BIT(30)
#define TCC_LOCKED  BIT(31)

static struct thermal_cooling_device *tcc_cdev;

static int tcc_get_max_state(struct thermal_cooling_device *cdev, unsigned long
        *state)
{
 *state = intel_tcc_get_offset_mask();
 return 0;
}

static int tcc_get_cur_state(struct thermal_cooling_device *cdev, unsigned long
        *state)
{
 int offset = intel_tcc_get_offset(-1);

 if (offset < 0)
  return offset;

 *state = offset;
 return 0;
}

static int tcc_set_cur_state(struct thermal_cooling_device *cdev, unsigned long
        state)
{
 return intel_tcc_set_offset(-1, (int)state);
}

static const struct thermal_cooling_device_ops tcc_cooling_ops = {
 .get_max_state = tcc_get_max_state,
 .get_cur_state = tcc_get_cur_state,
 .set_cur_state = tcc_set_cur_state,
};

static const struct x86_cpu_id tcc_ids[] __initconst = {
 X86_MATCH_VFM(INTEL_SKYLAKE, NULL),
 X86_MATCH_VFM(INTEL_SKYLAKE_L, NULL),
 X86_MATCH_VFM(INTEL_KABYLAKE, NULL),
 X86_MATCH_VFM(INTEL_KABYLAKE_L, NULL),
 X86_MATCH_VFM(INTEL_ICELAKE, NULL),
 X86_MATCH_VFM(INTEL_ICELAKE_L, NULL),
 X86_MATCH_VFM(INTEL_TIGERLAKE, NULL),
 X86_MATCH_VFM(INTEL_TIGERLAKE_L, NULL),
 X86_MATCH_VFM(INTEL_COMETLAKE, NULL),
 X86_MATCH_VFM(INTEL_ALDERLAKE, NULL),
 X86_MATCH_VFM(INTEL_ALDERLAKE_L, NULL),
 X86_MATCH_VFM(INTEL_ATOM_GRACEMONT, NULL),
 X86_MATCH_VFM(INTEL_RAPTORLAKE, NULL),
 X86_MATCH_VFM(INTEL_RAPTORLAKE_P, NULL),
 X86_MATCH_VFM(INTEL_RAPTORLAKE_S, NULL),
 {}
};

MODULE_DEVICE_TABLE(x86cpu, tcc_ids);

static int __init tcc_cooling_init(void)
{
 int ret;
 u64 val;
 const struct x86_cpu_id *id;

 int err;

 id = x86_match_cpu(tcc_ids);
 if (!id)
  return -ENODEV;

 err = rdmsrq_safe(MSR_PLATFORM_INFO, &val);
 if (err)
  return err;

 if (!(val & TCC_PROGRAMMABLE))
  return -ENODEV;

 err = rdmsrq_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 =
     thermal_cooling_device_register("TCC Offset", NULL,
         &tcc_cooling_ops);
 if (IS_ERR(tcc_cdev)) {
  ret = PTR_ERR(tcc_cdev);
  return ret;
 }
 return 0;
}

module_init(tcc_cooling_init)

static void __exit tcc_cooling_exit(void)
{
 thermal_cooling_device_unregister(tcc_cdev);
}

module_exit(tcc_cooling_exit)

MODULE_IMPORT_NS("INTEL_TCC");
MODULE_DESCRIPTION("TCC offset cooling device Driver");
MODULE_AUTHOR("Zhang Rui ");
MODULE_LICENSE("GPL v2");

Messung V0.5
C=96 H=93 G=94

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge