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

Commit 141cb3d4 authored by Xiaowei Song's avatar Xiaowei Song Committed by Lorenzo Pieralisi
Browse files

PCI: kirin: Add MSI support



Add support for MSI to the kirin host controller driver, based
on the generic dwc infrastructure.

Signed-off-by: default avatarXiaowei Song <songxiaowei@hisilicon.com>
Signed-off-by: default avatarYao Chen <chenyao11@huawei.com>
[lorenzo.pieralisi@arm.com: updated commit log]
Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
parent ce397d21
Loading
Loading
Loading
Loading
+28 −0
Original line number Original line Diff line number Diff line
@@ -430,6 +430,9 @@ static int kirin_pcie_host_init(struct pcie_port *pp)
{
{
	kirin_pcie_establish_link(pp);
	kirin_pcie_establish_link(pp);


	if (IS_ENABLED(CONFIG_PCI_MSI))
		dw_pcie_msi_init(pp);

	return 0;
	return 0;
}
}


@@ -445,9 +448,34 @@ static const struct dw_pcie_host_ops kirin_pcie_host_ops = {
	.host_init = kirin_pcie_host_init,
	.host_init = kirin_pcie_host_init,
};
};


static int kirin_pcie_add_msi(struct dw_pcie *pci,
				struct platform_device *pdev)
{
	int irq;

	if (IS_ENABLED(CONFIG_PCI_MSI)) {
		irq = platform_get_irq(pdev, 0);
		if (irq < 0) {
			dev_err(&pdev->dev,
				"failed to get MSI IRQ (%d)\n", irq);
			return irq;
		}

		pci->pp.msi_irq = irq;
	}

	return 0;
}

static int __init kirin_add_pcie_port(struct dw_pcie *pci,
static int __init kirin_add_pcie_port(struct dw_pcie *pci,
				      struct platform_device *pdev)
				      struct platform_device *pdev)
{
{
	int ret;

	ret = kirin_pcie_add_msi(pci, pdev);
	if (ret)
		return ret;

	pci->pp.ops = &kirin_pcie_host_ops;
	pci->pp.ops = &kirin_pcie_host_ops;


	return dw_pcie_host_init(&pci->pp);
	return dw_pcie_host_init(&pci->pp);