Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

hwmon: (k10temp) Do not blacklist known working CPU models

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>
Cc: stable@kernel.org

+12 -2
+12 -2
drivers/hwmon/k10temp.c
··· 112 112 if (pkg_type != CPUID_PKGTYPE_AM2R2_AM3) 113 113 return false; 114 114 115 - /* Differentiate between AM2+ (bad) and AM3 (good) */ 115 + /* DDR3 memory implies socket AM3, which is good */ 116 116 pci_bus_read_config_dword(pdev->bus, 117 117 PCI_DEVFN(PCI_SLOT(pdev->devfn), 2), 118 118 REG_DCT0_CONFIG_HIGH, &reg_dram_cfg); 119 - return !(reg_dram_cfg & DDR3_MODE); 119 + if (reg_dram_cfg & DDR3_MODE) 120 + return false; 121 + 122 + /* 123 + * Unfortunately it is possible to run a socket AM3 CPU with DDR2 124 + * memory. We blacklist all the cores which do exist in socket AM2+ 125 + * format. It still isn't perfect, as RB-C2 cores exist in both AM2+ 126 + * and AM3 formats, but that's the best we can do. 127 + */ 128 + return boot_cpu_data.x86_model < 4 || 129 + (boot_cpu_data.x86_model == 4 && boot_cpu_data.x86_mask <= 2); 120 130 } 121 131 122 132 static int __devinit k10temp_probe(struct pci_dev *pdev,