From e031fcdf655195a12c21687b11dc78320e8381ce Mon Sep 17 00:00:00 2001 From: Lee Nipper Date: Sat, 20 Dec 2008 17:09:25 +1100 Subject: [PATCH] --- yaml --- r: 120639 b: refs/heads/master c: ca38a814c6f86db0aa58884a31093d4f096e20aa h: refs/heads/master i: 120637: 70fae2f5227a2ae1aecbe3dcd9ee2299a453ca99 120635: e465c57db6bec51b9142169a19ccce9759a24731 120631: 8b22ca65bd0e84a88023341df6afe6b356798f19 120623: c0ed1b053299b401d094c522dbecc686feb7f48d 120607: 7e748d3d4e212a1ef5b785f5273a6cbc11ca76ee 120575: 5667568d4378dab5bb1cede08a00267f09efa6a9 v: v3 --- [refs] | 2 +- trunk/drivers/crypto/talitos.c | 20 +++++++------------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/[refs] b/[refs] index e1c04ce68177..dafcb573e19b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bcf84a38f05c55180bc1225901950c7e715c0d55 +refs/heads/master: ca38a814c6f86db0aa58884a31093d4f096e20aa diff --git a/trunk/drivers/crypto/talitos.c b/trunk/drivers/crypto/talitos.c index c3df3b1df857..a3918c16b3db 100644 --- a/trunk/drivers/crypto/talitos.c +++ b/trunk/drivers/crypto/talitos.c @@ -330,11 +330,9 @@ static void flush_channel(struct device *dev, int ch, int error, int reset_ch) /* descriptors with their done bits set don't get the error */ rmb(); - if ((request->desc->hdr & DESC_HDR_DONE) == DESC_HDR_DONE) { + if ((request->desc->hdr & DESC_HDR_DONE) == DESC_HDR_DONE) status = 0; - /* Ack each pkt completed on channel */ - out_be32(priv->reg + TALITOS_ICR, (1 << (ch * 2))); - } else + else if (!error) break; else @@ -575,17 +573,13 @@ static irqreturn_t talitos_interrupt(int irq, void *data) isr = in_be32(priv->reg + TALITOS_ISR); isr_lo = in_be32(priv->reg + TALITOS_ISR_LO); + /* Acknowledge interrupt */ + out_be32(priv->reg + TALITOS_ICR, isr); + out_be32(priv->reg + TALITOS_ICR_LO, isr_lo); - if (unlikely((isr & ~TALITOS_ISR_CHDONE) || isr_lo)) { - /* - * Acknowledge error interrupts here. - * Done interrupts are ack'ed as part of done_task. - */ - out_be32(priv->reg + TALITOS_ICR, isr); - out_be32(priv->reg + TALITOS_ICR_LO, isr_lo); - + if (unlikely((isr & ~TALITOS_ISR_CHDONE) || isr_lo)) talitos_error((unsigned long)data, isr, isr_lo); - } else + else if (likely(isr & TALITOS_ISR_CHDONE)) { /* mask further done interrupts. */ clrbits32(priv->reg + TALITOS_IMR, TALITOS_IMR_DONE);