mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
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>
This commit is contained in:
parent
590d3cacb9
commit
c3624e6ed0
4 changed files with 35 additions and 6 deletions
16
README
16
README
|
@ -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…
Add table
Add a link
Reference in a new issue