Embedded DVFS support under Linux

Modern CPUs support changing the supply voltages and operating frequencies at run time in order to minimise the power consumption of the system when the CPU is idle while allowing access to high clock rates when the CPU is busy.

Linux has a generic framework for managing the operating configuration of the processor called CPUfreq. This is documented in the kernel source under Documentation/cpu-freq. It splits things into two modules: a CPU-specific driver that defines the available configurations and how to transition between them and a series of user selectable drivers called governors which provide configurable policies for deciding when to change configuration.

On embedded systems the supplies for the CPU are normally provided by a second device with voltage regulation support, separate from the CPU. In order to allow the CPU-specific driver to change the supply voltages without also making the driver specific to a particular voltage regulator these drivers use the generic voltage and current regulator API to control the voltage regulators, allowing them to use any suitable voltage regulator which has a Linux driver.