diff options
author | Josh Boyer <jwboyer@gmail.com> | 2010-02-04 22:52:16 -0500 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-03-08 19:55:27 -0500 |
commit | de0b632ba05bc88949e67d33d1c313fcf922ae2e (patch) | |
tree | 9406ef8826300295b73b266d2fa754a3b0f21135 /drivers | |
parent | f09b7b2a1115d3afe02c66156746287f6c63bba0 (diff) |
powerpc: Fix G5 thermal shutdown
This changes the thresholds for the liquid cooled G5 thermal
shutdown mechanism to prevent an errant shutdown with some
models.
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/macintosh/therm_pm72.c | 30 | ||||
-rw-r--r-- | drivers/macintosh/therm_pm72.h | 2 |
2 files changed, 25 insertions, 7 deletions
diff --git a/drivers/macintosh/therm_pm72.c b/drivers/macintosh/therm_pm72.c index 5738d8bf2d97..921373e4e3af 100644 --- a/drivers/macintosh/therm_pm72.c +++ b/drivers/macintosh/therm_pm72.c | |||
@@ -948,10 +948,16 @@ static void do_monitor_cpu_combined(void) | |||
948 | printk(KERN_WARNING "Warning ! Temperature way above maximum (%d) !\n", | 948 | printk(KERN_WARNING "Warning ! Temperature way above maximum (%d) !\n", |
949 | temp_combi >> 16); | 949 | temp_combi >> 16); |
950 | state0->overtemp += CPU_MAX_OVERTEMP / 4; | 950 | state0->overtemp += CPU_MAX_OVERTEMP / 4; |
951 | } else if (temp_combi > (state0->mpu.tmax << 16)) | 951 | } else if (temp_combi > (state0->mpu.tmax << 16)) { |
952 | state0->overtemp++; | 952 | state0->overtemp++; |
953 | else | 953 | printk(KERN_WARNING "Temperature %d above max %d. overtemp %d\n", |
954 | temp_combi >> 16, state0->mpu.tmax, state0->overtemp); | ||
955 | } else { | ||
956 | if (state0->overtemp) | ||
957 | printk(KERN_WARNING "Temperature back down to %d\n", | ||
958 | temp_combi >> 16); | ||
954 | state0->overtemp = 0; | 959 | state0->overtemp = 0; |
960 | } | ||
955 | if (state0->overtemp >= CPU_MAX_OVERTEMP) | 961 | if (state0->overtemp >= CPU_MAX_OVERTEMP) |
956 | critical_state = 1; | 962 | critical_state = 1; |
957 | if (state0->overtemp > 0) { | 963 | if (state0->overtemp > 0) { |
@@ -1023,10 +1029,16 @@ static void do_monitor_cpu_split(struct cpu_pid_state *state) | |||
1023 | " (%d) !\n", | 1029 | " (%d) !\n", |
1024 | state->index, temp >> 16); | 1030 | state->index, temp >> 16); |
1025 | state->overtemp += CPU_MAX_OVERTEMP / 4; | 1031 | state->overtemp += CPU_MAX_OVERTEMP / 4; |
1026 | } else if (temp > (state->mpu.tmax << 16)) | 1032 | } else if (temp > (state->mpu.tmax << 16)) { |
1027 | state->overtemp++; | 1033 | state->overtemp++; |
1028 | else | 1034 | printk(KERN_WARNING "CPU %d temperature %d above max %d. overtemp %d\n", |
1035 | state->index, temp >> 16, state->mpu.tmax, state->overtemp); | ||
1036 | } else { | ||
1037 | if (state->overtemp) | ||
1038 | printk(KERN_WARNING "CPU %d temperature back down to %d\n", | ||
1039 | state->index, temp >> 16); | ||
1029 | state->overtemp = 0; | 1040 | state->overtemp = 0; |
1041 | } | ||
1030 | if (state->overtemp >= CPU_MAX_OVERTEMP) | 1042 | if (state->overtemp >= CPU_MAX_OVERTEMP) |
1031 | critical_state = 1; | 1043 | critical_state = 1; |
1032 | if (state->overtemp > 0) { | 1044 | if (state->overtemp > 0) { |
@@ -1085,10 +1097,16 @@ static void do_monitor_cpu_rack(struct cpu_pid_state *state) | |||
1085 | " (%d) !\n", | 1097 | " (%d) !\n", |
1086 | state->index, temp >> 16); | 1098 | state->index, temp >> 16); |
1087 | state->overtemp = CPU_MAX_OVERTEMP / 4; | 1099 | state->overtemp = CPU_MAX_OVERTEMP / 4; |
1088 | } else if (temp > (state->mpu.tmax << 16)) | 1100 | } else if (temp > (state->mpu.tmax << 16)) { |
1089 | state->overtemp++; | 1101 | state->overtemp++; |
1090 | else | 1102 | printk(KERN_WARNING "CPU %d temperature %d above max %d. overtemp %d\n", |
1103 | state->index, temp >> 16, state->mpu.tmax, state->overtemp); | ||
1104 | } else { | ||
1105 | if (state->overtemp) | ||
1106 | printk(KERN_WARNING "CPU %d temperature back down to %d\n", | ||
1107 | state->index, temp >> 16); | ||
1091 | state->overtemp = 0; | 1108 | state->overtemp = 0; |
1109 | } | ||
1092 | if (state->overtemp >= CPU_MAX_OVERTEMP) | 1110 | if (state->overtemp >= CPU_MAX_OVERTEMP) |
1093 | critical_state = 1; | 1111 | critical_state = 1; |
1094 | if (state->overtemp > 0) { | 1112 | if (state->overtemp > 0) { |
diff --git a/drivers/macintosh/therm_pm72.h b/drivers/macintosh/therm_pm72.h index 393cc9df94e1..df3680e2a22f 100644 --- a/drivers/macintosh/therm_pm72.h +++ b/drivers/macintosh/therm_pm72.h | |||
@@ -269,7 +269,7 @@ struct slots_pid_state | |||
269 | #define CPU_TEMP_HISTORY_SIZE 2 | 269 | #define CPU_TEMP_HISTORY_SIZE 2 |
270 | #define CPU_POWER_HISTORY_SIZE 10 | 270 | #define CPU_POWER_HISTORY_SIZE 10 |
271 | #define CPU_PID_INTERVAL 1 | 271 | #define CPU_PID_INTERVAL 1 |
272 | #define CPU_MAX_OVERTEMP 30 | 272 | #define CPU_MAX_OVERTEMP 90 |
273 | 273 | ||
274 | #define CPUA_PUMP_RPM_INDEX 7 | 274 | #define CPUA_PUMP_RPM_INDEX 7 |
275 | #define CPUB_PUMP_RPM_INDEX 8 | 275 | #define CPUB_PUMP_RPM_INDEX 8 |