lkml.org 
[lkml]   [2015]   [Oct]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V2 2/6] acpi: pci: Setup MSI domain for ACPI based pci devices
    Date
    This patch introduces pci_host_bridge_acpi_msi_domain(), which returns
    the MSI domain of the specified PCI host bridge with DOMAIN_BUS_PCI_MSI
    bus token. Then, it is assigned to pci device.

    Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
    ---
    drivers/pci/pci-acpi.c | 13 +++++++++++++
    drivers/pci/probe.c | 2 ++
    include/linux/pci.h | 7 +++++++
    3 files changed, 22 insertions(+)

    diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
    index a32ba75..0e21ef4 100644
    --- a/drivers/pci/pci-acpi.c
    +++ b/drivers/pci/pci-acpi.c
    @@ -9,7 +9,9 @@

    #include <linux/delay.h>
    #include <linux/init.h>
    +#include <linux/irqdomain.h>
    #include <linux/pci.h>
    +#include <linux/msi.h>
    #include <linux/pci_hotplug.h>
    #include <linux/module.h>
    #include <linux/pci-aspm.h>
    @@ -689,6 +691,17 @@ static struct acpi_bus_type acpi_pci_bus = {
    .cleanup = pci_acpi_cleanup,
    };

    +struct irq_domain *pci_host_bridge_acpi_msi_domain(struct pci_bus *bus)
    +{
    + struct irq_domain *dom = NULL;
    + struct fwnode_handle *fwnode = pci_msi_get_fwnode(&bus->dev);
    +
    + if (fwnode)
    + dom = irq_find_matching_fwnode(fwnode,
    + DOMAIN_BUS_PCI_MSI);
    + return dom;
    +}
    +
    static int __init acpi_pci_init(void)
    {
    int ret;
    diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
    index 0dbc7fb..bea1840 100644
    --- a/drivers/pci/probe.c
    +++ b/drivers/pci/probe.c
    @@ -671,6 +671,8 @@ static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus)
    * should be called from here.
    */
    d = pci_host_bridge_of_msi_domain(bus);
    + if (!d)
    + d = pci_host_bridge_acpi_msi_domain(bus);

    return d;
    }
    diff --git a/include/linux/pci.h b/include/linux/pci.h
    index e90eb22..4a7f6a9 100644
    --- a/include/linux/pci.h
    +++ b/include/linux/pci.h
    @@ -1925,6 +1925,13 @@ static inline struct irq_domain *
    pci_host_bridge_of_msi_domain(struct pci_bus *bus) { return NULL; }
    #endif /* CONFIG_OF */

    +#ifdef CONFIG_ACPI
    +struct irq_domain *pci_host_bridge_acpi_msi_domain(struct pci_bus *bus);
    +#else
    +static inline struct irq_domain *
    +pci_host_bridge_acpi_msi_domain(struct pci_bus *bus) { return NULL; }
    +#endif
    +
    #ifdef CONFIG_EEH
    static inline struct eeh_dev *pci_dev_to_eeh_dev(struct pci_dev *pdev)
    {
    --
    2.1.0


    \
     
     \ /
      Last update: 2015-10-15 01:41    [W:2.546 / U:0.748 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site