Kernel device tree gets modified with bootm command when CONFIG_OFDEVICE is enabled

Marcel Hamer marcel at
Fri Oct 6 00:45:24 PDT 2017


On 10/06/2017 06:11 AM, Sascha Hauer wrote:
> Hi Marcel,
> On Tue, Oct 03, 2017 at 11:36:49AM +0200, Marcel Hamer wrote:
>> Hello,
>> When passing a custom device tree to the kernel using the 'bootm' command I
>> see the device tree gets 'fixed up' when the CONFIG_OFDEVICE option is
>> enabled. Probably this should not be the case when the dtb is passed to the
>> kernel?
>> This happens on line common/bootm.c:395:
>>      oftree = of_get_fixed_tree(data->of_root_node);
>> Should this not be changed to:
>>      oftree = of_flatten_db(data->of_root_node);
> No. Getting the fixed up tree is exactly what we want here. There are
> some cases in which it's absolutely mandatory to use the fixed tree
> (memory banks, they are oftem empty in the Linux provided dts files)
> and other in which is convenient (mtd, to make sure the kernel sees the
> same partitions as the bootloader).
> There might be some cases where we want to have more control over which
> fixups run and which don't, but generally we want to have the fixed tree
> here.
> Sascha
Ok, I kind of get the reasoning behind the fixing up, but I don't think 
it is very welcome in all situations. Not considering the '/chosen' 
node, because I can see that is a requirement to be added to the dtb.

When I specifically specify a custom dtb to be used for the Linux kernel 
I would not prefer the boot loader to modify it. If there should be a 
system to fix it up it should be the kernel in this case, at least in my 

It kind of sounds like the boot loader is deciding it is smarter than 
the developer and overriding the settings in the dtb before it passes it 
to the kernel. I also see it as kind of strange, when you configure a 
partition table in your dtb for the kernel and once you boot the kernel 
you get the partition table from the boot loader. Especially since I 
don't think this is documented anywhere, at least not in the bootm 
command documentation as far as I know.

When you want to update your dtb in the future, for whatever reason, 
this also becomes an issue. For instance if you would want to add a 
label to your mtd partition, then you would have to update your boot 
loader to get it into the kernel. Or maybe you want part of the 
partitions configurable depending on the system configuration. In this 
case this would no longer be possible, because the boot loader overrides 
it by default.

Would it be an option to make the fixing up configurable by a 
configuration setting for the bootm command?

Kind regards,


More information about the barebox mailing list