From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kumar Gala Date: Wed, 6 Aug 2008 01:32:11 -0500 Subject: [U-Boot-Users] [PATCH 2/3] Add ePAPR boot command In-Reply-To: <1218004332-20311-1-git-send-email-galak@kernel.crashing.org> References: <1218004332-20311-1-git-send-email-galak@kernel.crashing.org> Message-ID: <1218004332-20311-2-git-send-email-galak@kernel.crashing.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Add a boot command that supports the ePAPR client interface on powerpc. Signed-off-by: Kumar Gala --- lib_ppc/bootm.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 63 insertions(+), 0 deletions(-) diff --git a/lib_ppc/bootm.c b/lib_ppc/bootm.c index a872d31..1182c50 100644 --- a/lib_ppc/bootm.c +++ b/lib_ppc/bootm.c @@ -821,3 +821,66 @@ error: return 1; } #endif + +/*******************************************************************/ +/* boote - boot ePAPR */ +/*******************************************************************/ +#if defined(CONFIG_CMD_BOOT_EPAPR) +int do_boot_epapr (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + void (*kernel)(ulong r3, ulong r4, ulong r5, ulong r6, + ulong r7, ulong r8, ulong r9); + ulong kern, of_flat_tree, epapr_magic; + + if (argc != 3) { + printf ("Usage:\n%s\n", cmdtp->usage); + return 1; + } + + kern = simple_strtoul (argv[1], NULL, 16); + of_flat_tree = simple_strtoul (argv[2], NULL, 16); + + if (kern & 0x3) { + printf ("kernel address 0x%lx is not 4-byte aligned\n", kern); + return 1; + } + + if (of_flat_tree & 0x7) { + printf ("Flat device tree address 0x%lx is not 8-byte aligned\n", of_flat_tree); + return 1; + } + + kernel = (void (*)(ulong, ulong, ulong, ulong, + ulong, ulong, ulong))kern; + + disable_interrupts(); + + /* + * Linux Kernel Parameters (passing device tree): + * r3: pointer to the fdt + * r4: 0 + * r5: 0 + * r6: epapr magic + * r7: size of IMA in bytes + * r8: 0 + * r9: 0 + */ +#if defined(CONFIG_85xx) || defined(CONFIG_440) + epapr_magic = 0x45504150; +#else + epapr_magic = 0x65504150; +#endif + + debug (" Booting using OF flat tree...\n"); + (*kernel) (of_flat_tree, 0, 0, epapr_magic, CFG_BOOTMAPSZ, 0, 0); + /* does not return */ + + return 0; +} + +U_BOOT_CMD( + bootepapr, 3, 1, do_boot_epapr, + "bootepapr - boot according to ePAPR client interface\n", + " \n" +); +#endif -- 1.5.5.1