Lines Matching refs:jrp

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