Lines Matching refs:jrp
76 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
83 clrsetbits_32(&jrp->rregs->rconfig_lo, 0, JRCFG_IMSK);
86 wr_reg32(&jrp->rregs->jrcommand, JRCR_RESET);
87 while (((rd_reg32(&jrp->rregs->jrintstatus) & JRINT_ERR_HALT_MASK) ==
91 if ((rd_reg32(&jrp->rregs->jrintstatus) & JRINT_ERR_HALT_MASK) !=
93 dev_err(dev, "failed to flush job ring %d\n", jrp->ridx);
99 wr_reg32(&jrp->rregs->jrcommand, JRCR_RESET);
100 while ((rd_reg32(&jrp->rregs->jrcommand) & JRCR_RESET) && --timeout)
104 dev_err(dev, "failed to reset job ring %d\n", jrp->ridx);
109 clrsetbits_32(&jrp->rregs->rconfig_lo, JRCFG_IMSK, 0);
119 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
124 tasklet_kill(&jrp->irqtask);
169 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
176 irqstate = rd_reg32(&jrp->rregs->jrintstatus);
191 clrsetbits_32(&jrp->rregs->rconfig_lo, 0, JRCFG_IMSK);
194 wr_reg32(&jrp->rregs->jrintstatus, irqstate);
197 tasklet_schedule(&jrp->irqtask);
208 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
215 (outring_used = rd_reg32(&jrp->rregs->outring_used))) {
217 head = READ_ONCE(jrp->head);
219 sw_idx = tail = jrp->tail;
220 hw_idx = jrp->out_ring_read_index;
225 if (jr_outentry_desc(jrp->outring, hw_idx) ==
226 caam_dma_to_cpu(jrp->entinfo[sw_idx].desc_addr_dma))
234 caam_dma_to_cpu(jr_outentry_desc(jrp->outring,
236 jrp->entinfo[sw_idx].desc_size,
240 jrp->entinfo[sw_idx].desc_addr_dma = 0;
243 usercall = jrp->entinfo[sw_idx].callbk;
244 userarg = jrp->entinfo[sw_idx].cbkarg;
245 userdesc = jrp->entinfo[sw_idx].desc_addr_virt;
246 userstatus = caam32_to_cpu(jr_outentry_jrstatus(jrp->outring,
257 wr_reg32(&jrp->rregs->outring_rmvd, 1);
259 jrp->out_ring_read_index = (jrp->out_ring_read_index + 1) &
271 jrp->entinfo[tail].desc_addr_dma == 0);
273 jrp->tail = tail;
282 clrsetbits_32(&jrp->rregs->rconfig_lo, JRCFG_IMSK, 0);
370 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
382 spin_lock_bh(&jrp->inplock);
384 head = jrp->head;
385 tail = READ_ONCE(jrp->tail);
387 if (!jrp->inpring_avail ||
389 spin_unlock_bh(&jrp->inplock);
394 head_entry = &jrp->entinfo[head];
401 jr_inpentry_set(jrp->inpring, head, cpu_to_caam_dma(desc_dma));
410 jrp->head = (head + 1) & (JOBR_DEPTH - 1);
420 wr_reg32(&jrp->rregs->inpring_jobadd, 1);
422 jrp->inpring_avail--;
423 if (!jrp->inpring_avail)
424 jrp->inpring_avail = rd_reg32(&jrp->rregs->inpring_avail);
426 spin_unlock_bh(&jrp->inplock);
437 struct caam_drv_private_jr *jrp;
441 jrp = dev_get_drvdata(dev);
447 jrp->inpring = dmam_alloc_coherent(dev, SIZEOF_JR_INPENTRY *
450 if (!jrp->inpring)
453 jrp->outring = dmam_alloc_coherent(dev, SIZEOF_JR_OUTENTRY *
456 if (!jrp->outring)
459 jrp->entinfo = devm_kcalloc(dev, JOBR_DEPTH, sizeof(*jrp->entinfo),
461 if (!jrp->entinfo)
465 jrp->entinfo[i].desc_addr_dma = !0;
468 jrp->out_ring_read_index = 0;
469 jrp->head = 0;
470 jrp->tail = 0;
472 wr_reg64(&jrp->rregs->inpring_base, inpbusaddr);
473 wr_reg64(&jrp->rregs->outring_base, outbusaddr);
474 wr_reg32(&jrp->rregs->inpring_size, JOBR_DEPTH);
475 wr_reg32(&jrp->rregs->outring_size, JOBR_DEPTH);
477 jrp->inpring_avail = JOBR_DEPTH;
479 spin_lock_init(&jrp->inplock);
482 clrsetbits_32(&jrp->rregs->rconfig_lo, 0, JOBR_INTC |
486 tasklet_init(&jrp->irqtask, caam_jr_dequeue, (unsigned long)dev);
489 error = devm_request_irq(dev, jrp->irq, caam_jr_interrupt, IRQF_SHARED,
493 jrp->ridx, jrp->irq);
494 tasklet_kill(&jrp->irqtask);