Message ID | 20110411191516.bae0454e.kim.phillips@freescale.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On Mon, Apr 11, 2011 at 07:15:16PM -0500, Kim Phillips wrote: > - add IRQF_SHARED to request_irq flags to support parts such as > the p1023 that has one IRQ line per couple of rings. > > - resetting a job ring triggers an interrupt, so move request_irq > prior to jr_reset to avoid 'got IRQ but nobody cared' messages. > > - disable IRQs in h/w to avoid contention between reset and > interrupt status > > - delete invalid comment - if there were incomplete jobs, > module would be in use, preventing an unload. > > Signed-off-by: Kim Phillips <kim.phillips@freescale.com> > --- > this, and the remaining patches in this series, tested on p1023, p3041, > p4080, and 32- and 64-bit p5020. All four patches applied. Thanks Kim!
On Fri, 15 Apr 2011 17:50:49 +0800 Herbert Xu <herbert@gondor.apana.org.au> wrote: > On Mon, Apr 11, 2011 at 07:15:16PM -0500, Kim Phillips wrote: > > - add IRQF_SHARED to request_irq flags to support parts such as > > the p1023 that has one IRQ line per couple of rings. > > > > - resetting a job ring triggers an interrupt, so move request_irq > > prior to jr_reset to avoid 'got IRQ but nobody cared' messages. > > > > - disable IRQs in h/w to avoid contention between reset and > > interrupt status > > > > - delete invalid comment - if there were incomplete jobs, > > module would be in use, preventing an unload. > > > > Signed-off-by: Kim Phillips <kim.phillips@freescale.com> > > --- > > this, and the remaining patches in this series, tested on p1023, p3041, > > p4080, and 32- and 64-bit p5020. > > All four patches applied. Thanks Kim! I don't see them in cryptodev-2.6 - did you forget to push them? Thanks, Kim
On Mon, May 02, 2011 at 06:27:27PM -0500, Kim Phillips wrote: > > I don't see them in cryptodev-2.6 - did you forget to push them? Indeed, they were stuck on my other machine. They should be on master now and should show up on the public mirror soon. Thanks,
diff --git a/drivers/crypto/caam/jr.c b/drivers/crypto/caam/jr.c index 68cb9af..340fa32 100644 --- a/drivers/crypto/caam/jr.c +++ b/drivers/crypto/caam/jr.c @@ -292,10 +292,10 @@ static int caam_reset_hw_jr(struct device *dev) unsigned int timeout = 100000; /* - * FIXME: disabling IRQs here inhibits proper job completion - * and error propagation + * mask interrupts since we are going to poll + * for reset completion status */ - disable_irq(jrp->irq); + setbits32(&jrp->rregs->rconfig_lo, JRCFG_IMSK); /* initiate flush (required prior to reset) */ wr_reg32(&jrp->rregs->jrcommand, JRCR_RESET); @@ -320,7 +320,8 @@ static int caam_reset_hw_jr(struct device *dev) return -EIO; } - enable_irq(jrp->irq); + /* unmask interrupts */ + clrbits32(&jrp->rregs->rconfig_lo, JRCFG_IMSK); return 0; } @@ -336,6 +337,21 @@ static int caam_jr_init(struct device *dev) jrp = dev_get_drvdata(dev); + /* Connect job ring interrupt handler. */ + for_each_possible_cpu(i) + tasklet_init(&jrp->irqtask[i], caam_jr_dequeue, + (unsigned long)dev); + + error = request_irq(jrp->irq, caam_jr_interrupt, IRQF_SHARED, + "caam-jobr", dev); + if (error) { + dev_err(dev, "can't connect JobR %d interrupt (%d)\n", + jrp->ridx, jrp->irq); + irq_dispose_mapping(jrp->irq); + jrp->irq = 0; + return -EINVAL; + } + error = caam_reset_hw_jr(dev); if (error) return error; @@ -404,28 +420,6 @@ static int caam_jr_init(struct device *dev) (JOBR_INTC_COUNT_THLD << JRCFG_ICDCT_SHIFT) | (JOBR_INTC_TIME_THLD << JRCFG_ICTT_SHIFT)); - /* Connect job ring interrupt handler. */ - for_each_possible_cpu(i) - tasklet_init(&jrp->irqtask[i], caam_jr_dequeue, - (unsigned long)dev); - - error = request_irq(jrp->irq, caam_jr_interrupt, 0, - "caam-jobr", dev); - if (error) { - dev_err(dev, "can't connect JobR %d interrupt (%d)\n", - jrp->ridx, jrp->irq); - irq_dispose_mapping(jrp->irq); - jrp->irq = 0; - dma_unmap_single(dev, inpbusaddr, sizeof(u32 *) * JOBR_DEPTH, - DMA_BIDIRECTIONAL); - dma_unmap_single(dev, outbusaddr, sizeof(u32 *) * JOBR_DEPTH, - DMA_BIDIRECTIONAL); - kfree(jrp->inpring); - kfree(jrp->outring); - kfree(jrp->entinfo); - return -EINVAL; - } - jrp->assign = JOBR_UNASSIGNED; return 0; }
- add IRQF_SHARED to request_irq flags to support parts such as the p1023 that has one IRQ line per couple of rings. - resetting a job ring triggers an interrupt, so move request_irq prior to jr_reset to avoid 'got IRQ but nobody cared' messages. - disable IRQs in h/w to avoid contention between reset and interrupt status - delete invalid comment - if there were incomplete jobs, module would be in use, preventing an unload. Signed-off-by: Kim Phillips <kim.phillips@freescale.com> --- this, and the remaining patches in this series, tested on p1023, p3041, p4080, and 32- and 64-bit p5020. drivers/crypto/caam/jr.c | 46 ++++++++++++++++++++-------------------------- 1 files changed, 20 insertions(+), 26 deletions(-)