Default to bootm_size() when CONFIG_SYS_BOOTMAPSZ is not defined

This patch adds a function getenv_bootm_mapsize() for obtaining the
size of the early mapped region accessible by the kernel during early
boot.  It defaults to CONFIG_SYS_BOOTMAPSZ, or if not defined,
defaults to getenv_bootm_size(), which in turn defaults to the size of
RAM.

getenv_bootm_mapsize() can also be overridden with a "bootm_mapsize"
environmental variable.

Signed-off-by: Grant Likely <grant.likely@linaro.org>
master
Grant Likely 13 years ago committed by Gerald Van Baren
parent 590d3cacb9
commit c3624e6ed0
  1. 16
      README
  2. 2
      arch/powerpc/lib/bootm.c
  3. 22
      common/image.c
  4. 1
      include/image.h

@ -2348,7 +2348,10 @@ Configuration Settings:
used) must be put below this limit, unless "bootm_low" used) must be put below this limit, unless "bootm_low"
enviroment variable is defined and non-zero. In such case enviroment variable is defined and non-zero. In such case
all data for the Linux kernel must be between "bootm_low" all data for the Linux kernel must be between "bootm_low"
and "bootm_low" + CONFIG_SYS_BOOTMAPSZ. and "bootm_low" + CONFIG_SYS_BOOTMAPSZ. The environment
variable "bootm_mapsize" will override the value of
CONFIG_SYS_BOOTMAPSZ. If CONFIG_SYS_BOOTMAPSZ is undefined,
then the value in "bootm_size" will be used instead.
- CONFIG_SYS_BOOT_RAMDISK_HIGH: - CONFIG_SYS_BOOT_RAMDISK_HIGH:
Enable initrd_high functionality. If defined then the Enable initrd_high functionality. If defined then the
@ -3184,7 +3187,16 @@ List of environment variables (most likely not complete):
for use by the bootm command. See also "bootm_size" for use by the bootm command. See also "bootm_size"
environment variable. Address defined by "bootm_low" is environment variable. Address defined by "bootm_low" is
also the base of the initial memory mapping for the Linux also the base of the initial memory mapping for the Linux
kernel -- see the description of CONFIG_SYS_BOOTMAPSZ. kernel -- see the description of CONFIG_SYS_BOOTMAPSZ and
bootm_mapsize.
bootm_mapsize - Size of the initial memory mapping for the Linux kernel.
This variable is given as a hexadecimal number and it
defines the size of the memory region starting at base
address bootm_low that is accessible by the Linux kernel
during early boot. If unset, CONFIG_SYS_BOOTMAPSZ is used
as the default value if it is defined, and bootm_size is
used otherwise.
bootm_size - Memory range available for image processing in the bootm bootm_size - Memory range available for image processing in the bootm
command can be restricted. This variable is given as command can be restricted. This variable is given as

@ -96,7 +96,7 @@ static void boot_jump_linux(bootm_headers_t *images)
debug (" Booting using OF flat tree...\n"); debug (" Booting using OF flat tree...\n");
WATCHDOG_RESET (); WATCHDOG_RESET ();
(*kernel) ((bd_t *)of_flat_tree, 0, 0, EPAPR_MAGIC, (*kernel) ((bd_t *)of_flat_tree, 0, 0, EPAPR_MAGIC,
CONFIG_SYS_BOOTMAPSZ, 0, 0); getenv_bootm_mapsize(), 0, 0);
/* does not return */ /* does not return */
} else } else
#endif #endif

@ -454,6 +454,22 @@ phys_size_t getenv_bootm_size(void)
#endif #endif
} }
phys_size_t getenv_bootm_mapsize(void)
{
phys_size_t tmp;
char *s = getenv ("bootm_mapsize");
if (s) {
tmp = (phys_size_t)simple_strtoull (s, NULL, 16);
return tmp;
}
#if defined(CONFIG_SYS_BOOTMAPSZ)
return CONFIG_SYS_BOOTMAPSZ;
#else
return getenv_bootm_size();
#endif
}
void memmove_wd (void *to, void *from, size_t len, ulong chunksz) void memmove_wd (void *to, void *from, size_t len, ulong chunksz)
{ {
if (to == from) if (to == from)
@ -1207,7 +1223,7 @@ int boot_relocate_fdt (struct lmb *lmb, char **of_flat_tree, ulong *of_size)
/* Pad the FDT by a specified amount */ /* Pad the FDT by a specified amount */
of_len = *of_size + CONFIG_SYS_FDT_PAD; of_len = *of_size + CONFIG_SYS_FDT_PAD;
of_start = (void *)(unsigned long)lmb_alloc_base(lmb, of_len, 0x1000, of_start = (void *)(unsigned long)lmb_alloc_base(lmb, of_len, 0x1000,
CONFIG_SYS_BOOTMAPSZ + getenv_bootm_low()); getenv_bootm_mapsize() + getenv_bootm_low());
if (of_start == 0) { if (of_start == 0) {
puts("device tree - allocation error\n"); puts("device tree - allocation error\n");
@ -1581,7 +1597,7 @@ int boot_get_cmdline (struct lmb *lmb, ulong *cmd_start, ulong *cmd_end)
char *s; char *s;
cmdline = (char *)(ulong)lmb_alloc_base(lmb, CONFIG_SYS_BARGSIZE, 0xf, cmdline = (char *)(ulong)lmb_alloc_base(lmb, CONFIG_SYS_BARGSIZE, 0xf,
CONFIG_SYS_BOOTMAPSZ + getenv_bootm_low()); getenv_bootm_mapsize() + getenv_bootm_low());
if (cmdline == NULL) if (cmdline == NULL)
return -1; return -1;
@ -1617,7 +1633,7 @@ int boot_get_cmdline (struct lmb *lmb, ulong *cmd_start, ulong *cmd_end)
int boot_get_kbd (struct lmb *lmb, bd_t **kbd) int boot_get_kbd (struct lmb *lmb, bd_t **kbd)
{ {
*kbd = (bd_t *)(ulong)lmb_alloc_base(lmb, sizeof(bd_t), 0xf, *kbd = (bd_t *)(ulong)lmb_alloc_base(lmb, sizeof(bd_t), 0xf,
CONFIG_SYS_BOOTMAPSZ + getenv_bootm_low()); getenv_bootm_mapsize() + getenv_bootm_low());
if (*kbd == NULL) if (*kbd == NULL)
return -1; return -1;

@ -451,6 +451,7 @@ int image_check_dcrc (const image_header_t *hdr);
int getenv_yesno (char *var); int getenv_yesno (char *var);
ulong getenv_bootm_low(void); ulong getenv_bootm_low(void);
phys_size_t getenv_bootm_size(void); phys_size_t getenv_bootm_size(void);
phys_size_t getenv_bootm_mapsize(void);
void memmove_wd (void *to, void *from, size_t len, ulong chunksz); void memmove_wd (void *to, void *from, size_t len, ulong chunksz);
#endif #endif

Loading…
Cancel
Save