diff options
Diffstat (limited to 'drivers/crypto/talitos.c')
-rw-r--r-- | drivers/crypto/talitos.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c index c3df3b1df857..a3918c16b3db 100644 --- a/drivers/crypto/talitos.c +++ b/drivers/crypto/talitos.c | |||
@@ -330,11 +330,9 @@ static void flush_channel(struct device *dev, int ch, int error, int reset_ch) | |||
330 | 330 | ||
331 | /* descriptors with their done bits set don't get the error */ | 331 | /* descriptors with their done bits set don't get the error */ |
332 | rmb(); | 332 | rmb(); |
333 | if ((request->desc->hdr & DESC_HDR_DONE) == DESC_HDR_DONE) { | 333 | if ((request->desc->hdr & DESC_HDR_DONE) == DESC_HDR_DONE) |
334 | status = 0; | 334 | status = 0; |
335 | /* Ack each pkt completed on channel */ | 335 | else |
336 | out_be32(priv->reg + TALITOS_ICR, (1 << (ch * 2))); | ||
337 | } else | ||
338 | if (!error) | 336 | if (!error) |
339 | break; | 337 | break; |
340 | else | 338 | else |
@@ -575,17 +573,13 @@ static irqreturn_t talitos_interrupt(int irq, void *data) | |||
575 | 573 | ||
576 | isr = in_be32(priv->reg + TALITOS_ISR); | 574 | isr = in_be32(priv->reg + TALITOS_ISR); |
577 | isr_lo = in_be32(priv->reg + TALITOS_ISR_LO); | 575 | isr_lo = in_be32(priv->reg + TALITOS_ISR_LO); |
576 | /* Acknowledge interrupt */ | ||
577 | out_be32(priv->reg + TALITOS_ICR, isr); | ||
578 | out_be32(priv->reg + TALITOS_ICR_LO, isr_lo); | ||
578 | 579 | ||
579 | if (unlikely((isr & ~TALITOS_ISR_CHDONE) || isr_lo)) { | 580 | if (unlikely((isr & ~TALITOS_ISR_CHDONE) || isr_lo)) |
580 | /* | ||
581 | * Acknowledge error interrupts here. | ||
582 | * Done interrupts are ack'ed as part of done_task. | ||
583 | */ | ||
584 | out_be32(priv->reg + TALITOS_ICR, isr); | ||
585 | out_be32(priv->reg + TALITOS_ICR_LO, isr_lo); | ||
586 | |||
587 | talitos_error((unsigned long)data, isr, isr_lo); | 581 | talitos_error((unsigned long)data, isr, isr_lo); |
588 | } else | 582 | else |
589 | if (likely(isr & TALITOS_ISR_CHDONE)) { | 583 | if (likely(isr & TALITOS_ISR_CHDONE)) { |
590 | /* mask further done interrupts. */ | 584 | /* mask further done interrupts. */ |
591 | clrbits32(priv->reg + TALITOS_IMR, TALITOS_IMR_DONE); | 585 | clrbits32(priv->reg + TALITOS_IMR, TALITOS_IMR_DONE); |