Lines Matching refs:jrp
83 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
87 if (rd_reg32(&jrp->rregs->jrintstatus) & JRINT_ERR_HALT_INPROGRESS)
91 clrsetbits_32(&jrp->rregs->jrintstatus, JRINT_ERR_HALT_MASK, 0);
94 wr_reg32(&jrp->rregs->jrcommand, jrcr_bits);
97 while (((rd_reg32(&jrp->rregs->jrintstatus) & JRINT_ERR_HALT_MASK) ==
101 if ((rd_reg32(&jrp->rregs->jrintstatus) & JRINT_ERR_HALT_MASK) !=
103 dev_err(dev, "failed to flush job ring %d\n", jrp->ridx);
124 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
125 u32 halt_status = rd_reg32(&jrp->rregs->jrintstatus) &
133 clrsetbits_32(&jrp->rregs->jrintstatus, 0, JRINT_ERR_HALT_COMPLETE);
140 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
147 clrsetbits_32(&jrp->rregs->rconfig_lo, 0, JRCFG_IMSK);
153 wr_reg32(&jrp->rregs->jrcommand, JRCR_RESET);
154 while ((rd_reg32(&jrp->rregs->jrcommand) & JRCR_RESET) && --timeout)
158 dev_err(dev, "failed to reset job ring %d\n", jrp->ridx);
163 clrsetbits_32(&jrp->rregs->rconfig_lo, JRCFG_IMSK, 0);
173 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
178 tasklet_kill(&jrp->irqtask);
228 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
235 irqstate = rd_reg32(&jrp->rregs->jrintstatus);
250 clrsetbits_32(&jrp->rregs->rconfig_lo, 0, JRCFG_IMSK);
253 wr_reg32(&jrp->rregs->jrintstatus, irqstate);
256 tasklet_schedule(&jrp->irqtask);
268 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
275 (outring_used = rd_reg32(&jrp->rregs->outring_used))) {
277 head = READ_ONCE(jrp->head);
279 sw_idx = tail = jrp->tail;
280 hw_idx = jrp->out_ring_read_index;
285 if (jr_outentry_desc(jrp->outring, hw_idx) ==
286 caam_dma_to_cpu(jrp->entinfo[sw_idx].desc_addr_dma))
294 caam_dma_to_cpu(jr_outentry_desc(jrp->outring,
296 jrp->entinfo[sw_idx].desc_size,
300 jrp->entinfo[sw_idx].desc_addr_dma = 0;
303 usercall = jrp->entinfo[sw_idx].callbk;
304 userarg = jrp->entinfo[sw_idx].cbkarg;
305 userdesc = jrp->entinfo[sw_idx].desc_addr_virt;
306 userstatus = caam32_to_cpu(jr_outentry_jrstatus(jrp->outring,
317 wr_reg32(&jrp->rregs->outring_rmvd, 1);
319 jrp->out_ring_read_index = (jrp->out_ring_read_index + 1) &
331 jrp->entinfo[tail].desc_addr_dma == 0);
333 jrp->tail = tail;
343 clrsetbits_32(&jrp->rregs->rconfig_lo, JRCFG_IMSK, 0);
431 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
443 spin_lock_bh(&jrp->inplock);
445 head = jrp->head;
446 tail = READ_ONCE(jrp->tail);
448 if (!jrp->inpring_avail ||
450 spin_unlock_bh(&jrp->inplock);
455 head_entry = &jrp->entinfo[head];
462 jr_inpentry_set(jrp->inpring, head, cpu_to_caam_dma(desc_dma));
479 jrp->head = (head + 1) & (JOBR_DEPTH - 1);
489 wr_reg32(&jrp->rregs->inpring_jobadd, 1);
491 jrp->inpring_avail--;
492 if (!jrp->inpring_avail)
493 jrp->inpring_avail = rd_reg32(&jrp->rregs->inpring_avail);
495 spin_unlock_bh(&jrp->inplock);
504 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
506 wr_reg64(&jrp->rregs->inpring_base, inpbusaddr);
507 wr_reg64(&jrp->rregs->outring_base, outbusaddr);
508 wr_reg32(&jrp->rregs->inpring_size, JOBR_DEPTH);
509 wr_reg32(&jrp->rregs->outring_size, JOBR_DEPTH);
512 clrsetbits_32(&jrp->rregs->rconfig_lo, 0, JOBR_INTC |
517 static void caam_jr_reset_index(struct caam_drv_private_jr *jrp)
519 jrp->out_ring_read_index = 0;
520 jrp->head = 0;
521 jrp->tail = 0;
529 struct caam_drv_private_jr *jrp;
533 jrp = dev_get_drvdata(dev);
539 jrp->inpring = dmam_alloc_coherent(dev, SIZEOF_JR_INPENTRY *
542 if (!jrp->inpring)
545 jrp->outring = dmam_alloc_coherent(dev, SIZEOF_JR_OUTENTRY *
548 if (!jrp->outring)
551 jrp->entinfo = devm_kcalloc(dev, JOBR_DEPTH, sizeof(*jrp->entinfo),
553 if (!jrp->entinfo)
557 jrp->entinfo[i].desc_addr_dma = !0;
560 caam_jr_reset_index(jrp);
561 jrp->inpring_avail = JOBR_DEPTH;
564 spin_lock_init(&jrp->inplock);
566 jrp->tasklet_params.dev = dev;
567 jrp->tasklet_params.enable_itr = 1;
568 tasklet_init(&jrp->irqtask, caam_jr_dequeue,
569 (unsigned long)&jrp->tasklet_params);
572 error = devm_request_irq(dev, jrp->irq, caam_jr_interrupt, IRQF_SHARED,
576 jrp->ridx, jrp->irq);
577 tasklet_kill(&jrp->irqtask);
690 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
692 jrp->state.inpbusaddr = rd_reg64(&jrp->rregs->inpring_base);
693 jrp->state.outbusaddr = rd_reg64(&jrp->rregs->outring_base);