aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-4.9/804-crypto-support-layerscape.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/layerscape/patches-4.9/804-crypto-support-layerscape.patch')
-rw-r--r--target/linux/layerscape/patches-4.9/804-crypto-support-layerscape.patch94
1 files changed, 7 insertions, 87 deletions
diff --git a/target/linux/layerscape/patches-4.9/804-crypto-support-layerscape.patch b/target/linux/layerscape/patches-4.9/804-crypto-support-layerscape.patch
index f6a7bca7cb..8ce3b56e3b 100644
--- a/target/linux/layerscape/patches-4.9/804-crypto-support-layerscape.patch
+++ b/target/linux/layerscape/patches-4.9/804-crypto-support-layerscape.patch
@@ -24281,15 +24281,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
#endif /* CAAM_ERROR_H */
--- a/drivers/crypto/caam/intern.h
+++ b/drivers/crypto/caam/intern.h
-@@ -41,6 +41,7 @@ struct caam_drv_private_jr {
- struct device *dev;
- int ridx;
- struct caam_job_ring __iomem *rregs; /* JobR's register space */
-+ struct tasklet_struct irqtask;
- int irq; /* One per queue */
-
- /* Number of scatterlist crypt transforms active on the JobR */
-@@ -63,10 +64,9 @@ struct caam_drv_private_jr {
+@@ -64,10 +64,9 @@ struct caam_drv_private_jr {
* Driver-private storage for a single CAAM block instance
*/
struct caam_drv_private {
@@ -24303,7 +24295,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
/* Physical-presence section */
struct caam_ctrl __iomem *ctrl; /* controller region */
-@@ -102,11 +102,6 @@ struct caam_drv_private {
+@@ -103,11 +102,6 @@ struct caam_drv_private {
#ifdef CONFIG_DEBUG_FS
struct dentry *dfs_root;
struct dentry *ctl; /* controller dir */
@@ -24315,7 +24307,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
struct debugfs_blob_wrapper ctl_kek_wrap, ctl_tkek_wrap, ctl_tdsk_wrap;
struct dentry *ctl_kek, *ctl_tkek, *ctl_tdsk;
#endif
-@@ -114,4 +109,22 @@ struct caam_drv_private {
+@@ -115,4 +109,22 @@ struct caam_drv_private {
void caam_jr_algapi_init(struct device *dev);
void caam_jr_algapi_remove(struct device *dev);
@@ -24363,16 +24355,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
static int caam_reset_hw_jr(struct device *dev)
{
struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
-@@ -73,6 +82,8 @@ static int caam_jr_shutdown(struct devic
-
- ret = caam_reset_hw_jr(dev);
-
-+ tasklet_kill(&jrp->irqtask);
-+
- /* Release interrupt */
- free_irq(jrp->irq, dev);
-
-@@ -116,6 +127,8 @@ static int caam_jr_remove(struct platfor
+@@ -118,6 +127,8 @@ static int caam_jr_remove(struct platfor
dev_err(jrdev, "Failed to shut down job ring\n");
irq_dispose_mapping(jrpriv->irq);
@@ -24381,47 +24364,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
return ret;
}
-@@ -128,7 +141,7 @@ static irqreturn_t caam_jr_interrupt(int
-
- /*
- * Check the output ring for ready responses, kick
-- * the threaded irq if jobs done.
-+ * tasklet if jobs done.
- */
- irqstate = rd_reg32(&jrp->rregs->jrintstatus);
- if (!irqstate)
-@@ -150,13 +163,18 @@ static irqreturn_t caam_jr_interrupt(int
- /* Have valid interrupt at this point, just ACK and trigger */
- wr_reg32(&jrp->rregs->jrintstatus, irqstate);
-
-- return IRQ_WAKE_THREAD;
-+ preempt_disable();
-+ tasklet_schedule(&jrp->irqtask);
-+ preempt_enable();
-+
-+ return IRQ_HANDLED;
- }
-
--static irqreturn_t caam_jr_threadirq(int irq, void *st_dev)
-+/* Deferred service handler, run as interrupt-fired tasklet */
-+static void caam_jr_dequeue(unsigned long devarg)
- {
- int hw_idx, sw_idx, i, head, tail;
-- struct device *dev = st_dev;
-+ struct device *dev = (struct device *)devarg;
- struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
- void (*usercall)(struct device *dev, u32 *desc, u32 status, void *arg);
- u32 *userdesc, userstatus;
-@@ -230,8 +248,6 @@ static irqreturn_t caam_jr_threadirq(int
-
- /* reenable / unmask IRQs */
- clrsetbits_32(&jrp->rregs->rconfig_lo, JRCFG_IMSK, 0);
--
-- return IRQ_HANDLED;
- }
-
- /**
-@@ -275,6 +291,36 @@ struct device *caam_jr_alloc(void)
+@@ -280,6 +291,36 @@ struct device *caam_jr_alloc(void)
EXPORT_SYMBOL(caam_jr_alloc);
/**
@@ -24458,30 +24401,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
* caam_jr_free() - Free the Job Ring
* @rdev - points to the dev that identifies the Job ring to
* be released.
-@@ -389,10 +435,11 @@ static int caam_jr_init(struct device *d
-
- jrp = dev_get_drvdata(dev);
-
-+ tasklet_init(&jrp->irqtask, caam_jr_dequeue, (unsigned long)dev);
-+
- /* Connect job ring interrupt handler. */
-- error = request_threaded_irq(jrp->irq, caam_jr_interrupt,
-- caam_jr_threadirq, IRQF_SHARED,
-- dev_name(dev), dev);
-+ error = request_irq(jrp->irq, caam_jr_interrupt, IRQF_SHARED,
-+ dev_name(dev), dev);
- if (error) {
- dev_err(dev, "can't connect JobR %d interrupt (%d)\n",
- jrp->ridx, jrp->irq);
-@@ -454,6 +501,7 @@ out_free_inpring:
- out_free_irq:
- free_irq(jrp->irq, dev);
- out_kill_deq:
-+ tasklet_kill(&jrp->irqtask);
- return error;
- }
-
-@@ -489,15 +537,28 @@ static int caam_jr_probe(struct platform
+@@ -496,15 +537,28 @@ static int caam_jr_probe(struct platform
return -ENOMEM;
}
@@ -24517,7 +24437,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
/* Identify the interrupt */
jrpriv->irq = irq_of_parse_and_map(nprop, 0);
-@@ -517,10 +578,12 @@ static int caam_jr_probe(struct platform
+@@ -524,10 +578,12 @@ static int caam_jr_probe(struct platform
atomic_set(&jrpriv->tfm_count, 0);