This patchset was initially provided in a larger series that was split in two [1]. This part only provides support for the SPIB register support, added on Intel platforms since Skylake (2015). The use of the SPIB register helps reduce power consumption - though to a smaller degree than DMI_L1. This hardware capability is however incompatible with userspace-initiated rewinds typically used by PulseAudio. In the past (2015..2017) Intel suggested an API extension to let applications disable rewinds. At the time the feedback was that such a capability was too Intel-specific and SPIB remained unused except for loading DSP code. We now see devices with smaller batteries being released, and it's time to revisit Linux support for SPIB to extend battery life. In this update the rewinds are disabled via an opt-in kernel parameter. In the previous reviews, there was consensus that a Kconfig option was too complicated for distributions to set, and we are missing a TBD API to expose such capabilities to user-space. The debate on whether or not to use rewinds, and the impact of disabling rewinds, will likely be closed when Intel releases the 'deep-buffer' support, currently under development [2][3]. With this solution, rewinds will not be needed, ever. When an application deals with content that is not latency-sensitive (e.g. music playback), it will be able to reduce power consumption by selecting a different PCM device with increased buffering capabilities. Low-latency streams will be handled by the 'regular' path. In other words, the impossible compromise between power and latency will be handled with different PCM devices/profiles for the same endpoint, and we can push the design of capability negotiation to a later time when all the building blocks (firmware topology, kernel, userspace) are ready - we still have firmware xruns, DPCM race conditions to solve, and a need to describe these alternate PCM devices with UCM using 'modifiers'. [1] https://lore.kernel.org/alsa-devel/20210610205326.1176400-1-pierre-louis.bossart@xxxxxxxxxxxxxxx/ [2] https://github.com/thesofproject/linux/pull/3146 [3] https://github.com/thesofproject/sof/pull/4611 Changes since v3: Added Takashi's Reviewed-by tags on patches 1 and 2 Used SYNC_APPLPTR instead of EXPLICIT_SYNC as suggested by Takashi Added a missing .ack callback for IceLake Changes since v2: Added check on appl_ptr (Takashi) Moved rewind detection to deal with SYNC_PTR (Takashi) Pierre-Louis Bossart (2): ALSA: pcm: unconditionally check if appl_ptr is in 0..boundary range ALSA: pcm: introduce INFO_NO_REWINDS flag Ranjani Sridharan (2): ASoC: SOF: pcm: add .ack callback support ASoC: SOF: Intel: add .ack support for HDaudio platforms include/uapi/sound/asound.h | 2 +- sound/core/pcm_lib.c | 17 +++++++++++++ sound/soc/sof/intel/apl.c | 1 + sound/soc/sof/intel/cnl.c | 1 + sound/soc/sof/intel/hda-pcm.c | 41 ++++++++++++++++++++++++++++++-- sound/soc/sof/intel/hda-stream.c | 2 ++ sound/soc/sof/intel/hda.h | 1 + sound/soc/sof/intel/icl.c | 1 + sound/soc/sof/intel/tgl.c | 1 + sound/soc/sof/ops.h | 10 ++++++++ sound/soc/sof/pcm.c | 9 +++++++ sound/soc/sof/sof-priv.h | 3 +++ 12 files changed, 86 insertions(+), 3 deletions(-) -- 2.25.1