On 08/30/18 12:05, Rob Herring wrote: > Scan the root node properties (#{size,address}-cells) earlier, ^^^^^^^ before mdesc->dt_fixup() is called > so that > the dt_root_addr_cells and dt_root_size_cells variables are initialized > and can be used. by mdesc->dt_fixup() > > Cc: Frank Rowand <frowand.list@xxxxxxxxx> > Signed-off-by: Rob Herring <robh@xxxxxxxxxx> > --- > drivers/of/fdt.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > Moving early_init_dt_scan_root() to inside early_init_dt_verify() puts something that has nothing to do with verifying the fdt into a function whose purpose is the verify. It hides the side effect of initializing the dt_root_addr_cells and dt_root_size_cells variables. I suggest creating a new function early_init_dt_scan_init_pre_dt_fixup(), move the chunk of code there instead of to early_init_dt_scan_nodes(), and call the new function from setup_machine_fdt(), just before calling mdesc->dt_fixup(). This would be a little bit more code, but more clearly showing the intent. -Frank > diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c > index 800ad252cf9c..49abe18f1bde 100644 > --- a/drivers/of/fdt.c > +++ b/drivers/of/fdt.c > @@ -1215,6 +1215,10 @@ bool __init early_init_dt_verify(void *params) > initial_boot_params = params; > of_fdt_crc32 = crc32_be(~0, initial_boot_params, > fdt_totalsize(initial_boot_params)); > + > + /* Initialize {size,address}-cells info */ > + of_scan_flat_dt(early_init_dt_scan_root, NULL); > + > return true; > } > > @@ -1224,9 +1228,6 @@ void __init early_init_dt_scan_nodes(void) > /* Retrieve various information from the /chosen node */ > of_scan_flat_dt(early_init_dt_scan_chosen, boot_command_line); > > - /* Initialize {size,address}-cells info */ > - of_scan_flat_dt(early_init_dt_scan_root, NULL); > - > /* Setup memory, calling early_init_dt_add_memory_arch */ > of_scan_flat_dt(early_init_dt_scan_memory, NULL); > } >