| From eefc2d9e3d4f8820f2c128a0e44a23de28b1ed64 Mon Sep 17 00:00:00 2001 |
| From: Jean Delvare <khali@linux-fr.org> |
| Date: Sun, 20 Jun 2010 09:22:31 +0200 |
| Subject: hwmon: (k10temp) Do not blacklist known working CPU models |
| |
| From: Jean Delvare <khali@linux-fr.org> |
| |
| commit eefc2d9e3d4f8820f2c128a0e44a23de28b1ed64 upstream. |
| |
| When detecting AM2+ or AM3 socket with DDR2, only blacklist cores |
| which are known to exist in AM2+ format. |
| |
| Signed-off-by: Jean Delvare <khali@linux-fr.org> |
| Acked-by: Clemens Ladisch <clemens@ladisch.de> |
| Cc: Andreas Herrmann <andreas.herrmann3@amd.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/hwmon/k10temp.c | 14 ++++++++++++-- |
| 1 file changed, 12 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/hwmon/k10temp.c |
| +++ b/drivers/hwmon/k10temp.c |
| @@ -112,11 +112,21 @@ static bool __devinit has_erratum_319(st |
| 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, |