* [PATCH 0/4] gicv2m: acpi: Add ACPI support for GICv2m MSI
@ 2015-10-13 20:46 Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 1/4] pci: msi: Add support to query MSI domain for pci device Suravee Suthikulpanit
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Suravee Suthikulpanit @ 2015-10-13 20:46 UTC (permalink / raw)
To: marc.zyngier, tglx, jason, rjw
Cc: Lorenzo Pieralisi, graeme.gregory, Catalin Marinas, Will Deacon,
linux-kernel, tomasz.nowicki, linux-acpi, hanjun.guo,
Suravee Suthikulpanit, linux-arm-kernel
This patch series has been forked from the following patch series since
it no longer depends on the rest of the patches.
[PATCH v4 00/10] ACPI GIC Self-probing, GICv2m and GICv3 support
https://lkml.org/lkml/2015/7/29/234
It has been ported to use the newly introduced device fwnode_handle
for ACPI irqdmain introduced by Marc in the following patch series:
[PATCH v2 00/17] Divorcing irqdomain and device_node
http://git.kernel.org/cgit/linux/kernel/git/maz/arm-platforms.git irq/irq-domain-fwnode-v2
The following git branch contains the submitted patches along with
the pre-requsite patches (mainly for ARM64 PCI support for ACPI).
https://github.com/ssuthiku/linux.git irq-domain-fwnode-v2-v2m
This has been tested on AMD Seattle (Overdrive) RevB system.
Suravee Suthikulpanit (4):
pci: msi: Add support to query MSI domain for pci device
acpi: pci: Setup MSI domain for ACPI based pci devices
gicv2m: Refactor to prepare for ACPI support
gicv2m: acpi: Introducing GICv2m ACPI support
drivers/irqchip/irq-gic-v2m.c | 157 +++++++++++++++++++++++++++++++++++-----
drivers/irqchip/irq-gic.c | 3 +
drivers/pci/msi.c | 30 ++++++++
drivers/pci/pci-acpi.c | 13 ++++
drivers/pci/probe.c | 2 +
include/linux/irqchip/arm-gic.h | 6 ++
include/linux/msi.h | 7 ++
include/linux/pci.h | 7 ++
8 files changed, 205 insertions(+), 20 deletions(-)
--
2.1.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/4] pci: msi: Add support to query MSI domain for pci device
2015-10-13 20:46 [PATCH 0/4] gicv2m: acpi: Add ACPI support for GICv2m MSI Suravee Suthikulpanit
@ 2015-10-13 20:46 ` Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 2/4] acpi: pci: Setup MSI domain for ACPI based pci devices Suravee Suthikulpanit
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Suravee Suthikulpanit @ 2015-10-13 20:46 UTC (permalink / raw)
To: marc.zyngier, tglx, jason, rjw
Cc: Lorenzo Pieralisi, Will Deacon, Catalin Marinas, hanjun.guo,
tomasz.nowicki, graeme.gregory, linux-arm-kernel, linux-kernel,
linux-acpi, Suravee Suthikulpanit
This patch introduces an interface for irqchip to register a callback,
to provide a way to determine appropriate MSI domain for a pci device.
Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
---
drivers/pci/msi.c | 30 ++++++++++++++++++++++++++++++
include/linux/msi.h | 7 +++++++
2 files changed, 37 insertions(+)
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index ddd59fe..2c87843 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -1327,4 +1327,34 @@ struct irq_domain *pci_msi_create_default_irq_domain(struct fwnode_handle *fwnod
return domain;
}
+
+static struct fwnode_handle *(*pci_msi_get_fwnode_cb)(struct device *dev);
+
+/**
+ * pci_msi_register_fwnode_provider - Register callback to retrieve fwnode
+ * @fn: The interrupt domain to retrieve
+ *
+ * This should be called by irqchip driver, which is the parent of
+ * the MSI domain to provide callback interface to query fwnode.
+ */
+void
+pci_msi_register_fwnode_provider(struct fwnode_handle *(*fn)(struct device *))
+{
+ pci_msi_get_fwnode_cb = fn;
+}
+
+/**
+ * pci_msi_get_fwnode - Query fwnode for MSI controller of the @dev
+ * @dev: The device that we try to query MSI domain token for
+ *
+ * This is used to query MSI domain token when setting up MSI domain
+ * for a device. Returns fwnode_handle * if token found / NULL if not found
+ */
+struct fwnode_handle *pci_msi_get_fwnode(struct device *dev)
+{
+ if (pci_msi_get_fwnode_cb)
+ return pci_msi_get_fwnode_cb(dev);
+
+ return NULL;
+}
#endif /* CONFIG_PCI_MSI_IRQ_DOMAIN */
diff --git a/include/linux/msi.h b/include/linux/msi.h
index 32a24b9..ceaebf6 100644
--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -3,6 +3,7 @@
#include <linux/kobject.h>
#include <linux/list.h>
+#include <linux/fwnode.h>
struct msi_msg {
u32 address_lo; /* low 32 bits of msi message address */
@@ -294,6 +295,12 @@ irq_hw_number_t pci_msi_domain_calc_hwirq(struct pci_dev *dev,
struct msi_desc *desc);
int pci_msi_domain_check_cap(struct irq_domain *domain,
struct msi_domain_info *info, struct device *dev);
+
+void
+pci_msi_register_fwnode_provider(struct fwnode_handle *(*fn)(struct device *));
+
+struct fwnode_handle *pci_msi_get_fwnode(struct device *dev);
+
#endif /* CONFIG_PCI_MSI_IRQ_DOMAIN */
#endif /* LINUX_MSI_H */
--
2.1.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/4] acpi: pci: Setup MSI domain for ACPI based pci devices
2015-10-13 20:46 [PATCH 0/4] gicv2m: acpi: Add ACPI support for GICv2m MSI Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 1/4] pci: msi: Add support to query MSI domain for pci device Suravee Suthikulpanit
@ 2015-10-13 20:46 ` Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 3/4] gicv2m: Refactor to prepare for ACPI support Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 4/4] gicv2m: acpi: Introducing GICv2m " Suravee Suthikulpanit
3 siblings, 0 replies; 5+ messages in thread
From: Suravee Suthikulpanit @ 2015-10-13 20:46 UTC (permalink / raw)
To: marc.zyngier, tglx, jason, rjw
Cc: Lorenzo Pieralisi, graeme.gregory, Catalin Marinas, Will Deacon,
linux-kernel, tomasz.nowicki, linux-acpi, hanjun.guo,
Suravee Suthikulpanit, linux-arm-kernel
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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/4] gicv2m: Refactor to prepare for ACPI support
2015-10-13 20:46 [PATCH 0/4] gicv2m: acpi: Add ACPI support for GICv2m MSI Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 1/4] pci: msi: Add support to query MSI domain for pci device Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 2/4] acpi: pci: Setup MSI domain for ACPI based pci devices Suravee Suthikulpanit
@ 2015-10-13 20:46 ` Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 4/4] gicv2m: acpi: Introducing GICv2m " Suravee Suthikulpanit
3 siblings, 0 replies; 5+ messages in thread
From: Suravee Suthikulpanit @ 2015-10-13 20:46 UTC (permalink / raw)
To: marc.zyngier, tglx, jason, rjw
Cc: Lorenzo Pieralisi, graeme.gregory, Catalin Marinas, Will Deacon,
linux-kernel, tomasz.nowicki, linux-acpi, hanjun.guo,
Suravee Suthikulpanit, linux-arm-kernel
This patch refactors gicv2m_init_one() to prepare for ACPI support.
It also replaces the irq_domain_add_tree() w/ irq_domain_create_tree()
since we will need to pass the struct fwnode_handle, instead of
struct device_node, when adding ACPI support later.
Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
---
drivers/irqchip/irq-gic-v2m.c | 51 ++++++++++++++++++++++++++-----------------
1 file changed, 31 insertions(+), 20 deletions(-)
diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c
index bf9b3c0..97d1bf4 100644
--- a/drivers/irqchip/irq-gic-v2m.c
+++ b/drivers/irqchip/irq-gic-v2m.c
@@ -239,8 +239,10 @@ static struct msi_domain_info gicv2m_pmsi_domain_info = {
.chip = &gicv2m_pmsi_irq_chip,
};
-static int __init gicv2m_init_one(struct device_node *node,
- struct irq_domain *parent)
+static int __init gicv2m_init_one(struct irq_domain *parent,
+ u32 spi_start, u32 nr_spis,
+ struct resource *res,
+ struct fwnode_handle *fwnode)
{
int ret;
struct v2m_data *v2m;
@@ -252,23 +254,17 @@ static int __init gicv2m_init_one(struct device_node *node,
return -ENOMEM;
}
- ret = of_address_to_resource(node, 0, &v2m->res);
- if (ret) {
- pr_err("Failed to allocate v2m resource.\n");
- goto err_free_v2m;
- }
-
- v2m->base = ioremap(v2m->res.start, resource_size(&v2m->res));
+ v2m->base = ioremap(res->start, resource_size(res));
if (!v2m->base) {
pr_err("Failed to map GICv2m resource\n");
ret = -ENOMEM;
goto err_free_v2m;
}
+ memcpy(&v2m->res, res, sizeof(struct resource));
- if (!of_property_read_u32(node, "arm,msi-base-spi", &v2m->spi_start) &&
- !of_property_read_u32(node, "arm,msi-num-spis", &v2m->nr_spis)) {
- pr_info("Overriding V2M MSI_TYPER (base:%u, num:%u)\n",
- v2m->spi_start, v2m->nr_spis);
+ if (spi_start && nr_spis) {
+ v2m->spi_start = spi_start;
+ v2m->nr_spis = nr_spis;
} else {
u32 typer = readl_relaxed(v2m->base + V2M_MSI_TYPER);
@@ -299,7 +295,7 @@ static int __init gicv2m_init_one(struct device_node *node,
goto err_iounmap;
}
- inner_domain = irq_domain_add_tree(node, &gicv2m_domain_ops, v2m);
+ inner_domain = irq_domain_create_tree(fwnode, &gicv2m_domain_ops, v2m);
if (!inner_domain) {
pr_err("Failed to create GICv2m domain\n");
ret = -ENOMEM;
@@ -308,10 +304,10 @@ static int __init gicv2m_init_one(struct device_node *node,
inner_domain->bus_token = DOMAIN_BUS_NEXUS;
inner_domain->parent = parent;
- pci_domain = pci_msi_create_irq_domain(of_node_to_fwnode(node),
+ pci_domain = pci_msi_create_irq_domain(fwnode,
&gicv2m_msi_domain_info,
inner_domain);
- plat_domain = platform_msi_create_irq_domain(of_node_to_fwnode(node),
+ plat_domain = platform_msi_create_irq_domain(fwnode,
&gicv2m_pmsi_domain_info,
inner_domain);
if (!pci_domain || !plat_domain) {
@@ -322,10 +318,9 @@ static int __init gicv2m_init_one(struct device_node *node,
spin_lock_init(&v2m->msi_cnt_lock);
- pr_info("Node %s: range[%#lx:%#lx], SPI[%d:%d]\n", node->name,
- (unsigned long)v2m->res.start, (unsigned long)v2m->res.end,
+ pr_info("range[%#lx:%#lx], SPI[%d:%d]\n",
+ (unsigned long)res->start, (unsigned long)res->end,
v2m->spi_start, (v2m->spi_start + v2m->nr_spis));
-
return 0;
err_free_domains:
@@ -356,10 +351,26 @@ int __init gicv2m_of_init(struct device_node *node, struct irq_domain *parent)
for (child = of_find_matching_node(node, gicv2m_device_id); child;
child = of_find_matching_node(child, gicv2m_device_id)) {
+ u32 spi_start = 0, nr_spis = 0;
+ struct resource res;
+
if (!of_find_property(child, "msi-controller", NULL))
continue;
- ret = gicv2m_init_one(child, parent);
+ ret = of_address_to_resource(child, 0, &res);
+ if (ret) {
+ pr_err("Failed to allocate v2m resource.\n");
+ break;
+ }
+
+ if (!of_property_read_u32(child, "arm,msi-base-spi",
+ &spi_start) &&
+ !of_property_read_u32(child, "arm,msi-num-spis", &nr_spis))
+ pr_info("Overriding V2M MSI_TYPER (base:%u, num:%u)\n",
+ spi_start, nr_spis);
+
+ ret = gicv2m_init_one(parent, spi_start, nr_spis, &res,
+ &child->fwnode);
if (ret) {
of_node_put(node);
break;
--
2.1.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 4/4] gicv2m: acpi: Introducing GICv2m ACPI support
2015-10-13 20:46 [PATCH 0/4] gicv2m: acpi: Add ACPI support for GICv2m MSI Suravee Suthikulpanit
` (2 preceding siblings ...)
2015-10-13 20:46 ` [PATCH 3/4] gicv2m: Refactor to prepare for ACPI support Suravee Suthikulpanit
@ 2015-10-13 20:46 ` Suravee Suthikulpanit
3 siblings, 0 replies; 5+ messages in thread
From: Suravee Suthikulpanit @ 2015-10-13 20:46 UTC (permalink / raw)
To: marc.zyngier, tglx, jason, rjw
Cc: Lorenzo Pieralisi, Will Deacon, Catalin Marinas, hanjun.guo,
tomasz.nowicki, graeme.gregory, linux-arm-kernel, linux-kernel,
linux-acpi, Suravee Suthikulpanit
This patch introduces gicv2m_acpi_init(), which uses information
in MADT GIC MSI frames structure to initialize GICv2m driver.
Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
---
drivers/irqchip/irq-gic-v2m.c | 106 ++++++++++++++++++++++++++++++++++++++++
drivers/irqchip/irq-gic.c | 3 ++
include/linux/irqchip/arm-gic.h | 6 +++
3 files changed, 115 insertions(+)
diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c
index 97d1bf4..b52560b 100644
--- a/drivers/irqchip/irq-gic-v2m.c
+++ b/drivers/irqchip/irq-gic-v2m.c
@@ -15,7 +15,10 @@
#define pr_fmt(fmt) "GICv2m: " fmt
+#include <linux/acpi.h>
#include <linux/irq.h>
+#include <linux/list.h>
+#include <linux/msi.h>
#include <linux/irqdomain.h>
#include <linux/kernel.h>
#include <linux/of_address.h>
@@ -51,6 +54,7 @@
#define GICV2M_NEEDS_SPI_OFFSET 0x00000001
struct v2m_data {
+ struct list_head list;
spinlock_t msi_cnt_lock;
struct resource res; /* GICv2m resource */
void __iomem *base; /* GICv2m virt address */
@@ -58,8 +62,11 @@ struct v2m_data {
u32 nr_spis; /* The number of SPIs for MSIs */
unsigned long *bm; /* MSI vector bitmap */
u32 flags; /* v2m flags for specific implementation */
+ struct fwnode_handle *fwnode;
};
+static LIST_HEAD(v2m_data_list);
+
static void gicv2m_mask_msi_irq(struct irq_data *d)
{
pci_msi_mask_irq(d);
@@ -134,6 +141,12 @@ static int gicv2m_irq_gic_domain_alloc(struct irq_domain *domain,
fwspec.param[0] = 0;
fwspec.param[1] = hwirq - 32;
fwspec.param[2] = IRQ_TYPE_EDGE_RISING;
+ } else if (domain->parent->fwnode->type == FWNODE_IRQCHIP) {
+ /* Note: This is mainly for GICv2m ACPI. */
+ fwspec.fwnode = domain->parent->fwnode;
+ fwspec.param_count = 2;
+ fwspec.param[0] = hwirq;
+ fwspec.param[1] = IRQ_TYPE_EDGE_RISING & IRQ_TYPE_SENSE_MASK;
} else {
return -EINVAL;
}
@@ -317,6 +330,8 @@ static int __init gicv2m_init_one(struct irq_domain *parent,
}
spin_lock_init(&v2m->msi_cnt_lock);
+ v2m->fwnode = fwnode;
+ list_add(&v2m->list, &v2m_data_list);
pr_info("range[%#lx:%#lx], SPI[%d:%d]\n",
(unsigned long)res->start, (unsigned long)res->end,
@@ -379,3 +394,94 @@ int __init gicv2m_of_init(struct device_node *node, struct irq_domain *parent)
return ret;
}
+
+#ifdef CONFIG_ACPI
+static int acpi_num_msi;
+
+/**
+ * Note:
+ * This is used as a temporary variable since we cannot
+ * pass args into acpi_parse_masdt_msi() when calling
+ * acpi_parse_entries(),
+ */
+struct irq_domain *acpi_parent_domain;
+
+static int __init
+acpi_parse_madt_msi(struct acpi_subtable_header *header,
+ const unsigned long end)
+{
+ int ret;
+ struct resource res;
+ u32 spi_start = 0, nr_spis = 0;
+ struct acpi_madt_generic_msi_frame *m;
+ struct fwnode_handle *domain_handle = NULL;
+
+ m = (struct acpi_madt_generic_msi_frame *)header;
+ if (BAD_MADT_ENTRY(m, end))
+ return -EINVAL;
+
+ res.start = m->base_address;
+ res.end = m->base_address + 0x1000;
+
+ if (m->flags & ACPI_MADT_OVERRIDE_SPI_VALUES) {
+ spi_start = m->spi_base;
+ nr_spis = m->spi_count;
+
+ pr_info("ACPI overriding V2M MSI_TYPER (base:%u, num:%u)\n",
+ spi_start, nr_spis);
+ }
+
+ domain_handle = irq_domain_alloc_fwnode((void *)m->base_address);
+ if (!domain_handle) {
+ pr_err("Unable to allocate GICv2m domain token\n");
+ return -EINVAL;
+ }
+
+ if (gicv2m_init_one(acpi_parent_domain, spi_start, nr_spis, &res,
+ domain_handle)) {
+ ret = -EINVAL;
+ goto err_out;
+ }
+
+ return 0;
+err_out:
+ if (domain_handle)
+ irq_domain_free_fwnode(domain_handle);
+ return ret;
+}
+
+static struct fwnode_handle *gicv2m_get_fwnode(struct device *dev)
+{
+ struct v2m_data *data;
+
+ if (!acpi_num_msi)
+ return NULL;
+
+ /* We only support one MSI frame at the moment. */
+ data = list_first_entry_or_null(&v2m_data_list,
+ struct v2m_data, list);
+ if (!data)
+ return NULL;
+
+ return data->fwnode;
+}
+
+int __init gicv2m_acpi_init(struct irq_domain *parent)
+{
+ if (acpi_num_msi > 0)
+ return 0;
+
+ acpi_parent_domain = parent;
+
+ acpi_num_msi = acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_MSI_FRAME,
+ acpi_parse_madt_msi, 0);
+
+ if (acpi_num_msi)
+ pci_msi_register_fwnode_provider(&gicv2m_get_fwnode);
+ else
+ pr_debug("No valid ACPI GIC MSI FRAME exist\n");
+
+ return 0;
+}
+
+#endif /* CONFIG_ACPI */
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
index 1d0e768..adfd1aa 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
@@ -1329,6 +1329,9 @@ gic_v2_acpi_init(struct acpi_table_header *table)
__gic_init_bases(0, -1, dist_base, cpu_base, 0, domain_handle);
+ if (IS_ENABLED(CONFIG_ARM_GIC_V2M))
+ gicv2m_acpi_init(gic_data[0].domain);
+
acpi_set_irq_model(ACPI_IRQ_MODEL_GIC, domain_handle);
return 0;
}
diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h
index bae69e5..7398538 100644
--- a/include/linux/irqchip/arm-gic.h
+++ b/include/linux/irqchip/arm-gic.h
@@ -108,6 +108,12 @@ void gic_init(unsigned int nr, int start,
int gicv2m_of_init(struct device_node *node, struct irq_domain *parent);
+#ifdef CONFIG_ACPI
+#include <linux/acpi.h>
+
+int gicv2m_acpi_init(struct irq_domain *parent);
+#endif
+
void gic_send_sgi(unsigned int cpu_id, unsigned int irq);
int gic_get_cpu_id(unsigned int cpu);
void gic_migrate_target(unsigned int new_cpu_id);
--
2.1.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-10-13 20:46 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-13 20:46 [PATCH 0/4] gicv2m: acpi: Add ACPI support for GICv2m MSI Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 1/4] pci: msi: Add support to query MSI domain for pci device Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 2/4] acpi: pci: Setup MSI domain for ACPI based pci devices Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 3/4] gicv2m: Refactor to prepare for ACPI support Suravee Suthikulpanit
2015-10-13 20:46 ` [PATCH 4/4] gicv2m: acpi: Introducing GICv2m " Suravee Suthikulpanit
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).