msm: pcie: do not set irq chip data when using QGIC MSI

When using QGIC MSI, the MSI controller is GIC not PCIe host
driver. Only set irq chip data if PCIe host is the MSI
controller.

Change-Id: I0ba9e78127424ab3da4b1f46b3ed3fa5d65d05f6
Signed-off-by: Tony Truong <truong@codeaurora.org>
This commit is contained in:
Tony Truong 2017-06-02 13:37:36 -07:00 committed by Gerrit - the friendly Code Review server
parent 55a25be010
commit df92ddf7ad

View file

@ -5608,16 +5608,18 @@ static void msm_pcie_unmap_qgic_addr(struct msm_pcie_dev_t *dev,
}
}
void msm_pcie_destroy_irq(unsigned int irq)
void msm_pcie_destroy_irq(unsigned int irq, struct pci_dev *pdev)
{
int pos;
struct pci_dev *pdev = irq_get_chip_data(irq);
struct msi_desc *entry = irq_get_msi_desc(irq);
struct msi_desc *firstentry;
struct msm_pcie_dev_t *dev;
u32 nvec;
int firstirq;
if (!pdev)
pdev = irq_get_chip_data(irq);
if (!pdev) {
pr_err("PCIe: pci device is null. IRQ:%d\n", irq);
return;
@ -5677,7 +5679,7 @@ void msm_pcie_destroy_irq(unsigned int irq)
void arch_teardown_msi_irq(unsigned int irq)
{
PCIE_GEN_DBG("irq %d deallocated\n", irq);
msm_pcie_destroy_irq(irq);
msm_pcie_destroy_irq(irq, NULL);
}
void arch_teardown_msi_irqs(struct pci_dev *dev)
@ -5696,7 +5698,7 @@ void arch_teardown_msi_irqs(struct pci_dev *dev)
continue;
nvec = 1 << entry->msi_attrib.multiple;
for (i = 0; i < nvec; i++)
arch_teardown_msi_irq(entry->irq + i);
msm_pcie_destroy_irq(entry->irq + i, dev);
}
}
@ -5892,7 +5894,6 @@ static int arch_setup_msi_irq_qgic(struct pci_dev *pdev,
firstirq = irq;
irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING);
irq_set_chip_data(irq, pdev);
}
/* write msi vector and data */