On 24/11/2016 14:23, Pantelis Antoniou wrote: > Hi Phil, >> I would have thought that all DTBs already contain enough dependency >> information in the form of the phandles themselves. One of the first >> things the kernel does is to unflatten the DTB, and that is the obvious >> point to resolve the phandles and generate the necessary dependencies. >> Can you explain how both __fixups__ and __local_fixups__ aid this >> process? Ideally they wouldn't duplicate any information already in the >> tree, since then you have to cope with the possibility of malformed DTBs >> where the two don't actually match. > No, the DTBs by themselves do not contain enough information to build the > probe dependency graph, because phandles are simply converted to 32 bit > cell values on compile. > > For instance take a case of one node using the other: > > foo_label: foo { }; > bar { use = <&foo_label>; }; > > A standard compile would generate a bar node as bar { use = <1>; }; > > While using the -@ switch you’d get a local ref that says that there is > a phandle cell value at offset 0 of bar/use property. Looking up the > phandle value you can see that this property references the foo node. > > So when building the probe order graph the foo node should be probed > before bar. Yes, you are quite right. During compilation the phandleness of a phandle reference gets lost - it's just an integer. All you really need is one bit per word, and you could dream up clever coding schemes for that sparse map, but extra information is needed. I still think that __fixups__ is unnecessary for base DTBs, but since it will be empty anyway it just looks a bit awkward rather than taking up much space. Seemingly random load order of device nodes has been a cause of confusion and annoyance, so I'm happy that there is a plan to eliminate them. If the DTBs have to grow to make that possible then so be it. Phil -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html