From patchwork Mon Mar 28 19:58:43 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Grant Likely X-Patchwork-Id: 808 Return-Path: Delivered-To: unknown Received: from imap.gmail.com (74.125.159.109) by localhost6.localdomain6 with IMAP4-SSL; 08 Jun 2011 14:46:04 -0000 Delivered-To: patches@linaro.org Received: by 10.42.161.68 with SMTP id s4cs125300icx; Mon, 28 Mar 2011 12:58:47 -0700 (PDT) Received: by 10.42.220.65 with SMTP id hx1mr7246568icb.472.1301342327332; Mon, 28 Mar 2011 12:58:47 -0700 (PDT) Received: from mail-iy0-f178.google.com (mail-iy0-f178.google.com [209.85.210.178]) by mx.google.com with ESMTPS id un9si12058422icb.15.2011.03.28.12.58.46 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 28 Mar 2011 12:58:46 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.210.178 is neither permitted nor denied by best guess record for domain of grant.likely@secretlab.ca) client-ip=209.85.210.178; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.210.178 is neither permitted nor denied by best guess record for domain of grant.likely@secretlab.ca) smtp.mail=grant.likely@secretlab.ca Received: by iyi12 with SMTP id 12so4831636iyi.37 for ; Mon, 28 Mar 2011 12:58:46 -0700 (PDT) Received: by 10.42.159.199 with SMTP id m7mr7537063icx.78.1301342326135; Mon, 28 Mar 2011 12:58:46 -0700 (PDT) Received: from localhost (S01060002b3d79728.cg.shawcable.net [70.72.87.49]) by mx.google.com with ESMTPS id uf10sm2982807icb.5.2011.03.28.12.58.44 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 28 Mar 2011 12:58:45 -0700 (PDT) Sender: Grant Likely Received: from [127.0.1.1] (localhost [127.0.0.1]) by localhost (Postfix) with ESMTP id 1BA6E181712; Mon, 28 Mar 2011 13:58:43 -0600 (MDT) Subject: [PATCH 2/6] Default to bootm_size() when CONFIG_SYS_BOOTMAPSZ is not defined To: u-boot@lists.denx.de, John Rigby , linaro-kernel@lists.linaro.org, wd@denx.de, vanbaren@cideas.com From: Grant Likely Cc: devicetree-discuss@lists.ozlabs.org, patches@linaro.org Date: Mon, 28 Mar 2011 13:58:43 -0600 Message-ID: <20110328195839.10235.92568.stgit@ponder> In-Reply-To: <20110328195231.10235.36716.stgit@ponder> References: <20110328195231.10235.36716.stgit@ponder> User-Agent: StGit/0.15 MIME-Version: 1.0 From: Grant Likely 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 --- README | 16 ++++++++++++++-- arch/powerpc/lib/bootm.c | 2 +- common/image.c | 22 +++++++++++++++++++--- include/image.h | 1 + 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/README b/README index 21cd71b..b8c1833 100644 --- a/README +++ b/README @@ -2311,7 +2311,10 @@ Configuration Settings: used) must be put below this limit, unless "bootm_low" enviroment variable is defined and non-zero. In such case 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: Enable initrd_high functionality. If defined then the @@ -3147,7 +3150,16 @@ List of environment variables (most likely not complete): for use by the bootm command. See also "bootm_size" environment variable. Address defined by "bootm_low" is 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 command can be restricted. This variable is given as diff --git a/arch/powerpc/lib/bootm.c b/arch/powerpc/lib/bootm.c index 11a574a..1ee4f79 100644 --- a/arch/powerpc/lib/bootm.c +++ b/arch/powerpc/lib/bootm.c @@ -95,7 +95,7 @@ static void boot_jump_linux(bootm_headers_t *images) debug (" Booting using OF flat tree...\n"); WATCHDOG_RESET (); (*kernel) ((bd_t *)of_flat_tree, 0, 0, EPAPR_MAGIC, - CONFIG_SYS_BOOTMAPSZ, 0, 0); + getenv_bootm_mapsize(), 0, 0); /* does not return */ } else #endif diff --git a/common/image.c b/common/image.c index c86b86f..a6247d8 100644 --- a/common/image.c +++ b/common/image.c @@ -454,6 +454,22 @@ phys_size_t getenv_bootm_size(void) #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) { 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 */ of_len = *of_size + CONFIG_SYS_FDT_PAD; 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) { 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; cmdline = (char *)(ulong)lmb_alloc_base(lmb, CONFIG_SYS_BARGSIZE, 0xf, - CONFIG_SYS_BOOTMAPSZ + getenv_bootm_low()); + getenv_bootm_mapsize() + getenv_bootm_base()); if (cmdline == NULL) 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) { *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) return -1; diff --git a/include/image.h b/include/image.h index aa1d7df..b77cb79 100644 --- a/include/image.h +++ b/include/image.h @@ -451,6 +451,7 @@ int image_check_dcrc (const image_header_t *hdr); int getenv_yesno (char *var); ulong getenv_bootm_low(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); #endif