windfarm_pm91.c (57b8628bb0ac4e47c806e45c5bbd89282e93869b) | windfarm_pm91.c (33e6820b767a5bfa4a0d579da6ee4568a2b1e730) |
---|---|
1/* 2 * Windfarm PowerMac thermal control. SMU based 1 CPU desktop control loops 3 * 4 * (c) Copyright 2005 Benjamin Herrenschmidt, IBM Corp. 5 * <benh@kernel.crashing.org> 6 * 7 * Released under the term of the GNU GPL v2. 8 * --- 178 unchanged lines hidden (view full) --- 187 tdelta = ((s32)piddata->target_temp_delta) << 16; 188 maxpow = ((s32)piddata->max_power) << 16; 189 powadj = ((s32)piddata->power_adj) << 16; 190 191 pid_param.tmax = tmax; 192 pid_param.ttarget = tmax - tdelta; 193 pid_param.pmaxadj = maxpow - powadj; 194 | 1/* 2 * Windfarm PowerMac thermal control. SMU based 1 CPU desktop control loops 3 * 4 * (c) Copyright 2005 Benjamin Herrenschmidt, IBM Corp. 5 * <benh@kernel.crashing.org> 6 * 7 * Released under the term of the GNU GPL v2. 8 * --- 178 unchanged lines hidden (view full) --- 187 tdelta = ((s32)piddata->target_temp_delta) << 16; 188 maxpow = ((s32)piddata->max_power) << 16; 189 powadj = ((s32)piddata->power_adj) << 16; 190 191 pid_param.tmax = tmax; 192 pid_param.ttarget = tmax - tdelta; 193 pid_param.pmaxadj = maxpow - powadj; 194 |
195 pid_param.min = fan_cpu_main->ops->get_min(fan_cpu_main); 196 pid_param.max = fan_cpu_main->ops->get_max(fan_cpu_main); | 195 pid_param.min = wf_control_get_min(fan_cpu_main); 196 pid_param.max = wf_control_get_max(fan_cpu_main); |
197 198 wf_cpu_pid_init(&wf_smu_cpu_fans->pid, &pid_param); 199 200 DBG("wf: CPU Fan control initialized.\n"); 201 DBG(" ttarged=%d.%03d, tmax=%d.%03d, min=%d RPM, max=%d RPM\n", 202 FIX32TOPRINT(pid_param.ttarget), FIX32TOPRINT(pid_param.tmax), 203 pid_param.min, pid_param.max); 204 --- 16 unchanged lines hidden (view full) --- 221 222 if (--st->ticks != 0) { 223 if (wf_smu_readjust) 224 goto readjust; 225 return; 226 } 227 st->ticks = WF_SMU_CPU_FANS_INTERVAL; 228 | 197 198 wf_cpu_pid_init(&wf_smu_cpu_fans->pid, &pid_param); 199 200 DBG("wf: CPU Fan control initialized.\n"); 201 DBG(" ttarged=%d.%03d, tmax=%d.%03d, min=%d RPM, max=%d RPM\n", 202 FIX32TOPRINT(pid_param.ttarget), FIX32TOPRINT(pid_param.tmax), 203 pid_param.min, pid_param.max); 204 --- 16 unchanged lines hidden (view full) --- 221 222 if (--st->ticks != 0) { 223 if (wf_smu_readjust) 224 goto readjust; 225 return; 226 } 227 st->ticks = WF_SMU_CPU_FANS_INTERVAL; 228 |
229 rc = sensor_cpu_temp->ops->get_value(sensor_cpu_temp, &temp); | 229 rc = wf_sensor_get(sensor_cpu_temp, &temp); |
230 if (rc) { 231 printk(KERN_WARNING "windfarm: CPU temp sensor error %d\n", 232 rc); 233 wf_smu_failure_state |= FAILURE_SENSOR; 234 return; 235 } 236 | 230 if (rc) { 231 printk(KERN_WARNING "windfarm: CPU temp sensor error %d\n", 232 rc); 233 wf_smu_failure_state |= FAILURE_SENSOR; 234 return; 235 } 236 |
237 rc = sensor_cpu_power->ops->get_value(sensor_cpu_power, &power); | 237 rc = wf_sensor_get(&sensor_cpu_power, &power); |
238 if (rc) { 239 printk(KERN_WARNING "windfarm: CPU power sensor error %d\n", 240 rc); 241 wf_smu_failure_state |= FAILURE_SENSOR; 242 return; 243 } 244 245 DBG("wf_smu: CPU Fans tick ! CPU temp: %d.%03d, power: %d.%03d\n", --- 10 unchanged lines hidden (view full) --- 256 257 DBG("wf_smu: new_setpoint: %d RPM\n", (int)new_setpoint); 258 259 if (st->cpu_setpoint == new_setpoint) 260 return; 261 st->cpu_setpoint = new_setpoint; 262 readjust: 263 if (fan_cpu_main && wf_smu_failure_state == 0) { | 238 if (rc) { 239 printk(KERN_WARNING "windfarm: CPU power sensor error %d\n", 240 rc); 241 wf_smu_failure_state |= FAILURE_SENSOR; 242 return; 243 } 244 245 DBG("wf_smu: CPU Fans tick ! CPU temp: %d.%03d, power: %d.%03d\n", --- 10 unchanged lines hidden (view full) --- 256 257 DBG("wf_smu: new_setpoint: %d RPM\n", (int)new_setpoint); 258 259 if (st->cpu_setpoint == new_setpoint) 260 return; 261 st->cpu_setpoint = new_setpoint; 262 readjust: 263 if (fan_cpu_main && wf_smu_failure_state == 0) { |
264 rc = fan_cpu_main->ops->set_value(fan_cpu_main, 265 st->cpu_setpoint); | 264 rc = wf_control_set(fan_cpu_main, st->cpu_setpoint); |
266 if (rc) { 267 printk(KERN_WARNING "windfarm: CPU main fan" 268 " error %d\n", rc); 269 wf_smu_failure_state |= FAILURE_FAN; 270 } 271 } 272 if (fan_cpu_second && wf_smu_failure_state == 0) { | 265 if (rc) { 266 printk(KERN_WARNING "windfarm: CPU main fan" 267 " error %d\n", rc); 268 wf_smu_failure_state |= FAILURE_FAN; 269 } 270 } 271 if (fan_cpu_second && wf_smu_failure_state == 0) { |
273 rc = fan_cpu_second->ops->set_value(fan_cpu_second, 274 st->cpu_setpoint); | 272 rc = wf_control_set(fan_cpu_second, st->cpu_setpoint); |
275 if (rc) { 276 printk(KERN_WARNING "windfarm: CPU second fan" 277 " error %d\n", rc); 278 wf_smu_failure_state |= FAILURE_FAN; 279 } 280 } 281 if (fan_cpu_third && wf_smu_failure_state == 0) { | 273 if (rc) { 274 printk(KERN_WARNING "windfarm: CPU second fan" 275 " error %d\n", rc); 276 wf_smu_failure_state |= FAILURE_FAN; 277 } 278 } 279 if (fan_cpu_third && wf_smu_failure_state == 0) { |
282 rc = fan_cpu_main->ops->set_value(fan_cpu_third, 283 st->cpu_setpoint); | 280 rc = wf_control_set(fan_cpu_third, st->cpu_setpoint); |
284 if (rc) { 285 printk(KERN_WARNING "windfarm: CPU third fan" 286 " error %d\n", rc); 287 wf_smu_failure_state |= FAILURE_FAN; 288 } 289 } 290} 291 --- 15 unchanged lines hidden (view full) --- 307 printk(KERN_WARNING "windfarm: Memory allocation error" 308 " max fan speed\n"); 309 goto fail; 310 } 311 wf_smu_drive_fans->ticks = 1; 312 313 /* Fill PID params */ 314 param.additive = (fan_hd->type == WF_CONTROL_RPM_FAN); | 281 if (rc) { 282 printk(KERN_WARNING "windfarm: CPU third fan" 283 " error %d\n", rc); 284 wf_smu_failure_state |= FAILURE_FAN; 285 } 286 } 287} 288 --- 15 unchanged lines hidden (view full) --- 304 printk(KERN_WARNING "windfarm: Memory allocation error" 305 " max fan speed\n"); 306 goto fail; 307 } 308 wf_smu_drive_fans->ticks = 1; 309 310 /* Fill PID params */ 311 param.additive = (fan_hd->type == WF_CONTROL_RPM_FAN); |
315 param.min = fan_hd->ops->get_min(fan_hd); 316 param.max = fan_hd->ops->get_max(fan_hd); | 312 param.min = wf_control_get_min(fan_hd); 313 param.max = wf_control_get_max(fan_hd); |
317 wf_pid_init(&wf_smu_drive_fans->pid, ¶m); 318 319 DBG("wf: Drive Fan control initialized.\n"); 320 DBG(" itarged=%d.%03d, min=%d RPM, max=%d RPM\n", 321 FIX32TOPRINT(param.itarget), param.min, param.max); 322 return; 323 324 fail: --- 8 unchanged lines hidden (view full) --- 333 334 if (--st->ticks != 0) { 335 if (wf_smu_readjust) 336 goto readjust; 337 return; 338 } 339 st->ticks = st->pid.param.interval; 340 | 314 wf_pid_init(&wf_smu_drive_fans->pid, ¶m); 315 316 DBG("wf: Drive Fan control initialized.\n"); 317 DBG(" itarged=%d.%03d, min=%d RPM, max=%d RPM\n", 318 FIX32TOPRINT(param.itarget), param.min, param.max); 319 return; 320 321 fail: --- 8 unchanged lines hidden (view full) --- 330 331 if (--st->ticks != 0) { 332 if (wf_smu_readjust) 333 goto readjust; 334 return; 335 } 336 st->ticks = st->pid.param.interval; 337 |
341 rc = sensor_hd_temp->ops->get_value(sensor_hd_temp, &temp); | 338 rc = wf_sensor_get(sensor_hd_temp, &temp); |
342 if (rc) { 343 printk(KERN_WARNING "windfarm: HD temp sensor error %d\n", 344 rc); 345 wf_smu_failure_state |= FAILURE_SENSOR; 346 return; 347 } 348 349 DBG("wf_smu: Drive Fans tick ! HD temp: %d.%03d\n", --- 6 unchanged lines hidden (view full) --- 356 357 DBG("wf_smu: new_setpoint: %d\n", (int)new_setpoint); 358 359 if (st->setpoint == new_setpoint) 360 return; 361 st->setpoint = new_setpoint; 362 readjust: 363 if (fan_hd && wf_smu_failure_state == 0) { | 339 if (rc) { 340 printk(KERN_WARNING "windfarm: HD temp sensor error %d\n", 341 rc); 342 wf_smu_failure_state |= FAILURE_SENSOR; 343 return; 344 } 345 346 DBG("wf_smu: Drive Fans tick ! HD temp: %d.%03d\n", --- 6 unchanged lines hidden (view full) --- 353 354 DBG("wf_smu: new_setpoint: %d\n", (int)new_setpoint); 355 356 if (st->setpoint == new_setpoint) 357 return; 358 st->setpoint = new_setpoint; 359 readjust: 360 if (fan_hd && wf_smu_failure_state == 0) { |
364 rc = fan_hd->ops->set_value(fan_hd, st->setpoint); | 361 rc = wf_control_set(fan_hd, st->setpoint); |
365 if (rc) { 366 printk(KERN_WARNING "windfarm: HD fan error %d\n", 367 rc); 368 wf_smu_failure_state |= FAILURE_FAN; 369 } 370 } 371} 372 --- 15 unchanged lines hidden (view full) --- 388 printk(KERN_WARNING "windfarm: Memory allocation error" 389 " max fan speed\n"); 390 goto fail; 391 } 392 wf_smu_slots_fans->ticks = 1; 393 394 /* Fill PID params */ 395 param.additive = (fan_slots->type == WF_CONTROL_RPM_FAN); | 362 if (rc) { 363 printk(KERN_WARNING "windfarm: HD fan error %d\n", 364 rc); 365 wf_smu_failure_state |= FAILURE_FAN; 366 } 367 } 368} 369 --- 15 unchanged lines hidden (view full) --- 385 printk(KERN_WARNING "windfarm: Memory allocation error" 386 " max fan speed\n"); 387 goto fail; 388 } 389 wf_smu_slots_fans->ticks = 1; 390 391 /* Fill PID params */ 392 param.additive = (fan_slots->type == WF_CONTROL_RPM_FAN); |
396 param.min = fan_slots->ops->get_min(fan_slots); 397 param.max = fan_slots->ops->get_max(fan_slots); | 393 param.min = wf_control_get_min(fan_slots); 394 param.max = wf_control_get_max(fan_slots); |
398 wf_pid_init(&wf_smu_slots_fans->pid, ¶m); 399 400 DBG("wf: Slots Fan control initialized.\n"); 401 DBG(" itarged=%d.%03d, min=%d RPM, max=%d RPM\n", 402 FIX32TOPRINT(param.itarget), param.min, param.max); 403 return; 404 405 fail: --- 8 unchanged lines hidden (view full) --- 414 415 if (--st->ticks != 0) { 416 if (wf_smu_readjust) 417 goto readjust; 418 return; 419 } 420 st->ticks = st->pid.param.interval; 421 | 395 wf_pid_init(&wf_smu_slots_fans->pid, ¶m); 396 397 DBG("wf: Slots Fan control initialized.\n"); 398 DBG(" itarged=%d.%03d, min=%d RPM, max=%d RPM\n", 399 FIX32TOPRINT(param.itarget), param.min, param.max); 400 return; 401 402 fail: --- 8 unchanged lines hidden (view full) --- 411 412 if (--st->ticks != 0) { 413 if (wf_smu_readjust) 414 goto readjust; 415 return; 416 } 417 st->ticks = st->pid.param.interval; 418 |
422 rc = sensor_slots_power->ops->get_value(sensor_slots_power, &power); | 419 rc = wf_sensor_get(sensor_slots_power, &power); |
423 if (rc) { 424 printk(KERN_WARNING "windfarm: Slots power sensor error %d\n", 425 rc); 426 wf_smu_failure_state |= FAILURE_SENSOR; 427 return; 428 } 429 430 DBG("wf_smu: Slots Fans tick ! Slots power: %d.%03d\n", --- 8 unchanged lines hidden (view full) --- 439 440 DBG("wf_smu: new_setpoint: %d\n", (int)new_setpoint); 441 442 if (st->setpoint == new_setpoint) 443 return; 444 st->setpoint = new_setpoint; 445 readjust: 446 if (fan_slots && wf_smu_failure_state == 0) { | 420 if (rc) { 421 printk(KERN_WARNING "windfarm: Slots power sensor error %d\n", 422 rc); 423 wf_smu_failure_state |= FAILURE_SENSOR; 424 return; 425 } 426 427 DBG("wf_smu: Slots Fans tick ! Slots power: %d.%03d\n", --- 8 unchanged lines hidden (view full) --- 436 437 DBG("wf_smu: new_setpoint: %d\n", (int)new_setpoint); 438 439 if (st->setpoint == new_setpoint) 440 return; 441 st->setpoint = new_setpoint; 442 readjust: 443 if (fan_slots && wf_smu_failure_state == 0) { |
447 rc = fan_slots->ops->set_value(fan_slots, st->setpoint); | 444 rc = wf_control_set(fan_slots, st->setpoint); |
448 if (rc) { 449 printk(KERN_WARNING "windfarm: Slots fan error %d\n", 450 rc); 451 wf_smu_failure_state |= FAILURE_FAN; 452 } 453 } 454} 455 --- 286 unchanged lines hidden --- | 445 if (rc) { 446 printk(KERN_WARNING "windfarm: Slots fan error %d\n", 447 rc); 448 wf_smu_failure_state |= FAILURE_FAN; 449 } 450 } 451} 452 --- 286 unchanged lines hidden --- |