
Hi Andy,
I'm not sure if you are aiming this at u-boot-fdt, which would be logical, or if you are aiming this at u-boot-testing (or other). Care to clarify?
Andy Fleming wrote:
The device tree needs to be passed to Linux within CFG_BOOTMAPSZ. The current code places the device tree right before the initrd if it exists, and that will usually be closer to the end of memory. Instead, we should always put the device tree right before the bd_info structure, thus ensuring it is within CFG_BOOTMAPSZ.
We do, however, allow for FDTs in uImages to shoot themselves in the foot by requesting a location outside of CFG_BOOTMAPSZ.
Signed-off-by: Andy Fleming afleming@freescale.com
common/cmd_bootm.c | 20 ++++++++------------ 1 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index a6499e8..d12ef76 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -753,10 +753,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, #else if (*(ulong *)of_flat_tree == OF_DT_HEADER) { #endif -#ifndef CFG_NO_FLASH
if (addr2info((ulong)of_flat_tree) != NULL)
of_data = (ulong)of_flat_tree;
-#endif
of_data = (ulong)of_flat_tree;
Is this right? The logic in bootm *in general* and specifically here is hard to figure out, but the way I'm puzzling it out... 1) If of_data is *not* NULL, it is used as the indicator that the blob must be relocated. 2) The above is saying that, if there is flash (not defined CFG_NO_FLASH gaak) and if of_flat_tree points into flash (addr2info returns a pointer), then of_data is set which makes #1 true.
As I read it, this causes the blob to be copied to RAM if it is in flash, which is necessary since we cannot add/rewrite nodes and properties in a flash copy.
Your change causes the blob to _always_ be relocated. Not necessarily bad, but is it always good? I'm not a bootm expert by any means, and I suspect the complexity grew substantially over time, but in the mucking about I did, I did not dare to change the logic. :-/
} else if (ntohl(hdr->ih_magic) == IH_MAGIC) { printf("## Flat Device Tree Image at %08lX\n", hdr); print_image_hdr(hdr);
[snip]
Thanks, gvb