From: slash.tmp@free.fr (Mason)
To: linux-arm-kernel@lists.infradead.org
Subject: IRQ setup on multicore systems (routing, balancing, etc)
Date: Thu, 06 Aug 2015 18:14:46 +0200 [thread overview]
Message-ID: <55C387F6.8090708@free.fr> (raw)
In-Reply-To: <20150806152654.GF7557@n2100.arm.linux.org.uk>
On 06/08/2015 17:26, Russell King - ARM Linux wrote:
> On Thu, Aug 06, 2015 at 05:17:06PM +0200, Mason wrote:
>> On 04/08/2015 15:41, Mason wrote:
>>
>>> I have a few very naive questions about [snip]
>>
>> [META]
>>
>> Are there perhaps more suitable mailing lists than this one
>> for such beginner questions?
>
> I thought your message yesterday indicated you'd found the answer.
I have so many questions, I could write a (very boring) book.
> You don't setup any kind of routing between CPU cores and devices.
> At boot, initially CPU 0 will "own" all interrupts.
OK.
It doesn't help that the port I'm working on doesn't follow
"established guidelines". In this case, interrupt routing is
hard-coded in the platform code:
static inline void tangox_enable(struct irq_data *data)
{
int bit = data->irq - IRQ_CONTROLLER_IRQ_BASE;
#ifdef ENABLE_INTERRUPT_ON_CPU1
if(route_interrupt_to_cpu1(bit))
tangox_fiq_enable(bit);
else
#endif
tangox_irq_enable(bit);
}
(tangox_enable is called in the .irq_startup struct irq_chip callback.)
Throw weird naming in the mix (I thought FIQ was reserved for
the secure world, and my Linux runs in non-secure) and my
confusion level is up to 11.
> You then run a (fixed) version of irqbalanced (preferably the older
> version which is not so x86-centric, eg, 0.56) which then distributes
> the interrupts between the cores according to what the interrupt is
> used for and the load it is imposing on the system.
OK. Thanks for pointing that out.
Unfortunately, I guess I should have asked the more fundamental
questions first. Balancing IRQs only makes sense once IRQs are
working.
I don't understand how to convert my board file mess into the
equivalent device tree, and the platform IRQ code is ugly.
I still haven't found a good reference explaining "DT for dummies".
I don't know how the GIC and platform INTC interact.
I tried randomly copy/pasting DT snippets, but unsurprisingly,
nothing has worked so far.
(I use Mans Rullgard's port as a reference as much as I can.)
https://github.com/mansr/linux-tangox
/dts-v1/;
/ {
compatible = "sigma,tango4-soc";
#address-cells = <1>;
#size-cells = <1>;
gic: interrupt-controller at 20001000 {
compatible = "arm,cortex-a9-gic";
interrupt-controller;
#interrupt-cells = <3>;
reg = <0x20001000 0x1000>,
<0x20000100 0x0100>;
};
soc {
compatible = "simple-bus";
interrupt-parent = <&irqintc>;
#address-cells = <1>;
#size-cells = <1>;
ranges;
uart0: serial at 10700 {
compatible = "ns16550a";
reg = <0x10700 0x100>;
clock-frequency = <7372800>;
reg-shift = <2>;
no-loopback-test;
};
eth0: emac at 26000 {
compatible = "sigma,smp8640-emac";
reg = <0x26000 0x800>;
interrupts = <38>;
clocks = <396000000>;
};
};
cpublock: cpublock {
compatible = "simple-bus";
reg = <0x60000 0x10000>;
ranges = <0x0 0x60000 0x10000>;
interrupt-parent = <&irqintc>;
#address-cells = <1>;
#size-cells = <1>;
intc: intc at e000 {
compatible = "sigma,smp8640-intc";
reg = <0xe000 0x1000>;
ranges = <0x0 0xe000 0x1000>;
interrupt-parent = <&gic>;
interrupt-controller;
#address-cells = <1>;
#size-cells = <1>;
irqintc: irq at 000 {
reg = <0x000 0x100>;
#interrupt-cells = <2>;
interrupts = <2>;
label = "IRQ";
};
fiqintc: fiq at 100 {
reg = <0x100 0x100>;
#interrupt-cells = <2>;
interrupts = <3>;
label = "FIQ";
};
iiqintc: iiq at 300 {
reg = <0x300 0x100>;
#interrupt-cells = <2>;
interrupts = <4>;
label = "IIQ";
};
};
};
};
Bleh! I need a break. Be back in a few weeks.
Regards.
next prev parent reply other threads:[~2015-08-06 16:14 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-04 13:41 IRQ setup on multicore systems (routing, balancing, etc) Mason
2015-08-05 8:40 ` Mason
2015-08-06 15:17 ` Mason
2015-08-06 15:26 ` Russell King - ARM Linux
2015-08-06 16:14 ` Mason [this message]
2015-08-06 20:38 ` Russell King - ARM Linux
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=55C387F6.8090708@free.fr \
--to=slash.tmp@free.fr \
--cc=linux-arm-kernel@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).