[alsa-devel] [PATCH 4/5] ALSA: hda: program stripe bits for controller

Takashi Iwai tiwai at suse.de
Fri Jan 11 12:20:13 CET 2019


On Thu, 10 Jan 2019 18:03:24 +0100,
Sameer Pujar wrote:
> 
> Platforms having multiple hdmi/dp sinks require higher bandwidth
> to support simultaneous playbacks of higher resolution. If hda
> controller supports multiple SDO lines, STRIPE can be used to
> indicate how many of the SDO lines the stream should be striped
> across.
> 
> During stream start stripe control bits are programmed to use given
> number of sdo lines and the same is cleared during stream stop.
> 
> Signed-off-by: Sameer Pujar <spujar at nvidia.com>
> Reviewed-by: Mohan Kumar D <mkumard at nvidia.com>
> Reviewed-by: Ravindra Lokhande <rlokhande at nvidia.com>
> ---
>  sound/hda/hdac_stream.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/sound/hda/hdac_stream.c b/sound/hda/hdac_stream.c
> index b403b05..7dbaecc 100644
> --- a/sound/hda/hdac_stream.c
> +++ b/sound/hda/hdac_stream.c
> @@ -82,6 +82,7 @@ EXPORT_SYMBOL_GPL(snd_hdac_stream_init);
>  void snd_hdac_stream_start(struct hdac_stream *azx_dev, bool fresh_start)
>  {
>  	struct hdac_bus *bus = azx_dev->bus;
> +	int stripe_ctl;
>  
>  	trace_snd_hdac_stream_start(bus, azx_dev);
>  
> @@ -91,6 +92,9 @@ void snd_hdac_stream_start(struct hdac_stream *azx_dev, bool fresh_start)
>  
>  	/* enable SIE */
>  	snd_hdac_chip_updatel(bus, INTCTL, 0, 1 << azx_dev->index);
> +	/* set stripe control */
> +	stripe_ctl = snd_hdac_get_stream_stripe_ctl(bus, azx_dev->substream);
> +	snd_hdac_stream_updateb(azx_dev, SD_CTL_3B, 0, stripe_ctl & 0x3);

Let's use 0x03 as the mask.  Also it's safer to clear the mask bits,
so something like:

	snd_hdac_stream_updateb(azx_dev, SD_CTL_3B,
				AZX_REG_SD_STRIPE_MASK, stripe_ctl);


>  	/* set DMA start and interrupt mask */
>  	snd_hdac_stream_updateb(azx_dev, SD_CTL,
>  				0, SD_CTL_DMA_START | SD_INT_MASK);
> @@ -107,6 +111,7 @@ void snd_hdac_stream_clear(struct hdac_stream *azx_dev)
>  	snd_hdac_stream_updateb(azx_dev, SD_CTL,
>  				SD_CTL_DMA_START | SD_INT_MASK, 0);
>  	snd_hdac_stream_writeb(azx_dev, SD_STS, SD_INT_MASK); /* to be sure */
> +	snd_hdac_stream_updateb(azx_dev, SD_CTL_3B, 0x3, 0);

Ditto.


thanks,

Takashi


More information about the Alsa-devel mailing list