Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc-merge
* git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc-merge: powerpc: Fix various syscall/signal/swapcontext bugs [PATCH] powerpc: incorrect rmo_top handling in prom_init [PATCH] powerpc: Fix incorrect pud_ERROR() message [PATCH] powerpc: Expose SMT and L1 icache snoop userland features [PATCH] powerpc: Fix windfarm_pm112 not starting all control loops [PATCH] powerpc: Fix old g5 issues with windfarm powerpc32: Fix timebase synchronization on 32-bit powermacs powerpc: Turn off verbose debug output in powermac platform functions powerpc: Fix might-sleep warning in program check exception handler
This commit is contained in:
@@ -35,6 +35,8 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include <asm/prom.h>
|
||||
|
||||
#include "windfarm.h"
|
||||
|
||||
#define VERSION "0.2"
|
||||
@@ -465,6 +467,11 @@ static int __init windfarm_core_init(void)
|
||||
{
|
||||
DBG("wf: core loaded\n");
|
||||
|
||||
/* Don't register on old machines that use therm_pm72 for now */
|
||||
if (machine_is_compatible("PowerMac7,2") ||
|
||||
machine_is_compatible("PowerMac7,3") ||
|
||||
machine_is_compatible("RackMac3,1"))
|
||||
return -ENODEV;
|
||||
platform_device_register(&wf_platform_device);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
#include <linux/wait.h>
|
||||
#include <linux/cpufreq.h>
|
||||
|
||||
#include <asm/prom.h>
|
||||
|
||||
#include "windfarm.h"
|
||||
|
||||
#define VERSION "0.3"
|
||||
@@ -74,6 +76,12 @@ static int __init wf_cpufreq_clamp_init(void)
|
||||
{
|
||||
struct wf_control *clamp;
|
||||
|
||||
/* Don't register on old machines that use therm_pm72 for now */
|
||||
if (machine_is_compatible("PowerMac7,2") ||
|
||||
machine_is_compatible("PowerMac7,3") ||
|
||||
machine_is_compatible("RackMac3,1"))
|
||||
return -ENODEV;
|
||||
|
||||
clamp = kmalloc(sizeof(struct wf_control), GFP_KERNEL);
|
||||
if (clamp == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
#include "windfarm.h"
|
||||
|
||||
#define VERSION "0.1"
|
||||
#define VERSION "0.2"
|
||||
|
||||
#undef DEBUG
|
||||
|
||||
@@ -113,6 +113,7 @@ static struct wf_lm75_sensor *wf_lm75_create(struct i2c_adapter *adapter,
|
||||
const char *loc)
|
||||
{
|
||||
struct wf_lm75_sensor *lm;
|
||||
int rc;
|
||||
|
||||
DBG("wf_lm75: creating %s device at address 0x%02x\n",
|
||||
ds1775 ? "ds1775" : "lm75", addr);
|
||||
@@ -139,9 +140,11 @@ static struct wf_lm75_sensor *wf_lm75_create(struct i2c_adapter *adapter,
|
||||
lm->i2c.driver = &wf_lm75_driver;
|
||||
strncpy(lm->i2c.name, lm->sens.name, I2C_NAME_SIZE-1);
|
||||
|
||||
if (i2c_attach_client(&lm->i2c)) {
|
||||
printk(KERN_ERR "windfarm: failed to attach %s %s to i2c\n",
|
||||
ds1775 ? "ds1775" : "lm75", lm->i2c.name);
|
||||
rc = i2c_attach_client(&lm->i2c);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "windfarm: failed to attach %s %s to i2c,"
|
||||
" err %d\n", ds1775 ? "ds1775" : "lm75",
|
||||
lm->i2c.name, rc);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -175,16 +178,22 @@ static int wf_lm75_attach(struct i2c_adapter *adapter)
|
||||
(dev = of_get_next_child(busnode, dev)) != NULL;) {
|
||||
const char *loc =
|
||||
get_property(dev, "hwsensor-location", NULL);
|
||||
u32 *reg = (u32 *)get_property(dev, "reg", NULL);
|
||||
DBG(" dev: %s... (loc: %p, reg: %p)\n", dev->name, loc, reg);
|
||||
if (loc == NULL || reg == NULL)
|
||||
u8 addr;
|
||||
|
||||
/* We must re-match the adapter in order to properly check
|
||||
* the channel on multibus setups
|
||||
*/
|
||||
if (!pmac_i2c_match_adapter(dev, adapter))
|
||||
continue;
|
||||
addr = pmac_i2c_get_dev_addr(dev);
|
||||
if (loc == NULL || addr == 0)
|
||||
continue;
|
||||
/* real lm75 */
|
||||
if (device_is_compatible(dev, "lm75"))
|
||||
wf_lm75_create(adapter, *reg, 0, loc);
|
||||
wf_lm75_create(adapter, addr, 0, loc);
|
||||
/* ds1775 (compatible, better resolution */
|
||||
else if (device_is_compatible(dev, "ds1775"))
|
||||
wf_lm75_create(adapter, *reg, 1, loc);
|
||||
wf_lm75_create(adapter, addr, 1, loc);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -206,6 +215,11 @@ static int wf_lm75_detach(struct i2c_client *client)
|
||||
|
||||
static int __init wf_lm75_sensor_init(void)
|
||||
{
|
||||
/* Don't register on old machines that use therm_pm72 for now */
|
||||
if (machine_is_compatible("PowerMac7,2") ||
|
||||
machine_is_compatible("PowerMac7,3") ||
|
||||
machine_is_compatible("RackMac3,1"))
|
||||
return -ENODEV;
|
||||
return i2c_add_driver(&wf_lm75_driver);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
#include "windfarm.h"
|
||||
|
||||
#define VERSION "0.1"
|
||||
#define VERSION "0.2"
|
||||
|
||||
/* This currently only exports the external temperature sensor,
|
||||
since that's all the control loops need. */
|
||||
@@ -81,7 +81,7 @@ static struct wf_sensor_ops wf_max6690_ops = {
|
||||
static void wf_max6690_create(struct i2c_adapter *adapter, u8 addr)
|
||||
{
|
||||
struct wf_6690_sensor *max;
|
||||
char *name = "u4-temp";
|
||||
char *name = "backside-temp";
|
||||
|
||||
max = kzalloc(sizeof(struct wf_6690_sensor), GFP_KERNEL);
|
||||
if (max == NULL) {
|
||||
@@ -118,7 +118,6 @@ static int wf_max6690_attach(struct i2c_adapter *adapter)
|
||||
struct device_node *busnode, *dev = NULL;
|
||||
struct pmac_i2c_bus *bus;
|
||||
const char *loc;
|
||||
u32 *reg;
|
||||
|
||||
bus = pmac_i2c_adapter_to_bus(adapter);
|
||||
if (bus == NULL)
|
||||
@@ -126,16 +125,23 @@ static int wf_max6690_attach(struct i2c_adapter *adapter)
|
||||
busnode = pmac_i2c_get_bus_node(bus);
|
||||
|
||||
while ((dev = of_get_next_child(busnode, dev)) != NULL) {
|
||||
u8 addr;
|
||||
|
||||
/* We must re-match the adapter in order to properly check
|
||||
* the channel on multibus setups
|
||||
*/
|
||||
if (!pmac_i2c_match_adapter(dev, adapter))
|
||||
continue;
|
||||
if (!device_is_compatible(dev, "max6690"))
|
||||
continue;
|
||||
addr = pmac_i2c_get_dev_addr(dev);
|
||||
loc = get_property(dev, "hwsensor-location", NULL);
|
||||
reg = (u32 *) get_property(dev, "reg", NULL);
|
||||
if (!loc || !reg)
|
||||
if (loc == NULL || addr == 0)
|
||||
continue;
|
||||
printk("found max6690, loc=%s reg=%x\n", loc, *reg);
|
||||
printk("found max6690, loc=%s addr=0x%02x\n", loc, addr);
|
||||
if (strcmp(loc, "BACKSIDE"))
|
||||
continue;
|
||||
wf_max6690_create(adapter, *reg);
|
||||
wf_max6690_create(adapter, addr);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -153,6 +159,11 @@ static int wf_max6690_detach(struct i2c_client *client)
|
||||
|
||||
static int __init wf_max6690_sensor_init(void)
|
||||
{
|
||||
/* Don't register on old machines that use therm_pm72 for now */
|
||||
if (machine_is_compatible("PowerMac7,2") ||
|
||||
machine_is_compatible("PowerMac7,3") ||
|
||||
machine_is_compatible("RackMac3,1"))
|
||||
return -ENODEV;
|
||||
return i2c_add_driver(&wf_max6690_driver);
|
||||
}
|
||||
|
||||
|
||||
@@ -358,6 +358,7 @@ static void backside_fan_tick(void)
|
||||
return;
|
||||
if (!backside_tick) {
|
||||
/* first time; initialize things */
|
||||
printk(KERN_INFO "windfarm: Backside control loop started.\n");
|
||||
backside_param.min = backside_fan->ops->get_min(backside_fan);
|
||||
backside_param.max = backside_fan->ops->get_max(backside_fan);
|
||||
wf_pid_init(&backside_pid, &backside_param);
|
||||
@@ -407,6 +408,7 @@ static void drive_bay_fan_tick(void)
|
||||
return;
|
||||
if (!drive_bay_tick) {
|
||||
/* first time; initialize things */
|
||||
printk(KERN_INFO "windfarm: Drive bay control loop started.\n");
|
||||
drive_bay_prm.min = drive_bay_fan->ops->get_min(drive_bay_fan);
|
||||
drive_bay_prm.max = drive_bay_fan->ops->get_max(drive_bay_fan);
|
||||
wf_pid_init(&drive_bay_pid, &drive_bay_prm);
|
||||
@@ -458,6 +460,7 @@ static void slots_fan_tick(void)
|
||||
return;
|
||||
if (!slots_started) {
|
||||
/* first time; initialize things */
|
||||
printk(KERN_INFO "windfarm: Slots control loop started.\n");
|
||||
wf_pid_init(&slots_pid, &slots_param);
|
||||
slots_started = 1;
|
||||
}
|
||||
@@ -504,6 +507,7 @@ static void pm112_tick(void)
|
||||
|
||||
if (!started) {
|
||||
started = 1;
|
||||
printk(KERN_INFO "windfarm: CPUs control loops started.\n");
|
||||
for (i = 0; i < nr_cores; ++i) {
|
||||
if (create_cpu_loop(i) < 0) {
|
||||
failure_state = FAILURE_PERM;
|
||||
@@ -594,8 +598,6 @@ static void pm112_new_sensor(struct wf_sensor *sr)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (have_all_sensors)
|
||||
return;
|
||||
if (!strncmp(sr->name, "cpu-temp-", 9)) {
|
||||
i = sr->name[9] - '0';
|
||||
if (sr->name[10] == 0 && i < NR_CORES &&
|
||||
@@ -613,7 +615,7 @@ static void pm112_new_sensor(struct wf_sensor *sr)
|
||||
} else if (!strcmp(sr->name, "slots-power")) {
|
||||
if (slots_power == NULL && wf_get_sensor(sr) == 0)
|
||||
slots_power = sr;
|
||||
} else if (!strcmp(sr->name, "u4-temp")) {
|
||||
} else if (!strcmp(sr->name, "backside-temp")) {
|
||||
if (u4_temp == NULL && wf_get_sensor(sr) == 0)
|
||||
u4_temp = sr;
|
||||
} else
|
||||
|
||||
Reference in New Issue
Block a user