• Pierre-Louis Bossart's avatar
    soundwire: intel: conditionally exit clock stop mode on system suspend · 029bfd1c
    Pierre-Louis Bossart authored
    Intel stress tests reported issues with the clock stop mode,
    specifically when trying to do a system suspend while the link is
    already pm_runtime suspended.
    
    In this case, we need to disable the shim wake, but when the PCI
    parent device is also pm_runtime suspended the SHIM registers are not
    accessible.
    
    Since this is an invalid corner case, this patch suggests a pm_runtime
    resume of the entire bus to full power (parent+child devices) before
    the system suspend so that the shim wake can be disabled.
    
    Unlike the suspend operation, the .prepare callbacks are propagated
    from root device to leaf devices. By adding a .prepare callback at the
    SoundWire link level, we can double-check the pm_runtime status of the
    device as well as its parent PCI device. When the problematic
    configuration is detected, the device is pm_runtime resumed - which by
    construction also resume its parent.
    
    An additional loop is added to resume all child devices. In theory we
    only need to restart the link, but doing so will also cause the
    physical devices to synchronize and re-initialize, while their Linux
    devices remain pm_runtime suspended. It's simpler to make sure the
    codec devices are fully resumed so that we don't have to deal with
    zombie states.
    
    This additional loop could have been avoided by adding a .prepare
    callback in SoundWire codec drivers. Functionally this would have been
    equivalent. The rationale for implementing a loop at the link level is
    only to reduce the amount of code required to deal at the codec level
    with an Intel corner case - in other words keep codec drivers
    independent from Intel platform-specific programming sequences.
    
    BugLink: https://github.com/thesofproject/linux/issues/2606Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
    Link: https://lore.kernel.org/r/20210818024954.16873-4-yung-chuan.liao@linux.intel.comSigned-off-by: default avatarVinod Koul <vkoul@kernel.org>
    029bfd1c
intel.c 53.4 KB