mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
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>
This commit is contained in:
parent
6956d53d99
commit
95d449ad4d
4 changed files with 25 additions and 1 deletions
|
@ -66,6 +66,12 @@ static logbuff_t *log;
|
|||
#endif
|
||||
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)
|
||||
{
|
||||
unsigned long tag, post_word;
|
||||
|
@ -75,7 +81,7 @@ void logbuff_init_ptrs (void)
|
|||
log = (logbuff_t *)CONFIG_ALT_LH_ADDR;
|
||||
lbuf = (char *)CONFIG_ALT_LB_ADDR;
|
||||
#else
|
||||
log = (logbuff_t *)(gd->bd->bi_memsize-LOGBUFF_LEN) - 1;
|
||||
log = (logbuff_t *)(logbuffer_base ()) - 1;
|
||||
lbuf = (char *)log->buf;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -35,6 +35,10 @@
|
|||
#include <dataflash.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LOGBUFFER
|
||||
#include <logbuff.h>
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE)
|
||||
#include <rtc.h>
|
||||
#endif
|
||||
|
@ -1013,6 +1017,12 @@ int boot_ramdisk_high (struct lmb *lmb, ulong rd_data, ulong rd_len,
|
|||
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",
|
||||
initrd_high, initrd_copy_to_ram);
|
||||
|
||||
|
|
|
@ -58,6 +58,7 @@ int drv_logbuff_init (void);
|
|||
void logbuff_init_ptrs (void);
|
||||
void logbuff_log(char *msg);
|
||||
void logbuff_reset (void);
|
||||
unsigned long logbuffer_base (void);
|
||||
|
||||
#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)
|
||||
{
|
||||
bd_t *bd;
|
||||
|
|
Loading…
Reference in a new issue