Skip to content

Commit

Permalink
PCI: designware: Factor out MSI msg setup
Browse files Browse the repository at this point in the history
Factor out the PCI MSI message setup from the single MSI setup function.
This will be reused by the multivector MSI setup.

No functional change yet.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Pratyush Anand <pratyush.anand@gmail.com>
  • Loading branch information
Lucas Stach authored and Bjorn Helgaas committed Sep 18, 2015
1 parent 339e5b4 commit ea643e1
Showing 1 changed file with 17 additions and 11 deletions.
28 changes: 17 additions & 11 deletions drivers/pci/host/pcie-designware.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,19 +293,9 @@ static int assign_irq(int no_irqs, struct msi_desc *desc, int *pos)
return -ENOSPC;
}

static int dw_msi_setup_irq(struct msi_controller *chip, struct pci_dev *pdev,
struct msi_desc *desc)
static void dw_msi_setup_msg(struct pcie_port *pp, unsigned int irq, u32 pos)
{
int irq, pos;
struct msi_msg msg;
struct pcie_port *pp = sys_to_pcie(pdev->bus->sysdata);

if (desc->msi_attrib.is_msix)
return -EINVAL;

irq = assign_irq(1, desc, &pos);
if (irq < 0)
return irq;

if (pp->ops->get_msi_addr)
msg.address_lo = pp->ops->get_msi_addr(pp);
Expand All @@ -319,6 +309,22 @@ static int dw_msi_setup_irq(struct msi_controller *chip, struct pci_dev *pdev,
msg.data = pos;

pci_write_msi_msg(irq, &msg);
}

static int dw_msi_setup_irq(struct msi_controller *chip, struct pci_dev *pdev,
struct msi_desc *desc)
{
int irq, pos;
struct pcie_port *pp = sys_to_pcie(pdev->bus->sysdata);

if (desc->msi_attrib.is_msix)
return -EINVAL;

irq = assign_irq(1, desc, &pos);
if (irq < 0)
return irq;

dw_msi_setup_msg(pp, irq, pos);

return 0;
}
Expand Down

0 comments on commit ea643e1

Please sign in to comment.