From 7d27b92f7e8104283bd71e3c5bbdcb7b7ec54301 Mon Sep 17 00:00:00 2001 From: Sam Kirby Date: Tue, 18 May 2021 14:15:10 +0100 Subject: Add k10temp plugin The existing support for the coretemp kernel driver only works with Intel CPUs. This commit extends support for temperature monitoring to AMD CPUs. k10temp is a kernel driver for monitoring the temperature of AMD processors. It supports everything from AMD's 10h (Opteron/Athlon) family of processors to the latest 19h (Zen 3) family. Reference: https://www.kernel.org/doc/html/latest/hwmon/k10temp.html The meaning of the various temperatures made available has changed over the years and only `Tctl` is available on processors prior to the 17h family. Labels for these temperatures are present but as Tctl and Tdie do not contain a number I could not find a way to use these as `checkedDataRetrieval` expects an integer label. It is a PCI device and so an address needs to be supplied as part of the configuration. Example configuration: `Run K10Temp "0000:00:18.3" ["--template", "T: C | C"] 60` --- src/Xmobar/Plugins/Monitors/K10Temp.hs | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/Xmobar/Plugins/Monitors/K10Temp.hs (limited to 'src/Xmobar/Plugins/Monitors') diff --git a/src/Xmobar/Plugins/Monitors/K10Temp.hs b/src/Xmobar/Plugins/Monitors/K10Temp.hs new file mode 100644 index 0000000..ea2856d --- /dev/null +++ b/src/Xmobar/Plugins/Monitors/K10Temp.hs @@ -0,0 +1,43 @@ +----------------------------------------------------------------------------- +-- | +-- Module : Plugins.Monitors.CoreTemp +-- Copyright : (c) Juraj Hercek +-- License : BSD-style (see LICENSE) +-- +-- Maintainer : Juraj Hercek +-- Stability : unstable +-- Portability : unportable +-- +-- A temperature monitor that works with AMD CPUs for Xmobar +-- +----------------------------------------------------------------------------- + +module Xmobar.Plugins.Monitors.K10Temp where + +import Xmobar.Plugins.Monitors.Common + +import Data.Char (isDigit) + +-- | +-- K10 temperature default configuration. Default template contains only the +-- die temperature, user should specify custom template in order to get more +-- ccd or IO die temperatures. +k10TempConfig :: IO MConfig +k10TempConfig = mkMConfig + "Temp: C" -- template + ["Tctl", "Tdie", "Tccd1", "Tccd2", "Tccd3" + ,"Tccd4", "Tccd5", "Tccd6", "Tccd7", "Tccd8" + ] -- available replacements + +-- | +-- Function retrieves monitor string holding the temperature +-- (or temperatures) +runK10Temp :: [String] -> Monitor String +runK10Temp args = do + dn <- getConfigValue decDigits + failureMessage <- getConfigValue naString + let slot = head args + path = ["/sys/bus/pci/drivers/k10temp/" ++ slot ++ "/hwmon/hwmon", "/temp", "_input"] + divisor = 1e3 :: Double + show' = showDigits (max 0 dn) + checkedDataRetrieval failureMessage [path] Nothing (/divisor) show' -- cgit v1.2.3