Module Name: src
Committed By: andvar
Date: Tue Apr 30 19:35:29 UTC 2024
Modified Files:
src/distrib/sets/lists/man: mi
src/distrib/sets/lists/manhtml: mi
src/share/man/man4/man4.i386: Makefile
src/share/man/man4/man4.x86: Makefile
src/sys/arch/amd64/conf: ALL GENERIC
src/sys/arch/i386/conf: ALL GENERIC
src/sys/arch/x86/x86: viac7temp.c
Added Files:
src/share/man/man4/man4.x86: viac7temp.4
Removed Files:
src/share/man/man4/man4.i386: viac7temp.4
Log Message:
viac7temp(4): rewrite temperature sensor to read value from MSR instead of using
documented cpuid instruction and eax register.
This approach is adapted from linux via-cputemp.c, no official documentation is
currently available. However, msr value seems to work on all tested CPUs while
documented cpuid instruction typically reports 0, even for my C7-D CPU.
msr value seems to have temperature in Celsius in lower 24-bits without fraction
(thus "msr & 0xffffff;" is used).
Tested on my personal systems based on CPUs below (i386 and amd64):
C7-D 1.6GHz (i386 only), Nano X2 L4350E, Nano X2 U4300, U2300 Nano, KX-U6580.
Also got one response via email which was based on Nano X2 L4050 (VE-900).
Nano reports independent values for each core.
KX-U6580 seems to show the same value for all cores but more testing is needed.
Since it works on amd64 capable CPUs, adding driver to GENERIC kernel config.
Also moving viac7temp man page to x86 instead of i386 (with updates).
In theory the change should add support for all VIA Nano CPUs and Zhaoxin CPUs
at least up to KX-6000(G) series.
In the future I may need to introduce amd64 kernel module as well.
Plan to pullup to at least netbsd-10.
Patch mainly reviewed by riastradh.
To generate a diff of this commit:
cvs rdiff -u -r1.1772 -r1.1773 src/distrib/sets/lists/man/mi
cvs rdiff -u -r1.1 -r1.2 src/distrib/sets/lists/manhtml/mi
cvs rdiff -u -r1.80 -r1.81 src/share/man/man4/man4.i386/Makefile
cvs rdiff -u -r1.3 -r0 src/share/man/man4/man4.i386/viac7temp.4
cvs rdiff -u -r1.23 -r1.24 src/share/man/man4/man4.x86/Makefile
cvs rdiff -u -r0 -r1.1 src/share/man/man4/man4.x86/viac7temp.4
cvs rdiff -u -r1.187 -r1.188 src/sys/arch/amd64/conf/ALL
cvs rdiff -u -r1.611 -r1.612 src/sys/arch/amd64/conf/GENERIC
cvs rdiff -u -r1.518 -r1.519 src/sys/arch/i386/conf/ALL
cvs rdiff -u -r1.1255 -r1.1256 src/sys/arch/i386/conf/GENERIC
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/x86/x86/viac7temp.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/distrib/sets/lists/man/mi
diff -u src/distrib/sets/lists/man/mi:1.1772 src/distrib/sets/lists/man/mi:1.1773
--- src/distrib/sets/lists/man/mi:1.1772 Tue Apr 9 15:17:24 2024
+++ src/distrib/sets/lists/man/mi Tue Apr 30 19:35:28 2024
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1772 2024/04/09 15:17:24 nia Exp $
+# $NetBSD: mi,v 1.1773 2024/04/30 19:35:28 andvar Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -1340,7 +1340,7 @@
./usr/share/man/cat4/i386/spic.0 man-sys-catman .cat
./usr/share/man/cat4/i386/vald.0 man-obsolete obsolete
./usr/share/man/cat4/i386/vesafb.0 man-obsolete obsolete
-./usr/share/man/cat4/i386/viac7temp.0 man-sys-catman .cat
+./usr/share/man/cat4/i386/viac7temp.0 man-obsolete obsolete
./usr/share/man/cat4/i4b.0 man-obsolete obsolete
./usr/share/man/cat4/i4bctl.0 man-obsolete obsolete
./usr/share/man/cat4/i4bipr.0 man-obsolete obsolete
@@ -2158,6 +2158,7 @@
./usr/share/man/cat4/x86/tco.0 man-sys-catman .cat
./usr/share/man/cat4/x86/tprof_amdpmi.0 man-obsolete obsolete
./usr/share/man/cat4/x86/tprof_pmi.0 man-obsolete obsolete
+./usr/share/man/cat4/x86/viac7temp.0 man-sys-catman .cat
./usr/share/man/cat4/x86/vmt.0 man-obsolete obsolete
./usr/share/man/cat4/x86/vmx.0 man-obsolete obsolete
./usr/share/man/cat4/xbd.0 man-sys-catman .cat
@@ -4835,7 +4836,7 @@
./usr/share/man/man4/i386/spic.4 man-sys-man .man
./usr/share/man/man4/i386/vald.4 man-obsolete obsolete
./usr/share/man/man4/i386/vesafb.4 man-obsolete obsolete
-./usr/share/man/man4/i386/viac7temp.4 man-sys-man .man
+./usr/share/man/man4/i386/viac7temp.4 man-obsolete obsolete
./usr/share/man/man4/i4b.4 man-obsolete obsolete
./usr/share/man/man4/i4bctl.4 man-obsolete obsolete
./usr/share/man/man4/i4bipr.4 man-obsolete obsolete
@@ -5653,6 +5654,7 @@
./usr/share/man/man4/x86/tco.4 man-sys-man .man
./usr/share/man/man4/x86/tprof_amdpmi.4 man-obsolete obsolete
./usr/share/man/man4/x86/tprof_pmi.4 man-obsolete obsolete
+./usr/share/man/man4/x86/viac7temp.4 man-sys-man .man
./usr/share/man/man4/x86/vmt.4 man-obsolete obsolete
./usr/share/man/man4/x86/vmx.4 man-obsolete obsolete
./usr/share/man/man4/xbd.4 man-sys-man .man
Index: src/distrib/sets/lists/manhtml/mi
diff -u src/distrib/sets/lists/manhtml/mi:1.1 src/distrib/sets/lists/manhtml/mi:1.2
--- src/distrib/sets/lists/manhtml/mi:1.1 Tue Apr 9 15:17:24 2024
+++ src/distrib/sets/lists/manhtml/mi Tue Apr 30 19:35:28 2024
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1 2024/04/09 15:17:24 nia Exp $
+# $NetBSD: mi,v 1.2 2024/04/30 19:35:28 andvar Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -1201,7 +1201,7 @@
./usr/share/man/html4/i386/spic.html man-sys-htmlman html
./usr/share/man/html4/i386/vald.html man-obsolete obsolete
./usr/share/man/html4/i386/vesafb.html man-obsolete obsolete
-./usr/share/man/html4/i386/viac7temp.html man-sys-htmlman html
+./usr/share/man/html4/i386/viac7temp.html man-obsolete obsolete
./usr/share/man/html4/i915drm.html man-sys-htmlman html
./usr/share/man/html4/iavc.html man-obsolete obsolete
./usr/share/man/html4/iavf.html man-sys-htmlman html
@@ -1961,6 +1961,7 @@
./usr/share/man/html4/x86/tco.html man-sys-htmlman html
./usr/share/man/html4/x86/tprof_amdpmi.html man-obsolete obsolete
./usr/share/man/html4/x86/tprof_pmi.html man-obsolete obsolete
+./usr/share/man/html4/x86/viac7temp.html man-sys-htmlman html
./usr/share/man/html4/x86/vmt.html man-obsolete obsolete
./usr/share/man/html4/x86/vmx.html man-obsolete obsolete
./usr/share/man/html4/xbd.html man-sys-htmlman html
Index: src/share/man/man4/man4.i386/Makefile
diff -u src/share/man/man4/man4.i386/Makefile:1.80 src/share/man/man4/man4.i386/Makefile:1.81
--- src/share/man/man4/man4.i386/Makefile:1.80 Sun Aug 1 21:56:27 2021
+++ src/share/man/man4/man4.i386/Makefile Tue Apr 30 19:35:28 2024
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.80 2021/08/01 21:56:27 andvar Exp $
+# $NetBSD: Makefile,v 1.81 2024/04/30 19:35:28 andvar Exp $
# from: @(#)Makefile 8.1 (Berkeley) 6/5/93
MAN= apm.4 \
@@ -6,7 +6,7 @@ MAN= apm.4 \
elanpar.4 elanpex.4 elansc.4 \
gcscide.4 gcscpcib.4 geodewdog.4 geodecntr.4 glxsb.4 gscpcib.4 \
intro.4 io.4 lms.4 mms.4 \
- pcibios.4 pcmb.4 pnpbios.4 rdcide.4 rdcpcib.4 spic.4 viac7temp.4
+ pcibios.4 pcmb.4 pnpbios.4 rdcide.4 rdcpcib.4 spic.4
MLINKS+=pcibios.4 PCIBIOS.4
MANSUBDIR=/i386
Index: src/share/man/man4/man4.x86/Makefile
diff -u src/share/man/man4/man4.x86/Makefile:1.23 src/share/man/man4/man4.x86/Makefile:1.24
--- src/share/man/man4/man4.x86/Makefile:1.23 Sun Jul 25 07:35:55 2021
+++ src/share/man/man4/man4.x86/Makefile Tue Apr 30 19:35:29 2024
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.23 2021/07/25 07:35:55 nia Exp $
+# $NetBSD: Makefile,v 1.24 2024/04/30 19:35:29 andvar Exp $
MAN= amdccp.4 amdpcib.4 apic.4 autoconf.4 balloon.4 console.4 coretemp.4 \
est.4 fdc.4 fwhrng.4 hpet.4 ichlpcib.4 imcsmb.4 lpt.4 mem.4 odcm.4 \
- powernow.4 soekrisgpio.4 tco.4 amdsmn.4 amdzentemp.4
+ powernow.4 soekrisgpio.4 tco.4 amdsmn.4 amdzentemp.4 viac7temp.4
MLINKS+=apic.4 ioapic.4 \
apic.4 lapic.4
Index: src/sys/arch/amd64/conf/ALL
diff -u src/sys/arch/amd64/conf/ALL:1.187 src/sys/arch/amd64/conf/ALL:1.188
--- src/sys/arch/amd64/conf/ALL:1.187 Tue Apr 2 22:30:03 2024
+++ src/sys/arch/amd64/conf/ALL Tue Apr 30 19:35:29 2024
@@ -1,4 +1,4 @@
-# $NetBSD: ALL,v 1.187 2024/04/02 22:30:03 charlotte Exp $
+# $NetBSD: ALL,v 1.188 2024/04/30 19:35:29 andvar Exp $
# From NetBSD: GENERIC,v 1.787 2006/10/01 18:37:54 bouyer Exp
#
# ALL machine description file
@@ -17,7 +17,7 @@ include "arch/amd64/conf/std.amd64"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "ALL-$Revision: 1.187 $"
+#ident "ALL-$Revision: 1.188 $"
maxusers 64 # estimated number of users
@@ -38,7 +38,7 @@ est0 at cpu0 # Intel Enhanced SpeedSte
odcm0 at cpu0 # On-demand clock modulation
padlock0 at cpu0 # VIA PadLock
powernow0 at cpu0 # AMD PowerNow! and Cool'n'Quiet (non-ACPI)
-viac7temp* at cpu? # VIA C7 temperature sensor
+viac7temp* at cpu? # VIA C7, Nano and Zhaoxin temperature sensor
vmt0 at cpu0 # VMware Tools
# Beep when it is safe to power down the system (requires sysbeep)
Index: src/sys/arch/amd64/conf/GENERIC
diff -u src/sys/arch/amd64/conf/GENERIC:1.611 src/sys/arch/amd64/conf/GENERIC:1.612
--- src/sys/arch/amd64/conf/GENERIC:1.611 Sun Apr 21 14:11:12 2024
+++ src/sys/arch/amd64/conf/GENERIC Tue Apr 30 19:35:29 2024
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.611 2024/04/21 14:11:12 riastradh Exp $
+# $NetBSD: GENERIC,v 1.612 2024/04/30 19:35:29 andvar Exp $
#
# GENERIC machine description file
#
@@ -22,7 +22,7 @@ include "arch/amd64/conf/std.amd64"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "GENERIC-$Revision: 1.611 $"
+#ident "GENERIC-$Revision: 1.612 $"
maxusers 64 # estimated number of users
@@ -89,6 +89,7 @@ est0 at cpu0 # Intel Enhanced SpeedSte
hyperv0 at cpu0 # Microsoft Hyper-V
#odcm0 at cpu0 # On-demand clock modulation
powernow0 at cpu0 # AMD PowerNow! and Cool'n'Quiet (non-ACPI)
+viac7temp* at cpu? # VIA C7, Nano and Zhaoxin temperature sensor
vmt0 at cpu0 # VMware Tools
#Xen PV support for PVH and HVM guests
Index: src/sys/arch/i386/conf/ALL
diff -u src/sys/arch/i386/conf/ALL:1.518 src/sys/arch/i386/conf/ALL:1.519
--- src/sys/arch/i386/conf/ALL:1.518 Tue Apr 2 22:30:03 2024
+++ src/sys/arch/i386/conf/ALL Tue Apr 30 19:35:28 2024
@@ -1,4 +1,4 @@
-# $NetBSD: ALL,v 1.518 2024/04/02 22:30:03 charlotte Exp $
+# $NetBSD: ALL,v 1.519 2024/04/30 19:35:28 andvar Exp $
# From NetBSD: GENERIC,v 1.787 2006/10/01 18:37:54 bouyer Exp
#
# ALL machine description file
@@ -17,7 +17,7 @@ include "arch/i386/conf/std.i386"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "ALL-$Revision: 1.518 $"
+#ident "ALL-$Revision: 1.519 $"
maxusers 64 # estimated number of users
@@ -38,7 +38,7 @@ est0 at cpu0 # Intel Enhanced SpeedSte
odcm0 at cpu0 # On-demand clock modulation
padlock0 at cpu0 # VIA PadLock
powernow0 at cpu0 # AMD PowerNow! and Cool'n'Quiet (non-ACPI)
-viac7temp* at cpu? # VIA C7 temperature sensor
+viac7temp* at cpu? # VIA C7, Nano and Zhaoxin temperature sensor
vmt0 at cpu0 # VMware Tools
options MTRR # memory-type range register syscall support
Index: src/sys/arch/i386/conf/GENERIC
diff -u src/sys/arch/i386/conf/GENERIC:1.1255 src/sys/arch/i386/conf/GENERIC:1.1256
--- src/sys/arch/i386/conf/GENERIC:1.1255 Sun Apr 21 14:11:12 2024
+++ src/sys/arch/i386/conf/GENERIC Tue Apr 30 19:35:28 2024
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.1255 2024/04/21 14:11:12 riastradh Exp $
+# $NetBSD: GENERIC,v 1.1256 2024/04/30 19:35:28 andvar Exp $
#
# GENERIC machine description file
#
@@ -22,7 +22,7 @@ include "arch/i386/conf/std.i386"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "GENERIC-$Revision: 1.1255 $"
+#ident "GENERIC-$Revision: 1.1256 $"
maxusers 64 # estimated number of users
@@ -41,7 +41,7 @@ hyperv0 at cpu0 # Microsoft Hyper-V
#odcm0 at cpu0 # On-demand clock modulation
#padlock0 at cpu0 # VIA PadLock
powernow0 at cpu0 # AMD PowerNow! and Cool'n'Quiet (non-ACPI)
-viac7temp* at cpu? # VIA C7 temperature sensor
+viac7temp* at cpu? # VIA C7, Nano and Zhaoxin temperature sensor
vmt0 at cpu0 # VMware Tools
#Xen PV support for HVM guests
Index: src/sys/arch/x86/x86/viac7temp.c
diff -u src/sys/arch/x86/x86/viac7temp.c:1.10 src/sys/arch/x86/x86/viac7temp.c:1.11
--- src/sys/arch/x86/x86/viac7temp.c:1.10 Sat Apr 13 09:12:09 2024
+++ src/sys/arch/x86/x86/viac7temp.c Tue Apr 30 19:35:29 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: viac7temp.c,v 1.10 2024/04/13 09:12:09 andvar Exp $ */
+/* $NetBSD: viac7temp.c,v 1.11 2024/04/30 19:35:29 andvar Exp $ */
/*-
* Copyright (c) 2009 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: viac7temp.c,v 1.10 2024/04/13 09:12:09 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: viac7temp.c,v 1.11 2024/04/30 19:35:29 andvar Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -42,11 +42,15 @@ __KERNEL_RCSID(0, "$NetBSD: viac7temp.c,
#include <machine/cputypes.h>
#include <machine/specialreg.h>
+#define MSR_TEMP_NANO 0x1423 /* VIA Nano and Zhaoxin CPUs */
+#define MSR_TEMP_C7 0x1169 /* VIA C7 CPUs */
+
struct viac7temp_softc {
device_t sc_dev;
struct cpu_info *sc_ci;
struct sysmon_envsys *sc_sme;
envsys_data_t sc_sensor;
+ uint32_t sc_temp_msr;
};
static int viac7temp_match(device_t, cfdata_t, void *);
@@ -54,6 +58,7 @@ static void viac7temp_attach(device_t, d
static int viac7temp_detach(device_t, int);
static void viac7temp_refresh(struct sysmon_envsys *, envsys_data_t *);
static void viac7temp_refresh_xcall(void *, void *);
+static uint32_t viac7temp_msr_register(struct cpu_info *ci);
CFATTACH_DECL_NEW(viac7temp, sizeof(struct viac7temp_softc),
viac7temp_match, viac7temp_attach, viac7temp_detach, NULL);
@@ -63,8 +68,8 @@ viac7temp_match(device_t parent, cfdata_
{
struct cpufeature_attach_args *cfaa = aux;
struct cpu_info *ci = cfaa->ci;
- uint32_t family, model;
- uint32_t descs[4];
+ uint32_t temp_msr;
+ uint64_t val;
if (strcmp(cfaa->name, "temperature") != 0)
return 0;
@@ -72,18 +77,12 @@ viac7temp_match(device_t parent, cfdata_
if (cpu_vendor != CPUVENDOR_IDT)
return 0;
- model = CPUID_TO_MODEL(ci->ci_signature);
- family = CPUID_TO_FAMILY(ci->ci_signature);
+ temp_msr = viac7temp_msr_register(ci);
- if (family != 0x06 || model < 0x09)
+ if (!temp_msr || rdmsr_safe(temp_msr, &val) == EFAULT)
return 0;
- x86_cpuid(0xc0000000, descs);
-
- if (descs[0] >= 0xc0000002)
- return 1;
-
- return 0;
+ return 1;
}
static void
@@ -100,6 +99,8 @@ viac7temp_attach(device_t parent, device
sc->sc_sensor.flags = ENVSYS_FMONLIMITS|ENVSYS_FHAS_ENTROPY;
sc->sc_sensor.state = ENVSYS_SINVALID;
+ sc->sc_temp_msr = viac7temp_msr_register(ci);
+
(void)strlcpy(sc->sc_sensor.desc, "temperature",
sizeof(sc->sc_sensor.desc));
@@ -116,7 +117,7 @@ viac7temp_attach(device_t parent, device
goto fail;
aprint_naive("\n");
- aprint_normal(": VIA C7 temperature sensor\n");
+ aprint_normal(": VIA C7/Nano temperature sensor\n");
(void)pmf_device_register(self, NULL, NULL);
@@ -153,17 +154,41 @@ viac7temp_refresh(struct sysmon_envsys *
static void
viac7temp_refresh_xcall(void *arg0, void *arg1)
{
+ struct viac7temp_softc *sc = arg0;
envsys_data_t *edata = arg1;
- uint32_t descs[4];
+ uint64_t msr;
- x86_cpuid(0xc0000002, descs);
+ if (rdmsr_safe(sc->sc_temp_msr, &msr) == EFAULT) {
+ edata->value_cur = 0;
+ edata->state = ENVSYS_SINVALID;
+ aprint_error_dev(sc->sc_dev, "Reading temperature failed\n");
+ return;
+ }
- edata->value_cur = descs[0] >> 8;
+ /* Lower 24-bits hold value in Celsius */
+ edata->value_cur = msr & 0xffffff;
edata->value_cur *= 1000000;
edata->value_cur += 273150000;
edata->state = ENVSYS_SVALID;
}
+static uint32_t viac7temp_msr_register(struct cpu_info *ci)
+{
+ uint32_t family, model;
+ uint32_t reg;
+
+ reg = 0;
+ model = CPUID_TO_MODEL(ci->ci_signature);
+ family = CPUID_TO_FAMILY(ci->ci_signature);
+
+ if (family == 0x07 || (family == 0x06 && model >= 0x0f))
+ reg = MSR_TEMP_NANO;
+ else if (family == 0x06 && model > 0x09)
+ reg = MSR_TEMP_C7;
+
+ return reg;
+}
+
MODULE(MODULE_CLASS_DRIVER, viac7temp, NULL);
#ifdef _MODULE
Added files:
Index: src/share/man/man4/man4.x86/viac7temp.4
diff -u /dev/null src/share/man/man4/man4.x86/viac7temp.4:1.1
--- /dev/null Tue Apr 30 19:35:29 2024
+++ src/share/man/man4/man4.x86/viac7temp.4 Tue Apr 30 19:35:29 2024
@@ -0,0 +1,55 @@
+.\" $NetBSD: viac7temp.4,v 1.1 2024/04/30 19:35:29 andvar Exp $
+.\"
+.\" Copyright (c) 2011 Jukka Ruohonen <[email protected]>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Neither the name of the author nor the names of any
+.\" contributors may be used to endorse or promote products derived
+.\" from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd April 30, 2024
+.Dt VIAC7TEMP 4
+.Os
+.Sh NAME
+.Nm viac7temp
+.Nd VIA C7, VIA Nano and Zhaoxin CPU temperature sensor
+.Sh SYNOPSIS
+.Cd "viac7temp* at cpu?"
+.Sh DESCRIPTION
+The
+.Nm
+driver supports temperature sensors found in
+.Tn VIA
+.Tn C7,
+.Tn VIA
+.Tn Nano
+and
+.Tn Zhaoxin
+processors.
+The available information is available through the
+.Xr envsys 4
+.Tn API
+and the
+.Xr envstat 8
+command.
+.Sh SEE ALSO
+.Xr coretemp 4
+.Sh AUTHORS
+.An Jared D. McNeill Aq Mt [email protected]