hwmon: (k8temp) adapt cpuid handling,
Subsystems (2)
PATCH 1/3 hwmon: (k8temp) adapt cpuid handling,
We don't need to use northbridge based CPUID checking as the allowed combinations of processors ensure that all processors in a multisocket system have similar characteristics, e.g.
(1) provide temperature sensor interface (>=RevC && <RevF)
(2) are affected by erratum #141 (>=RevF)
Thus it is sufficient to check the revision of the boot CPU.
For "mixed silicon support" refer to
"Revision Guide for AMD Athlon 64 and AMD Opteron Processors" (RevA-E) and "Revision Guide for AMD NPT Family 0Fh Processors" (RefF-G).
Cc Rudolf Marek <[email protected]>
Signed-off-by Andreas Herrmann <[email protected]>
--- drivers/hwmon/k8temp.c | 26 +++++++++++--------------- 1 files changed, 11 insertions(+), 15 deletions(-)
drivers/hwmon/k8temp.c +11 -15
@@ -31,10 +31,10 @@#include <linux/hwmon-sysfs.h> #include <linux/err.h> #include <linux/mutex.h> +#include <asm/processor.h> #define TEMP_FROM_REG (val) (((((val) >> 16) & 0xff) - 49) * 1000)#define REG_TEMP 0xe4 -#define REG_CPUID 0xfc#define SEL_PLACE 0x40#define SEL_CORE 0x04
@@ -48,7 +48,6 @@ struct k8temp_data {/* registers values */ u8 sensorsp;/* sensor presence bits - SEL_CORE & SEL_PLACE */ u32 temp[2 ][2 ];/* core, place */ -u8 fam; };static struct k8temp_data *k8temp_update_device (struct device *dev)
@@ -143,28 +142,25 @@ static int __devinit k8temp_probe(struct pci_dev *pdev,int err;u8 scfg;u32 temp; +u8 model, stepping;struct k8temp_data *data; -u32 cpuid =cpuid_eax (1 ); - -/* this feature should be available since SH-C0 core */ -if ((cpuid =0xf40 ) || (cpuid =0xf50 ) || (cpuid =0xf51 )) { - err = -ENODEV ; - goto exit; - }if (!(data =kzalloc (sizeof (struct k8temp_data ),GFP_KERNEL ))) { err = -ENOMEM ; goto exit; } -/* get real PCI based cpuid, prior revF of fam 0Fh, this reg is 0 */ -pci_read_config_dword (pdev,REG_CPUID , &cpuid); - - data->fam = (cpuid &0x00000f00 ) >>8 ; - data->fam += (cpuid &0x0ff00000 ) >>20 ; + model = boot_cpu_data.x86_model; + stepping = boot_cpu_data.x86_mask; -switch (data->fam) { +switch (boot_cpu_data.x86) {case 0xf : +/* feature available since SH-C0, exclude older revisions */ +if (((model =4 ) && (stepping =0 )) || + ((model =5 ) && ((stepping =0 ) || (stepping =1 )))) { + err = -ENODEV ; + goto exit; + }dev_warn (&pdev->dev,"Temperature readouts might be wrong" " - check errata #141\n" );break ;
Signature · 9 lines
1.6.0.4 _______________________________________________ lm-sensors mailing list [email protected] http://lists.lm-sensors.org/mailman/listinfo/lm-sensors