lkml.org 
[lkml]   [2015]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:irq/core] of/platform: Assign MSI domain to platform device
    Commit-ID:  c706c239af5bc297b5fbf1adc715632e1c222f7a
    Gitweb: http://git.kernel.org/tip/c706c239af5bc297b5fbf1adc715632e1c222f7a
    Author: Marc Zyngier <marc.zyngier@arm.com>
    AuthorDate: Tue, 28 Jul 2015 14:46:15 +0100
    Committer: Thomas Gleixner <tglx@linutronix.de>
    CommitDate: Thu, 30 Jul 2015 00:14:37 +0200

    of/platform: Assign MSI domain to platform device

    As for PCI, we're able to populate the msi_domain field at probe time,
    provided that the device tree has an "msi-parent" property.

    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Cc: <linux-arm-kernel@lists.infradead.org>
    Cc: Yijing Wang <wangyijing@huawei.com>
    Cc: Ma Jun <majun258@huawei.com>
    Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Cc: Duc Dang <dhdang@apm.com>
    Cc: Hanjun Guo <hanjun.guo@linaro.org>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Jiang Liu <jiang.liu@linux.intel.com>
    Cc: Jason Cooper <jason@lakedaemon.net>
    Link: http://lkml.kernel.org/r/1438091186-10244-9-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    drivers/of/irq.c | 21 +++++++++++++++++++++
    drivers/of/platform.c | 1 +
    include/linux/irqdomain.h | 1 +
    include/linux/of_irq.h | 1 +
    4 files changed, 24 insertions(+)

    diff --git a/drivers/of/irq.c b/drivers/of/irq.c
    index 3cf7a01..2956d72 100644
    --- a/drivers/of/irq.c
    +++ b/drivers/of/irq.c
    @@ -18,6 +18,7 @@
    * driver.
    */

    +#include <linux/device.h>
    #include <linux/errno.h>
    #include <linux/list.h>
    #include <linux/module.h>
    @@ -576,3 +577,23 @@ err:
    kfree(desc);
    }
    }
    +
    +/**
    + * of_msi_configure - Set the msi_domain field of a device
    + * @dev: device structure to associate with an MSI irq domain
    + * @np: device node for that device
    + */
    +void of_msi_configure(struct device *dev, struct device_node *np)
    +{
    + struct device_node *msi_np;
    + struct irq_domain *d;
    +
    + msi_np = of_parse_phandle(np, "msi-parent", 0);
    + if (!msi_np)
    + return;
    +
    + d = irq_find_matching_host(msi_np, DOMAIN_BUS_PLATFORM_MSI);
    + if (!d)
    + d = irq_find_host(msi_np);
    + dev_set_msi_domain(dev, d);
    +}
    diff --git a/drivers/of/platform.c b/drivers/of/platform.c
    index ddf8e42..8a002d6 100644
    --- a/drivers/of/platform.c
    +++ b/drivers/of/platform.c
    @@ -184,6 +184,7 @@ static struct platform_device *of_platform_device_create_pdata(
    dev->dev.bus = &platform_bus_type;
    dev->dev.platform_data = platform_data;
    of_dma_configure(&dev->dev, dev->dev.of_node);
    + of_msi_configure(&dev->dev, dev->dev.of_node);

    if (of_device_add(dev) != 0) {
    of_dma_deconfigure(&dev->dev);
    diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
    index 25e9e66..b4a74f7 100644
    --- a/include/linux/irqdomain.h
    +++ b/include/linux/irqdomain.h
    @@ -55,6 +55,7 @@ struct irq_data;
    enum irq_domain_bus_token {
    DOMAIN_BUS_ANY = 0,
    DOMAIN_BUS_PCI_MSI,
    + DOMAIN_BUS_PLATFORM_MSI,
    };

    /**
    diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h
    index d884929..4bcbd58 100644
    --- a/include/linux/of_irq.h
    +++ b/include/linux/of_irq.h
    @@ -74,6 +74,7 @@ static inline int of_irq_to_resource_table(struct device_node *dev,
    */
    extern unsigned int irq_of_parse_and_map(struct device_node *node, int index);
    extern struct device_node *of_irq_find_parent(struct device_node *child);
    +extern void of_msi_configure(struct device *dev, struct device_node *np);

    #else /* !CONFIG_OF */
    static inline unsigned int irq_of_parse_and_map(struct device_node *dev,

    \
     
     \ /
      Last update: 2015-07-30 07:21    [W:4.092 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site