diff options
Diffstat (limited to 'lib_ppc')
-rw-r--r-- | lib_ppc/bat_rw.c | 6 | ||||
-rw-r--r-- | lib_ppc/board.c | 13 | ||||
-rw-r--r-- | lib_ppc/bootm.c | 38 | ||||
-rw-r--r-- | lib_ppc/time.c | 4 |
4 files changed, 32 insertions, 29 deletions
diff --git a/lib_ppc/bat_rw.c b/lib_ppc/bat_rw.c index 8546333868..a40b377bca 100644 --- a/lib_ppc/bat_rw.c +++ b/lib_ppc/bat_rw.c @@ -25,9 +25,12 @@ #include <common.h> #include <asm/processor.h> #include <asm/mmu.h> +#include <asm/io.h> int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower) { + sync(); + switch (bat) { case DBAT0: mtspr (DBAT0L, lower); @@ -99,6 +102,9 @@ int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower) return (-1); } + sync(); + isync(); + return (0); } diff --git a/lib_ppc/board.c b/lib_ppc/board.c index 71a70db504..c8f075f5a6 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -168,19 +168,6 @@ void *sbrk (ptrdiff_t increment) return ((void *) old); } -char *strmhz (char *buf, long hz) -{ - long l, n; - long m; - - n = hz / 1000000L; - l = sprintf (buf, "%ld", n); - m = (hz % 1000000L) / 1000L; - if (m != 0) - sprintf (buf + l, ".%03ld", m); - return (buf); -} - /* * All attempts to come up with a "common" initialization sequence * that works for all boards and architectures failed: some of the diff --git a/lib_ppc/bootm.c b/lib_ppc/bootm.c index 81803ddef3..e83c860822 100644 --- a/lib_ppc/bootm.c +++ b/lib_ppc/bootm.c @@ -80,7 +80,8 @@ do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], ulong cmd_start, cmd_end, bootmap_base; bd_t *kbd; ulong ep = 0; - void (*kernel)(bd_t *, ulong, ulong, ulong, ulong); + void (*kernel)(bd_t *, ulong r4, ulong r5, ulong r6, + ulong r7, ulong r8, ulong r9); int ret; ulong of_size = 0; struct lmb *lmb = images->lmb; @@ -166,8 +167,8 @@ do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], puts ("Could not find kernel entry point!\n"); goto error; } - kernel = (void (*)(bd_t *, ulong, ulong, ulong, ulong))ep; - + kernel = (void (*)(bd_t *, ulong, ulong, ulong, + ulong, ulong, ulong))ep; /* find ramdisk */ ret = boot_get_ramdisk (argc, argv, images, IH_ARCH_PPC, &rd_data_start, &rd_data_end); @@ -277,21 +278,28 @@ do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], #if defined(CFG_INIT_RAM_LOCK) && !defined(CONFIG_E500) unlock_ram_in_cache(); #endif - if (!images->autostart) - return ; #if defined(CONFIG_OF_LIBFDT) if (of_flat_tree) { /* device tree; boot new style */ /* * Linux Kernel Parameters (passing device tree): - * r3: pointer to the fdt, followed by the board info data - * r4: physical pointer to the kernel itself - * r5: NULL - * r6: NULL - * r7: NULL + * 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) + #define EPAPR_MAGIC (0x45504150) +#else + #define EPAPR_MAGIC (0x65504150) +#endif + debug (" Booting using OF flat tree...\n"); - (*kernel) ((bd_t *)of_flat_tree, (ulong)kernel, 0, 0, 0); + (*kernel) ((bd_t *)of_flat_tree, 0, 0, EPAPR_MAGIC, + CFG_BOOTMAPSZ, 0, 0); /* does not return */ } else #endif @@ -303,16 +311,18 @@ do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], * r5: initrd_end - unused if r4 is 0 * r6: Start of command line string * r7: End of command line string + * r8: 0 + * r9: 0 */ debug (" Booting using board info...\n"); - (*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end); + (*kernel) (kbd, initrd_start, initrd_end, + cmd_start, cmd_end, 0, 0); /* does not return */ } return ; error: - if (images->autostart) - do_reset (cmdtp, flag, argc, argv); + do_reset (cmdtp, flag, argc, argv); return ; } diff --git a/lib_ppc/time.c b/lib_ppc/time.c index 2649d5ffdc..f093a57854 100644 --- a/lib_ppc/time.c +++ b/lib_ppc/time.c @@ -67,7 +67,7 @@ void udelay(unsigned long usec) } /* ------------------------------------------------------------------------- */ - +#ifndef CONFIG_NAND_SPL unsigned long ticks2usec(unsigned long ticks) { ulong tbclk = get_tbclk(); @@ -83,7 +83,7 @@ unsigned long ticks2usec(unsigned long ticks) return ((ulong)ticks); } - +#endif /* ------------------------------------------------------------------------- */ int init_timebase (void) |