From: Tomasz Nowicki <tn@semihalf.com> To: marc.zyngier@arm.com, tglx@linutronix.de, jason@lakedaemon.net, rjw@rjwysocki.net, bhelgaas@google.com, lorenzo.pieralisi@arm.com, robert.richter@caviumnetworks.com, shijie.huang@arm.com, Suravee.Suthikulpanit@amd.com, hanjun.guo@linaro.org Cc: al.stone@linaro.org, mw@semihalf.com, graeme.gregory@linaro.org, Catalin.Marinas@arm.com, will.deacon@arm.com, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ddaney.cavm@gmail.com, okaya@codeaurora.org, andrea.gallo@linaro.org, linux-pci@vger.kernel.org, Tomasz Nowicki <tn@semihalf.com> Subject: [PATCH V6 3/7] irqchip/gicv3-its: Cleanup for ITS domain initialization Date: Mon, 13 Jun 2016 16:41:09 +0200 [thread overview] Message-ID: <1465828873-23498-4-git-send-email-tn@semihalf.com> (raw) In-Reply-To: <1465828873-23498-1-git-send-email-tn@semihalf.com> There is no point to initialize ITS without having msi-controller property in corresponding DT node. However, its_probe is checking msi-controller presence at the end, so we can save our time and do that check prior to its_probe call. Also, for the code clarity purpose, we put domain initialization to separate function. Signed-off-by: Tomasz Nowicki <tn@semihalf.com> Acked-by: Marc Zyngier <marc.zyngier@arm.com> --- drivers/irqchip/irq-gic-v3-its.c | 57 ++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 5eb1f9e..43d32fc 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -1507,13 +1507,37 @@ static void its_enable_quirks(struct its_node *its) gic_enable_quirks(iidr, its_quirks, its); } +static int its_init_domain(struct device_node *node, struct its_node *its, + struct irq_domain *parent) +{ + struct irq_domain *inner_domain; + struct msi_domain_info *info; + + info = kzalloc(sizeof(*info), GFP_KERNEL); + if (!info) + return -ENOMEM; + + inner_domain = irq_domain_add_tree(node, &its_domain_ops, its); + if (!inner_domain) { + kfree(info); + return -ENOMEM; + } + + inner_domain->parent = parent; + inner_domain->bus_token = DOMAIN_BUS_NEXUS; + info->ops = &its_msi_domain_ops; + info->data = its; + inner_domain->host_data = info; + + return 0; +} + static int __init its_probe(struct device_node *node, struct irq_domain *parent) { struct resource res; struct its_node *its; void __iomem *its_base; - struct irq_domain *inner_domain; u32 val; u64 baser, tmp; int err; @@ -1605,28 +1629,9 @@ static int __init its_probe(struct device_node *node, writeq_relaxed(0, its->base + GITS_CWRITER); writel_relaxed(GITS_CTLR_ENABLE, its->base + GITS_CTLR); - if (of_property_read_bool(node, "msi-controller")) { - struct msi_domain_info *info; - - info = kzalloc(sizeof(*info), GFP_KERNEL); - if (!info) { - err = -ENOMEM; - goto out_free_tables; - } - - inner_domain = irq_domain_add_tree(node, &its_domain_ops, its); - if (!inner_domain) { - err = -ENOMEM; - kfree(info); - goto out_free_tables; - } - - inner_domain->parent = parent; - inner_domain->bus_token = DOMAIN_BUS_NEXUS; - info->ops = &its_msi_domain_ops; - info->data = its; - inner_domain->host_data = info; - } + err = its_init_domain(node, its, parent); + if (err) + goto out_free_tables; spin_lock(&its_lock); list_add(&its->entry, &its_nodes); @@ -1677,6 +1682,12 @@ int __init its_init(struct device_node *node, struct rdists *rdists, for (np = of_find_matching_node(node, its_device_id); np; np = of_find_matching_node(np, its_device_id)) { + if (!of_property_read_bool(np, "msi-controller")) { + pr_warn("%s: no msi-controller property, ITS ignored\n", + np->full_name); + continue; + } + its_probe(np, parent_domain); } -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: tn@semihalf.com (Tomasz Nowicki) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH V6 3/7] irqchip/gicv3-its: Cleanup for ITS domain initialization Date: Mon, 13 Jun 2016 16:41:09 +0200 [thread overview] Message-ID: <1465828873-23498-4-git-send-email-tn@semihalf.com> (raw) In-Reply-To: <1465828873-23498-1-git-send-email-tn@semihalf.com> There is no point to initialize ITS without having msi-controller property in corresponding DT node. However, its_probe is checking msi-controller presence at the end, so we can save our time and do that check prior to its_probe call. Also, for the code clarity purpose, we put domain initialization to separate function. Signed-off-by: Tomasz Nowicki <tn@semihalf.com> Acked-by: Marc Zyngier <marc.zyngier@arm.com> --- drivers/irqchip/irq-gic-v3-its.c | 57 ++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 5eb1f9e..43d32fc 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -1507,13 +1507,37 @@ static void its_enable_quirks(struct its_node *its) gic_enable_quirks(iidr, its_quirks, its); } +static int its_init_domain(struct device_node *node, struct its_node *its, + struct irq_domain *parent) +{ + struct irq_domain *inner_domain; + struct msi_domain_info *info; + + info = kzalloc(sizeof(*info), GFP_KERNEL); + if (!info) + return -ENOMEM; + + inner_domain = irq_domain_add_tree(node, &its_domain_ops, its); + if (!inner_domain) { + kfree(info); + return -ENOMEM; + } + + inner_domain->parent = parent; + inner_domain->bus_token = DOMAIN_BUS_NEXUS; + info->ops = &its_msi_domain_ops; + info->data = its; + inner_domain->host_data = info; + + return 0; +} + static int __init its_probe(struct device_node *node, struct irq_domain *parent) { struct resource res; struct its_node *its; void __iomem *its_base; - struct irq_domain *inner_domain; u32 val; u64 baser, tmp; int err; @@ -1605,28 +1629,9 @@ static int __init its_probe(struct device_node *node, writeq_relaxed(0, its->base + GITS_CWRITER); writel_relaxed(GITS_CTLR_ENABLE, its->base + GITS_CTLR); - if (of_property_read_bool(node, "msi-controller")) { - struct msi_domain_info *info; - - info = kzalloc(sizeof(*info), GFP_KERNEL); - if (!info) { - err = -ENOMEM; - goto out_free_tables; - } - - inner_domain = irq_domain_add_tree(node, &its_domain_ops, its); - if (!inner_domain) { - err = -ENOMEM; - kfree(info); - goto out_free_tables; - } - - inner_domain->parent = parent; - inner_domain->bus_token = DOMAIN_BUS_NEXUS; - info->ops = &its_msi_domain_ops; - info->data = its; - inner_domain->host_data = info; - } + err = its_init_domain(node, its, parent); + if (err) + goto out_free_tables; spin_lock(&its_lock); list_add(&its->entry, &its_nodes); @@ -1677,6 +1682,12 @@ int __init its_init(struct device_node *node, struct rdists *rdists, for (np = of_find_matching_node(node, its_device_id); np; np = of_find_matching_node(np, its_device_id)) { + if (!of_property_read_bool(np, "msi-controller")) { + pr_warn("%s: no msi-controller property, ITS ignored\n", + np->full_name); + continue; + } + its_probe(np, parent_domain); } -- 1.9.1
next prev parent reply other threads:[~2016-06-13 14:41 UTC|newest] Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-06-13 14:41 [PATCH V6 0/7] Introduce ACPI world to ITS irqchip Tomasz Nowicki 2016-06-13 14:41 ` Tomasz Nowicki 2016-06-13 14:41 ` [PATCH V6 1/7] ACPI: I/O Remapping Table (IORT) initial support Tomasz Nowicki 2016-06-13 14:41 ` Tomasz Nowicki 2016-06-15 8:31 ` Marc Zyngier 2016-06-15 8:31 ` Marc Zyngier 2016-06-17 14:06 ` Tomasz Nowicki 2016-06-17 14:06 ` Tomasz Nowicki 2016-06-15 11:04 ` Lorenzo Pieralisi 2016-06-15 11:04 ` Lorenzo Pieralisi 2016-06-15 13:29 ` Tomasz Nowicki 2016-06-15 13:29 ` Tomasz Nowicki 2016-06-20 9:34 ` Tomasz Nowicki 2016-06-20 9:34 ` Tomasz Nowicki 2016-06-20 9:34 ` Tomasz Nowicki 2016-06-15 13:19 ` Sinan Kaya 2016-06-15 13:19 ` Sinan Kaya 2016-06-15 13:19 ` Sinan Kaya 2016-06-15 13:34 ` Lorenzo Pieralisi 2016-06-15 13:34 ` Lorenzo Pieralisi 2016-06-15 13:46 ` Sinan Kaya 2016-06-15 13:46 ` Sinan Kaya 2016-06-15 14:13 ` Lorenzo Pieralisi 2016-06-15 14:13 ` Lorenzo Pieralisi 2016-06-15 14:44 ` Sinan Kaya 2016-06-15 14:44 ` Sinan Kaya 2016-06-13 14:41 ` [PATCH V6 2/7] PCI/MSI: Setup MSI domain on a per-devices basis using IORT ACPI table Tomasz Nowicki 2016-06-13 14:41 ` Tomasz Nowicki 2016-06-13 14:41 ` Tomasz Nowicki 2016-06-15 8:33 ` Marc Zyngier 2016-06-15 8:33 ` Marc Zyngier 2016-06-13 14:41 ` Tomasz Nowicki [this message] 2016-06-13 14:41 ` [PATCH V6 3/7] irqchip/gicv3-its: Cleanup for ITS domain initialization Tomasz Nowicki 2016-06-13 14:41 ` [PATCH V6 4/7] irqchip/gicv3-its: Refator ITS DT init code to prepare for ACPI Tomasz Nowicki 2016-06-13 14:41 ` Tomasz Nowicki 2016-06-15 8:52 ` Marc Zyngier 2016-06-15 8:52 ` Marc Zyngier 2016-06-13 14:41 ` [PATCH V6 5/7] irqchip/gicv3-its: Probe ITS in the ACPI way Tomasz Nowicki 2016-06-13 14:41 ` Tomasz Nowicki 2016-06-13 14:41 ` Tomasz Nowicki 2016-06-15 8:56 ` Marc Zyngier 2016-06-15 8:56 ` Marc Zyngier 2016-06-13 14:41 ` [PATCH V6 6/7] irqchip/gicv3-its: Factor out code that might be reused for ACPI Tomasz Nowicki 2016-06-13 14:41 ` Tomasz Nowicki 2016-06-15 9:00 ` Marc Zyngier 2016-06-15 9:00 ` Marc Zyngier 2016-06-13 14:41 ` [PATCH V6 7/7] irqchip/gicv3-its: Use MADT ITS subtable to do PCI/MSI domain initialization Tomasz Nowicki 2016-06-13 14:41 ` Tomasz Nowicki 2016-06-15 9:03 ` Marc Zyngier 2016-06-15 9:03 ` Marc Zyngier 2016-06-15 9:09 ` [PATCH V6 0/7] Introduce ACPI world to ITS irqchip Marc Zyngier 2016-06-15 9:09 ` Marc Zyngier 2016-06-15 9:34 ` Tomasz Nowicki 2016-06-15 9:34 ` Tomasz Nowicki
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1465828873-23498-4-git-send-email-tn@semihalf.com \ --to=tn@semihalf.com \ --cc=Catalin.Marinas@arm.com \ --cc=Suravee.Suthikulpanit@amd.com \ --cc=al.stone@linaro.org \ --cc=andrea.gallo@linaro.org \ --cc=bhelgaas@google.com \ --cc=ddaney.cavm@gmail.com \ --cc=graeme.gregory@linaro.org \ --cc=hanjun.guo@linaro.org \ --cc=jason@lakedaemon.net \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pci@vger.kernel.org \ --cc=lorenzo.pieralisi@arm.com \ --cc=marc.zyngier@arm.com \ --cc=mw@semihalf.com \ --cc=okaya@codeaurora.org \ --cc=rjw@rjwysocki.net \ --cc=robert.richter@caviumnetworks.com \ --cc=shijie.huang@arm.com \ --cc=tglx@linutronix.de \ --cc=will.deacon@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.