linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Routable IRQs
@ 2015-12-29 20:11 Felipe Balbi
  2015-12-30 18:17 ` Thomas Gleixner
  0 siblings, 1 reply; 5+ messages in thread
From: Felipe Balbi @ 2015-12-29 20:11 UTC (permalink / raw)
  To: Thomas Gleixner, Jason Cooper
  Cc: linux-kernel, linux-omap, Suman Anna, Roger Quadros

[-- Attachment #1: Type: text/plain, Size: 3041 bytes --]


Hi Thomas & Jason,

I'm dealing with an interesting situation which I'm wondering if Linux
already support for.

Basically, in some TI SoCs we have what's referred to as Programmable
Real-Time Unit SubSystem (PRUSS). That's essentially a really simple,
low latency, single cycle architecture which is pretty darn good for bit
banging peripherals (ETH, SPI, I2C, UART, etc). It's very predicatable
because every instruction takes 5ns and interrupts don't cause
exceptions, they just get registered.

Anyway, the interesting part is that PRUSS has 64 events (on current
incarnations at least) and PRUSS has 10 physical IRQ lines to the ARM
land. Each of these 64 events can be routed to any of these 10 IRQ
lines. This might not be very useful on UP (AM335x & AM437x) other than
the fact that soft-IP drivers running on Linux would need to guarantee
they are the ones who should handle the IRQ. However, on SMP (AM57xx) we
could have real tangible benefits by means of IRQ affinity, etc.

So, the question is, what is there in IRQ subsystem today for routable
IRQ support ?

If a Diagram helps here's a simple one. Note that I'm not showing
details on the PRUSS side, but that side can also map events pretty much
any way it wants.

 .--------------------.             .--------------------.
 |      HOST CPU      |             |       PRUSS        |
 |--------------------|             |--------------------|
 |                    |             |                    |
 |               irq0 |<-.----------|evt0                |
 |                    |  |          |                    |
 |               irq1 |  |  .-------|evt1                |
 |                    |  |  |       |                    |
 |               irq2 |  '----------|evt2                |
 |                    |     |       |                    |
 |               irq3 |     |       |                    |
 |                    |     |       |                    |
 |               irq4 |     |       | .                  |
 |                    |     |       |                    |
 |               irq5 |     |       | .                  |
 |                    |     |       |                    |
 |               irq6 |     |       | .                  |
 |                    |     |       |                    |
 |               irq7 |<----'       |                    |
 |                    |             |                    |
 |               irq8 |             |                    |
 |                    |             |                    |
 |               irq9 |<------------|evtN                |
 '--------------------'             '--------------------'

Given this setup, what I want to do, is let soft-IP drivers running on
linux rely on standard *request_*irq() calls and DTS descrition. But I'm
still considering how/if we should describe the routing itself or just
go round-robin (i.o.w. irq0 -> evt0, irq1 -> evt1, ..., irq9 -> evt9,
irq0 -> evt10, ...).

Thoughts ?

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 818 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-12-30 20:10 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-29 20:11 Routable IRQs Felipe Balbi
2015-12-30 18:17 ` Thomas Gleixner
2015-12-30 18:41   ` Felipe Balbi
2015-12-30 19:49     ` Thomas Gleixner
2015-12-30 20:10       ` Felipe Balbi

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).