Lines Matching refs:jrp
27 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev); in caam_reset_hw_jr() local
34 setbits32(&jrp->rregs->rconfig_lo, JRCFG_IMSK); in caam_reset_hw_jr()
37 wr_reg32(&jrp->rregs->jrcommand, JRCR_RESET); in caam_reset_hw_jr()
38 while (((rd_reg32(&jrp->rregs->jrintstatus) & JRINT_ERR_HALT_MASK) == in caam_reset_hw_jr()
42 if ((rd_reg32(&jrp->rregs->jrintstatus) & JRINT_ERR_HALT_MASK) != in caam_reset_hw_jr()
44 dev_err(dev, "failed to flush job ring %d\n", jrp->ridx); in caam_reset_hw_jr()
50 wr_reg32(&jrp->rregs->jrcommand, JRCR_RESET); in caam_reset_hw_jr()
51 while ((rd_reg32(&jrp->rregs->jrcommand) & JRCR_RESET) && --timeout) in caam_reset_hw_jr()
55 dev_err(dev, "failed to reset job ring %d\n", jrp->ridx); in caam_reset_hw_jr()
60 clrbits32(&jrp->rregs->rconfig_lo, JRCFG_IMSK); in caam_reset_hw_jr()
70 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev); in caam_jr_shutdown() local
76 tasklet_kill(&jrp->irqtask); in caam_jr_shutdown()
79 free_irq(jrp->irq, dev); in caam_jr_shutdown()
82 inpbusaddr = rd_reg64(&jrp->rregs->inpring_base); in caam_jr_shutdown()
83 outbusaddr = rd_reg64(&jrp->rregs->outring_base); in caam_jr_shutdown()
85 jrp->inpring, inpbusaddr); in caam_jr_shutdown()
87 jrp->outring, outbusaddr); in caam_jr_shutdown()
88 kfree(jrp->entinfo); in caam_jr_shutdown()
128 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev); in caam_jr_interrupt() local
135 irqstate = rd_reg32(&jrp->rregs->jrintstatus); in caam_jr_interrupt()
150 setbits32(&jrp->rregs->rconfig_lo, JRCFG_IMSK); in caam_jr_interrupt()
153 wr_reg32(&jrp->rregs->jrintstatus, irqstate); in caam_jr_interrupt()
156 tasklet_schedule(&jrp->irqtask); in caam_jr_interrupt()
167 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev); in caam_jr_dequeue() local
172 while (rd_reg32(&jrp->rregs->outring_used)) { in caam_jr_dequeue()
174 head = ACCESS_ONCE(jrp->head); in caam_jr_dequeue()
176 spin_lock(&jrp->outlock); in caam_jr_dequeue()
178 sw_idx = tail = jrp->tail; in caam_jr_dequeue()
179 hw_idx = jrp->out_ring_read_index; in caam_jr_dequeue()
184 if (jrp->outring[hw_idx].desc == in caam_jr_dequeue()
185 jrp->entinfo[sw_idx].desc_addr_dma) in caam_jr_dequeue()
192 dma_unmap_single(dev, jrp->outring[hw_idx].desc, in caam_jr_dequeue()
193 jrp->entinfo[sw_idx].desc_size, in caam_jr_dequeue()
197 jrp->entinfo[sw_idx].desc_addr_dma = 0; in caam_jr_dequeue()
200 usercall = jrp->entinfo[sw_idx].callbk; in caam_jr_dequeue()
201 userarg = jrp->entinfo[sw_idx].cbkarg; in caam_jr_dequeue()
202 userdesc = jrp->entinfo[sw_idx].desc_addr_virt; in caam_jr_dequeue()
203 userstatus = jrp->outring[hw_idx].jrstatus; in caam_jr_dequeue()
206 wr_reg32(&jrp->rregs->outring_rmvd, 1); in caam_jr_dequeue()
208 jrp->out_ring_read_index = (jrp->out_ring_read_index + 1) & in caam_jr_dequeue()
220 jrp->entinfo[tail].desc_addr_dma == 0); in caam_jr_dequeue()
222 jrp->tail = tail; in caam_jr_dequeue()
225 spin_unlock(&jrp->outlock); in caam_jr_dequeue()
232 clrbits32(&jrp->rregs->rconfig_lo, JRCFG_IMSK); in caam_jr_dequeue()
321 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev); in caam_jr_enqueue() local
333 spin_lock_bh(&jrp->inplock); in caam_jr_enqueue()
335 head = jrp->head; in caam_jr_enqueue()
336 tail = ACCESS_ONCE(jrp->tail); in caam_jr_enqueue()
338 if (!rd_reg32(&jrp->rregs->inpring_avail) || in caam_jr_enqueue()
340 spin_unlock_bh(&jrp->inplock); in caam_jr_enqueue()
345 head_entry = &jrp->entinfo[head]; in caam_jr_enqueue()
352 jrp->inpring[jrp->inp_ring_write_index] = desc_dma; in caam_jr_enqueue()
356 jrp->inp_ring_write_index = (jrp->inp_ring_write_index + 1) & in caam_jr_enqueue()
358 jrp->head = (head + 1) & (JOBR_DEPTH - 1); in caam_jr_enqueue()
360 wr_reg32(&jrp->rregs->inpring_jobadd, 1); in caam_jr_enqueue()
362 spin_unlock_bh(&jrp->inplock); in caam_jr_enqueue()
373 struct caam_drv_private_jr *jrp; in caam_jr_init() local
377 jrp = dev_get_drvdata(dev); in caam_jr_init()
379 tasklet_init(&jrp->irqtask, caam_jr_dequeue, (unsigned long)dev); in caam_jr_init()
382 error = request_irq(jrp->irq, caam_jr_interrupt, IRQF_SHARED, in caam_jr_init()
386 jrp->ridx, jrp->irq); in caam_jr_init()
395 jrp->inpring = dma_alloc_coherent(dev, sizeof(dma_addr_t) * JOBR_DEPTH, in caam_jr_init()
397 if (!jrp->inpring) in caam_jr_init()
400 jrp->outring = dma_alloc_coherent(dev, sizeof(struct jr_outentry) * in caam_jr_init()
402 if (!jrp->outring) in caam_jr_init()
405 jrp->entinfo = kzalloc(sizeof(struct caam_jrentry_info) * JOBR_DEPTH, in caam_jr_init()
407 if (!jrp->entinfo) in caam_jr_init()
411 jrp->entinfo[i].desc_addr_dma = !0; in caam_jr_init()
414 jrp->inp_ring_write_index = 0; in caam_jr_init()
415 jrp->out_ring_read_index = 0; in caam_jr_init()
416 jrp->head = 0; in caam_jr_init()
417 jrp->tail = 0; in caam_jr_init()
419 wr_reg64(&jrp->rregs->inpring_base, inpbusaddr); in caam_jr_init()
420 wr_reg64(&jrp->rregs->outring_base, outbusaddr); in caam_jr_init()
421 wr_reg32(&jrp->rregs->inpring_size, JOBR_DEPTH); in caam_jr_init()
422 wr_reg32(&jrp->rregs->outring_size, JOBR_DEPTH); in caam_jr_init()
424 jrp->ringsize = JOBR_DEPTH; in caam_jr_init()
426 spin_lock_init(&jrp->inplock); in caam_jr_init()
427 spin_lock_init(&jrp->outlock); in caam_jr_init()
430 setbits32(&jrp->rregs->rconfig_lo, JOBR_INTC | in caam_jr_init()
438 jrp->outring, outbusaddr); in caam_jr_init()
441 jrp->inpring, inpbusaddr); in caam_jr_init()
442 dev_err(dev, "can't allocate job rings for %d\n", jrp->ridx); in caam_jr_init()
444 free_irq(jrp->irq, dev); in caam_jr_init()
446 tasklet_kill(&jrp->irqtask); in caam_jr_init()