Hi Zong, [...]
> > diff --git a/board/sifive/unleashed/unleashed.c > > b/board/sifive/unleashed/unleashed.c > > index 8cd514df3005..7e89c3f740a7 100644 > > --- a/board/sifive/unleashed/unleashed.c > > +++ b/board/sifive/unleashed/unleashed.c > > @@ -116,12 +116,10 @@ int misc_init_r(void) > > > > void *board_fdt_blob_setup(void) > > { > > - if (IS_ENABLED(CONFIG_OF_SEPARATE)) { > > - if (gd->arch.firmware_fdt_addr) > > - return (ulong *)gd->arch.firmware_fdt_addr; > > - else > > - return (ulong *)&_end; > > - } > > + if (gd->arch.firmware_fdt_addr) > > + return (void *)gd->arch.firmware_fdt_addr; > > + else > > + return (void *)&_end; > > } > > I was wondering if we need to check CONFIG_OF_BOARD here? I'm not sure > whether we should distinguish the value of a1 register which is > meaningless. It means that if we don't expect the device tree to be > passed by prior stage, then the a1 register might be a trash value at > the beginning, so it would still return the arch.firmware_fdt_addr > here, rather than _end. I thought about it as well. Those boards were configured up to now with 'CONFIG_OF_SEPARATE'. Which means we are looking at an existing issue? IOW the device tree was passed as part of U-Boot, which would mean a1 would have had thrash as well. Maybe a1 always has a valid DT on those boards so we never noticed? > And do you think that we should enable the > CONFIG_OF_BOARD for unmatched and unleashed? Because it seems to me > that we actually pass the device tree by prior stage (i.e. OpenSBI). Yes in that case what you request makes sense for unmatched/unleashed. Return gd->arch.firmware_fdt_addr in OF_BOARD is selected otherwise return _end (instead of the current check). If that sounds good to you I'll send a v2 [...] Regards /Ilias