All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
To: Vijendar Mukunda <Vijendar.Mukunda@amd.com>, broonie@kernel.org
Cc: alsa-devel@alsa-project.org, Basavaraj.Hiregoudar@amd.com,
	Sunil-kumar.Dommati@amd.com, Mastan.Katragadda@amd.com,
	Arungopal.kondaveeti@amd.com, mario.limonciello@amd.com,
	Liam Girdwood <lgirdwood@gmail.com>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Syed Saba Kareem <Syed.SabaKareem@amd.com>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH V3 5/9] ASoC: amd: ps: add support for SoundWire DMA interrupts
Date: Tue, 6 Jun 2023 09:59:43 -0500	[thread overview]
Message-ID: <6c44969f-4d25-7b71-cd35-cd7087e083e4@linux.intel.com> (raw)
In-Reply-To: <20230606060724.2038680-6-Vijendar.Mukunda@amd.com>


> +enum amd_sdw0_channel {
> +	ACP_SDW0_AUDIO0_TX = 0,
> +	ACP_SDW0_AUDIO1_TX,
> +	ACP_SDW0_AUDIO2_TX,
> +	ACP_SDW0_AUDIO0_RX,
> +	ACP_SDW0_AUDIO1_RX,
> +	ACP_SDW0_AUDIO2_RX,
> +};
> +
> +enum amd_sdw1_channel {
> +	ACP_SDW1_AUDIO1_TX,
> +	ACP_SDW1_AUDIO1_RX,

any specify reason why SDW0 starts with AUDIO0 and SDW1 with AUDIO1?

> +};
> +
>  struct pdm_stream_instance {
>  	u16 num_pages;
>  	u16 channels;
> @@ -239,6 +253,8 @@ struct sdw_dma_ring_buf_reg {
>   * @sdw0_dev_index: SoundWire Manager-0 platform device index
>   * @sdw1_dev_index: SoundWire Manager-1 platform device index
>   * @sdw_dma_dev_index: SoundWire DMA controller platform device index
> + * @sdw0-dma_intr_stat: DMA interrupt status array for SoundWire manager-SW0 instance
> + * @sdw_dma_intr_stat: DMA interrupt status array for SoundWire manager-SW1 instance
>   * @acp_reset: flag set to true when bus reset is applied across all
>   * the active SoundWire manager instances
>   */
> @@ -256,6 +272,8 @@ struct acp63_dev_data {
>  	u16 sdw0_dev_index;
>  	u16 sdw1_dev_index;
>  	u16 sdw_dma_dev_index;
> +	u16 sdw0_dma_intr_stat[ACP63_SDW0_DMA_MAX_STREAMS];
> +	u16 sdw1_dma_intr_stat[ACP63_SDW1_DMA_MAX_STREAMS];
>  	bool acp_reset;
>  };
>  
> diff --git a/sound/soc/amd/ps/pci-ps.c b/sound/soc/amd/ps/pci-ps.c
> index 17e29a3e1c21..daf54fe9cafd 100644
> --- a/sound/soc/amd/ps/pci-ps.c
> +++ b/sound/soc/amd/ps/pci-ps.c
> @@ -99,14 +99,44 @@ static int acp63_deinit(void __iomem *acp_base, struct device *dev)
>  	return 0;
>  }
>  
> +static irqreturn_t acp63_irq_thread(int irq, void *context)
> +{
> +	struct sdw_dma_dev_data *sdw_dma_data;
> +	struct acp63_dev_data *adata = context;
> +	u32 stream_index;
> +	u16 pdev_index;
> +
> +	pdev_index = adata->sdw_dma_dev_index;
> +	sdw_dma_data = dev_get_drvdata(&adata->pdev[pdev_index]->dev);
> +
> +	for (stream_index = 0; stream_index < ACP63_SDW0_DMA_MAX_STREAMS; stream_index++) {
> +		if (adata->sdw0_dma_intr_stat[stream_index]) {
> +			if (sdw_dma_data->sdw0_dma_stream[stream_index])

can this test be false?

> +				snd_pcm_period_elapsed(sdw_dma_data->sdw0_dma_stream[stream_index]);
> +			adata->sdw0_dma_intr_stat[stream_index] = 0;
> +		}
> +	}
> +	for (stream_index = 0; stream_index < ACP63_SDW1_DMA_MAX_STREAMS; stream_index++) {
> +		if (adata->sdw1_dma_intr_stat[stream_index]) {
> +			if (sdw_dma_data->sdw1_dma_stream[stream_index])

can this test be false?

> +				snd_pcm_period_elapsed(sdw_dma_data->sdw1_dma_stream[stream_index]);
> +			adata->sdw1_dma_intr_stat[stream_index] = 0;
> +		}
> +	}
> +	return IRQ_HANDLED;
> +}
> +
>  static irqreturn_t acp63_irq_handler(int irq, void *dev_id)
>  {
>  	struct acp63_dev_data *adata;
>  	struct pdm_dev_data *ps_pdm_data;
>  	struct amd_sdw_manager *amd_manager;
>  	u32 ext_intr_stat, ext_intr_stat1;
> +	u32 stream_id = 0;
>  	u16 irq_flag = 0;
> +	u16 sdw_dma_irq_flag = 0;
>  	u16 pdev_index;
> +	u16 index;
>  
>  	adata = dev_id;
>  	if (!adata)
> @@ -153,6 +183,56 @@ static irqreturn_t acp63_irq_handler(int irq, void *dev_id)
>  			snd_pcm_period_elapsed(ps_pdm_data->capture_stream);
>  		irq_flag = 1;
>  	}
> +	if (ext_intr_stat & ACP_SDW_DMA_IRQ_MASK) {
> +		for (index = ACP_AUDIO2_RX_THRESHOLD; index <= ACP_AUDIO0_TX_THRESHOLD; index++) {
> +			if (ext_intr_stat & BIT(index)) {
> +				writel(BIT(index), adata->acp63_base + ACP_EXTERNAL_INTR_STAT);
> +				switch (index) {
> +				case ACP_AUDIO0_TX_THRESHOLD:
> +					stream_id = ACP_SDW0_AUDIO0_TX;
> +					break;
> +				case ACP_AUDIO1_TX_THRESHOLD:
> +					stream_id = ACP_SDW0_AUDIO1_TX;
> +					break;
> +				case ACP_AUDIO2_TX_THRESHOLD:
> +					stream_id = ACP_SDW0_AUDIO2_TX;
> +					break;
> +				case ACP_AUDIO0_RX_THRESHOLD:
> +					stream_id = ACP_SDW0_AUDIO0_RX;
> +					break;
> +				case ACP_AUDIO1_RX_THRESHOLD:
> +					stream_id = ACP_SDW0_AUDIO1_RX;
> +					break;
> +				case ACP_AUDIO2_RX_THRESHOLD:
> +					stream_id = ACP_SDW0_AUDIO2_RX;
> +					break;
> +				}
> +
> +				adata->sdw0_dma_intr_stat[stream_id] = 1;
> +				sdw_dma_irq_flag = 1;
> +			}
> +		}
> +	}
> +
> +	/* SDW1 BT RX */
> +	if (ext_intr_stat1 & ACP_P1_AUDIO1_RX_THRESHOLD) {
> +		writel(ACP_P1_AUDIO1_RX_THRESHOLD,
> +		       adata->acp63_base + ACP_EXTERNAL_INTR_STAT1);
> +		adata->sdw1_dma_intr_stat[ACP_SDW1_AUDIO1_RX] = 1;
> +		sdw_dma_irq_flag = 1;
> +	}
> +
> +	/* SDW1 BT TX*/

keep spaces before */

> +	if (ext_intr_stat1 & ACP_P1_AUDIO1_TX_THRESHOLD) {
> +		writel(ACP_P1_AUDIO1_TX_THRESHOLD,
> +		       adata->acp63_base + ACP_EXTERNAL_INTR_STAT1);
> +		adata->sdw1_dma_intr_stat[ACP_SDW1_AUDIO1_TX] = 1;
> +		sdw_dma_irq_flag = 1;
> +	}
> +
> +	if (sdw_dma_irq_flag)
> +		return IRQ_WAKE_THREAD;
> +
>  	if (irq_flag)
>  		return IRQ_HANDLED;
>  	else
> @@ -544,8 +624,8 @@ static int snd_acp63_probe(struct pci_dev *pci,
>  	ret = acp63_init(adata->acp63_base, &pci->dev);
>  	if (ret)
>  		goto release_regions;
> -	ret = devm_request_irq(&pci->dev, pci->irq, acp63_irq_handler,
> -			       irqflags, "ACP_PCI_IRQ", adata);
> +	ret = devm_request_threaded_irq(&pci->dev, pci->irq, acp63_irq_handler,
> +					acp63_irq_thread, irqflags, "ACP_PCI_IRQ", adata);
>  	if (ret) {
>  		dev_err(&pci->dev, "ACP PCI IRQ request failed\n");
>  		goto de_init;

  reply	other threads:[~2023-06-06 15:42 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-06  6:07 [PATCH V3 0/9] ASoC: amd: ps: add SoundWire support Vijendar Mukunda
2023-06-06  6:07 ` [PATCH V3 1/9] ASoC: amd: ps: create platform devices based on acp config Vijendar Mukunda
2023-06-06 14:00   ` Pierre-Louis Bossart
2023-06-07  6:35     ` Mukunda,Vijendar
2023-06-07 16:47       ` Limonciello, Mario
2023-06-08  5:24         ` Mukunda,Vijendar
2023-06-06  6:07 ` [PATCH V3 2/9] ASoC: amd: ps: handle SoundWire interrupts in acp pci driver Vijendar Mukunda
2023-06-06 14:49   ` Pierre-Louis Bossart
2023-06-07  6:48     ` Mukunda,Vijendar
2023-06-06  6:07 ` [PATCH V3 3/9] ASoC: amd: ps: add SoundWire dma driver Vijendar Mukunda
2023-06-06  6:07 ` [PATCH V3 4/9] ASoC: amd: ps: add SoundWire dma driver dma ops Vijendar Mukunda
2023-06-06 15:38   ` Pierre-Louis Bossart
2023-06-07  7:04     ` Mukunda,Vijendar
2023-06-06  6:07 ` [PATCH V3 5/9] ASoC: amd: ps: add support for SoundWire DMA interrupts Vijendar Mukunda
2023-06-06 14:59   ` Pierre-Louis Bossart [this message]
2023-06-07  6:55     ` Mukunda,Vijendar
2023-06-06  6:07 ` [PATCH V3 6/9] ASoC: amd: ps: add pm ops support for SoundWire dma driver Vijendar Mukunda
2023-06-06 15:02   ` Pierre-Louis Bossart
2023-06-07  6:57     ` Mukunda,Vijendar
2023-06-06  6:07 ` [PATCH V3 7/9] ASoC: amd: ps: enable SoundWire dma driver build Vijendar Mukunda
2023-06-06  6:07 ` [PATCH V3 8/9] ASoC: amd: update comments in Kconfig file Vijendar Mukunda
2023-06-06  6:07 ` [PATCH V3 9/9] ASoC: amd: ps: Add SoundWire specific checks in pci driver in pm ops Vijendar Mukunda
2023-06-06 15:06   ` Pierre-Louis Bossart
2023-06-07  6:59     ` Mukunda,Vijendar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6c44969f-4d25-7b71-cd35-cd7087e083e4@linux.intel.com \
    --to=pierre-louis.bossart@linux.intel.com \
    --cc=Arungopal.kondaveeti@amd.com \
    --cc=Basavaraj.Hiregoudar@amd.com \
    --cc=Mastan.Katragadda@amd.com \
    --cc=Sunil-kumar.Dommati@amd.com \
    --cc=Syed.SabaKareem@amd.com \
    --cc=Vijendar.Mukunda@amd.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mario.limonciello@amd.com \
    --cc=perex@perex.cz \
    --cc=tiwai@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.