From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Palmer Dabbelt <palmer@dabbelt.com>,
peterz@infradead.org, tglx@linutronix.de, jason@lakedaemon.net,
marc.zyngier@arm.com, Arnd Bergmann <arnd@arndb.de>
Cc: yamada.masahiro@socionext.com, mmarek@suse.com,
albert@sifive.com, will.deacon@arm.com, boqun.feng@gmail.com,
oleg@redhat.com, mingo@redhat.com, daniel.lezcano@linaro.org,
gregkh@linuxfoundation.org, jslaby@suse.com, davem@davemloft.net,
mchehab@kernel.org, hverkuil@xs4all.nl, rdunlap@infradead.org,
viro@zeniv.linux.org.uk, mhiramat@kernel.org, fweisbec@gmail.com,
mcgrof@kernel.org, dledford@redhat.com,
bart.vanassche@sandisk.com, sstabellini@kernel.org,
mpe@ellerman.id.au, rmk+kernel@armlinux.org.uk,
paul.gortmaker@windriver.com, nicolas.dichtel@6wind.com,
linux@roeck-us.net, heiko.carstens@de.ibm.com,
schwidefsky@de.ibm.com, geert@linux-m68k.org,
akpm@linux-foundation.org, jiri@mellanox.com,
vgupta@synopsys.com, airlied@redhat.com, jk@ozlabs.org,
chris@chris-wilson.co.uk, Jason@zx2c4.com,
paulmck@linux.vnet.ibm.com, ncardwell@google.com,
linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org,
patches@groups.riscv.org
Subject: Re: [PATCH v7 05/15] irqchip: New RISC-V PLIC Driver
Date: Tue, 01 Aug 2017 16:29:40 +0300 [thread overview]
Message-ID: <1501594180.29303.327.camel@linux.intel.com> (raw)
In-Reply-To: <20170801010009.3302-6-palmer@dabbelt.com>
On Mon, 2017-07-31 at 17:59 -0700, Palmer Dabbelt wrote:
> This patch adds a driver for the Platform Level Interrupt Controller
> (PLIC) specified as part of the RISC-V supervisor level ISA manual.
> The PLIC connocts global interrupt sources to the local interrupt
> controller on each hart. A PLIC is present on all RISC-V systems.
>
> +static int plic_init(struct device_node *node, struct device_node
> *parent)
> +{
> + struct plic_data *data;
> + struct resource resource;
> + int i, ok = 0;
> + int out = -1;
> +
> + data = kzalloc(sizeof(*data), GFP_KERNEL);
> + if (WARN_ON(!data))
> + return -ENOMEM;
> +
> + spin_lock_init(&data->lock);
> +
> + data->reg = of_iomap(node, 0);
> + if (WARN_ON(!data->reg)) {
> + out = -EIO;
> + goto free_data;
> + }
> +
> + of_property_read_u32(node, "riscv,ndev", &data->ndev);
> + if (WARN_ON(!data->ndev)) {
> + out = -EINVAL;
> + goto free_reg;
> + }
> +
> + data->handlers = of_irq_count(node);
> + if (WARN_ON(!data->handlers)) {
> + out = -EINVAL;
> + goto free_reg;
> + }
> +
> + data->handler =
> + kcalloc(data->handlers, sizeof(*data->handler),
> GFP_KERNEL);
> + if (WARN_ON(!data->handler)) {
> + out = -ENOMEM;
> + goto free_reg;
> + }
> +
> + data->domain = irq_domain_add_linear(node, data->ndev+1,
> &plic_irqdomain_ops, data);
> + if (WARN_ON(!data->domain)) {
> + out = -ENOMEM;
> + goto free_handler;
> + }
> +
> + of_address_to_resource(node, 0, &resource);
> + snprintf(data->name, sizeof(data->name),
> + "riscv,plic0,%llx", resource.start);
> + data->chip.name = data->name;
> + data->chip.irq_mask = plic_irq_mask;
> + data->chip.irq_unmask = plic_irq_unmask;
> + data->chip.irq_enable = plic_irq_enable;
> + data->chip.irq_disable = plic_irq_disable;
> + data->chip.irq_eoi = plic_irq_eoi;
> +
> + for (i = 0; i < data->handlers; ++i) {
> + struct plic_handler *handler = &data->handler[i];
> + struct of_phandle_args parent;
> + int parent_irq, hwirq;
> +
> + handler->present = false;
> +
> + if (of_irq_parse_one(node, i, &parent))
> + continue;
> + /* skip context holes */
> + if (parent.args[0] == -1)
> + continue;
> +
> + /* skip any contexts that lead to inactive harts */
> + if (of_device_is_compatible(parent.np, "riscv,cpu-
> intc") &&
> + parent.np->parent &&
> + riscv_of_processor_hart(parent.np->parent) < 0)
> + continue;
> +
> + parent_irq = irq_create_of_mapping(&parent);
> + if (!parent_irq)
> + continue;
> +
> + handler->present = true;
> + handler->contextid = i;
> + handler->data = data;
> + /* hwirq prio must be > this to trigger an interrupt
> */
> + writel(0, plic_hart_threshold(data, i));
> +
> + for (hwirq = 1; hwirq <= data->ndev; ++hwirq)
> + plic_disable(data, i, hwirq);
> + irq_set_chained_handler_and_data(parent_irq,
> plic_chained_handle_irq, handler);
> + ++ok;
> + }
> +
> + pr_info("%s: mapped %d interrupts to %d/%d handlers\n",
> + data->name, data->ndev, ok, data->handlers);
> + WARN_ON(!ok);
> + return 0;
> +
> +free_handler:
> + kfree(data->handler);
> +free_reg:
> + iounmap(data->reg);
> +free_data:
> + kfree(data);
> + return out;
> +}
Something warns me on about this function.
> +
> +IRQCHIP_DECLARE(plic0, "riscv,plic0", plic_init);
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
next prev parent reply other threads:[~2017-08-01 13:29 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-01 0:59 RISC-V Linux Port v7 Palmer Dabbelt
2017-08-01 0:59 ` [PATCH v7 01/15] MAINTAINERS: Add RISC-V Palmer Dabbelt
2017-08-01 13:03 ` Andy Shevchenko
2017-08-03 13:07 ` [patches] " Jonathan Neuschäfer
2017-08-01 0:59 ` [PATCH v7 02/15] lib: Add shared copies of some GCC library routines Palmer Dabbelt
2017-08-01 13:06 ` Andy Shevchenko
2017-08-20 19:54 ` Palmer Dabbelt
2017-08-01 0:59 ` [PATCH v7 03/15] clocksource: New RISC-V SBI timer driver Palmer Dabbelt
2017-08-16 15:23 ` Thomas Gleixner
2017-08-01 0:59 ` [PATCH v7 04/15] irqchip: RISC-V Local Interrupt Controller Driver Palmer Dabbelt
2017-08-01 15:35 ` Randy Dunlap
2017-08-16 15:12 ` Thomas Gleixner
2017-08-01 0:59 ` [PATCH v7 05/15] irqchip: New RISC-V PLIC Driver Palmer Dabbelt
2017-08-01 13:29 ` Andy Shevchenko [this message]
2017-08-01 15:20 ` Randy Dunlap
2017-08-03 22:22 ` [patches] " Jonathan Neuschäfer
2017-08-01 1:00 ` [PATCH v7 06/15] tty: New RISC-V SBI console driver Palmer Dabbelt
2017-08-01 13:33 ` Andy Shevchenko
2017-08-01 1:00 ` [PATCH v7 07/15] RISC-V: Init and Halt Code Palmer Dabbelt
2017-08-01 1:00 ` [PATCH v7 08/15] RISC-V: Atomic and Locking Code Palmer Dabbelt
2017-08-01 5:31 ` Boqun Feng
2017-08-01 1:00 ` [PATCH v7 09/15] RISC-V: Generic library routines and assembly Palmer Dabbelt
2017-08-01 1:00 ` [PATCH v7 10/15] RISC-V: ELF and module implementation Palmer Dabbelt
2017-08-01 1:00 ` [PATCH v7 11/15] RISC-V: Task implementation Palmer Dabbelt
2017-08-01 1:00 ` [PATCH v7 12/15] RISC-V: Device, timer, IRQs, and the SBI Palmer Dabbelt
2017-08-01 1:00 ` [PATCH v7 13/15] RISC-V: Paging and MMU Palmer Dabbelt
2017-08-01 1:00 ` [PATCH v7 14/15] RISC-V: User-facing API Palmer Dabbelt
2017-08-01 1:00 ` [PATCH v7 15/15] RISC-V: Build Infastructure Palmer Dabbelt
2017-08-01 15:27 ` Randy Dunlap
2017-08-01 23:03 ` Masahiro Yamada
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=1501594180.29303.327.camel@linux.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=Jason@zx2c4.com \
--cc=airlied@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=albert@sifive.com \
--cc=arnd@arndb.de \
--cc=bart.vanassche@sandisk.com \
--cc=boqun.feng@gmail.com \
--cc=chris@chris-wilson.co.uk \
--cc=daniel.lezcano@linaro.org \
--cc=davem@davemloft.net \
--cc=dledford@redhat.com \
--cc=fweisbec@gmail.com \
--cc=geert@linux-m68k.org \
--cc=gregkh@linuxfoundation.org \
--cc=heiko.carstens@de.ibm.com \
--cc=hverkuil@xs4all.nl \
--cc=jason@lakedaemon.net \
--cc=jiri@mellanox.com \
--cc=jk@ozlabs.org \
--cc=jslaby@suse.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=marc.zyngier@arm.com \
--cc=mcgrof@kernel.org \
--cc=mchehab@kernel.org \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=mmarek@suse.com \
--cc=mpe@ellerman.id.au \
--cc=ncardwell@google.com \
--cc=nicolas.dichtel@6wind.com \
--cc=oleg@redhat.com \
--cc=palmer@dabbelt.com \
--cc=patches@groups.riscv.org \
--cc=paul.gortmaker@windriver.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=rdunlap@infradead.org \
--cc=rmk+kernel@armlinux.org.uk \
--cc=schwidefsky@de.ibm.com \
--cc=sstabellini@kernel.org \
--cc=tglx@linutronix.de \
--cc=vgupta@synopsys.com \
--cc=viro@zeniv.linux.org.uk \
--cc=will.deacon@arm.com \
--cc=yamada.masahiro@socionext.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: 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.