void (*usercall)(struct device *dev, u32 *desc, u32 status, void *arg);
#include <linux/of_irq.h>
#include <linux/of_address.h>
struct list_head jr_list;
spinlock_t jr_alloc_lock;
static struct jr_driver_data driver_data;
static int caam_reset_hw_jr(struct device *dev)
struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
unsigned int timeout = 100000;
clrsetbits_32(&jrp->rregs->rconfig_lo, 0, JRCFG_IMSK);
wr_reg32(&jrp->rregs->jrcommand, JRCR_RESET);
while (((rd_reg32(&jrp->rregs->jrintstatus) & JRINT_ERR_HALT_MASK) ==
JRINT_ERR_HALT_INPROGRESS) && --timeout)
if ((rd_reg32(&jrp->rregs->jrintstatus) & JRINT_ERR_HALT_MASK) !=
JRINT_ERR_HALT_COMPLETE || timeout == 0) {
dev_err(dev, "failed to flush job ring %d\n", jrp->ridx);
wr_reg32(&jrp->rregs->jrcommand, JRCR_RESET);
while ((rd_reg32(&jrp->rregs->jrcommand) & JRCR_RESET) && --timeout)
dev_err(dev, "failed to reset job ring %d\n", jrp->ridx);
clrsetbits_32(&jrp->rregs->rconfig_lo, JRCFG_IMSK, 0);