Linux 4.6 To Support Runtime Power Management Of AHCI Controllers
For the majority of you reading this relying upon Serial ATA (SATA) drives, the upcoming Linux 4.6 kernel will support runtime power management of the AHCI host controller for saving more power on your system when idling.
The libata pull request for Linux 4.6 provides the kernel's AHCI (Advanced Host Controller Interface) driver with runtime power management support. This code allows the AHCI controller to be turned off if no devices are attached.
This allows powering down the controller just not if any devices are attached, but if the SATA disks are suspended does count too. One of the patches in this Git branch explains by Intel's Mika Westerberg, "This series extends the support to AHCI host controllers. Whenever SATA ports are determined to be idle (all children are runtime suspended) the host controller is also suspended. On recent Intel CPUs like Broxton this allows the CPU to go low power idle states like S0ix runtime...By default runtime PM is blocked and needs to be unblocked from userspace (following what other PCI drivers do)."
To enable the support, you must enable runtime power management for all SATA ports (via the /sys/bus/pci/devices/*/ata*/power/control), enabling the new host controller PM via /sys/bus/pci/devices/*/power/control, and then enabling the power management for the disk via /sys/block/*/device/power/control (and also specifying the autosuspend_delay_ms via sysfs too. Hopefully the AHCI controller PM support will be added to the still useful PowerTOP utility soon for making this power-saving feature much easier to utilize.
The list of other changes for the libata area in Linux 4.6 can be found via the pull request.