Skip to content
Snippets Groups Projects
Commit 1b5605ca authored by Marian Balakowicz's avatar Marian Balakowicz Committed by Wolfgang Denk
Browse files

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: default avatarMarian Balakowicz <m8@semihalf.com>
parent c59518e1
No related branches found
No related tags found
Loading
...@@ -66,6 +66,12 @@ static logbuff_t *log; ...@@ -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) ...@@ -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
......
...@@ -36,6 +36,10 @@ ...@@ -36,6 +36,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
...@@ -1018,6 +1022,9 @@ int boot_ramdisk_high (struct lmb *lmb, ulong rd_data, ulong rd_len, ...@@ -1018,6 +1022,9 @@ int boot_ramdisk_high (struct lmb *lmb, ulong rd_data, ulong rd_len,
initrd_high = ~0; initrd_high = ~0;
} }
/* Prevent initrd from overwriting logbuffer */
lmb_reserve(lmb, logbuffer_base() - LOGBUFF_OVERHEAD, LOGBUFF_RESERVE);
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);
......
...@@ -60,6 +60,7 @@ int drv_logbuff_init (void); ...@@ -60,6 +60,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 */
......
...@@ -398,6 +398,11 @@ ulong get_effective_memsize(void) ...@@ -398,6 +398,11 @@ ulong get_effective_memsize(void)
************************************************************************ ************************************************************************
*/ */
unsigned long logbuffer_base(void)
{
return CFG_SDRAM_BASE + get_effective_memsize() - LOGBUFF_LEN;
}
void board_init_f (ulong bootflag) void board_init_f (ulong bootflag)
{ {
bd_t *bd; bd_t *bd;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment