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

Commit 53cda9b7 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: msi: Add MSI disable/enable when process MSI intierrupt"

parents 42704c8c 7d67ff6a
Loading
Loading
Loading
Loading
+36 −4
Original line number Diff line number Diff line
@@ -4951,13 +4951,45 @@ static void msm_pcie_msi_nop(struct irq_data *d)
{
}

static void msm_mask_msi_irq(struct irq_data *data)
{
	struct msi_desc *desc = irq_data_get_msi_desc(data);
	struct pci_dev *pdev;
	struct msm_pcie_dev_t *pcie_dev;
	void __iomem *intr_en_addr;
	uint32_t offset = 0;

	pdev = msi_desc_to_pci_dev(desc);
	pcie_dev = PCIE_BUS_PRIV_DATA(pdev->bus);
	offset = data->irq - desc->irq;
	intr_en_addr = pcie_dev->dm_core + PCIE20_MSI_CTRL_INTR_EN;
	msm_pcie_write_mask(intr_en_addr, BIT(offset), 0);
	pci_msi_mask_irq(data);
}

static void msm_unmask_msi_irq(struct irq_data *data)
{
	struct msi_desc *desc = irq_data_get_msi_desc(data);
	struct pci_dev *pdev;
	struct msm_pcie_dev_t *pcie_dev;
	void __iomem *intr_en_addr;
	uint32_t offset = 0;

	pci_msi_unmask_irq(data);
	pdev = msi_desc_to_pci_dev(desc);
	pcie_dev = PCIE_BUS_PRIV_DATA(pdev->bus);
	offset = data->irq - desc->irq;
	intr_en_addr = pcie_dev->dm_core + PCIE20_MSI_CTRL_INTR_EN;
	msm_pcie_write_mask(intr_en_addr, 0, BIT(offset));
}

static struct irq_chip pcie_msi_chip = {
	.name = "msm-pcie-msi",
	.irq_ack = msm_pcie_msi_nop,
	.irq_enable = unmask_msi_irq,
	.irq_disable = mask_msi_irq,
	.irq_mask = mask_msi_irq,
	.irq_unmask = unmask_msi_irq,
	.irq_enable = msm_unmask_msi_irq,
	.irq_disable = msm_mask_msi_irq,
	.irq_mask = msm_mask_msi_irq,
	.irq_unmask = msm_unmask_msi_irq,
};

static int msm_pcie_create_irq(struct msm_pcie_dev_t *dev)