From: Marc Zyngier <marc.zyngier@arm.com>
To: Mason <slash.tmp@free.fr>
Cc: Sebastian Frias <sf84@laposte.net>,
Thomas Gleixner <tglx@linutronix.de>,
LKML <linux-kernel@vger.kernel.org>,
Grygorii Strashko <grygorii.strashko@ti.com>,
Mans Rullgard <mans@mansr.com>
Subject: Re: Using irq-crossbar.c
Date: Sun, 12 Jun 2016 11:00:48 +0100 [thread overview]
Message-ID: <20160612110048.3dd5ea17@arm.com> (raw)
In-Reply-To: <575C304F.2070303@free.fr>
On Sat, 11 Jun 2016 17:37:51 +0200
Mason <slash.tmp@free.fr> wrote:
> On 11/06/2016 11:58, Marc Zyngier wrote:
>
> > Mason wrote:
> >
> >> I think Sebastian is even more baffled by the DT mess
> >> (sorry, intricacies) than I am.
> >
> > This mess is what has saved us from the apocalypse 5 years ago, and
> > describing a complex system is not easy (what a surprise...).
>
> The problem with some Linux APIs is that they're logical and obvious
> to people who've been using them for years. For newcomers, it's not
> always so obvious.
>
> In this specific instance, the problem statement seems rather simple,
> on the surface. An interrupt controller, X=0..127 lines in, Y=0..23
> lines out (connected to GIC interrupt lines 0..23) and "all" we need
> is a way to map Xs to Ys.
>
> As a first order approximation, it's enough to map all Xs to 0.
> And provide a way for the kernel to check the registers containing
> the bit-vectors indicating which interrupt(s) fired.
If that's what your hardware is, then you are taking the wrong
approach. The irq-crossbar driver does not do that at all: it has x
inputs and y outputs, but connects exactly *one input to one output*.
No multiplexing.
And the hierarchical domain infrastructure enforces a similar property:
a Linux interrupt is dealt with at each level of the hierarchy without
multiplexing: the "irq" is the same, while the "hwirq" varies to
reflect the "input pin" for a given interrupt controller.
In your particular case, you have an evolved chained interrupt
controller, and nothing else.
>
> > If you just want to apply recipes without understanding the underlying
> > constraints, you're in for a lot of pain.
>
> For example, the IRQ driver for Tango3/4 calls
>
> irq_find_mapping
> generic_handle_irq
> irq_desc_get_handler_data
> irq_desc_get_chip
> chained_irq_enter/chained_irq_exit
> irq_setup_alt_chip
> irq_get_domain_generic_chip
> irq_domain_add_linear
> irq_alloc_domain_generic_chips
> irq_set_chained_handler
> irq_set_handler_data
>
> Taking irq_find_mapping, I see that there's a short comment in
> kernel/irq/irqdomain.c
>
> /**
> * irq_find_mapping() - Find a linux irq from an hw irq number.
> * @domain: domain owning this hardware interrupt
> * @hwirq: hardware irq number in that domain space
> */
>
> Is this Doxygen format? Is there a make target to generate
> some documentation?
Try "make help".
>
> Other relevant resources, for my own reference:
>
> https://www.kernel.org/doc/Documentation/IRQ-domain.txt
> https://stackoverflow.com/questions/34371352/what-are-linux-irq-domains-why-are-they-needed
> https://community.nxp.com/thread/332183
>
> Are there other important kernel documentation?
>
> >> The base file he was referring to is:
> >>
> >> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/tango4-common.dtsi
> >
> > I know which file that is, it is mentioned in the diff. I was merely
> > trying to point out the glaring mistakes that could be enough for a
> > interrupt controller hierarchy to be completely non-functional:
>
> Only the name of the file was provided, not the path. I was not aware
> that you already knew where to find it. I made no claim whatsoever on
> the implementation. In fact, I agree with everything Lennart wrote.
>
> > - Your crossbar doesn't have a #interrupt-cells property. How do you
> > expect the interrupt specifiers to be interpreted?
>
> Why do "fundamental" DT properties start with hash?
Because # is a shorthand for "number of".
>
> > - You've changed the default interrupt controller to be your crossbar.
> > Which means that all the sub-nodes are inheriting it. Have you
> > checked that this was valid for all of these nodes?
>
> I'm not sure I follow. All platform interrupts flow into the platform
> controller. Maybe other platforms have more complex setups, with
> several cascaded controllers?
Most embedded platforms do.
M.
--
Jazz is not dead. It just smells funny.
next prev parent reply other threads:[~2016-06-12 10:00 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-10 15:37 Using irq-crossbar.c Sebastian Frias
2016-06-10 16:05 ` Marc Zyngier
2016-06-10 19:36 ` Mason
2016-06-11 9:58 ` Marc Zyngier
2016-06-11 15:37 ` Mason
2016-06-12 10:00 ` Marc Zyngier [this message]
2016-06-12 13:50 ` Mason
2016-06-13 7:58 ` Marc Zyngier
2016-06-13 14:04 ` Lennart Sorensen
2016-06-13 14:57 ` Sebastian Frias
2016-06-13 15:42 ` Lennart Sorensen
2016-06-13 15:49 ` Mason
2016-06-13 15:57 ` Marc Zyngier
2016-06-13 17:55 ` Lennart Sorensen
2016-06-13 15:15 ` Sebastian Frias
2016-06-13 16:26 ` Marc Zyngier
2016-06-13 15:46 ` Sebastian Frias
2016-06-13 16:24 ` Marc Zyngier
2016-06-14 16:37 ` Sebastian Frias
2016-06-14 16:39 ` Sebastian Frias
2016-06-16 12:39 ` Sebastian Frias
2016-06-21 10:18 ` Marc Zyngier
2016-06-21 11:03 ` Sebastian Frias
2016-06-21 12:41 ` Marc Zyngier
2016-06-21 15:29 ` Sebastian Frias
2016-06-13 17:59 ` Lennart Sorensen
2016-06-10 16:06 ` Lennart Sorensen
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=20160612110048.3dd5ea17@arm.com \
--to=marc.zyngier@arm.com \
--cc=grygorii.strashko@ti.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mans@mansr.com \
--cc=sf84@laposte.net \
--cc=slash.tmp@free.fr \
--cc=tglx@linutronix.de \
/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.