From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerry Van Baren Date: Tue, 07 Aug 2007 09:54:57 -0400 Subject: [U-Boot-Users] [PATCH] Fix initrd booting In-Reply-To: <11864192383459-git-send-email-afleming@freescale.com> References: <11864192383459-git-send-email-afleming@freescale.com> Message-ID: <46B879B1.4020207@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > --- > 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