kernel: Update kernel 4.9 to 4.9.70
[openwrt/staging/lynxis.git] / target / linux / layerscape / patches-4.9 / 804-crypto-support-layerscape.patch
index f6a7bca7cbefee59c7ad984e95885da013abcb0b..8ce3b56e3bc57e667ec590f8999a13ea97494e69 100644 (file)
@@ -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);