<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/arch/arc/kernel/intc-arcv2.c, branch linux-4.17.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.17.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.17.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2017-08-28T23:11:15Z</updated>
<entry>
<title>ARCv2: SMP: Mask only private-per-core IRQ lines on boot at core intc</title>
<updated>2017-08-28T23:11:15Z</updated>
<author>
<name>Alexey Brodkin</name>
</author>
<published>2017-08-28T22:03:58Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=e8206d2baa41a4c7cf4590929f8819f8309b564d'/>
<id>urn:sha1:e8206d2baa41a4c7cf4590929f8819f8309b564d</id>
<content type='text'>
Recent commit a8ec3ee861b6 "arc: Mask individual IRQ lines during core
INTC init" breaks interrupt handling on ARCv2 SMP systems.

That commit masked all interrupts at onset, as some controllers on some
boards (customer as well as internal), would assert interrutps early
before any handlers were installed.  For SMP systems, the masking was
done at each cpu's core-intc.  Later, when the IRQ was actually
requested, it was unmasked, but only on the requesting cpu.

For "common" interrupts, which were wired up from the 2nd level IDU
intc, this was as issue as they needed to be enabled on ALL the cpus
(given that IDU IRQs are by default served Round Robin across cpus)

So fix that by NOT masking "common" interrupts at core-intc, but instead
at the 2nd level IDU intc (latter already being done in idu_of_init())

Fixes: a8ec3ee861b6 ("arc: Mask individual IRQ lines during core INTC init")
Signed-off-by: Alexey Brodkin &lt;abrodkin@synopsys.com&gt;
[vgupta: reworked changelog, removed the extraneous idu_irq_mask_raw()]
Signed-off-by: Vineet Gupta &lt;vgupta@synopsys.com&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>arc: Mask individual IRQ lines during core INTC init</title>
<updated>2017-08-11T01:08:31Z</updated>
<author>
<name>Alexey Brodkin</name>
</author>
<published>2017-08-10T15:07:36Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a8ec3ee861b6e4e6b82a98777c65510ae63766c1'/>
<id>urn:sha1:a8ec3ee861b6e4e6b82a98777c65510ae63766c1</id>
<content type='text'>
ARC cores on reset have all interrupt lines of built-in INTC enabled.
Which means once we globally enable interrupts (very early on boot)
faulty hardware blocks may trigger an interrupt that Linux kernel
cannot handle yet as corresponding handler is not yet installed.

In that case system falls in "interrupt storm" and basically never
does anything useful except entering and exiting generic IRQ handling
code.

One real example of that kind of problematic hardware is DW GMAC which
also has interrupts enabled on reset and if Ethernet PHY informs GMAC
about link state, GMAC immediately reports that upstream to ARC core
and here we are.

Now with that change we mask all individual IRQ lines making entire
system more fool-proof.

[This patch was motivated by Adaptrum platform support]

Signed-off-by: Alexey Brodkin &lt;abrodkin@synopsys.com&gt;
Cc: Eugeniy Paltsev &lt;paltsev@synopsys.com&gt;
Tested-by: Alexandru Gagniuc &lt;alex.g@adaptrum.com&gt;
Signed-off-by: Vineet Gupta &lt;vgupta@synopsys.com&gt;
</content>
</entry>
<entry>
<title>ARCv2: intc: Set default priority for all core interrupts</title>
<updated>2017-02-06T17:37:57Z</updated>
<author>
<name>Yuriy Kolerov</name>
</author>
<published>2017-01-31T11:45:24Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=be568e78dbb35383fdfd0563fd0cfbbff1bc42d0'/>
<id>urn:sha1:be568e78dbb35383fdfd0563fd0cfbbff1bc42d0</id>
<content type='text'>
After reset all interrupts in the core interrupt controller has
the highest priority P0. If the platform supports Fast IRQs and
has more than 1 banks of registers then CPU automatically switch
banks of registers when P0 interrupt comes.

The problem is that the kernel expects that by default switching
of banks is not used by all interrupts. It is necessary to set a
default nonzero priority for all available interrupts to avoid
undefined behaviour.

Signed-off-by: Yuriy Kolerov &lt;yuriy.kolerov@synopsys.com&gt;
Signed-off-by: Vineet Gupta &lt;vgupta@synopsys.com&gt;
</content>
</entry>
<entry>
<title>ARCv2: intc: Use runtime value of irq count for setting up intc</title>
<updated>2017-02-06T17:37:57Z</updated>
<author>
<name>Vineet Gupta</name>
</author>
<published>2017-02-01T17:44:33Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=179cf194e6d153fb6daeca811253502d5c84e4c8'/>
<id>urn:sha1:179cf194e6d153fb6daeca811253502d5c84e4c8</id>
<content type='text'>
Signed-off-by: Vineet Gupta &lt;vgupta@synopsys.com&gt;
</content>
</entry>
<entry>
<title>ARC: [intc-*]: confine NR_CPU_IRQS to intc code</title>
<updated>2017-02-06T17:37:57Z</updated>
<author>
<name>Vineet Gupta</name>
</author>
<published>2017-02-01T18:14:11Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=fe7b10994618c846481fbcf9212d296df47bc1dc'/>
<id>urn:sha1:fe7b10994618c846481fbcf9212d296df47bc1dc</id>
<content type='text'>
And even this willl change in subsequent patches where we resort to
using run time info instead...

