X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Flayerscape%2Fpatches-4.14%2F816-pcie-support-layerscape.patch;h=781333356a1918ab5bb5181086ee3e0031c97bd6;hb=d6aea46a50d976745df30b550ed76357363e7ca8;hp=88f38df746386bd61cab2480aa04a1af588e5ee1;hpb=d2ee9220515d0bbfe74414c84ef55cff640726ba;p=openwrt%2Fstaging%2Fdedeckeh.git diff --git a/target/linux/layerscape/patches-4.14/816-pcie-support-layerscape.patch b/target/linux/layerscape/patches-4.14/816-pcie-support-layerscape.patch index 88f38df746..781333356a 100644 --- a/target/linux/layerscape/patches-4.14/816-pcie-support-layerscape.patch +++ b/target/linux/layerscape/patches-4.14/816-pcie-support-layerscape.patch @@ -286,15 +286,7 @@ Signed-off-by: Yangbo Lu 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 }; 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 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 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 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 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 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 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 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 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 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 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 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 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 } 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 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 } 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 - 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 } 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 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 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) },