diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-06-27 10:39:38 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-06-27 10:39:38 -0400 |
| commit | d94b20497b419e8394654f995f94742bd6b06640 (patch) | |
| tree | 73335fd96e4120fed9d1284a199030c4df449e0e | |
| parent | 064c946a0cda77057277d5758f259b54484cfc5a (diff) | |
| parent | cd4de21f7e65a8cd04860f5661b3c18648ee52a1 (diff) | |
Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging
* 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
hwmon: (k8temp) Bypass core swapping on single-core processors
hwmon: (i5k_amb) Fix sysfs attribute for lockdep
hwmon: (k10temp) Do not blacklist known working CPU models
| -rw-r--r-- | drivers/hwmon/i5k_amb.c | 6 | ||||
| -rw-r--r-- | drivers/hwmon/k10temp.c | 14 | ||||
| -rw-r--r-- | drivers/hwmon/k8temp.c | 2 |
3 files changed, 19 insertions, 3 deletions
diff --git a/drivers/hwmon/i5k_amb.c b/drivers/hwmon/i5k_amb.c index e880e2c3871..937983407e2 100644 --- a/drivers/hwmon/i5k_amb.c +++ b/drivers/hwmon/i5k_amb.c | |||
| @@ -289,6 +289,7 @@ static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev) | |||
| 289 | iattr->s_attr.dev_attr.attr.mode = S_IRUGO; | 289 | iattr->s_attr.dev_attr.attr.mode = S_IRUGO; |
| 290 | iattr->s_attr.dev_attr.show = show_label; | 290 | iattr->s_attr.dev_attr.show = show_label; |
| 291 | iattr->s_attr.index = k; | 291 | iattr->s_attr.index = k; |
| 292 | sysfs_attr_init(&iattr->s_attr.dev_attr.attr); | ||
| 292 | res = device_create_file(&pdev->dev, | 293 | res = device_create_file(&pdev->dev, |
| 293 | &iattr->s_attr.dev_attr); | 294 | &iattr->s_attr.dev_attr); |
| 294 | if (res) | 295 | if (res) |
| @@ -303,6 +304,7 @@ static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev) | |||
| 303 | iattr->s_attr.dev_attr.attr.mode = S_IRUGO; | 304 | iattr->s_attr.dev_attr.attr.mode = S_IRUGO; |
| 304 | iattr->s_attr.dev_attr.show = show_amb_temp; | 305 | iattr->s_attr.dev_attr.show = show_amb_temp; |
| 305 | iattr->s_attr.index = k; | 306 | iattr->s_attr.index = k; |
| 307 | sysfs_attr_init(&iattr->s_attr.dev_attr.attr); | ||
| 306 | res = device_create_file(&pdev->dev, | 308 | res = device_create_file(&pdev->dev, |
| 307 | &iattr->s_attr.dev_attr); | 309 | &iattr->s_attr.dev_attr); |
| 308 | if (res) | 310 | if (res) |
| @@ -318,6 +320,7 @@ static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev) | |||
| 318 | iattr->s_attr.dev_attr.show = show_amb_min; | 320 | iattr->s_attr.dev_attr.show = show_amb_min; |
| 319 | iattr->s_attr.dev_attr.store = store_amb_min; | 321 | iattr->s_attr.dev_attr.store = store_amb_min; |
| 320 | iattr->s_attr.index = k; | 322 | iattr->s_attr.index = k; |
| 323 | sysfs_attr_init(&iattr->s_attr.dev_attr.attr); | ||
| 321 | res = device_create_file(&pdev->dev, | 324 | res = device_create_file(&pdev->dev, |
| 322 | &iattr->s_attr.dev_attr); | 325 | &iattr->s_attr.dev_attr); |
| 323 | if (res) | 326 | if (res) |
| @@ -333,6 +336,7 @@ static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev) | |||
| 333 | iattr->s_attr.dev_attr.show = show_amb_mid; | 336 | iattr->s_attr.dev_attr.show = show_amb_mid; |
| 334 | iattr->s_attr.dev_attr.store = store_amb_mid; | 337 | iattr->s_attr.dev_attr.store = store_amb_mid; |
| 335 | iattr->s_attr.index = k; | 338 | iattr->s_attr.index = k; |
| 339 | sysfs_attr_init(&iattr->s_attr.dev_attr.attr); | ||
| 336 | res = device_create_file(&pdev->dev, | 340 | res = device_create_file(&pdev->dev, |
| 337 | &iattr->s_attr.dev_attr); | 341 | &iattr->s_attr.dev_attr); |
| 338 | if (res) | 342 | if (res) |
| @@ -348,6 +352,7 @@ static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev) | |||
| 348 | iattr->s_attr.dev_attr.show = show_amb_max; | 352 | iattr->s_attr.dev_attr.show = show_amb_max; |
| 349 | iattr->s_attr.dev_attr.store = store_amb_max; | 353 | iattr->s_attr.dev_attr.store = store_amb_max; |
| 350 | iattr->s_attr.index = k; | 354 | iattr->s_attr.index = k; |
| 355 | sysfs_attr_init(&iattr->s_attr.dev_attr.attr); | ||
| 351 | res = device_create_file(&pdev->dev, | 356 | res = device_create_file(&pdev->dev, |
| 352 | &iattr->s_attr.dev_attr); | 357 | &iattr->s_attr.dev_attr); |
| 353 | if (res) | 358 | if (res) |
| @@ -362,6 +367,7 @@ static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev) | |||
| 362 | iattr->s_attr.dev_attr.attr.mode = S_IRUGO; | 367 | iattr->s_attr.dev_attr.attr.mode = S_IRUGO; |
| 363 | iattr->s_attr.dev_attr.show = show_amb_alarm; | 368 | iattr->s_attr.dev_attr.show = show_amb_alarm; |
| 364 | iattr->s_attr.index = k; | 369 | iattr->s_attr.index = k; |
| 370 | sysfs_attr_init(&iattr->s_attr.dev_attr.attr); | ||
| 365 | res = device_create_file(&pdev->dev, | 371 | res = device_create_file(&pdev->dev, |
| 366 | &iattr->s_attr.dev_attr); | 372 | &iattr->s_attr.dev_attr); |
| 367 | if (res) | 373 | if (res) |
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) | |||
| 112 | if (pkg_type != CPUID_PKGTYPE_AM2R2_AM3) | 112 | if (pkg_type != CPUID_PKGTYPE_AM2R2_AM3) |
| 113 | return false; | 113 | return false; |
| 114 | 114 | ||
| 115 | /* Differentiate between AM2+ (bad) and AM3 (good) */ | 115 | /* DDR3 memory implies socket AM3, which is good */ |
| 116 | pci_bus_read_config_dword(pdev->bus, | 116 | pci_bus_read_config_dword(pdev->bus, |
| 117 | PCI_DEVFN(PCI_SLOT(pdev->devfn), 2), | 117 | PCI_DEVFN(PCI_SLOT(pdev->devfn), 2), |
| 118 | REG_DCT0_CONFIG_HIGH, ®_dram_cfg); | 118 | REG_DCT0_CONFIG_HIGH, ®_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 | static int __devinit k10temp_probe(struct pci_dev *pdev, | 132 | static int __devinit k10temp_probe(struct pci_dev *pdev, |
diff --git a/drivers/hwmon/k8temp.c b/drivers/hwmon/k8temp.c index 0ceb6d6200a..f26acdb1168 100644 --- a/drivers/hwmon/k8temp.c +++ b/drivers/hwmon/k8temp.c | |||
| @@ -120,7 +120,7 @@ static ssize_t show_temp(struct device *dev, | |||
| 120 | int temp; | 120 | int temp; |
| 121 | struct k8temp_data *data = k8temp_update_device(dev); | 121 | struct k8temp_data *data = k8temp_update_device(dev); |
| 122 | 122 | ||
| 123 | if (data->swap_core_select) | 123 | if (data->swap_core_select && (data->sensorsp & SEL_CORE)) |
| 124 | core = core ? 0 : 1; | 124 | core = core ? 0 : 1; |
| 125 | 125 | ||
| 126 | temp = TEMP_FROM_REG(data->temp[core][place]) + data->temp_offset; | 126 | temp = TEMP_FROM_REG(data->temp[core][place]) + data->temp_offset; |
