From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Simek Date: Fri, 16 Apr 2010 12:06:38 +0200 Subject: [U-Boot] [PATCH] microblaze: Add FDT support In-Reply-To: <1271327237-2828-1-git-send-email-arun@bhanu.net> References: <1271327237-2828-1-git-send-email-arun@bhanu.net> Message-ID: <4BC836AE.9040507@monstr.eu> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Arun Bhanu wrote: > This patch adds FDT (flattened device tree) support to microblaze arch. > > Tested with Linux arch/microblaze kernels with and without compiled in > FDT on Xilinx ML506 board. > > Signed-off-by: Arun Bhanu Applied. Thanks, Michal > --- > arch/microblaze/lib/bootm.c | 39 ++++++++++++++++++++++++++++++++++----- > 1 files changed, 34 insertions(+), 5 deletions(-) > > diff --git a/arch/microblaze/lib/bootm.c b/arch/microblaze/lib/bootm.c > index bce4774..0c2c5e8 100644 > --- a/arch/microblaze/lib/bootm.c > +++ b/arch/microblaze/lib/bootm.c > @@ -35,22 +35,51 @@ DECLARE_GLOBAL_DATA_PTR; > int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images) > { > /* First parameter is mapped to $r5 for kernel boot args */ > - void (*theKernel) (char *); > + void (*theKernel) (char *, ulong, ulong); > char *commandline = getenv ("bootargs"); > + ulong rd_data_start, rd_data_end; > > if ((flag != 0) && (flag != BOOTM_STATE_OS_GO)) > return 1; > > - theKernel = (void (*)(char *))images->ep; > + int ret; > + > + char *of_flat_tree = NULL; > +#if defined(CONFIG_OF_LIBFDT) > + ulong of_size = 0; > + > + /* find flattened device tree */ > + ret = boot_get_fdt (flag, argc, argv, images, &of_flat_tree, &of_size); > + if (ret) > + return 1; > +#endif > + > + theKernel = (void (*)(char *, ulong, ulong))images->ep; > + > + /* find ramdisk */ > + ret = boot_get_ramdisk (argc, argv, images, IH_ARCH_MICROBLAZE, > + &rd_data_start, &rd_data_end); > + if (ret) > + return 1; > > show_boot_progress (15); > > + if (!(ulong) of_flat_tree) > + of_flat_tree = simple_strtoul (argv[3], NULL, 16); > + > #ifdef DEBUG > - printf ("## Transferring control to Linux (at address %08lx) ...\n", > - (ulong) theKernel); > + printf ("## Transferring control to Linux (at address 0x%08lx) " \ > + "ramdisk 0x%08lx, FDT 0x%08lx...\n", > + (ulong) theKernel, rd_data_start, (ulong) of_flat_tree); > #endif > > - theKernel (commandline); > + /* > + * Linux Kernel Parameters (passing device tree): > + * r5: pointer to command line > + * r6: pointer to ramdisk > + * r7: pointer to the fdt, followed by the board info data > + */ > + theKernel (commandline, rd_data_start, (ulong) of_flat_tree); > /* does not return */ > > return 1; -- Michal Simek, Ing. (M.Eng) w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/ Microblaze U-BOOT custodian