Avoid initrd and logbuffer area overlaps

Add logbuffer to reserved LMB areas to prevent initrd allocation
from overlaping with it.

Make sure to use correct logbuffer base address.

Signed-off-by: Marian Balakowicz <m8@semihalf.com>
master
Marian Balakowicz 16 years ago committed by Wolfgang Denk
parent 6956d53d99
commit 95d449ad4d
  1. 8
      common/cmd_log.c
  2. 10
      common/image.c
  3. 1
      include/logbuff.h
  4. 7
      lib_ppc/board.c

@ -66,6 +66,12 @@ static logbuff_t *log;
#endif #endif
static char *lbuf; static char *lbuf;
unsigned long __logbuffer_base(void)
{
return CFG_SDRAM_BASE + gd->bd->bi_memsize - LOGBUFF_LEN;
}
unsigned long logbuffer_base (void) __attribute__((weak, alias("__logbuffer_base")));
void logbuff_init_ptrs (void) void logbuff_init_ptrs (void)
{ {
unsigned long tag, post_word; unsigned long tag, post_word;
@ -75,7 +81,7 @@ void logbuff_init_ptrs (void)
log = (logbuff_t *)CONFIG_ALT_LH_ADDR; log = (logbuff_t *)CONFIG_ALT_LH_ADDR;
lbuf = (char *)CONFIG_ALT_LB_ADDR; lbuf = (char *)CONFIG_ALT_LB_ADDR;
#else #else
log = (logbuff_t *)(gd->bd->bi_memsize-LOGBUFF_LEN) - 1; log = (logbuff_t *)(logbuffer_base ()) - 1;
lbuf = (char *)log->buf; lbuf = (char *)log->buf;
#endif #endif

@ -35,6 +35,10 @@
#include <dataflash.h> #include <dataflash.h>
#endif #endif
#ifdef CONFIG_LOGBUFFER
#include <logbuff.h>
#endif
#if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) #if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE)
#include <rtc.h> #include <rtc.h>
#endif #endif
@ -1013,6 +1017,12 @@ int boot_ramdisk_high (struct lmb *lmb, ulong rd_data, ulong rd_len,
initrd_high = ~0; initrd_high = ~0;
} }
#ifdef CONFIG_LOGBUFFER
/* Prevent initrd from overwriting logbuffer */
lmb_reserve(lmb, logbuffer_base() - LOGBUFF_OVERHEAD, LOGBUFF_RESERVE);
#endif
debug ("## initrd_high = 0x%08lx, copy_to_ram = %d\n", debug ("## initrd_high = 0x%08lx, copy_to_ram = %d\n",
initrd_high, initrd_copy_to_ram); initrd_high, initrd_copy_to_ram);

@ -58,6 +58,7 @@ int drv_logbuff_init (void);
void logbuff_init_ptrs (void); void logbuff_init_ptrs (void);
void logbuff_log(char *msg); void logbuff_log(char *msg);
void logbuff_reset (void); void logbuff_reset (void);
unsigned long logbuffer_base (void);
#endif /* CONFIG_LOGBUFFER */ #endif /* CONFIG_LOGBUFFER */

@ -396,6 +396,13 @@ ulong get_effective_memsize(void)
************************************************************************ ************************************************************************
*/ */
#ifdef CONFIG_LOGBUFFER
unsigned long logbuffer_base(void)
{
return CFG_SDRAM_BASE + get_effective_memsize() - LOGBUFF_LEN;
}
#endif
void board_init_f (ulong bootflag) void board_init_f (ulong bootflag)
{ {
bd_t *bd; bd_t *bd;

Loading…
Cancel
Save