From: Nicolin Chen <Guangyu.Chen@freescale.com>
To: Mark Brown <broonie@kernel.org>
Cc: alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org,
timur@tabi.org, Li.Xiubo@freescale.com, David.Laight@ACULAB.COM,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2] ASoC: fsl_sai: Add isr to deal with error flag
Date: Fri, 28 Mar 2014 10:41:00 +0800 [thread overview]
Message-ID: <20140328024059.GA18417@MrMyself> (raw)
In-Reply-To: <20140327132626.GN30768@sirena.org.uk>
On Thu, Mar 27, 2014 at 01:26:27PM +0000, Mark Brown wrote:
> On Thu, Mar 27, 2014 at 07:06:59PM +0800, Nicolin Chen wrote:
> > It's quite cricial to clear error flags because SAI might hang if getting
> > FIFO underrun during playback (I haven't confirmed the same issue on Rx
> > overflow though).
> >
> > So this patch enables those irq and adds isr() to clear the flags so as to
> > keep playback entirely safe.
>
> So, I've applied this since we're (hopefully!) very near the merge
> window opening and it seems like it should be an improvement overall.
> However a few things below:
>
> > + /* Only handle those what we enabled */
> > + mask = (FSL_SAI_FLAGS >> FSL_SAI_CSR_xIE_SHIFT) << FSL_SAI_CSR_xF_SHIFT;
>
> The shifting here could use a comment.
Will send an extra patch to cover it.
> > + regmap_update_bits(sai->regmap, FSL_SAI_RCSR,
> > + FSL_SAI_CSR_xF_W_MASK | FSL_SAI_CSR_FR, xcsr);
>
> Using update_bits() is going to do an extra read, better to do this as:
>
> if (xcsr)
> regmap_write(sai->regmap, FSL_SAI_RCSR, xcsr);
T/RCSR register stands for T/Rx Control (Status -- I guess) Register.
It actually contains control bits, IRQ mask bits and IRQ status bits.
Thus we can't regard it as a entire status register. That's why I try
to update it partially for status bits only at this point.
But if it's just for saving this extra read instance, I may save those
non-status bits from upper regmap_read() and then merge them into this
regmap_write() over here.
> otherwise we might be ignoring any of the bits that are actually clear
> on read (it seems like there are some?).
For all status flags bits, actually five for each, three of them are
write-1-clear and the other two are self-clearance by SAI self -- so
none of them are clear-on-read type.
> > + return IRQ_HANDLED;
>
> I'd expect to see IRQ_NONE if we didn't actually see an interrupt
> source.
Will add this.
Thank you,
Nicolin
WARNING: multiple messages have this Message-ID (diff)
From: Nicolin Chen <Guangyu.Chen@freescale.com>
To: Mark Brown <broonie@kernel.org>
Cc: <Li.Xiubo@freescale.com>, <linux-kernel@vger.kernel.org>,
<linuxppc-dev@lists.ozlabs.org>, <alsa-devel@alsa-project.org>,
<timur@tabi.org>, <David.Laight@ACULAB.COM>
Subject: Re: [PATCH v2] ASoC: fsl_sai: Add isr to deal with error flag
Date: Fri, 28 Mar 2014 10:41:00 +0800 [thread overview]
Message-ID: <20140328024059.GA18417@MrMyself> (raw)
In-Reply-To: <20140327132626.GN30768@sirena.org.uk>
On Thu, Mar 27, 2014 at 01:26:27PM +0000, Mark Brown wrote:
> On Thu, Mar 27, 2014 at 07:06:59PM +0800, Nicolin Chen wrote:
> > It's quite cricial to clear error flags because SAI might hang if getting
> > FIFO underrun during playback (I haven't confirmed the same issue on Rx
> > overflow though).
> >
> > So this patch enables those irq and adds isr() to clear the flags so as to
> > keep playback entirely safe.
>
> So, I've applied this since we're (hopefully!) very near the merge
> window opening and it seems like it should be an improvement overall.
> However a few things below:
>
> > + /* Only handle those what we enabled */
> > + mask = (FSL_SAI_FLAGS >> FSL_SAI_CSR_xIE_SHIFT) << FSL_SAI_CSR_xF_SHIFT;
>
> The shifting here could use a comment.
Will send an extra patch to cover it.
> > + regmap_update_bits(sai->regmap, FSL_SAI_RCSR,
> > + FSL_SAI_CSR_xF_W_MASK | FSL_SAI_CSR_FR, xcsr);
>
> Using update_bits() is going to do an extra read, better to do this as:
>
> if (xcsr)
> regmap_write(sai->regmap, FSL_SAI_RCSR, xcsr);
T/RCSR register stands for T/Rx Control (Status -- I guess) Register.
It actually contains control bits, IRQ mask bits and IRQ status bits.
Thus we can't regard it as a entire status register. That's why I try
to update it partially for status bits only at this point.
But if it's just for saving this extra read instance, I may save those
non-status bits from upper regmap_read() and then merge them into this
regmap_write() over here.
> otherwise we might be ignoring any of the bits that are actually clear
> on read (it seems like there are some?).
For all status flags bits, actually five for each, three of them are
write-1-clear and the other two are self-clearance by SAI self -- so
none of them are clear-on-read type.
> > + return IRQ_HANDLED;
>
> I'd expect to see IRQ_NONE if we didn't actually see an interrupt
> source.
Will add this.
Thank you,
Nicolin
next prev parent reply other threads:[~2014-03-28 3:03 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-27 11:06 [PATCH v2] ASoC: fsl_sai: Add isr to deal with error flag Nicolin Chen
2014-03-27 11:06 ` Nicolin Chen
2014-03-27 11:06 ` Nicolin Chen
2014-03-27 13:26 ` Mark Brown
2014-03-27 13:26 ` Mark Brown
2014-03-28 2:41 ` Nicolin Chen [this message]
2014-03-28 2:41 ` Nicolin Chen
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=20140328024059.GA18417@MrMyself \
--to=guangyu.chen@freescale.com \
--cc=David.Laight@ACULAB.COM \
--cc=Li.Xiubo@freescale.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=timur@tabi.org \
/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.