PCI: mobiveil: Collect the interrupt related operations into a function
Collect the interrupt initialization related operations into a new function to make code more readable. Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Reviewed-by: Andrew Murray <amurray@thegoodpenguin.co.uk>
This commit is contained in:
parent
2ba24842d6
commit
39e3a03eea
@ -454,12 +454,6 @@ static int mobiveil_pcie_parse_dt(struct mobiveil_pcie *pcie)
|
|||||||
return PTR_ERR(pcie->csr_axi_slave_base);
|
return PTR_ERR(pcie->csr_axi_slave_base);
|
||||||
pcie->pcie_reg_base = res->start;
|
pcie->pcie_reg_base = res->start;
|
||||||
|
|
||||||
/* map MSI config resource */
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "apb_csr");
|
|
||||||
pcie->apb_csr_base = devm_pci_remap_cfg_resource(dev, res);
|
|
||||||
if (IS_ERR(pcie->apb_csr_base))
|
|
||||||
return PTR_ERR(pcie->apb_csr_base);
|
|
||||||
|
|
||||||
/* read the number of windows requested */
|
/* read the number of windows requested */
|
||||||
if (of_property_read_u32(node, "apio-wins", &pcie->apio_wins))
|
if (of_property_read_u32(node, "apio-wins", &pcie->apio_wins))
|
||||||
pcie->apio_wins = MAX_PIO_WINDOWS;
|
pcie->apio_wins = MAX_PIO_WINDOWS;
|
||||||
@ -467,12 +461,6 @@ static int mobiveil_pcie_parse_dt(struct mobiveil_pcie *pcie)
|
|||||||
if (of_property_read_u32(node, "ppio-wins", &pcie->ppio_wins))
|
if (of_property_read_u32(node, "ppio-wins", &pcie->ppio_wins))
|
||||||
pcie->ppio_wins = MAX_PIO_WINDOWS;
|
pcie->ppio_wins = MAX_PIO_WINDOWS;
|
||||||
|
|
||||||
rp->irq = platform_get_irq(pdev, 0);
|
|
||||||
if (rp->irq <= 0) {
|
|
||||||
dev_err(dev, "failed to map IRQ: %d\n", rp->irq);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -618,9 +606,6 @@ static int mobiveil_host_init(struct mobiveil_pcie *pcie)
|
|||||||
pab_ctrl |= (1 << AMBA_PIO_ENABLE_SHIFT) | (1 << PEX_PIO_ENABLE_SHIFT);
|
pab_ctrl |= (1 << AMBA_PIO_ENABLE_SHIFT) | (1 << PEX_PIO_ENABLE_SHIFT);
|
||||||
mobiveil_csr_writel(pcie, pab_ctrl, PAB_CTRL);
|
mobiveil_csr_writel(pcie, pab_ctrl, PAB_CTRL);
|
||||||
|
|
||||||
mobiveil_csr_writel(pcie, (PAB_INTP_INTX_MASK | PAB_INTP_MSI_MASK),
|
|
||||||
PAB_INTP_AMBA_MISC_ENB);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* program PIO Enable Bit to 1 and Config Window Enable Bit to 1 in
|
* program PIO Enable Bit to 1 and Config Window Enable Bit to 1 in
|
||||||
* PAB_AXI_PIO_CTRL Register
|
* PAB_AXI_PIO_CTRL Register
|
||||||
@ -670,9 +655,6 @@ static int mobiveil_host_init(struct mobiveil_pcie *pcie)
|
|||||||
value |= (PCI_CLASS_BRIDGE_PCI << 16);
|
value |= (PCI_CLASS_BRIDGE_PCI << 16);
|
||||||
mobiveil_csr_writel(pcie, value, PAB_INTP_AXI_PIO_CLASS);
|
mobiveil_csr_writel(pcie, value, PAB_INTP_AXI_PIO_CLASS);
|
||||||
|
|
||||||
/* setup MSI hardware registers */
|
|
||||||
mobiveil_pcie_enable_msi(pcie);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -873,6 +855,46 @@ static int mobiveil_pcie_init_irq_domain(struct mobiveil_pcie *pcie)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mobiveil_pcie_interrupt_init(struct mobiveil_pcie *pcie)
|
||||||
|
{
|
||||||
|
struct platform_device *pdev = pcie->pdev;
|
||||||
|
struct device *dev = &pdev->dev;
|
||||||
|
struct mobiveil_root_port *rp = &pcie->rp;
|
||||||
|
struct resource *res;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* map MSI config resource */
|
||||||
|
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "apb_csr");
|
||||||
|
pcie->apb_csr_base = devm_pci_remap_cfg_resource(dev, res);
|
||||||
|
if (IS_ERR(pcie->apb_csr_base))
|
||||||
|
return PTR_ERR(pcie->apb_csr_base);
|
||||||
|
|
||||||
|
/* setup MSI hardware registers */
|
||||||
|
mobiveil_pcie_enable_msi(pcie);
|
||||||
|
|
||||||
|
rp->irq = platform_get_irq(pdev, 0);
|
||||||
|
if (rp->irq <= 0) {
|
||||||
|
dev_err(dev, "failed to map IRQ: %d\n", rp->irq);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* initialize the IRQ domains */
|
||||||
|
ret = mobiveil_pcie_init_irq_domain(pcie);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "Failed creating IRQ Domain\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
irq_set_chained_handler_and_data(rp->irq, mobiveil_pcie_isr, pcie);
|
||||||
|
|
||||||
|
/* Enable interrupts */
|
||||||
|
mobiveil_csr_writel(pcie, (PAB_INTP_INTX_MASK | PAB_INTP_MSI_MASK),
|
||||||
|
PAB_INTP_AMBA_MISC_ENB);
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie)
|
static int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie)
|
||||||
{
|
{
|
||||||
struct mobiveil_root_port *rp = &pcie->rp;
|
struct mobiveil_root_port *rp = &pcie->rp;
|
||||||
@ -906,15 +928,12 @@ static int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* initialize the IRQ domains */
|
ret = mobiveil_pcie_interrupt_init(pcie);
|
||||||
ret = mobiveil_pcie_init_irq_domain(pcie);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Failed creating IRQ Domain\n");
|
dev_err(dev, "Interrupt init failed\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
irq_set_chained_handler_and_data(rp->irq, mobiveil_pcie_isr, pcie);
|
|
||||||
|
|
||||||
/* Initialize bridge */
|
/* Initialize bridge */
|
||||||
bridge->dev.parent = dev;
|
bridge->dev.parent = dev;
|
||||||
bridge->sysdata = pcie;
|
bridge->sysdata = pcie;
|
||||||
|
Loading…
Reference in New Issue
Block a user