On Fri Aug 21, 2026 at 11:44 PM IST, Quentin Schulz wrote:
>
>
> On 8/10/26 2:06 PM, Anshul Dalal wrote:
>> On Wed Jul 29, 2026 at 4:12 PM IST, Quentin Schulz wrote:
>>> Hi Anshul,
>>>
>>> On 7/29/26 12:24 PM, Anshul Dalal wrote:
>>>> The phandles used inside a template are not copied to the node inserting
>>>> the template, leading to a missing phandle error.
>>>>
>>>> The following example can be used to reproduce the issue:
>>>>
>>>> &binman {
>>>>     some_template: template-0 {
>>>>       ti-secure-rom {
>>>>         content = <&some_data>;
>>>>         keyfile = "some_key";
>>>>       };
>>>>       some_data: blob-ext {
>>>>         optional;
>>>>       };
>>>>     };
>>>>     output-bin {
>>>>       insert-template = <&some_template>;
>>>>     };
>>>> };
>>>>
>>>
>>> What happens if you insert the template *twice*.
>>>
>>> e.g. have:
>>>
>>>    &binman {
>>>       some_template: template-0 {
>>>         ti-secure-rom {
>>>           content = <&some_data>;
>>>           keyfile = "some_key";
>>>         };
>>>         some_data: blob-ext {
>>>           optional;
>>>         };
>>>       };
>>>       output-bin {
>>>         insert-template = <&some_template>;
>>>       };
>>>       output-bin2 {
>>>         insert-template = <&some_template>;
>>>       };
>>>    };
>>>
>>> ? Gut feeling is that this will fail to build because we now have the
>>> same label for two different nodes.
>> 
>> Yes, it will cause a failure due to duplicated phandles. And as per the
>> docs[1], it seems to be an expected qwirk of how templates work.
>> 
>
> What's the point of a template if we can only have it once?
>
> Couldn't we simply have

We could have it that way but from what I see, templates are mostly used
only once per DTS in the source.

With the most common use case being where the template is defined for a
SoC family in a dtsi (such as k3-binman.dtsi for TI) and each SoC then
using the respective templates only once.

I think this fix is justified here since we don't expect users to have
multiple template insertions anyways.

>
>   &binman {
>      some_template: template-0 {
>        ti-secure-rom {
>          keyfile = "some_key";
>        };
>        blob-ext {
>          optional;
>        };
>      };
>      output-bin {
>        insert-template = <&some_template>;
>        ti-secure-rom {
>          content = <&{/binman/output-bin/blob-ext}>;
>        };
>      };
>      output-bin2 {
>        insert-template = <&some_template>;
>        ti-secure-rom {
>          content = <&{/binman/output-bin2/blob-ext}>;
>      };
>   };
>
> or
>
>   &binman {
>      some_template: template-0 {
>        ti-secure-rom {
>          keyfile = "some_key";
>        };
>        blob-ext {
>          optional;
>        };
>      };
>      output-bin {
>        insert-template = <&some_template>;
>        ti-secure-rom {
>          content = <&output_bin_some_data>;
>        };
>        output_bin_some_data: blob-ext {};
>      };
>      output-bin2 {
>        insert-template = <&some_template>;
>        ti-secure-rom {
>          content = <&output_bin2_some_data>;
>        };
>        output_bin2_some_data: blob-ext {};
>   };

We could support that but since nobody is using duplicated templates,
should we really enforce this verbosity?

>
> Cheers,
> Quentin

Reply via email to