From: Marc Zyngier <marc.zyngier@arm.com>
To: openrisc@lists.librecores.org
Subject: [OpenRISC] [PATCH v3 05/13] irqchip: add initial support for ompic
Date: Mon, 23 Oct 2017 09:00:09 +0100 [thread overview]
Message-ID: <86d15egupi.fsf@arm.com> (raw)
In-Reply-To: <20171022031600.29612-6-shorne@gmail.com> (Stafford Horne's message of "Sun, 22 Oct 2017 12:15:52 +0900")
On Sun, Oct 22 2017 at 12:15:52 pm BST, Stafford Horne <shorne@gmail.com> wrote:
> From: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
>
> IPI driver for the Open Multi-Processor Interrupt Controller (ompic) as
> described in the Multi-core support section of the OpenRISC 1.2
> proposed architecture specification:
>
> https://github.com/stffrdhrn/doc/raw/arch-1.2-proposal/openrisc-arch-1.2-rev0.pdf
>
> Each OpenRISC core contains a full interrupt controller which is used in
> the SMP architecture for interrupt balancing. This IPI device, the
> ompic, is the only external device required for enabling SMP on
> OpenRISC.
>
> Pending ops are stored in a memory bit mask which can allow multiple
> pending operations to be set and serviced at a time. This is mostly
> borrowed from the alpha IPI implementation.
>
> Cc: Marc Zyngier <marc.zyngier@arm.com>
> Cc: Rob Herring <robh@kernel.org>
> Signed-off-by: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
> [shorne at gmail.com: converted ops to bitmask, wrote commit message]
> Signed-off-by: Stafford Horne <shorne@gmail.com>
> ---
>
> Changes since v2
> - Fixed some issues with missing static
> - Fixed spelling issue with multi-core
> - Added back #interrupt-cells
>
> Changes since v1
> - Added openrisc, prefix
> - Clarified 8 bytes per cpu
> - Removed #interrupt-cells as this will not be an irq parent
> - Changed ops to be percpu
> - Added DTS and intialization failure validations
>
>
> .../interrupt-controller/openrisc,ompic.txt | 22 +++
> MAINTAINERS | 1 +
> arch/openrisc/Kconfig | 1 +
> drivers/irqchip/Kconfig | 3 +
> drivers/irqchip/Makefile | 1 +
> drivers/irqchip/irq-ompic.c | 205 +++++++++++++++++++++
> 6 files changed, 233 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/interrupt-controller/openrisc,ompic.txt
> create mode 100644 drivers/irqchip/irq-ompic.c
[...]
> +static struct irqaction ompi_ipi_irqaction = {
> + .handler = ompic_ipi_handler,
> + .flags = IRQF_PERCPU,
> + .name = "ompic_ipi",
> +};
> +
> +static int __init ompic_of_init(struct device_node *node, struct device_node *parent)
> +{
> + struct resource res;
> + int irq;
> + int ret;
> +
> + /* Validate the DT */
> + if (ompic_base) {
> + pr_err("ompic: duplicate ompic's are not supported");
> + return -EEXIST;
> + }
> +
> + if (of_address_to_resource(node, 0, &res)) {
> + pr_err("ompic: reg property requires an address and size");
> + return -EINVAL;
> + }
> +
> + if (resource_size(&res) < (num_possible_cpus() * OMPIC_CPUBYTES)) {
> + pr_err("ompic: reg size, currently %d must be at least %d",
> + resource_size(&res),
> + (num_possible_cpus() * OMPIC_CPUBYTES));
> + return -EINVAL;
> + }
> +
> + /* Setup the device */
> + ompic_base = ioremap(res.start, resource_size(&res));
> + if (IS_ERR(ompic_base)) {
> + pr_err("ompic: unable to map registers");
> + return PTR_ERR(ompic_base);
> + }
> +
> + irq = irq_of_parse_and_map(node, 0);
> + if (irq <= 0) {
> + pr_err("ompic: unable to parse device irq");
> + ret = -EINVAL;
> + goto out_unmap;
> + }
> +
> + ret = setup_irq(irq, &ompi_ipi_irqaction);
> + if (ret)
> + goto out_irq_disp;
Is there a particular reason why this cannot be turned request_irq()
call? setup_irq is something we try to avoid these days...
> +
> + set_smp_cross_call(ompic_raise_softirq);
> +
> + return 0;
> +
> +out_irq_disp:
> + irq_dispose_mapping(irq);
> +out_unmap:
> + iounmap(ompic_base);
> + ompic_base = NULL;
> + return ret;
> +}
> +IRQCHIP_DECLARE(ompic, "openrisc,ompic", ompic_of_init);
Otherwise looks good to me.
Thanks,
M.
--
Jazz is not dead. It just smells funny.
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <marc.zyngier-5wv7dgnIgG8@public.gmane.org>
To: Stafford Horne <shorne-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: LKML <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Openrisc
<openrisc-cunTk1MwBs9a3B2Vnqf2dGD2FQJk+8+b@public.gmane.org>,
Stefan Kristiansson
<stefan.kristiansson-MbMCFXIvDHJFcC0YU169RA@public.gmane.org>,
Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Jonas Bonn <jonas-A9uVI2HLR7kOP4wsBPIw7w@public.gmane.org>,
"David S. Miller" <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>,
Greg Kroah-Hartman
<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
Mauro Carvalho Chehab
<mchehab-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Randy Dunlap <rdunlap-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v3 05/13] irqchip: add initial support for ompic
Date: Mon, 23 Oct 2017 09:00:09 +0100 [thread overview]
Message-ID: <86d15egupi.fsf@arm.com> (raw)
In-Reply-To: <20171022031600.29612-6-shorne-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> (Stafford Horne's message of "Sun, 22 Oct 2017 12:15:52 +0900")
On Sun, Oct 22 2017 at 12:15:52 pm BST, Stafford Horne <shorne-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> From: Stefan Kristiansson <stefan.kristiansson-MbMCFXIvDHJFcC0YU169RA@public.gmane.org>
>
> IPI driver for the Open Multi-Processor Interrupt Controller (ompic) as
> described in the Multi-core support section of the OpenRISC 1.2
> proposed architecture specification:
>
> https://github.com/stffrdhrn/doc/raw/arch-1.2-proposal/openrisc-arch-1.2-rev0.pdf
>
> Each OpenRISC core contains a full interrupt controller which is used in
> the SMP architecture for interrupt balancing. This IPI device, the
> ompic, is the only external device required for enabling SMP on
> OpenRISC.
>
> Pending ops are stored in a memory bit mask which can allow multiple
> pending operations to be set and serviced at a time. This is mostly
> borrowed from the alpha IPI implementation.
>
> Cc: Marc Zyngier <marc.zyngier-5wv7dgnIgG8@public.gmane.org>
> Cc: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
> Signed-off-by: Stefan Kristiansson <stefan.kristiansson-MbMCFXIvDHJFcC0YU169RA@public.gmane.org>
> [shorne-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org: converted ops to bitmask, wrote commit message]
> Signed-off-by: Stafford Horne <shorne-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
>
> Changes since v2
> - Fixed some issues with missing static
> - Fixed spelling issue with multi-core
> - Added back #interrupt-cells
>
> Changes since v1
> - Added openrisc, prefix
> - Clarified 8 bytes per cpu
> - Removed #interrupt-cells as this will not be an irq parent
> - Changed ops to be percpu
> - Added DTS and intialization failure validations
>
>
> .../interrupt-controller/openrisc,ompic.txt | 22 +++
> MAINTAINERS | 1 +
> arch/openrisc/Kconfig | 1 +
> drivers/irqchip/Kconfig | 3 +
> drivers/irqchip/Makefile | 1 +
> drivers/irqchip/irq-ompic.c | 205 +++++++++++++++++++++
> 6 files changed, 233 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/interrupt-controller/openrisc,ompic.txt
> create mode 100644 drivers/irqchip/irq-ompic.c
[...]
> +static struct irqaction ompi_ipi_irqaction = {
> + .handler = ompic_ipi_handler,
> + .flags = IRQF_PERCPU,
> + .name = "ompic_ipi",
> +};
> +
> +static int __init ompic_of_init(struct device_node *node, struct device_node *parent)
> +{
> + struct resource res;
> + int irq;
> + int ret;
> +
> + /* Validate the DT */
> + if (ompic_base) {
> + pr_err("ompic: duplicate ompic's are not supported");
> + return -EEXIST;
> + }
> +
> + if (of_address_to_resource(node, 0, &res)) {
> + pr_err("ompic: reg property requires an address and size");
> + return -EINVAL;
> + }
> +
> + if (resource_size(&res) < (num_possible_cpus() * OMPIC_CPUBYTES)) {
> + pr_err("ompic: reg size, currently %d must be at least %d",
> + resource_size(&res),
> + (num_possible_cpus() * OMPIC_CPUBYTES));
> + return -EINVAL;
> + }
> +
> + /* Setup the device */
> + ompic_base = ioremap(res.start, resource_size(&res));
> + if (IS_ERR(ompic_base)) {
> + pr_err("ompic: unable to map registers");
> + return PTR_ERR(ompic_base);
> + }
> +
> + irq = irq_of_parse_and_map(node, 0);
> + if (irq <= 0) {
> + pr_err("ompic: unable to parse device irq");
> + ret = -EINVAL;
> + goto out_unmap;
> + }
> +
> + ret = setup_irq(irq, &ompi_ipi_irqaction);
> + if (ret)
> + goto out_irq_disp;
Is there a particular reason why this cannot be turned request_irq()
call? setup_irq is something we try to avoid these days...
> +
> + set_smp_cross_call(ompic_raise_softirq);
> +
> + return 0;
> +
> +out_irq_disp:
> + irq_dispose_mapping(irq);
> +out_unmap:
> + iounmap(ompic_base);
> + ompic_base = NULL;
> + return ret;
> +}
> +IRQCHIP_DECLARE(ompic, "openrisc,ompic", ompic_of_init);
Otherwise looks good to me.
Thanks,
M.
--
Jazz is not dead. It just smells funny.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <marc.zyngier@arm.com>
To: Stafford Horne <shorne@gmail.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
Openrisc <openrisc@lists.librecores.org>,
Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>,
Rob Herring <robh@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Jason Cooper <jason@lakedaemon.net>,
Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Jonas Bonn <jonas@southpole.se>,
"David S. Miller" <davem@davemloft.net>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Randy Dunlap <rdunlap@infradead.org>,
devicetree@vger.kernel.org
Subject: Re: [PATCH v3 05/13] irqchip: add initial support for ompic
Date: Mon, 23 Oct 2017 09:00:09 +0100 [thread overview]
Message-ID: <86d15egupi.fsf@arm.com> (raw)
In-Reply-To: <20171022031600.29612-6-shorne@gmail.com> (Stafford Horne's message of "Sun, 22 Oct 2017 12:15:52 +0900")
On Sun, Oct 22 2017 at 12:15:52 pm BST, Stafford Horne <shorne@gmail.com> wrote:
> From: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
>
> IPI driver for the Open Multi-Processor Interrupt Controller (ompic) as
> described in the Multi-core support section of the OpenRISC 1.2
> proposed architecture specification:
>
> https://github.com/stffrdhrn/doc/raw/arch-1.2-proposal/openrisc-arch-1.2-rev0.pdf
>
> Each OpenRISC core contains a full interrupt controller which is used in
> the SMP architecture for interrupt balancing. This IPI device, the
> ompic, is the only external device required for enabling SMP on
> OpenRISC.
>
> Pending ops are stored in a memory bit mask which can allow multiple
> pending operations to be set and serviced at a time. This is mostly
> borrowed from the alpha IPI implementation.
>
> Cc: Marc Zyngier <marc.zyngier@arm.com>
> Cc: Rob Herring <robh@kernel.org>
> Signed-off-by: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
> [shorne@gmail.com: converted ops to bitmask, wrote commit message]
> Signed-off-by: Stafford Horne <shorne@gmail.com>
> ---
>
> Changes since v2
> - Fixed some issues with missing static
> - Fixed spelling issue with multi-core
> - Added back #interrupt-cells
>
> Changes since v1
> - Added openrisc, prefix
> - Clarified 8 bytes per cpu
> - Removed #interrupt-cells as this will not be an irq parent
> - Changed ops to be percpu
> - Added DTS and intialization failure validations
>
>
> .../interrupt-controller/openrisc,ompic.txt | 22 +++
> MAINTAINERS | 1 +
> arch/openrisc/Kconfig | 1 +
> drivers/irqchip/Kconfig | 3 +
> drivers/irqchip/Makefile | 1 +
> drivers/irqchip/irq-ompic.c | 205 +++++++++++++++++++++
> 6 files changed, 233 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/interrupt-controller/openrisc,ompic.txt
> create mode 100644 drivers/irqchip/irq-ompic.c
[...]
> +static struct irqaction ompi_ipi_irqaction = {
> + .handler = ompic_ipi_handler,
> + .flags = IRQF_PERCPU,
> + .name = "ompic_ipi",
> +};
> +
> +static int __init ompic_of_init(struct device_node *node, struct device_node *parent)
> +{
> + struct resource res;
> + int irq;
> + int ret;
> +
> + /* Validate the DT */
> + if (ompic_base) {
> + pr_err("ompic: duplicate ompic's are not supported");
> + return -EEXIST;
> + }
> +
> + if (of_address_to_resource(node, 0, &res)) {
> + pr_err("ompic: reg property requires an address and size");
> + return -EINVAL;
> + }
> +
> + if (resource_size(&res) < (num_possible_cpus() * OMPIC_CPUBYTES)) {
> + pr_err("ompic: reg size, currently %d must be at least %d",
> + resource_size(&res),
> + (num_possible_cpus() * OMPIC_CPUBYTES));
> + return -EINVAL;
> + }
> +
> + /* Setup the device */
> + ompic_base = ioremap(res.start, resource_size(&res));
> + if (IS_ERR(ompic_base)) {
> + pr_err("ompic: unable to map registers");
> + return PTR_ERR(ompic_base);
> + }
> +
> + irq = irq_of_parse_and_map(node, 0);
> + if (irq <= 0) {
> + pr_err("ompic: unable to parse device irq");
> + ret = -EINVAL;
> + goto out_unmap;
> + }
> +
> + ret = setup_irq(irq, &ompi_ipi_irqaction);
> + if (ret)
> + goto out_irq_disp;
Is there a particular reason why this cannot be turned request_irq()
call? setup_irq is something we try to avoid these days...
> +
> + set_smp_cross_call(ompic_raise_softirq);
> +
> + return 0;
> +
> +out_irq_disp:
> + irq_dispose_mapping(irq);
> +out_unmap:
> + iounmap(ompic_base);
> + ompic_base = NULL;
> + return ret;
> +}
> +IRQCHIP_DECLARE(ompic, "openrisc,ompic", ompic_of_init);
Otherwise looks good to me.
Thanks,
M.
--
Jazz is not dead. It just smells funny.
next prev parent reply other threads:[~2017-10-23 8:00 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-22 3:15 [OpenRISC] [PATCH v3 00/13] OpenRISC SMP Support Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 01/13] openrisc: use shadow registers to save regs on exception Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 02/13] openrisc: add 1 and 2 byte cmpxchg support Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 03/13] openrisc: use qspinlocks and qrwlocks Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 04/13] dt-bindings: add openrisc to vendor prefixes list Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 05/13] irqchip: add initial support for ompic Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-23 8:00 ` Marc Zyngier [this message]
2017-10-23 8:00 ` Marc Zyngier
2017-10-23 8:00 ` Marc Zyngier
2017-10-23 12:57 ` [OpenRISC] " Stafford Horne
2017-10-23 12:57 ` Stafford Horne
2017-10-27 3:19 ` [OpenRISC] " Rob Herring
2017-10-27 3:19 ` Rob Herring
2017-10-27 3:19 ` Rob Herring
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 06/13] openrisc: initial SMP support Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 07/13] openrisc: fix initial preempt state for secondary cpu tasks Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 08/13] openrisc: sleep instead of spin on secondary wait Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 09/13] openrisc: add cacheflush support to fix icache aliasing Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 10/13] openrisc: add simple_smp dts and defconfig for simulators Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 11/13] openrisc: support framepointers and STACKTRACE_SUPPORT Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:15 ` [OpenRISC] [PATCH v3 12/13] openrisc: enable LOCKDEP_SUPPORT and irqflags tracing Stafford Horne
2017-10-22 3:15 ` Stafford Horne
2017-10-22 3:16 ` [OpenRISC] [PATCH v3 13/13] openrisc: add tick timer multi-core sync logic Stafford Horne
2017-10-22 3:16 ` Stafford Horne
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=86d15egupi.fsf@arm.com \
--to=marc.zyngier@arm.com \
--cc=openrisc@lists.librecores.org \
/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: link
Be 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.