* [U-Boot] [PATCH 2/4] blackfin: x86: bootm: Handle PREP stage of bootm
2013-07-11 6:08 [U-Boot] [PATCH 0/4] Correct some remaining bootm problems Simon Glass
2013-07-11 6:08 ` [U-Boot] [PATCH 1/4] bootm: Remove extra OK message Simon Glass
@ 2013-07-11 6:08 ` Simon Glass
2013-07-12 8:28 ` Sughosh Ganu
2013-07-11 6:08 ` [U-Boot] [PATCH 3/4] bootm: Use selected configuration for ramdisk and fdt Simon Glass
` (2 subsequent siblings)
4 siblings, 1 reply; 7+ messages in thread
From: Simon Glass @ 2013-07-11 6:08 UTC (permalink / raw)
To: u-boot
The OS function is now always called with the PREP stage. Adjust the
remaining bootm OS functions to deal with this correctly.
Signed-off-by: Simon Glass <sjg@chromium.org>
---
arch/blackfin/lib/boot.c | 2 ++
arch/x86/lib/bootm.c | 2 ++
common/cmd_bootm.c | 16 ++++++++++++++++
3 files changed, 20 insertions(+)
diff --git a/arch/blackfin/lib/boot.c b/arch/blackfin/lib/boot.c
index 768a882..5644d58 100644
--- a/arch/blackfin/lib/boot.c
+++ b/arch/blackfin/lib/boot.c
@@ -42,6 +42,8 @@ int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *ima
int (*appl) (char *cmdline);
char *cmdline;
+ if (flag & BOOTM_STATE_OS_PREP)
+ return 0;
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1;
diff --git a/arch/x86/lib/bootm.c b/arch/x86/lib/bootm.c
index 0d3250c..b84e35a 100644
--- a/arch/x86/lib/bootm.c
+++ b/arch/x86/lib/bootm.c
@@ -48,6 +48,8 @@ int do_bootm_linux(int flag, int argc, char * const argv[],
size_t len;
#endif
+ if (flag & BOOTM_STATE_OS_PREP)
+ return 0;
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1;
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 7a7c760..075e7dc 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -1473,6 +1473,8 @@ static int do_bootm_netbsd(int flag, int argc, char * const argv[],
char *consdev;
char *cmdline;
+ if (flag & BOOTM_STATE_OS_PREP)
+ return 0;
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1;
@@ -1552,6 +1554,8 @@ static int do_bootm_lynxkdi(int flag, int argc, char * const argv[],
{
image_header_t *hdr = &images->legacy_hdr_os_copy;
+ if (flag & BOOTM_STATE_OS_PREP)
+ return 0;
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1;
@@ -1574,6 +1578,8 @@ static int do_bootm_rtems(int flag, int argc, char * const argv[],
{
void (*entry_point)(bd_t *);
+ if (flag & BOOTM_STATE_OS_PREP)
+ return 0;
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1;
@@ -1607,6 +1613,8 @@ static int do_bootm_ose(int flag, int argc, char * const argv[],
{
void (*entry_point)(void);
+ if (flag & BOOTM_STATE_OS_PREP)
+ return 0;
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1;
@@ -1641,6 +1649,8 @@ static int do_bootm_plan9(int flag, int argc, char * const argv[],
void (*entry_point)(void);
char *s;
+ if (flag & BOOTM_STATE_OS_PREP)
+ return 0;
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1;
@@ -1688,6 +1698,8 @@ static int do_bootm_vxworks(int flag, int argc, char * const argv[],
{
char str[80];
+ if (flag & BOOTM_STATE_OS_PREP)
+ return 0;
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1;
@@ -1711,6 +1723,8 @@ static int do_bootm_qnxelf(int flag, int argc, char * const argv[],
char *local_args[2];
char str[16];
+ if (flag & BOOTM_STATE_OS_PREP)
+ return 0;
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1;
@@ -1736,6 +1750,8 @@ static int do_bootm_integrity(int flag, int argc, char * const argv[],
{
void (*entry_point)(void);
+ if (flag & BOOTM_STATE_OS_PREP)
+ return 0;
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1;
--
1.8.3
^ permalink raw reply related [flat|nested] 7+ messages in thread* [U-Boot] [PATCH 3/4] bootm: Use selected configuration for ramdisk and fdt
2013-07-11 6:08 [U-Boot] [PATCH 0/4] Correct some remaining bootm problems Simon Glass
2013-07-11 6:08 ` [U-Boot] [PATCH 1/4] bootm: Remove extra OK message Simon Glass
2013-07-11 6:08 ` [U-Boot] [PATCH 2/4] blackfin: x86: bootm: Handle PREP stage of bootm Simon Glass
@ 2013-07-11 6:08 ` Simon Glass
2013-07-11 6:08 ` [U-Boot] [PATCH 4/4] bootm: Correct the arguments for the ELF image loader Simon Glass
2013-07-12 21:23 ` [U-Boot] [PATCH 0/4] Correct some remaining bootm problems Tom Rini
4 siblings, 0 replies; 7+ messages in thread
From: Simon Glass @ 2013-07-11 6:08 UTC (permalink / raw)
To: u-boot
If a specific configuraion is selected by the bootm command, e.g. with
'bootm 84000000#recoveryconf' we must honour this for not just the kernel,
but also the ramdisk and FDT.
In the conversion to using a common fit_image_load() function for loading
images from FITs (commits a51ec63 and 53f375f) this feature was lost.
Reinstate it by passing the selected configuration back from
fit_image_load() to boot_get_kernel(), then use this configuration
(which is stored in images->fit_uname_cfg) in both boot_get_ramdisk()
and boot_get_fdt().
Signed-off-by: Simon Glass <sjg@chromium.org>
---
common/cmd_bootm.c | 3 ++-
common/image-fdt.c | 4 ++--
common/image-fit.c | 6 +++++-
common/image.c | 4 ++--
include/image.h | 7 ++++---
5 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 075e7dc..c8bb33e 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -989,7 +989,7 @@ static const void *boot_get_kernel(cmd_tbl_t *cmdtp, int flag, int argc,
case IMAGE_FORMAT_FIT:
os_noffset = fit_image_load(images, FIT_KERNEL_PROP,
img_addr,
- &fit_uname_kernel, fit_uname_config,
+ &fit_uname_kernel, &fit_uname_config,
IH_ARCH_DEFAULT, IH_TYPE_KERNEL,
BOOTSTAGE_ID_FIT_KERNEL_START,
FIT_LOAD_IGNORED, os_data, os_len);
@@ -998,6 +998,7 @@ static const void *boot_get_kernel(cmd_tbl_t *cmdtp, int flag, int argc,
images->fit_hdr_os = map_sysmem(img_addr, 0);
images->fit_uname_os = fit_uname_kernel;
+ images->fit_uname_cfg = fit_uname_config;
images->fit_noffset_os = os_noffset;
break;
#endif
diff --git a/common/image-fdt.c b/common/image-fdt.c
index d99f444..203404a 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -243,7 +243,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
ulong load, load_end;
void *buf;
#if defined(CONFIG_FIT)
- const char *fit_uname_config = NULL;
+ const char *fit_uname_config = images->fit_uname_cfg;
const char *fit_uname_fdt = NULL;
ulong default_addr;
int fdt_noffset;
@@ -367,7 +367,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
fdt_noffset = fit_image_load(images,
FIT_FDT_PROP,
fdt_addr, &fit_uname_fdt,
- fit_uname_config,
+ &fit_uname_config,
arch, IH_TYPE_FLATDT,
BOOTSTAGE_ID_FIT_FDT_START,
FIT_LOAD_OPTIONAL, &load, &len);
diff --git a/common/image-fit.c b/common/image-fit.c
index b75e119..e28dd05 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -1478,12 +1478,13 @@ int fit_get_node_from_config(bootm_headers_t *images, const char *prop_name,
}
int fit_image_load(bootm_headers_t *images, const char *prop_name, ulong addr,
- const char **fit_unamep, const char *fit_uname_config,
+ const char **fit_unamep, const char **fit_uname_configp,
int arch, int image_type, int bootstage_id,
enum fit_load_op load_op, ulong *datap, ulong *lenp)
{
int cfg_noffset, noffset;
const char *fit_uname;
+ const char *fit_uname_config;
const void *fit;
const void *buf;
size_t size;
@@ -1493,6 +1494,7 @@ int fit_image_load(bootm_headers_t *images, const char *prop_name, ulong addr,
fit = map_sysmem(addr, 0);
fit_uname = fit_unamep ? *fit_unamep : NULL;
+ fit_uname_config = fit_uname_configp ? *fit_uname_configp : NULL;
printf("## Loading %s from FIT Image at %08lx ...\n", prop_name, addr);
bootstage_mark(bootstage_id + BOOTSTAGE_SUB_FORMAT);
@@ -1658,6 +1660,8 @@ int fit_image_load(bootm_headers_t *images, const char *prop_name, ulong addr,
*lenp = len;
if (fit_unamep)
*fit_unamep = (char *)fit_uname;
+ if (fit_uname_configp)
+ *fit_uname_configp = (char *)fit_uname_config;
return noffset;
}
diff --git a/common/image.c b/common/image.c
index 1be384f..327006e 100644
--- a/common/image.c
+++ b/common/image.c
@@ -811,7 +811,7 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
char *end;
#endif
#if defined(CONFIG_FIT)
- const char *fit_uname_config = NULL;
+ const char *fit_uname_config = images->fit_uname_cfg;
const char *fit_uname_ramdisk = NULL;
ulong default_addr;
int rd_noffset;
@@ -907,7 +907,7 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
case IMAGE_FORMAT_FIT:
rd_noffset = fit_image_load(images, FIT_RAMDISK_PROP,
rd_addr, &fit_uname_ramdisk,
- fit_uname_config, arch,
+ &fit_uname_config, arch,
IH_TYPE_RAMDISK,
BOOTSTAGE_ID_FIT_RD_START,
FIT_LOAD_REQUIRED, &rd_data, &rd_len);
diff --git a/include/image.h b/include/image.h
index 9c3e46f..7b0108f 100644
--- a/include/image.h
+++ b/include/image.h
@@ -439,8 +439,9 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
* @param fit_unamep On entry this is the requested image name
* (e.g. "kernel at 1") or NULL to use the default. On exit
* points to the selected image name
- * @param fit_uname_config Requested configuration name, or NULL for the
- * default
+ * @param fit_uname_configp On entry this is the requested configuration
+ * name (e.g. "conf at 1") or NULL to use the default. On
+ * exit points to the selected configuration name.
* @param arch Expected architecture (IH_ARCH_...)
* @param image_type Required image type (IH_TYPE_...). If this is
* IH_TYPE_KERNEL then we allow IH_TYPE_KERNEL_NOLOAD
@@ -453,7 +454,7 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
* @param lenp Returns length of loaded image
*/
int fit_image_load(bootm_headers_t *images, const char *prop_name, ulong addr,
- const char **fit_unamep, const char *fit_uname_config,
+ const char **fit_unamep, const char **fit_uname_configp,
int arch, int image_type, int bootstage_id,
enum fit_load_op load_op, ulong *datap, ulong *lenp);
--
1.8.3
^ permalink raw reply related [flat|nested] 7+ messages in thread