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 | |
| 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>
| -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 |
