Thread (1 message) 1 message, 1 author, 2013-06-28

[PATCH 7/9] documentation: iommu: add description of ARM System MMU binding

From: Stuart Yoder <hidden>
Date: 2013-06-28 16:03:57
Also in: linux-devicetree, linux-iommu

On Fri, Jun 28, 2013 at 4:06 AM, Will Deacon [off-list ref] wrote:
On Thu, Jun 27, 2013 at 07:22:30PM +0100, Stuart Yoder wrote:
quoted
On Wed, Jun 26, 2013 at 12:42 PM, Will Deacon [off-list ref] wrote:
quoted
On Wed, Jun 26, 2013 at 05:19:48PM +0100, Stuart Yoder wrote:
quoted
On Wed, Jun 26, 2013 at 8:39 AM, Will Deacon [off-list ref] wrote:
quoted
I'd suggest looking at the driver I posted to get a gist of how the parsing
code works, but suffice to say that we describe both the number of
interrupts and the actual interrupt numbers here.
I understand that the number of interrupts and actual interrupt numbers
are described here, but was referring to the _meaning_ of the interrupt
numbers.   A binding for a device with 2 interrupts, a TX and RX would
normally identify which interrupt specifier is for TX and which is for RX.

Based on your code, the 2 global interrupts seem to be the secure
and non-secure fault interrupts...which your driver does not differentiate.
However, the device tree is describing hardware and  you can't assume
that all drivers don't care which is which.
Currently, the driver only works when Linux is running as non-secure, which is
becoming more and more common since it is required to be able to make use of
hyp mode.

There are actually two global interrupts for SMMUv1 and SMMUv2, which
correspond to configuration faults and `other' global faults.
So, why don't we define which interrupt is which in this binding?
...e.g. "The first
interrupt specifier is for the configuration access fault interrupt, the second
interrupt specifier is for other global faults."
Well, first of all, they're both global interrupts and the handler will have
to go and access exactly the same registers to deal with the fault, so you
don't really gain anything.
It should be up to the OS to handle 2 interrupts the same, not
something
However, the main reason is that you need to be able to handle:

  (1) Only one of the interrupts is routed to the interrupt controller
  (2) The interrupts are ORd into a single line
That's a particular SoC implementation, no?  It shouldn't
dictate the SMMU binding.

If they are ORed then the interrupt controller can't distinguish them
and both interrupt specifiers should have the _same_ interrupt number:

+                #global-interrupts = <2>;
+                interrupts = <0 32 4>,
+                             <0 32 4>,

(...or perhaps only define 1 global interrupt-- interrupt 32)

If an implementation chose to not OR them, then they will
have different interrupt numbers and need to be distinguished:

+                #global-interrupts = <2>;
+                interrupts = <0 32 4>,
+                             <0 33 4>,

...and in that case the binding needs to differentiate which
is which.

Stuart
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help