Right now, the architecture of phosphor-pid-control assumes each thermal zone will have 2 cascaded PID loops:
- The thermal loop, to decide on the necessary fan RPM to keep the system cool
- The fan PID loop, to decide on the correct PWM percentage value, to command to the fan motors, to achieve that desired RPM
Newer hardware, with a smart fan controller, has the possibility of accepting a RPM value sent directly to hardware. The controller then becomes responsible for dealing with the fan motors to achieve that. It would often be more desirable to do this. The workaround is to have a dummy fan PID loop that is 1:1 input and output, but this is cumbersome.
To fully realize this feature, we will need:
- Linux hwmon/kernel support for allowing RPM to be written directly, like PWM is today (this may involve toggling a mode in the hardware, not just writing a value, because some smart fan controllers operate in either "RPM mode" or "PWM mode" and you have to tell them what mode you are using in advance)
- OpenBMC D-Bus sensor interface support for allowing RPM to be written directly, like PWM is today (perhaps a separate Control interface becomes necessary, as writing to an OpenBMC sensor merely fakes out the value (useful for testing), and does not actually push a value to the hardware)
- A way for phosphor-pid-control to know that it should operate in this mode (perhaps this would be obvious by simply not having any fan PID loop in the thermal zone)
Anything else I forgot?
Right now, the architecture of phosphor-pid-control assumes each thermal zone will have 2 cascaded PID loops:
Newer hardware, with a smart fan controller, has the possibility of accepting a RPM value sent directly to hardware. The controller then becomes responsible for dealing with the fan motors to achieve that. It would often be more desirable to do this. The workaround is to have a dummy fan PID loop that is 1:1 input and output, but this is cumbersome.
To fully realize this feature, we will need:
Anything else I forgot?