A usefdt boot-mode problem: openfirmware->fdt translation use vs. some existing powerpc64 or powerpc FreeBSD code, interrupt-parent examples shown

Mark Millard marklmi at yahoo.com
Sun Apr 14 02:44:07 UTC 2019


I'm going to use interrupt-parent as an example of the type of issue.

In the below ofwdump -ap diff extractions:

- is from without usefdt mode
+ is from with usefdt mode

-      Node 0xff963f60: interrupt-controller
+      Node 0x2767c: interrupt-controller
+        phandle:
+          ff 96 3f 60 

Note that the Node id changes but a phandle is added hiolding the
Node id that openfirmware originally had.

Picking an example where interrupt-parent is in use:


-        Node 0xff964428: extint-gpio1
+        Node 0x27800: extint-gpio1
+          phandle:
+            ff 96 44 28 
. . .
           interrupt-parent:
             ff 96 3f 60 
. . .

(openfirmware and fdt are no different for the value
contained in the interrupt-parent property: it is the
openfirmware node id, not the FDT one.)

So, for fdt use, comparison to the phandle property value is
is how to find/match this interrupt-controller via a
interrupt-parent. Direct use of 0xff963f60 as a node id
is inappropriate for usefdt mode.

The above is very general and I did not try to match the
specific nodes to ones the code below would be using, beyond
initially sticking to interrupt-parent types of references.

I find there is example code around that makes no prevision
for finding the interrupt-parent via a phandle comparison.

An example is in unin_chip_add_intr :

        if (OF_getprop(devnode, "interrupt-parent", &iparent, sizeof(iparent))
            <= 0)
                panic("Interrupt but no interrupt parent!\n");

        if (OF_searchprop(iparent, "#interrupt-cells", &icells, sizeof(icells))
            <= 0)
                icells = 1;

For usefdt mode iparent's value is an openfirmware node id, not a fdt one.
It is the phandle property value that would match.

Another is in unin_chip_attach:

                        if (OF_getprop(child, "interrupt-parent", &iparent,
                                       sizeof(iparent)) <= 0) {
. . .
                        }
                        /* Add an interrupt number 0 to the parent. */
                        irq = MAP_IRQ(iparent, 0);

(It appears MAP_IRQ uses powerpc_get_irq and I do not see a stage
that can involve the phandle property for matching.)

Another may be macgpio_attach:

                        OF_searchencprop(child, "interrupt-parent", &iparent,
                            sizeof(iparent));
                        resource_list_add(&dinfo->mdi_resources, SYS_RES_IRQ,
                            0, MAP_IRQ(iparent, irq[0]),
                            MAP_IRQ(iparent, irq[0]), 1);

Other's besides interrupt-parent . . .

There are some gpio-parent properties but I did not find code using
them. (I may have just missed such.) I quit looking for code use
but did find more types of references in the fdt itself . . .

l2-cache in, say, a PowerPC,G4 for usefdt mode is another type of
example.

platform-enableclock and platform-disableclock seem to be be
examples (references back to uni-n in what I looked at, but
having the openfirmwire node id, not the fdt one).

I may not have found all the example types of "needs phandle property
value comparisons instead of direct node id use for usefdt mode".

This is all from a 2-socket/1-core-each G4 PowerMac3,6 example.

[Even any G5 example would be via 32-bit pweorpc FreeBSD. This is
because (for a long time now) use of ofwdump -ap crashes powerpc64
PowerMac's. But I've not gone through a G5 example (yet?).]

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)



More information about the freebsd-ppc mailing list