Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1389859
| Path | csiph.com!news.mixmin.net!aioe.org!bofh.it!news.nic.it!robomod |
|---|---|
| From | Eric Auger <eric.auger@linaro.org> |
| Newsgroups | linux.kernel |
| Subject | [PATCH v8 6/8] irqchip/gicv2m: implement msi_doorbell_info callback |
| Date | Thu, 28 Apr 2016 10:30:01 +0200 |
| Message-ID | <rsPuF-4Y-9@gated-at.bofh.it> (permalink) |
| References | <rsPuF-4Y-3@gated-at.bofh.it> |
| X-Original-To | eric.auger@st.com, eric.auger@linaro.org, robin.murphy@arm.com, alex.williamson@redhat.com, will.deacon@arm.com, joro@8bytes.org, tglx@linutronix.de, jason@lakedaemon.net, marc.zyngier@arm.com, christoffer.dall@linaro.org, linux-arm-kernel@lists.infradead.org |
| Dkim-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=RIyfSGMapPYj8mFRsSmFGB1ucgGlVgNCjHpl+3mBxuM=; b=j0wZPC97hLo5LI3jvf28tyBr+V3Z5aLmc8oRXNCTmkH2ssulquWtb6nEFoWe3yDqAf HuKeTgeoMezozdQ9rcFz44AFCKuvl85aPFpC5xiOQzrrGOI5QJSKFe10CBxGLK0K6x05 aOe9qZdtwWRHB2BS/vgj4pNsHbHkCy8vjw7jw= |
| X-Google-Dkim-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=RIyfSGMapPYj8mFRsSmFGB1ucgGlVgNCjHpl+3mBxuM=; b=l4T8NfrVPswsWeE2qCnhAeOciEP+u/kD+545n1quZcuZCjsBJ4JMMRR7Y+G7zkYX9y /09oyF9PjuZBPgB7o6T/1Zhuax7+ZXdAiRMubw5JTY3TdQuHkNjfbJnvAX+w9L5QV1ds iPsQjAfldik1Ujv7Wglx2MiwCuBzQAr5tq/Xa8F+amnWYj0Cwe9YNW1vMkbBvZCNyQ9+ RA2VdbT1EAr0IXyTuOhDXvJoedFxqLHMmAdmraAdXaM9zg+oPp9gOMlTRzTmgw1w6skh vxSQLbxG1/7f8c+cZ4At/GCgvhi6iAMi74bANmhOl2BPPp+4iccAa+/JJJyLEh58r/jB FO+A== |
| X-Gm-Message-State | AOPr4FVstKGxr9EsHL7wO3mbDYSYzSkwuClnaD/0x7M15rz/YN0nbovKrgrwNKx2hkNP25Wq |
| X-Received | by 10.194.62.145 with SMTP id y17mr14866531wjr.109.1461831766976; Thu, 28 Apr 2016 01:22:46 -0700 (PDT) |
| X-Mailer | git-send-email 1.9.1 |
| Sender | robomod@news.nic.it |
| List-ID | <linux-kernel.vger.kernel.org> |
| X-Mailing-List | linux-kernel@vger.kernel.org |
| Approved | robomod@news.nic.it |
| Lines | 119 |
| Organization | linux.* mail to news gateway |
| X-Original-Cc | patches@linaro.org, linux-kernel@vger.kernel.org, Bharat.Bhushan@freescale.com, pranav.sawargaonkar@gmail.com, p.fedin@samsung.com, iommu@lists.linux-foundation.org, Jean-Philippe.Brucker@arm.com, julien.grall@arm.com |
| X-Original-Date | Thu, 28 Apr 2016 08:22:08 +0000 |
| X-Original-Message-ID | <1461831730-5575-7-git-send-email-eric.auger@linaro.org> |
| X-Original-References | <1461831730-5575-1-git-send-email-eric.auger@linaro.org> |
| X-Original-Sender | linux-kernel-owner@vger.kernel.org |
| Xref | csiph.com linux.kernel:1389859 |
Show key headers only | View raw
This patch implements the msi_doorbell_info callback in the
gicv2m driver.
The driver now is able to return its doorbell characteristics
(base, size, prot). A single doorbell is exposed.
This will allow the msi layer to iommu_map this doorbell when
requested.
Signed-off-by: Eric Auger <eric.auger@linaro.org>
---
v7 -> v8:
- gicv2m_msi_doorbell_info does not return a pointer to const
- remove spurious !v2m check
- add IOMMU_MMIO flag
v7: creation
---
drivers/irqchip/irq-gic-v2m.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c
index 28f047c..a1ea40c 100644
--- a/drivers/irqchip/irq-gic-v2m.c
+++ b/drivers/irqchip/irq-gic-v2m.c
@@ -24,6 +24,8 @@
#include <linux/of_pci.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
+#include <linux/percpu.h>
+#include <linux/iommu.h>
/*
* MSI_TYPER:
@@ -64,6 +66,7 @@ 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 irq_chip_msi_doorbell_info doorbell_info;
};
static void gicv2m_mask_msi_irq(struct irq_data *d)
@@ -105,6 +108,14 @@ static void gicv2m_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
msg->data -= v2m->spi_start;
}
+static inline struct irq_chip_msi_doorbell_info *
+gicv2m_msi_doorbell_info(struct irq_data *data)
+{
+ struct v2m_data *v2m = irq_data_get_irq_chip_data(data);
+
+ return &v2m->doorbell_info;
+}
+
static struct irq_chip gicv2m_irq_chip = {
.name = "GICv2m",
.irq_mask = irq_chip_mask_parent,
@@ -112,6 +123,7 @@ static struct irq_chip gicv2m_irq_chip = {
.irq_eoi = irq_chip_eoi_parent,
.irq_set_affinity = irq_chip_set_affinity_parent,
.irq_compose_msi_msg = gicv2m_compose_msi_msg,
+ .msi_doorbell_info = gicv2m_msi_doorbell_info,
};
static int gicv2m_irq_gic_domain_alloc(struct irq_domain *domain,
@@ -247,6 +259,7 @@ static void gicv2m_teardown(void)
list_for_each_entry_safe(v2m, tmp, &v2m_nodes, entry) {
list_del(&v2m->entry);
+ free_percpu(v2m->doorbell_info.percpu_doorbells);
kfree(v2m->bm);
iounmap(v2m->base);
of_node_put(to_of_node(v2m->fwnode));
@@ -299,6 +312,7 @@ static int __init gicv2m_init_one(struct fwnode_handle *fwnode,
{
int ret;
struct v2m_data *v2m;
+ phys_addr_t __percpu *doorbell;
v2m = kzalloc(sizeof(struct v2m_data), GFP_KERNEL);
if (!v2m) {
@@ -311,11 +325,23 @@ static int __init gicv2m_init_one(struct fwnode_handle *fwnode,
memcpy(&v2m->res, res, sizeof(struct resource));
+ v2m->doorbell_info.percpu_doorbells =
+ alloc_percpu(phys_addr_t);
+ if (WARN_ON(!v2m->doorbell_info.percpu_doorbells)) {
+ ret = -ENOMEM;
+ goto err_free_v2m;
+ }
+ doorbell = per_cpu_ptr(v2m->doorbell_info.percpu_doorbells, 0);
+ *doorbell = v2m->res.start;
+ v2m->doorbell_info.size = 4;
+ v2m->doorbell_info.prot = IOMMU_WRITE | IOMMU_MMIO;
+ v2m->doorbell_info.nb_doorbells = 1;
+
v2m->base = ioremap(v2m->res.start, resource_size(&v2m->res));
if (!v2m->base) {
pr_err("Failed to map GICv2m resource\n");
ret = -ENOMEM;
- goto err_free_v2m;
+ goto err_free_v2m_doorbells;
}
if (spi_start && nr_spis) {
@@ -359,6 +385,8 @@ static int __init gicv2m_init_one(struct fwnode_handle *fwnode,
err_iounmap:
iounmap(v2m->base);
+err_free_v2m_doorbells:
+ free_percpu(v2m->doorbell_info.percpu_doorbells);
err_free_v2m:
kfree(v2m);
return ret;
--
1.9.1
Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread
[PATCH v8 6/8] irqchip/gicv2m: implement msi_doorbell_info callback Eric Auger <eric.auger@linaro.org> - 2016-04-28 10:30 +0200 Re: [PATCH v8 6/8] irqchip/gicv2m: implement msi_doorbell_info callback Marc Zyngier <marc.zyngier@arm.com> - 2016-05-04 15:10 +0200
csiph-web