kernel: bump 4.14 to 4.14.154
[openwrt/staging/dedeckeh.git] / target / linux / layerscape / patches-4.14 / 816-pcie-support-layerscape.patch
index 88f38df746386bd61cab2480aa04a1af588e5ee1..781333356a1918ab5bb5181086ee3e0031c97bd6 100644 (file)
@@ -286,15 +286,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
  enum pci_barno {
        BAR_0,
        BAR_1,
-@@ -92,6 +103,7 @@ struct pci_endpoint_test {
-       void __iomem    *bar[6];
-       struct completion irq_raised;
-       int             last_irq;
-+      int             num_irqs;
-       /* mutex to protect the ioctls */
-       struct mutex    mutex;
-       struct miscdevice miscdev;
-@@ -102,7 +114,7 @@ struct pci_endpoint_test {
+@@ -103,7 +114,7 @@ struct pci_endpoint_test {
  struct pci_endpoint_test_data {
        enum pci_barno test_reg_bar;
        size_t alignment;
@@ -303,7 +295,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
  };
  
  static inline u32 pci_endpoint_test_readl(struct pci_endpoint_test *test,
-@@ -146,6 +158,100 @@ static irqreturn_t pci_endpoint_test_irq
+@@ -147,6 +158,100 @@ static irqreturn_t pci_endpoint_test_irq
        return IRQ_HANDLED;
  }
  
@@ -404,7 +396,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
  static bool pci_endpoint_test_bar(struct pci_endpoint_test *test,
                                  enum pci_barno barno)
  {
-@@ -178,6 +284,9 @@ static bool pci_endpoint_test_legacy_irq
+@@ -179,6 +284,9 @@ static bool pci_endpoint_test_legacy_irq
  {
        u32 val;
  
@@ -414,7 +406,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
        pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND,
                                 COMMAND_RAISE_LEGACY_IRQ);
        val = wait_for_completion_timeout(&test->irq_raised,
-@@ -189,20 +298,24 @@ static bool pci_endpoint_test_legacy_irq
+@@ -190,20 +298,24 @@ static bool pci_endpoint_test_legacy_irq
  }
  
  static bool pci_endpoint_test_msi_irq(struct pci_endpoint_test *test,
@@ -443,9 +435,9 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
                return true;
  
        return false;
-@@ -226,10 +339,18 @@ static bool pci_endpoint_test_copy(struc
-       u32 src_crc32;
-       u32 dst_crc32;
+@@ -230,10 +342,18 @@ static bool pci_endpoint_test_copy(struc
+       if (size > SIZE_MAX - alignment)
+               goto err;
  
 +      if (size > SIZE_MAX - alignment)
 +              goto err;
@@ -463,7 +455,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
                ret = false;
                goto err;
        }
-@@ -255,7 +376,7 @@ static bool pci_endpoint_test_copy(struc
+@@ -259,7 +379,7 @@ static bool pci_endpoint_test_copy(struc
        orig_dst_addr = dma_alloc_coherent(dev, size + alignment,
                                           &orig_dst_phys_addr, GFP_KERNEL);
        if (!orig_dst_addr) {
@@ -472,7 +464,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
                ret = false;
                goto err_orig_src_addr;
        }
-@@ -277,8 +398,10 @@ static bool pci_endpoint_test_copy(struc
+@@ -281,8 +401,10 @@ static bool pci_endpoint_test_copy(struc
        pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_SIZE,
                                 size);
  
@@ -484,9 +476,9 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
  
        wait_for_completion(&test->irq_raised);
  
-@@ -311,10 +434,18 @@ static bool pci_endpoint_test_write(stru
-       size_t alignment = test->alignment;
-       u32 crc32;
+@@ -318,10 +440,18 @@ static bool pci_endpoint_test_write(stru
+       if (size > SIZE_MAX - alignment)
+               goto err;
  
 +      if (size > SIZE_MAX - alignment)
 +              goto err;
@@ -504,7 +496,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
                ret = false;
                goto err;
        }
-@@ -341,8 +472,10 @@ static bool pci_endpoint_test_write(stru
+@@ -348,8 +478,10 @@ static bool pci_endpoint_test_write(stru
  
        pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_SIZE, size);
  
@@ -516,9 +508,9 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
  
        wait_for_completion(&test->irq_raised);
  
-@@ -369,10 +502,18 @@ static bool pci_endpoint_test_read(struc
-       size_t alignment = test->alignment;
-       u32 crc32;
+@@ -379,10 +511,18 @@ static bool pci_endpoint_test_read(struc
+       if (size > SIZE_MAX - alignment)
+               goto err;
  
 +      if (size > SIZE_MAX - alignment)
 +              goto err;
@@ -536,7 +528,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
                ret = false;
                goto err;
        }
-@@ -393,8 +534,10 @@ static bool pci_endpoint_test_read(struc
+@@ -403,8 +543,10 @@ static bool pci_endpoint_test_read(struc
  
        pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_SIZE, size);
  
@@ -548,7 +540,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
  
        wait_for_completion(&test->irq_raised);
  
-@@ -407,6 +550,38 @@ err:
+@@ -417,6 +559,38 @@ err:
        return ret;
  }
  
@@ -587,7 +579,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
  static long pci_endpoint_test_ioctl(struct file *file, unsigned int cmd,
                                    unsigned long arg)
  {
-@@ -426,7 +601,8 @@ static long pci_endpoint_test_ioctl(stru
+@@ -436,7 +610,8 @@ static long pci_endpoint_test_ioctl(stru
                ret = pci_endpoint_test_legacy_irq(test);
                break;
        case PCITEST_MSI:
@@ -597,7 +589,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
                break;
        case PCITEST_WRITE:
                ret = pci_endpoint_test_write(test, arg);
-@@ -437,6 +613,12 @@ static long pci_endpoint_test_ioctl(stru
+@@ -447,6 +622,12 @@ static long pci_endpoint_test_ioctl(stru
        case PCITEST_COPY:
                ret = pci_endpoint_test_copy(test, arg);
                break;
@@ -610,7 +602,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
        }
  
  ret:
-@@ -452,9 +634,7 @@ static const struct file_operations pci_
+@@ -462,9 +643,7 @@ static const struct file_operations pci_
  static int pci_endpoint_test_probe(struct pci_dev *pdev,
                                   const struct pci_device_id *ent)
  {
@@ -620,7 +612,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
        int id;
        char name[20];
        enum pci_barno bar;
-@@ -476,12 +656,15 @@ static int pci_endpoint_test_probe(struc
+@@ -486,12 +665,15 @@ static int pci_endpoint_test_probe(struc
        test->alignment = 0;
        test->pdev = pdev;
  
@@ -637,7 +629,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
        }
  
        init_completion(&test->irq_raised);
-@@ -501,35 +684,21 @@ static int pci_endpoint_test_probe(struc
+@@ -511,36 +693,21 @@ static int pci_endpoint_test_probe(struc
  
        pci_set_master(pdev);
  
@@ -645,6 +637,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
 -              irq = pci_alloc_irq_vectors(pdev, 1, 32, PCI_IRQ_MSI);
 -              if (irq < 0)
 -                      dev_err(dev, "failed to get MSI interrupts\n");
+-              test->num_irqs = irq;
 -      }
 +      if (!pci_endpoint_test_alloc_irq_vectors(test, irq_type))
 +              goto err_disable_irq;
@@ -684,7 +677,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
        }
  
        test->base = test->bar[test_reg_bar];
-@@ -545,24 +714,31 @@ static int pci_endpoint_test_probe(struc
+@@ -556,24 +723,31 @@ static int pci_endpoint_test_probe(struc
        id = ida_simple_get(&pci_endpoint_test_ida, 0, 0, GFP_KERNEL);
        if (id < 0) {
                err = id;
@@ -720,20 +713,23 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
  err_ida_remove:
        ida_simple_remove(&pci_endpoint_test_ida, id);
  
-@@ -571,9 +747,10 @@ err_iounmap:
-               if (test->bar[bar])
+@@ -583,11 +757,13 @@ err_iounmap:
                        pci_iounmap(pdev, test->bar[bar]);
        }
+-      for (i = 0; i < irq; i++)
+-              devm_free_irq(dev, pdev->irq + i, test);
 +      pci_endpoint_test_release_irq(test);
  
--err_disable_msi:
--      pci_disable_msi(pdev);
+ err_disable_msi:
+       pci_disable_msi(pdev);
++
 +err_disable_irq:
 +      pci_endpoint_test_free_irq_vectors(test);
        pci_release_regions(pdev);
  
  err_disable_pdev:
-@@ -595,12 +772,16 @@ static void pci_endpoint_test_remove(str
+@@ -610,14 +786,15 @@ static void pci_endpoint_test_remove(str
                return;
  
        misc_deregister(&test->miscdev);
@@ -743,15 +739,16 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
                if (test->bar[bar])
                        pci_iounmap(pdev, test->bar[bar]);
        }
+-      for (i = 0; i < test->num_irqs; i++)
+-              devm_free_irq(&pdev->dev, pdev->irq + i, test);
 -      pci_disable_msi(pdev);
 +
 +      pci_endpoint_test_release_irq(test);
 +      pci_endpoint_test_free_irq_vectors(test);
-+
        pci_release_regions(pdev);
        pci_disable_device(pdev);
  }
-@@ -608,6 +789,7 @@ static void pci_endpoint_test_remove(str
+@@ -625,6 +802,7 @@ static void pci_endpoint_test_remove(str
  static const struct pci_device_id pci_endpoint_test_tbl[] = {
        { PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_DRA74x) },
        { PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_DRA72x) },