From: vinod.koul@intel.com (Koul, Vinod)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 09/18] dmaengine/amba-pl08x: Schedule tasklet in case of error interrupt
Date: Fri, 29 Jul 2011 17:46:39 +0530 [thread overview]
Message-ID: <1311941799.1536.532.camel@vkoul-udesk3> (raw)
In-Reply-To: <9c81beb9cd84f84b58abbd24ebfae85dfe8d8ee1.1311936524.git.viresh.kumar@st.com>
On Fri, 2011-07-29 at 16:19 +0530, Viresh Kumar wrote:
> Currently, if error interrupt occurs, nothing is done in interrupt handler (just
> clearing the interrupts). We must somehow indicate this to the user that DMA is
> over, due to ERR interrupt or TC interrupt.
>
> So, this patch just schedules existing tasklet, with a print showing error
> interrupt has occured on which channels.
>
> Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
> ---
> drivers/dma/amba-pl08x.c | 43 ++++++++++++++++++-------------------------
> 1 files changed, 18 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/dma/amba-pl08x.c b/drivers/dma/amba-pl08x.c
> index c4ce1a2..b9137bc 100644
> --- a/drivers/dma/amba-pl08x.c
> +++ b/drivers/dma/amba-pl08x.c
> @@ -1630,40 +1630,33 @@ static void pl08x_tasklet(unsigned long data)
> static irqreturn_t pl08x_irq(int irq, void *dev)
> {
> struct pl08x_driver_data *pl08x = dev;
> - u32 mask = 0;
> - u32 val;
> - int i;
> -
> - val = readl(pl08x->base + PL080_ERR_STATUS);
> - if (val) {
> - /* An error interrupt (on one or more channels) */
> - dev_err(&pl08x->adev->dev,
> - "%s error interrupt, register value 0x%08x\n",
> - __func__, val);
> - /*
> - * Simply clear ALL PL08X error interrupts,
> - * regardless of channel and cause
> - * FIXME: should be 0x00000003 on PL081 really.
> - */
> - writel(0x000000FF, pl08x->base + PL080_ERR_CLEAR);
> + u32 err, tc, i;
> +
> + /* check & clear - ERR & TC interrupts */
> + err = readl(pl08x->base + PL080_ERR_STATUS);
> + if (err) {
> + dev_err(&pl08x->adev->dev, "%s error interrupt, register value"
> + "0x%08x\n", __func__, err);
again this looks convoluted, and the stuff is quotes can be in single
line :)
> + writel(err, pl08x->base + PL080_ERR_CLEAR);
> }
> - val = readl(pl08x->base + PL080_INT_STATUS);
> - for (i = 0; i < pl08x->vd->channels; i++) {
> - if ((1 << i) & val) {
> + tc = readl(pl08x->base + PL080_INT_STATUS);
> + if (tc)
> + writel(tc, pl08x->base + PL080_TC_CLEAR);
> +
> + if (!err && !tc)
> + return IRQ_NONE;
> +
> + for (i = 0; i < pl08x->vd->channels; i++)
> + if (((1 << i) & err) || ((1 << i) & tc)) {
> /* Locate physical channel */
> struct pl08x_phy_chan *phychan = &pl08x->phy_chans[i];
> struct pl08x_dma_chan *plchan = phychan->serving;
>
> /* Schedule tasklet on this channel */
> tasklet_schedule(&plchan->tasklet);
but in tasklet you will call the client callback, so how does the client
know if this was success or error? Did I miss anything?
> -
> - mask |= (1 << i);
> }
> - }
> - /* Clear only the terminal interrupts on channels we processed */
> - writel(mask, pl08x->base + PL080_TC_CLEAR);
>
> - return mask ? IRQ_HANDLED : IRQ_NONE;
> + return IRQ_HANDLED;
> }
>
> static void pl08x_dma_slave_init(struct pl08x_dma_chan *chan)
--
~Vinod
next prev parent reply other threads:[~2011-07-29 12:16 UTC|newest]
Thread overview: 102+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-29 10:49 [PATCH 00/18] dmaengine/amba-pl08x updates Viresh Kumar
2011-07-29 10:49 ` [PATCH 01/18] ARM: asm/pl080.h: Protect against multiple inclusion of header file Viresh Kumar
2011-07-30 22:16 ` Linus Walleij
2011-07-29 10:49 ` [PATCH 02/18] dmaengine/amba-pl08x: Resolve formatting issues Viresh Kumar
2011-07-29 11:00 ` Russell King - ARM Linux
2011-07-29 11:21 ` viresh kumar
2011-07-29 12:05 ` Koul, Vinod
2011-07-29 15:25 ` viresh kumar
2011-07-29 10:49 ` [PATCH 03/18] dmaengine/amba-pl08x: Complete doc comment for struct pl08x_txd Viresh Kumar
2011-07-29 10:49 ` [PATCH 04/18] dmaengine/amba-pl08x: Remove redundant comment and rewrite original Viresh Kumar
2011-07-29 12:09 ` Koul, Vinod
2011-07-29 15:47 ` viresh kumar
2011-07-29 16:34 ` Russell King - ARM Linux
2011-07-30 22:32 ` Linus Walleij
2011-07-30 22:57 ` Russell King - ARM Linux
2011-07-30 23:37 ` Linus Walleij
2011-07-31 5:51 ` viresh kumar
2011-07-31 9:06 ` Russell King - ARM Linux
2011-07-29 10:49 ` [PATCH 05/18] dmaengine/amba-pl08x: Changing few prints to dev_dbg from dev_info Viresh Kumar
2011-07-30 22:34 ` Linus Walleij
2011-07-29 10:49 ` [PATCH 06/18] dmaengine/amba-pl08x: Simplify pl08x_ensure_on() Viresh Kumar
2011-07-30 22:36 ` Linus Walleij
2011-07-29 10:49 ` [PATCH 07/18] dmaengine/amba-pl08x: Enable/Disable amba_pclk with channel requests Viresh Kumar
2011-07-30 12:07 ` Russell King - ARM Linux
2011-07-30 13:05 ` Russell King - ARM Linux
2011-07-30 23:53 ` Linus Walleij
2011-07-31 0:04 ` Linus Walleij
2011-07-31 17:04 ` Russell King - ARM Linux
2011-08-02 9:05 ` Linus Walleij
2011-08-03 12:55 ` Russell King - ARM Linux
2011-08-09 19:50 ` Linus Walleij
2011-07-29 10:49 ` [PATCH 08/18] dmaengine/amba-pl08x: No need to check "ch->signal < 0" Viresh Kumar
2011-07-31 0:09 ` Linus Walleij
2011-07-29 10:49 ` [PATCH 09/18] dmaengine/amba-pl08x: Schedule tasklet in case of error interrupt Viresh Kumar
2011-07-29 12:16 ` Koul, Vinod [this message]
2011-07-29 13:02 ` Russell King - ARM Linux
2011-07-29 15:30 ` viresh kumar
2011-08-04 4:25 ` Koul, Vinod
2011-08-04 5:54 ` viresh kumar
2011-08-04 5:32 ` Koul, Vinod
2011-08-14 8:29 ` Russell King - ARM Linux
2011-07-31 0:19 ` Linus Walleij
2011-07-31 5:33 ` viresh kumar
2011-07-29 10:49 ` [PATCH 10/18] dmaengine/amba-pl08x: Get rid of pl08x_pre_boundary() Viresh Kumar
2011-07-29 11:05 ` Russell King - ARM Linux
2011-07-29 12:32 ` Koul, Vinod
2011-07-29 15:58 ` viresh kumar
2011-07-29 12:19 ` Koul, Vinod
2011-07-29 15:40 ` viresh kumar
2011-07-31 0:24 ` Linus Walleij
2011-07-29 10:49 ` [PATCH 11/18] dmaengine/amba-pl08x: max_bytes_per_lli is TRANSFER_SIZE * src_width (not MIN(width)) Viresh Kumar
2011-07-31 0:27 ` Linus Walleij
2011-07-31 9:09 ` Russell King - ARM Linux
2011-07-29 10:49 ` [PATCH 12/18] dmaengine/amba-pl08x: Add prep_single_byte_llis() routine Viresh Kumar
2011-07-29 11:06 ` Russell King - ARM Linux
2011-07-29 11:30 ` viresh kumar
2011-07-29 10:49 ` [PATCH 13/18] dmaengine/amba-pl08x: Align lli_len to max(src.width, dst.width) Viresh Kumar
2011-07-29 12:43 ` Koul, Vinod
2011-07-29 15:39 ` viresh kumar
2011-07-31 0:30 ` Linus Walleij
2011-07-29 10:49 ` [PATCH 14/18] dmaengine/amba-pl08x: Choose peripheral bus as master bus Viresh Kumar
2011-07-31 0:36 ` Linus Walleij
2011-07-29 10:49 ` [PATCH 15/18] dmaengine/amba-pl08x: Pass flow controller information with slave channel data Viresh Kumar
2011-07-29 11:10 ` Russell King - ARM Linux
2011-07-29 11:31 ` viresh kumar
2011-07-31 0:40 ` Linus Walleij
2011-07-31 5:36 ` viresh kumar
2011-07-29 10:49 ` [PATCH 16/18] dmaengine/amba-pl08x: Add support for sg len greater than one for slave transfers Viresh Kumar
2011-07-31 0:41 ` Linus Walleij
2011-08-14 8:36 ` Russell King - ARM Linux
2011-08-15 10:11 ` Linus Walleij
2011-08-18 8:38 ` Viresh Kumar
2011-08-21 8:33 ` Russell King - ARM Linux
2011-08-23 4:22 ` Viresh Kumar
2011-08-23 5:20 ` Koul, Vinod
2011-08-26 3:41 ` Viresh Kumar
2011-08-26 8:03 ` Linus Walleij
2011-08-26 8:51 ` Viresh Kumar
2011-09-01 10:07 ` Viresh Kumar
2011-09-07 18:42 ` Koul, Vinod
2011-09-07 23:01 ` Linus Walleij
2011-09-08 3:50 ` Viresh Kumar
2011-09-08 10:29 ` Linus Walleij
2011-09-08 21:54 ` [PATCH 16/18] dmaengine/ambhe rest oa-pl08x: " Vinod Koul
2011-09-20 6:19 ` Vinod Koul
2011-09-20 6:27 ` Viresh Kumar
2011-09-20 8:08 ` Vinod Koul
2011-07-29 10:49 ` [PATCH 17/18] dmaengine/amba-pl08x: Check txd->llis_va before freeing dma_pool Viresh Kumar
2011-07-31 0:44 ` Linus Walleij
2011-07-29 10:49 ` [PATCH 18/18] dmaengine/amba-pl08x: Call pl08x_free_txd() instead of calling kfree() directly Viresh Kumar
2011-07-29 11:15 ` Russell King - ARM Linux
2011-07-29 11:38 ` viresh kumar
2011-07-31 0:45 ` Linus Walleij
2011-07-31 5:39 ` viresh kumar
2011-07-29 10:57 ` [PATCH 00/18] dmaengine/amba-pl08x updates Russell King - ARM Linux
2011-07-29 11:14 ` viresh kumar
2011-07-29 11:19 ` Russell King - ARM Linux
2011-07-29 11:23 ` viresh kumar
2011-07-29 12:43 ` Russell King - ARM Linux
2011-07-29 15:22 ` viresh kumar
2011-07-29 11:58 ` Koul, Vinod
2011-08-01 5:30 ` viresh kumar
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=1311941799.1536.532.camel@vkoul-udesk3 \
--to=vinod.koul@intel.com \
--cc=linux-arm-kernel@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox