Re: [PATCH v2 1/2] overlays: auto allocate phandles for nodes in base fdt

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



On Thu, Jan 4, 2018 at 9:14 PM, Frank Rowand <frowand.list@xxxxxxxxx> wrote:
> On 01/04/18 18:39, Kyle Evans wrote:
>> On Thu, Jan 4, 2018 at 7:55 PM, Frank Rowand <frowand.list@xxxxxxxxx> wrote:
>>> On 01/04/18 13:47, Kyle Evans wrote:
>>>> On Thu, Jan 4, 2018 at 3:34 PM, Kyle Evans <kevans@xxxxxxxxxxx> wrote:
>>>>> On Thu, Jan 4, 2018 at 2:41 PM, Kyle Evans <kevans@xxxxxxxxxxx> wrote:
>>>>>> On Thu, Jan 4, 2018 at 2:33 PM, Frank Rowand <frowand.list@xxxxxxxxx> wrote:
>>>>>>> [... snip ...]
>>>>>>>
>>>>>>> Does this remove the need for the proposed patch, or am I still
>>>>>>> missing something?
>>>>>>
>>>>>> ... nope. Apparently I never tested this with this particular dtc(1)
>>>>>> and instead just assumed it did the same as ours- allocate phandle
>>>>>> sparsely, even with -@. That certainly removes the need for this
>>>>>> patch, and I'm somewhat upset that I hadn't previously considered
>>>>>> this.
>>>>>>
>>>>>> @David, Jon: Please disregard all of the patches along these lines...
>>>>>> I'll fix this in our dtc, where it should be fixed.
>>>>>>
>>>>>> Thanks, Frank!
>>>>>
>>>>> Actually, I'm kind of torn on whether this is useful or not. With
>>>>> being able to have EFI-provided FDT, it's hard to guarantee whether
>>>>> the FDT we're provided has been compiled with GPL dtc(1) and -@. The
>>>>> above solves this problem for most of my personal use-cases , though,
>>>>> since I can guarantee that our FDT and U-Boot provided FDT is compiled
>>>>> properly.
>>>>
>>>> Apologies for the triple post; I realized that this argument is
>>>> inherently wrong, since we can't reference the node if there's no
>>>> symbol anyways.
>>>>
>>>> The only way this might still be a good idea is to support more
>>>> minimal cases where an implementation might prefer to not create a
>>>> phandle for nodes that haven't been referenced.
>>>>
>>>> In our case, we have a function [1] that walks the tree and generates
>>>> metadata on nodes that have phandles, under the assumption that these
>>>> have been referenced somewhere and provides a way to more quickly
>>>> reference these specifically through a separate linked link.
>>>> Allocating phandles for everything as GPL dtc does adds quite a bit
>>>> more overhead to this.
>>>>
>>>> [1] http://src.illumos.org/source/xref/freebsd-head/sys/dev/ofw/openfirm.c#119
>>>
>>> The "-@" option does not add a phandle to _every_ node, just to nodes
>>> that have a label:
>>>
>>
>> In practice, this is still a not necessarily close superset of those
>> that are actually going to actually get referenced in a given .dts. I
>> note that a number of nodes will still get labelled that are unlikely
>> to be referenced for any number of reasons.
>>
>> For instance, as an example [1][2][3] of one of the boards I'm working
>> on currently, all of the ehci/ohci/mmc nodes, some set of the pio
>> nodes... almost every single node has a label, and most of them don't
>> need a phandle based on what is currently referenced and actually
>> used. I note that 27 of these nodes seem to be referenced, out of 39
>> nodes with labels (numbers are approximate), leaving ~30% (12) of
>> labelled nodes unreferenced.
>>
>> For a slightly larger example, [4][5][6][7]; 74 referenced nodes out
>> of 113 labelled nodes, leaving ~35% (39) of labelled nodes
>> unreferenced.
>>
>> This is only bothersome because it starts adding up as these things
>> get bigger, and I don't think it really needs to. The alternative to
>> keep phandles down to the minimum set required doesn't add much in
>> maintenance cost or overhead from the overlay application side;
>> especially for blobs generated by this dtc(1) that make the active
>> decision to allocate liberally rather than conservatively.
>
> This concept relies on a hand coded __symbols__ node instead of
> having dtc generate it.  This makes the overlay devicetree source
> more fragile.  The example dts file in patch 2/2 is fairly safe,
> but it is legal syntax to specify:
>
>   test = "/test-node";
>
> instead of:
>
>   test = &test;
>
> And the fragile syntax is exactly what results from a decompiled
> overlay dtb.

I think I might be misunderstanding something here- our dtc (BSDL
dtc), with -@, still writes a full /__symbols__ node of all labeled
nodes, given that this is what -@ is expected to do. The difference is
that our dtc allocates phandles conservatively because they're a
concept for cross-referencing nodes. Conceptually, it doesn't seem
like either way is more or less wrong than the other.

> On another note, in the case of Linux, I have to consider applying
> overlays to a live devicetree, as well as possibly the case of
> applying overlays to a flattened device tree.  I do not expect
> that we will add the dynamic creation of missing phandles when
> applying an overlay to a live devicetree.  This would result in
> an overlay that can be applied to a flattened device tree, but
> will fail to apply to a Linux live devicetree.  BSD and Linux
> do not have to be fully compatible, but in my opinion, the more
> compatible the better.

I'm probably being dense here, so please excuse me, but I don't see
this as necessarily a problem- likely because I have no familiarity of
how Linux works with overlays or FDT bits in general. My stupid
question of the hour: Linux actually supports applying overlays to
live devicetree?

Our overlay support effectively ends at the bootloader. We load fdt
blob from the filesystem or pull it into bootloader memory from
EFI/U-Boot, apply any overlays, then pass it into the kernel. After
that, it's effectively immutable (IIRC; ian@ will have to clarify if
I'm wrong) and we don't support reloading FDT on a live system.
--
To unsubscribe from this list: send the line "unsubscribe devicetree-compiler" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Device Tree]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux