From: Takashi Iwai <tiwai@suse.de>
To: Vinod Koul <vinod.koul@intel.com>
Cc: liam.r.girdwood@linux.intel.com, patches.audio@intel.com,
alsa-devel@alsa-project.org, broonie@kernel.org,
Jeeja KP <jeeja.kp@intel.com>
Subject: Re: [PATCH 3/3] ALSA: HDA: wait for RIRB, CORB DMA to finish
Date: Tue, 04 Aug 2015 07:13:12 +0200 [thread overview]
Message-ID: <s5hlhdrd4bb.wl-tiwai@suse.de> (raw)
In-Reply-To: <1438660720-30033-4-git-send-email-vinod.koul@intel.com>
On Tue, 04 Aug 2015 05:58:40 +0200,
Vinod Koul wrote:
>
> HDA spec says that RORB and CORB DMA stop will take some
> time to complete. So we should wait till the DMAs are
> stopped.
>
> Although the current controllers don't have multilinks so
> doesn't impact much, but SKL onwards we have multiple links
> so waiting for DMAs to stop makes better sense.
>
> Signed-off-by: Jeeja KP <jeeja.kp@intel.com>
> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
> ---
> sound/hda/hdac_controller.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/sound/hda/hdac_controller.c b/sound/hda/hdac_controller.c
> index b5a17cb510a0..3b5d07174d79 100644
> --- a/sound/hda/hdac_controller.c
> +++ b/sound/hda/hdac_controller.c
> @@ -86,10 +86,24 @@ EXPORT_SYMBOL_GPL(snd_hdac_bus_init_cmd_io);
> */
> void snd_hdac_bus_stop_cmd_io(struct hdac_bus *bus)
> {
> + unsigned long timeout;
> +
> spin_lock_irq(&bus->reg_lock);
> /* disable ringbuffer DMAs */
> snd_hdac_chip_writeb(bus, RIRBCTL, 0);
> snd_hdac_chip_writeb(bus, CORBCTL, 0);
> +
> + /* poll DMAs to check if they stopped or not */
> +
> + timeout = jiffies + msecs_to_jiffies(100);
> + while ((snd_hdac_chip_readb(bus, RIRBCTL) & AZX_RBCTL_DMA_EN) &&
> + time_before(jiffies, timeout))
> + usleep_range(500, 1000);
You must not use *sleep() inside atomic context.
Takashi
next prev parent reply other threads:[~2015-08-04 5:13 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-04 3:58 [PATCH 0/3] ALSA: hdac: stream fixes Vinod Koul
2015-08-04 3:58 ` [PATCH 1/3] ALSA: HDA: Fix stream assignment for host in decoupled mode Vinod Koul
2015-08-04 5:12 ` Takashi Iwai
2015-08-04 3:58 ` [PATCH 2/3] ALSA: HDA: Dont check return for snd_hdac_chip_readl Vinod Koul
2015-08-04 5:12 ` Takashi Iwai
2015-08-04 3:58 ` [PATCH 3/3] ALSA: HDA: wait for RIRB, CORB DMA to finish Vinod Koul
2015-08-04 5:13 ` Takashi Iwai [this message]
2015-08-04 9:10 ` Vinod Koul
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=s5hlhdrd4bb.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=jeeja.kp@intel.com \
--cc=liam.r.girdwood@linux.intel.com \
--cc=patches.audio@intel.com \
--cc=vinod.koul@intel.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.