[PATCH 2/3] env: set fdtfile environment variable from /chosen/fdtfile
Casey Connolly
casey.connolly at linaro.org
Thu Jun 12 12:39:25 CEST 2025
On 6/11/25 15:55, Quentin Schulz wrote:
> Hi Casey,
>
> On 6/10/25 6:23 PM, Casey Connolly wrote:
>> If /chosen/fdtfile exists in the devicetree and the fdtfile variable
>> isn't set in the default environment then populate it. This allows for
>> U-Boot to load the devicetree from the boot partition or ESP that should
>> more closely match the OS being booted.
>>
>> Signed-off-by: Casey Connolly <casey.connolly at linaro.org>
>> ---
>> common/board_r.c | 35 +++++++++++++++++++++++++++++++++++
>> 1 file changed, 35 insertions(+)
>>
>> diff --git a/common/board_r.c b/common/board_r.c
>> index
>> 41c8dec8d49ef21a12fd41272581dd94484dfa08..594c7827c39cfca5f4561b4699e5b66de54e11c2 100644
>> --- a/common/board_r.c
>> +++ b/common/board_r.c
>> @@ -448,8 +448,41 @@ static int should_load_env(void)
>> return 1;
>> }
>> +/**
>> + * fdtdec_setup_fdtfile - set fdtfile variable from /chosen/fdtfile
>> + *
>> + * This function will look for a string property named "fdtfile" under
>> + * the chosen node and if found set the "fdtfile" environment variable.
>> + *
>> + * This devicetree property is used to identify the path to the FDT in
>> + * use so that the same path can be checked in the dtbs directory on
>> + * the boot partition or ESP.
>> + */
>> +int setup_fdtfile(void)
>> +{
>> + ofnode node;
>> + const char *path;
>> +
>> + if (env_get("fdtfile"))
>
> How do we guarantee that fdtfile variable is read from the default
> environment (I assume here you're talking about the environment stored
> in the U-Boot binary?) with env_get?
I'm not sure tbh, I don't have much familiarity with the env_ api.
>
>> + return -EINVAL;
>> +
>> + node = ofnode_path("/chosen");
>> + if (!ofnode_valid(node))
>> + return -ENOENT;
>> +
>> + path = ofnode_read_string(node, "fdtfile");
>> + if (!path)
>> + return -ENOENT;
>> +
>
> Please add this to the DT spec (and schema) before it lands in U-Boot so
> we can have some sort of standard here (e.g. Barebox may want to use
> that as well? The earlier stage setting this variable needs to know the
> location, name and expected content of the property).
>
> Additionally, you say this property is a string array, I assume of the
> form:
>
> fdtfile = "myboard.dts", "myboard-overlay.dtso";
>
> ?
>
> Which seems to be hinted at by the cover letter.
>
> In that case, I don't think ofnode_read_string is the right way to go.
> We should
>
> 1) enforce the location of the dts in the array (I assume 0?)
> 2) look only at that location to get fdtfile, e.g. with
> ofnode_read_string_index?
>
> Otherwise we'll have incompatibility with old U-Boot being unable to
> parse a string array and new Device Tree providing an actual string array.
I don't think this is an issue since a string array in DT is just null
separated strings, but yeah it would probably make things clearer
regardless.
thanks
>
> Cheers,
> Quentin
--
Casey (she/they)
More information about the U-Boot
mailing list