[PATCH 0/5] thunderbolt: Add support for runtime PM

From: Mika Westerberg
Date: Mon Jun 18 2018 - 07:08:43 EST


Hi all,

In recent PCs such as Lenovo X1 Carbon 6th generation the Thunderbolt
controller is in RTD3 mode (Runtime D3). This is different from the
previous modes because now the controller is present most of the time (it
still will be hot-removed/hot-added during NVM firmware upgrade). Because
of that we need to dynamically power it down whenever possible to save some
power.

This patch series adds Linux runtime PM support for the Thunderbolt host
controller driver using ICM firmware but it should be generic enough for
future additions to allow similar functionality for the older Apple
hardware as well (even though those system do not support full RTD3, it
still makes it possible for the host controller to go to low power state if
cable is not connected).

With these patches the driver automatically runtime suspends the host
controller after being idle for 15s. The connected Thunderbolt devices (if
any) need to support RTD3 mode as well. Typically all 3rd generation
devices (Alpine Ridge, Titan Ridge) support this.

However, while this provides some power savings, there is more work to do
in order to allow powering down the PCIe root port leading to the
Thunderbolt PCIe hierarchy. This work is still in progress.

Mika Westerberg (5):
thunderbolt: Use 64-bit DMA mask if supported by the platform
thunderbolt: Do not unnecessarily call ICM get route
thunderbolt: No need to take tb->lock in domain suspend/complete
thunderbolt: Use correct ICM commands in system suspend
thunderbolt: Add support for runtime PM

drivers/thunderbolt/domain.c | 55 ++++++++---
drivers/thunderbolt/icm.c | 172 ++++++++++++++++++++++++++++------
drivers/thunderbolt/nhi.c | 46 ++++++++-
drivers/thunderbolt/switch.c | 65 ++++++++++++-
drivers/thunderbolt/tb.h | 10 ++
drivers/thunderbolt/tb_msgs.h | 4 +
drivers/thunderbolt/xdomain.c | 18 ++++
7 files changed, 323 insertions(+), 47 deletions(-)

--
2.17.1