diff options
Diffstat (limited to 'drivers/hwmon/k10temp.c')
| -rw-r--r-- | drivers/hwmon/k10temp.c | 14 | 
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c index 099a2138cdf..da5a2404cd3 100644 --- a/drivers/hwmon/k10temp.c +++ b/drivers/hwmon/k10temp.c @@ -112,11 +112,21 @@ static bool __devinit has_erratum_319(struct pci_dev *pdev)  	if (pkg_type != CPUID_PKGTYPE_AM2R2_AM3)  		return false; -	/* Differentiate between AM2+ (bad) and AM3 (good) */ +	/* DDR3 memory implies socket AM3, which is good */  	pci_bus_read_config_dword(pdev->bus,  				  PCI_DEVFN(PCI_SLOT(pdev->devfn), 2),  				  REG_DCT0_CONFIG_HIGH, ®_dram_cfg); -	return !(reg_dram_cfg & DDR3_MODE); +	if (reg_dram_cfg & DDR3_MODE) +		return false; + +	/* +	 * Unfortunately it is possible to run a socket AM3 CPU with DDR2 +	 * memory. We blacklist all the cores which do exist in socket AM2+ +	 * format. It still isn't perfect, as RB-C2 cores exist in both AM2+ +	 * and AM3 formats, but that's the best we can do. +	 */ +	return boot_cpu_data.x86_model < 4 || +	       (boot_cpu_data.x86_model == 4 && boot_cpu_data.x86_mask <= 2);  }  static int __devinit k10temp_probe(struct pci_dev *pdev,  |