|
@@ -51,6 +51,7 @@
|
|
|
|
|
|
#include <u-boot/md5.h>
|
|
|
#include <sha1.h>
|
|
|
+#include <asm/errno.h>
|
|
|
#include <asm/io.h>
|
|
|
|
|
|
#ifdef CONFIG_CMD_BDI
|
|
@@ -810,14 +811,10 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
|
|
|
char *end;
|
|
|
#endif
|
|
|
#if defined(CONFIG_FIT)
|
|
|
- void *fit_hdr;
|
|
|
const char *fit_uname_config = NULL;
|
|
|
const char *fit_uname_ramdisk = NULL;
|
|
|
ulong default_addr;
|
|
|
int rd_noffset;
|
|
|
- int cfg_noffset;
|
|
|
- const void *data;
|
|
|
- size_t size;
|
|
|
#endif
|
|
|
|
|
|
*rd_start = 0;
|
|
@@ -865,32 +862,16 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
|
|
|
#if defined(CONFIG_FIT)
|
|
|
} else {
|
|
|
/* use FIT configuration provided in first bootm
|
|
|
- * command argument
|
|
|
+ * command argument. If the property is not defined,
|
|
|
+ * quit silently.
|
|
|
*/
|
|
|
rd_addr = map_to_sysmem(images->fit_hdr_os);
|
|
|
- fit_uname_config = images->fit_uname_cfg;
|
|
|
- debug("* ramdisk: using config '%s' from image "
|
|
|
- "at 0x%08lx\n",
|
|
|
- fit_uname_config, rd_addr);
|
|
|
-
|
|
|
- /*
|
|
|
- * Check whether configuration has ramdisk defined,
|
|
|
- * if not, don't try to use it, quit silently.
|
|
|
- */
|
|
|
- fit_hdr = images->fit_hdr_os;
|
|
|
- cfg_noffset = fit_conf_get_node(fit_hdr,
|
|
|
- fit_uname_config);
|
|
|
- if (cfg_noffset < 0) {
|
|
|
- debug("* ramdisk: no such config\n");
|
|
|
- return 1;
|
|
|
- }
|
|
|
-
|
|
|
- rd_noffset = fit_conf_get_ramdisk_node(fit_hdr,
|
|
|
- cfg_noffset);
|
|
|
- if (rd_noffset < 0) {
|
|
|
- debug("* ramdisk: no ramdisk in config\n");
|
|
|
+ rd_noffset = fit_get_node_from_config(images,
|
|
|
+ FIT_RAMDISK_PROP, rd_addr);
|
|
|
+ if (rd_noffset == -ENOLINK)
|
|
|
return 0;
|
|
|
- }
|
|
|
+ else if (rd_noffset < 0)
|
|
|
+ return 1;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
@@ -921,87 +902,16 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
|
|
|
break;
|
|
|
#if defined(CONFIG_FIT)
|
|
|
case IMAGE_FORMAT_FIT:
|
|
|
- fit_hdr = buf;
|
|
|
- printf("## Loading init Ramdisk from FIT "
|
|
|
- "Image at %08lx ...\n", rd_addr);
|
|
|
-
|
|
|
- bootstage_mark(BOOTSTAGE_ID_FIT_RD_FORMAT);
|
|
|
- if (!fit_check_format(fit_hdr)) {
|
|
|
- puts("Bad FIT ramdisk image format!\n");
|
|
|
- bootstage_error(
|
|
|
- BOOTSTAGE_ID_FIT_RD_FORMAT);
|
|
|
+ rd_noffset = fit_image_load(images, FIT_RAMDISK_PROP,
|
|
|
+ rd_addr, &fit_uname_ramdisk,
|
|
|
+ fit_uname_config, arch,
|
|
|
+ IH_TYPE_RAMDISK,
|
|
|
+ BOOTSTAGE_ID_FIT_RD_START,
|
|
|
+ FIT_LOAD_REQUIRED, &rd_data, &rd_len);
|
|
|
+ if (rd_noffset < 0)
|
|
|
return 1;
|
|
|
- }
|
|
|
- bootstage_mark(BOOTSTAGE_ID_FIT_RD_FORMAT_OK);
|
|
|
-
|
|
|
- if (!fit_uname_ramdisk) {
|
|
|
- /*
|
|
|
- * no ramdisk image node unit name, try to get config
|
|
|
- * node first. If config unit node name is NULL
|
|
|
- * fit_conf_get_node() will try to find default config node
|
|
|
- */
|
|
|
- bootstage_mark(
|
|
|
- BOOTSTAGE_ID_FIT_RD_NO_UNIT_NAME);
|
|
|
- cfg_noffset = fit_conf_get_node(fit_hdr,
|
|
|
- fit_uname_config);
|
|
|
- if (cfg_noffset < 0) {
|
|
|
- puts("Could not find configuration "
|
|
|
- "node\n");
|
|
|
- bootstage_error(
|
|
|
- BOOTSTAGE_ID_FIT_RD_NO_UNIT_NAME);
|
|
|
- return 1;
|
|
|
- }
|
|
|
- fit_uname_config = fdt_get_name(fit_hdr,
|
|
|
- cfg_noffset, NULL);
|
|
|
- printf(" Using '%s' configuration\n",
|
|
|
- fit_uname_config);
|
|
|
-
|
|
|
- rd_noffset = fit_conf_get_ramdisk_node(fit_hdr,
|
|
|
- cfg_noffset);
|
|
|
- fit_uname_ramdisk = fit_get_name(fit_hdr,
|
|
|
- rd_noffset, NULL);
|
|
|
- } else {
|
|
|
- /* get ramdisk component image node offset */
|
|
|
- bootstage_mark(
|
|
|
- BOOTSTAGE_ID_FIT_RD_UNIT_NAME);
|
|
|
- rd_noffset = fit_image_get_node(fit_hdr,
|
|
|
- fit_uname_ramdisk);
|
|
|
- }
|
|
|
- if (rd_noffset < 0) {
|
|
|
- puts("Could not find subimage node\n");
|
|
|
- bootstage_error(BOOTSTAGE_ID_FIT_RD_SUBNODE);
|
|
|
- return 1;
|
|
|
- }
|
|
|
-
|
|
|
- printf(" Trying '%s' ramdisk subimage\n",
|
|
|
- fit_uname_ramdisk);
|
|
|
-
|
|
|
- bootstage_mark(BOOTSTAGE_ID_FIT_RD_CHECK);
|
|
|
- if (!fit_check_ramdisk(fit_hdr, rd_noffset, arch,
|
|
|
- images->verify))
|
|
|
- return 1;
|
|
|
-
|
|
|
- /* get ramdisk image data address and length */
|
|
|
- if (fit_image_get_data(fit_hdr, rd_noffset, &data,
|
|
|
- &size)) {
|
|
|
- puts("Could not find ramdisk subimage data!\n");
|
|
|
- bootstage_error(BOOTSTAGE_ID_FIT_RD_GET_DATA);
|
|
|
- return 1;
|
|
|
- }
|
|
|
- bootstage_mark(BOOTSTAGE_ID_FIT_RD_GET_DATA_OK);
|
|
|
-
|
|
|
- rd_data = (ulong)data;
|
|
|
- rd_len = size;
|
|
|
-
|
|
|
- if (fit_image_get_load(fit_hdr, rd_noffset, &rd_load)) {
|
|
|
- puts("Can't get ramdisk subimage load "
|
|
|
- "address!\n");
|
|
|
- bootstage_error(BOOTSTAGE_ID_FIT_RD_LOAD);
|
|
|
- return 1;
|
|
|
- }
|
|
|
- bootstage_mark(BOOTSTAGE_ID_FIT_RD_LOAD);
|
|
|
|
|
|
- images->fit_hdr_rd = fit_hdr;
|
|
|
+ images->fit_hdr_rd = map_sysmem(rd_addr, 0);
|
|
|
images->fit_uname_rd = fit_uname_ramdisk;
|
|
|
images->fit_noffset_rd = rd_noffset;
|
|
|
break;
|