Add patches for linux-5.4. The patches are from NXP LSDK-20.04 release which was tagged LSDK-20.04-V5.4. https://source.codeaurora.org/external/qoriq/qoriq-components/linux/ For boards LS1021A-IOT, and Traverse-LS1043 which are not involved in LSDK, port the dts patches from 4.14. The patches are sorted into the following categories: 301-arch-xxxx 302-dts-xxxx 303-core-xxxx 701-net-xxxx 801-audio-xxxx 802-can-xxxx 803-clock-xxxx 804-crypto-xxxx 805-display-xxxx 806-dma-xxxx 807-gpio-xxxx 808-i2c-xxxx 809-jailhouse-xxxx 810-keys-xxxx 811-kvm-xxxx 812-pcie-xxxx 813-pm-xxxx 814-qe-xxxx 815-sata-xxxx 816-sdhc-xxxx 817-spi-xxxx 818-thermal-xxxx 819-uart-xxxx 820-usb-xxxx 821-vfio-xxxx Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
143 lines
3.7 KiB
Diff
143 lines
3.7 KiB
Diff
From 8b5d421b2bfa6800d182f74a60afa48cf305fb86 Mon Sep 17 00:00:00 2001
|
|
From: Jan Kiszka <jan.kiszka@siemens.com>
|
|
Date: Tue, 23 May 2017 17:41:00 +0200
|
|
Subject: [PATCH] ivshmem-net: Switch to pci_alloc_irq_vectors
|
|
|
|
Required by 4.12, and it also simplifies our code. Needs to be folded
|
|
into the initial patch eventually.
|
|
|
|
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
|
|
(cherry picked from commit ea6e78c89582711f15a2711f0a35ac3a61d9d074)
|
|
---
|
|
drivers/net/ivshmem-net.c | 66 ++++++++++++++++++++---------------------------
|
|
1 file changed, 28 insertions(+), 38 deletions(-)
|
|
|
|
--- a/drivers/net/ivshmem-net.c
|
|
+++ b/drivers/net/ivshmem-net.c
|
|
@@ -114,8 +114,6 @@ struct ivshm_net {
|
|
u32 peer_id;
|
|
|
|
struct pci_dev *pdev;
|
|
- struct msix_entry msix;
|
|
- bool using_msix;
|
|
};
|
|
|
|
static void *ivshm_net_desc_data(struct ivshm_net *in,
|
|
@@ -793,22 +791,21 @@ static int ivshm_net_probe(struct pci_de
|
|
struct ivshmem_regs __iomem *regs;
|
|
resource_size_t shmaddr;
|
|
resource_size_t shmlen;
|
|
- int interrupt;
|
|
char *device_name;
|
|
void *shm;
|
|
u32 ivpos;
|
|
- int err;
|
|
+ int ret;
|
|
|
|
- err = pcim_enable_device(pdev);
|
|
- if (err) {
|
|
- dev_err(&pdev->dev, "pci_enable_device: %d\n", err);
|
|
- return err;
|
|
+ ret = pcim_enable_device(pdev);
|
|
+ if (ret) {
|
|
+ dev_err(&pdev->dev, "pci_enable_device: %d\n", ret);
|
|
+ return ret;
|
|
}
|
|
|
|
- err = pcim_iomap_regions(pdev, BIT(0), DRV_NAME);
|
|
- if (err) {
|
|
- dev_err(&pdev->dev, "pcim_iomap_regions: %d\n", err);
|
|
- return err;
|
|
+ ret = pcim_iomap_regions(pdev, BIT(0), DRV_NAME);
|
|
+ if (ret) {
|
|
+ dev_err(&pdev->dev, "pcim_iomap_regions: %d\n", ret);
|
|
+ return ret;
|
|
}
|
|
|
|
regs = pcim_iomap_table(pdev)[0];
|
|
@@ -869,8 +866,8 @@ static int ivshm_net_probe(struct pci_de
|
|
spin_lock_init(&in->tx_free_lock);
|
|
spin_lock_init(&in->tx_clean_lock);
|
|
|
|
- err = ivshm_net_calc_qsize(ndev);
|
|
- if (err)
|
|
+ ret = ivshm_net_calc_qsize(ndev);
|
|
+ if (ret)
|
|
goto err_free;
|
|
|
|
in->state_wq = alloc_ordered_workqueue(device_name, 0);
|
|
@@ -889,25 +886,21 @@ static int ivshm_net_probe(struct pci_de
|
|
netif_carrier_off(ndev);
|
|
netif_napi_add(ndev, &in->napi, ivshm_net_poll, NAPI_POLL_WEIGHT);
|
|
|
|
- err = register_netdev(ndev);
|
|
- if (err)
|
|
+ ret = register_netdev(ndev);
|
|
+ if (ret)
|
|
goto err_wq;
|
|
|
|
- err = pci_enable_msix(pdev, &in->msix, 1);
|
|
- if (!err) {
|
|
- interrupt = in->msix.vector;
|
|
- in->using_msix = true;
|
|
- } else {
|
|
- interrupt = pdev->irq;
|
|
- in->using_msix = false;
|
|
- }
|
|
-
|
|
- err = request_irq(interrupt, ivshm_net_int, 0, device_name, ndev);
|
|
- if (err)
|
|
- goto err_int;
|
|
+ ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_LEGACY | PCI_IRQ_MSIX);
|
|
+ if (ret < 0)
|
|
+ goto err_alloc_irq;
|
|
+
|
|
+ ret = request_irq(pci_irq_vector(pdev, 0), ivshm_net_int, 0,
|
|
+ device_name, ndev);
|
|
+ if (ret)
|
|
+ goto err_request_irq;
|
|
|
|
pci_set_master(pdev);
|
|
- if (!in->using_msix)
|
|
+ if (!pdev->msix_enabled)
|
|
writel(IVSHMEM_INTX_ENABLE, &in->ivshm_regs->intxctrl);
|
|
|
|
writel(IVSHM_NET_STATE_RESET, &in->ivshm_regs->lstate);
|
|
@@ -915,16 +908,16 @@ static int ivshm_net_probe(struct pci_de
|
|
|
|
return 0;
|
|
|
|
-err_int:
|
|
- if (in->using_msix)
|
|
- pci_disable_msix(pdev);
|
|
+err_request_irq:
|
|
+ pci_free_irq_vectors(pdev);
|
|
+err_alloc_irq:
|
|
unregister_netdev(ndev);
|
|
err_wq:
|
|
destroy_workqueue(in->state_wq);
|
|
err_free:
|
|
free_netdev(ndev);
|
|
|
|
- return err;
|
|
+ return ret;
|
|
}
|
|
|
|
static void ivshm_net_remove(struct pci_dev *pdev)
|
|
@@ -934,13 +927,10 @@ static void ivshm_net_remove(struct pci_
|
|
|
|
writel(IVSHM_NET_STATE_RESET, &in->ivshm_regs->lstate);
|
|
|
|
- if (in->using_msix) {
|
|
- free_irq(in->msix.vector, ndev);
|
|
- pci_disable_msix(pdev);
|
|
- } else {
|
|
+ if (!pdev->msix_enabled)
|
|
writel(0, &in->ivshm_regs->intxctrl);
|
|
- free_irq(pdev->irq, ndev);
|
|
- }
|
|
+ free_irq(pci_irq_vector(pdev, 0), ndev);
|
|
+ pci_free_irq_vectors(pdev);
|
|
|
|
unregister_netdev(ndev);
|
|
cancel_work_sync(&in->state_work);
|