Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b09d0e81 authored by Tony Truong's avatar Tony Truong
Browse files

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: default avatarTony Truong <truong@codeaurora.org>
parent a3ba7da6
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -4721,16 +4721,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;
@@ -4789,7 +4791,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)
@@ -4809,7 +4811,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);
	}
}

@@ -5004,7 +5006,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 */