Signed-off-by: Vineet Gupta &lt;vgupta@synopsys.com&gt;
</content>
</entry>
<entry>
<title>ARCv2: intc: Use ARC_REG_STATUS32 for addressing STATUS32 reg</title>
<updated>2017-02-06T17:37:57Z</updated>
<author>
<name>Yuriy Kolerov</name>
</author>
<published>2017-01-31T11:45:21Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=e98a7bf0b094dea1ceed3a4d52584dcd59af0980'/>
<id>urn:sha1:e98a7bf0b094dea1ceed3a4d52584dcd59af0980</id>
<content type='text'>
It is better to use it instead of magic numbers.

Signed-off-by: Yuriy Kolerov &lt;yuriy.kolerov@synopsys.com&gt;
Signed-off-by: Vineet Gupta &lt;vgupta@synopsys.com&gt;
</content>
</entry>
<entry>
<title>ARC: IRQ: Use hwirq instead of virq in mask/unmask</title>
<updated>2017-01-05T01:12:10Z</updated>
<author>
<name>Yuriy Kolerov</name>
</author>
<published>2016-12-28T08:46:24Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2163266c2704aa44211b6b61924a0fa570fe0d4b'/>
<id>urn:sha1:2163266c2704aa44211b6b61924a0fa570fe0d4b</id>
<content type='text'>
It is necessary to use hwirq instead of virq when you communicate
with an interrupt controller since there is no guaranty that virq
numbers match hwirq numbers.

Signed-off-by: Yuriy Kolerov &lt;yuriy.kolerov@synopsys.com&gt;
Signed-off-by: Vineet Gupta &lt;vgupta@synopsys.com&gt;
</content>
</entry>
<entry>
<title>ARCv2: intc: default all interrupts to priority 1</title>
<updated>2016-12-14T17:23:46Z</updated>
<author>
<name>Vineet Gupta</name>
</author>
<published>2016-09-30T23:13:28Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=107177b14d8179f864315fc4daed9da777ed30c2'/>
<id>urn:sha1:107177b14d8179f864315fc4daed9da777ed30c2</id>
<content type='text'>
ARC HS Cores support configurable multiple interrupt priorities of upto
16 levels. In commit dec2b2849cfcc ("ARCv2: intc: Allow interruption by
lowest priority interrupt") we switched to 15 which seems a bit
excessive given that there would be rare hardware implementing so many
preemption levels AND running Linux. It would seem that 2 levels will be
more common so switch to 1 as the default priority level. This will be
the "lower" priority level saving 0 for implementing NMI style support.

This scheme also works in systems with more than 2 prioity levels as
well.

Signed-off-by: Vineet Gupta &lt;vgupta@synopsys.com&gt;
</content>
</entry>
<entry>
<title>ARCv2: intc: Use kflag if STATUS32.IE must be reset</title>
<updated>2016-09-30T21:48:24Z</updated>
<author>
<name>Yuriy Kolerov</name>
</author>
<published>2016-09-12T15:55:03Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bc0c7ece6191d89f435e4e4016f74167430c6c21'/>
<id>urn:sha1:bc0c7ece6191d89f435e4e4016f74167430c6c21</id>
<content type='text'>
In the end of "arc_init_IRQ" STATUS32.IE flag is going to be affected by
"flag" instruction but "flag" never touches IE flag on ARCv2. So "kflag"
instruction must be used instead of "flag".

Signed-off-by: Yuriy Kolerov &lt;yuriy.kolerov@synopsys.com&gt;
Cc: stable@vger.kernel.org #4.2+
Signed-off-by: Vineet Gupta &lt;vgupta@synopsys.com&gt;
</content>
</entry>
<entry>
<title>ARC: [intc-*] switch to linear domain</title>
<updated>2016-05-09T04:02:30Z</updated>
<author>
<name>Vineet Gupta</name>
</author>
<published>2016-01-28T04:10:10Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d21beffb0b9181c8823f71a5a7fabce6a0d4cf29'/>
<id>urn:sha1:d21beffb0b9181c8823f71a5a7fabce6a0d4cf29</id>
<content type='text'>
Now that we have Timers probed from DT, don't need legacy domain

This however requires mapping to be called explicitly for the IRQ which
still can't (and probably never) be probed from DT such as IPI and
SOFTIRQ

Acked-by: Marc Zyngier &lt;marc.zyngier@arm.com&gt;
Signed-off-by: Vineet Gupta &lt;vgupta@synopsys.com&gt;
</content>
</entry>
</feed>
