Thread (44 messages) 44 messages, 6 authors, 2007-02-28

Re: [PATCH] powerpc: document new interrupt-array property

From: David Gibson <hidden>
Date: 2007-02-23 00:33:17

On Fri, Feb 23, 2007 at 01:07:25AM +0100, Segher Boessenkool wrote:
quoted
quoted
Option #3 -- define new, logical interrupt nexus to do
the mapping.
quoted
There's no point to option 3 as given.  If we're going to use an
interrupt nexus, and rely on the fact that the physical versus
interrupt tree addressing mismatch doesn't matter in this case, then
we might as well put the interrupt nexus into the node itself,
i.e. option 1.
That can give problems if there are interrupts in one
of the descendants of the node.  It's also just nasty,
don't you agree?
Well, if the node has descendents then it's going to need something
more complex in the interrupt-map to handle them, certainly.  But
then, if it has (interrupt) children they'll need to be handled
properly by the nexus in any case.
quoted
The only point to 3 would be if we make the MAL a
child of its interrupt nexus, thereby ensuring that the address forms
match.
No, you cannot do that.  There is no extra device
there in reality so it shouldn't be in the device tree
either.  Also, it just doesn't work.
Exactly, there's no extra device in reality.  So I don't see that it's
any more bogus to put the fake device as the MAL's parent than as the
MAL's child or sibling or anywhere else in the tree.

To represent this without either the nexus-in-node or an extra bogus
node, we need something like interrupt-array.  Which is why I like the
idea.
quoted
Something like:

malint-nexus {
	#interrupt-cells = <1>;
	ranges;
	interrupt-map = <0 0 0 &UIC0 a 4
		.... >;
	interrupt-map-mask = <ffffffff 0 0>;
If you have a "ranges" property you need a
"#address-cells" and a "#size-cells" property
too -- it just doesn't make any sense otherwise.
Oh, yes, my mistake.  #a and #s would need to be identical to the
parent of malint-nexus.
You don't want this nexus node to be anywhere inside
the "normal" device tree -- it doesn't sit there in
hardware, it shouldn't sit there in the device tree,
that will only cause problems.
So why did you suggest its existance in the first place?
quoted
Note the empty ranges property (passthrough).
There is nothing to pass anything through though,
this node shouldn't be here.
If it shouldn't be here, it shouldn't be anywhere else either.
quoted
That's kind of
irrelevant here, since MAL is DCR controlled,
Yeah, so MAL should have the DCR reg in its "reg"
property.  It needs *something* there -- what if
you had two MALs?
No, because that would potentially collide with "reg" properties in
its siblings which have MMIO addresses on the parent bus.
quoted
but would matter if we
had a similar situation with a device that had MMIO registers (and
therefore a "reg" property).
Sorry, I'm going to shout: "reg" HAS NOTHING TO DO
WITH MMIO.
Not in general, no, but here specifically it does.  "reg" has to match
the address type of the parent bus, in this case that's MMIO.  But the
MAL *is* on the PLB (it's a PLB master, in fact), but it has no
address on the PLB.
quoted
For MAL, since it has no "reg", we set
the interrupt-map-mask to ignore the unit address.
So you're saying your "#address-cells" is not 0, but
you have no "reg" property?  Congratulations, you
built yourself a wildcard package.
How else would you represent a device which exists on the bus, but
which has no address on the bus?

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help