image.c (aacc8c16ee3b4dd2ef6c6b662e71273c31097548) image.c (770605e4f9874230728f5a592820c619b1565ebc)
1/*
2 * (C) Copyright 2008 Semihalf
3 *
4 * (C) Copyright 2000-2006
5 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
6 *
7 * See file CREDITS for list of people who contributed to this
8 * project.

--- 359 unchanged lines hidden (view full) ---

368 */
369static const image_header_t *image_get_ramdisk(ulong rd_addr, uint8_t arch,
370 int verify)
371{
372 const image_header_t *rd_hdr = (const image_header_t *)rd_addr;
373
374 if (!image_check_magic(rd_hdr)) {
375 puts("Bad Magic Number\n");
1/*
2 * (C) Copyright 2008 Semihalf
3 *
4 * (C) Copyright 2000-2006
5 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
6 *
7 * See file CREDITS for list of people who contributed to this
8 * project.

--- 359 unchanged lines hidden (view full) ---

368 */
369static const image_header_t *image_get_ramdisk(ulong rd_addr, uint8_t arch,
370 int verify)
371{
372 const image_header_t *rd_hdr = (const image_header_t *)rd_addr;
373
374 if (!image_check_magic(rd_hdr)) {
375 puts("Bad Magic Number\n");
376 show_boot_error(BOOTSTAGE_ID_RD_MAGIC);
376 bootstage_error(BOOTSTAGE_ID_RD_MAGIC);
377 return NULL;
378 }
379
380 if (!image_check_hcrc(rd_hdr)) {
381 puts("Bad Header Checksum\n");
377 return NULL;
378 }
379
380 if (!image_check_hcrc(rd_hdr)) {
381 puts("Bad Header Checksum\n");
382 show_boot_error(BOOTSTAGE_ID_RD_HDR_CHECKSUM);
382 bootstage_error(BOOTSTAGE_ID_RD_HDR_CHECKSUM);
383 return NULL;
384 }
385
383 return NULL;
384 }
385
386 show_boot_progress(BOOTSTAGE_ID_RD_MAGIC);
386 bootstage_mark(BOOTSTAGE_ID_RD_MAGIC);
387 image_print_contents(rd_hdr);
388
389 if (verify) {
390 puts(" Verifying Checksum ... ");
391 if (!image_check_dcrc(rd_hdr)) {
392 puts("Bad Data CRC\n");
387 image_print_contents(rd_hdr);
388
389 if (verify) {
390 puts(" Verifying Checksum ... ");
391 if (!image_check_dcrc(rd_hdr)) {
392 puts("Bad Data CRC\n");
393 show_boot_error(BOOTSTAGE_ID_RD_CHECKSUM);
393 bootstage_error(BOOTSTAGE_ID_RD_CHECKSUM);
394 return NULL;
395 }
396 puts("OK\n");
397 }
398
394 return NULL;
395 }
396 puts("OK\n");
397 }
398
399 show_boot_progress(BOOTSTAGE_ID_RD_HDR_CHECKSUM);
399 bootstage_mark(BOOTSTAGE_ID_RD_HDR_CHECKSUM);
400
401 if (!image_check_os(rd_hdr, IH_OS_LINUX) ||
402 !image_check_arch(rd_hdr, arch) ||
403 !image_check_type(rd_hdr, IH_TYPE_RAMDISK)) {
404 printf("No Linux %s Ramdisk Image\n",
405 genimg_get_arch_name(arch));
400
401 if (!image_check_os(rd_hdr, IH_OS_LINUX) ||
402 !image_check_arch(rd_hdr, arch) ||
403 !image_check_type(rd_hdr, IH_TYPE_RAMDISK)) {
404 printf("No Linux %s Ramdisk Image\n",
405 genimg_get_arch_name(arch));
406 show_boot_error(BOOTSTAGE_ID_RAMDISK);
406 bootstage_error(BOOTSTAGE_ID_RAMDISK);
407 return NULL;
408 }
409
410 return rd_hdr;
411}
412#endif /* !USE_HOSTCC */
413
414/*****************************************************************************/

--- 475 unchanged lines hidden (view full) ---

890 * address provided in the second bootm argument
891 * check image type, for FIT images get FIT node.
892 */
893 switch (genimg_get_format((void *)rd_addr)) {
894 case IMAGE_FORMAT_LEGACY:
895 printf("## Loading init Ramdisk from Legacy "
896 "Image at %08lx ...\n", rd_addr);
897
407 return NULL;
408 }
409
410 return rd_hdr;
411}
412#endif /* !USE_HOSTCC */
413
414/*****************************************************************************/

--- 475 unchanged lines hidden (view full) ---

890 * address provided in the second bootm argument
891 * check image type, for FIT images get FIT node.
892 */
893 switch (genimg_get_format((void *)rd_addr)) {
894 case IMAGE_FORMAT_LEGACY:
895 printf("## Loading init Ramdisk from Legacy "
896 "Image at %08lx ...\n", rd_addr);
897
898 show_boot_progress(BOOTSTAGE_ID_CHECK_RAMDISK);
898 bootstage_mark(BOOTSTAGE_ID_CHECK_RAMDISK);
899 rd_hdr = image_get_ramdisk(rd_addr, arch,
900 images->verify);
901
902 if (rd_hdr == NULL)
903 return 1;
904
905 rd_data = image_get_data(rd_hdr);
906 rd_len = image_get_data_size(rd_hdr);
907 rd_load = image_get_load(rd_hdr);
908 break;
909#if defined(CONFIG_FIT)
910 case IMAGE_FORMAT_FIT:
911 fit_hdr = (void *)rd_addr;
912 printf("## Loading init Ramdisk from FIT "
913 "Image at %08lx ...\n", rd_addr);
914
899 rd_hdr = image_get_ramdisk(rd_addr, arch,
900 images->verify);
901
902 if (rd_hdr == NULL)
903 return 1;
904
905 rd_data = image_get_data(rd_hdr);
906 rd_len = image_get_data_size(rd_hdr);
907 rd_load = image_get_load(rd_hdr);
908 break;
909#if defined(CONFIG_FIT)
910 case IMAGE_FORMAT_FIT:
911 fit_hdr = (void *)rd_addr;
912 printf("## Loading init Ramdisk from FIT "
913 "Image at %08lx ...\n", rd_addr);
914
915 show_boot_progress(BOOTSTAGE_ID_FIT_RD_FORMAT);
915 bootstage_mark(BOOTSTAGE_ID_FIT_RD_FORMAT);
916 if (!fit_check_format(fit_hdr)) {
917 puts("Bad FIT ramdisk image format!\n");
916 if (!fit_check_format(fit_hdr)) {
917 puts("Bad FIT ramdisk image format!\n");
918 show_boot_error(
918 bootstage_error(
919 BOOTSTAGE_ID_FIT_RD_FORMAT);
920 return 1;
921 }
919 BOOTSTAGE_ID_FIT_RD_FORMAT);
920 return 1;
921 }
922 show_boot_progress(BOOTSTAGE_ID_FIT_RD_FORMAT_OK);
922 bootstage_mark(BOOTSTAGE_ID_FIT_RD_FORMAT_OK);
923
924 if (!fit_uname_ramdisk) {
925 /*
926 * no ramdisk image node unit name, try to get config
927 * node first. If config unit node name is NULL
928 * fit_conf_get_node() will try to find default config node
929 */
923
924 if (!fit_uname_ramdisk) {
925 /*
926 * no ramdisk image node unit name, try to get config
927 * node first. If config unit node name is NULL
928 * fit_conf_get_node() will try to find default config node
929 */
930 show_boot_progress(
930 bootstage_mark(
931 BOOTSTAGE_ID_FIT_RD_NO_UNIT_NAME);
932 cfg_noffset = fit_conf_get_node(fit_hdr,
933 fit_uname_config);
934 if (cfg_noffset < 0) {
935 puts("Could not find configuration "
936 "node\n");
931 BOOTSTAGE_ID_FIT_RD_NO_UNIT_NAME);
932 cfg_noffset = fit_conf_get_node(fit_hdr,
933 fit_uname_config);
934 if (cfg_noffset < 0) {
935 puts("Could not find configuration "
936 "node\n");
937 show_boot_error(
937 bootstage_error(
938 BOOTSTAGE_ID_FIT_RD_NO_UNIT_NAME);
939 return 1;
940 }
941 fit_uname_config = fdt_get_name(fit_hdr,
942 cfg_noffset, NULL);
943 printf(" Using '%s' configuration\n",
944 fit_uname_config);
945
946 rd_noffset = fit_conf_get_ramdisk_node(fit_hdr,
947 cfg_noffset);
948 fit_uname_ramdisk = fit_get_name(fit_hdr,
949 rd_noffset, NULL);
950 } else {
951 /* get ramdisk component image node offset */
938 BOOTSTAGE_ID_FIT_RD_NO_UNIT_NAME);
939 return 1;
940 }
941 fit_uname_config = fdt_get_name(fit_hdr,
942 cfg_noffset, NULL);
943 printf(" Using '%s' configuration\n",
944 fit_uname_config);
945
946 rd_noffset = fit_conf_get_ramdisk_node(fit_hdr,
947 cfg_noffset);
948 fit_uname_ramdisk = fit_get_name(fit_hdr,
949 rd_noffset, NULL);
950 } else {
951 /* get ramdisk component image node offset */
952 show_boot_progress(
952 bootstage_mark(
953 BOOTSTAGE_ID_FIT_RD_UNIT_NAME);
954 rd_noffset = fit_image_get_node(fit_hdr,
955 fit_uname_ramdisk);
956 }
957 if (rd_noffset < 0) {
958 puts("Could not find subimage node\n");
953 BOOTSTAGE_ID_FIT_RD_UNIT_NAME);
954 rd_noffset = fit_image_get_node(fit_hdr,
955 fit_uname_ramdisk);
956 }
957 if (rd_noffset < 0) {
958 puts("Could not find subimage node\n");
959 show_boot_error(BOOTSTAGE_ID_FIT_RD_SUBNODE);
959 bootstage_error(BOOTSTAGE_ID_FIT_RD_SUBNODE);
960 return 1;
961 }
962
963 printf(" Trying '%s' ramdisk subimage\n",
964 fit_uname_ramdisk);
965
960 return 1;
961 }
962
963 printf(" Trying '%s' ramdisk subimage\n",
964 fit_uname_ramdisk);
965
966 show_boot_progress(BOOTSTAGE_ID_FIT_RD_CHECK);
966 bootstage_mark(BOOTSTAGE_ID_FIT_RD_CHECK);
967 if (!fit_check_ramdisk(fit_hdr, rd_noffset, arch,
968 images->verify))
969 return 1;
970
971 /* get ramdisk image data address and length */
972 if (fit_image_get_data(fit_hdr, rd_noffset, &data,
973 &size)) {
974 puts("Could not find ramdisk subimage data!\n");
967 if (!fit_check_ramdisk(fit_hdr, rd_noffset, arch,
968 images->verify))
969 return 1;
970
971 /* get ramdisk image data address and length */
972 if (fit_image_get_data(fit_hdr, rd_noffset, &data,
973 &size)) {
974 puts("Could not find ramdisk subimage data!\n");
975 show_boot_error(BOOTSTAGE_ID_FIT_RD_GET_DATA);
975 bootstage_error(BOOTSTAGE_ID_FIT_RD_GET_DATA);
976 return 1;
977 }
976 return 1;
977 }
978 show_boot_progress(BOOTSTAGE_ID_FIT_RD_GET_DATA_OK);
978 bootstage_mark(BOOTSTAGE_ID_FIT_RD_GET_DATA_OK);
979
980 rd_data = (ulong)data;
981 rd_len = size;
982
983 if (fit_image_get_load(fit_hdr, rd_noffset, &rd_load)) {
984 puts("Can't get ramdisk subimage load "
985 "address!\n");
979
980 rd_data = (ulong)data;
981 rd_len = size;
982
983 if (fit_image_get_load(fit_hdr, rd_noffset, &rd_load)) {
984 puts("Can't get ramdisk subimage load "
985 "address!\n");
986 show_boot_error(BOOTSTAGE_ID_FIT_RD_LOAD);
986 bootstage_error(BOOTSTAGE_ID_FIT_RD_LOAD);
987 return 1;
988 }
987 return 1;
988 }
989 show_boot_progress(BOOTSTAGE_ID_FIT_RD_LOAD);
989 bootstage_mark(BOOTSTAGE_ID_FIT_RD_LOAD);
990
991 images->fit_hdr_rd = fit_hdr;
992 images->fit_uname_rd = fit_uname_ramdisk;
993 images->fit_noffset_rd = rd_noffset;
994 break;
995#endif
996 default:
997 puts("Wrong Ramdisk Image Format\n");
998 rd_data = rd_len = rd_load = 0;
999 return 1;
1000 }
1001 } else if (images->legacy_hdr_valid &&
1002 image_check_type(&images->legacy_hdr_os_copy,
1003 IH_TYPE_MULTI)) {
1004
1005 /*
1006 * Now check if we have a legacy mult-component image,
1007 * get second entry data start address and len.
1008 */
990
991 images->fit_hdr_rd = fit_hdr;
992 images->fit_uname_rd = fit_uname_ramdisk;
993 images->fit_noffset_rd = rd_noffset;
994 break;
995#endif
996 default:
997 puts("Wrong Ramdisk Image Format\n");
998 rd_data = rd_len = rd_load = 0;
999 return 1;
1000 }
1001 } else if (images->legacy_hdr_valid &&
1002 image_check_type(&images->legacy_hdr_os_copy,
1003 IH_TYPE_MULTI)) {
1004
1005 /*
1006 * Now check if we have a legacy mult-component image,
1007 * get second entry data start address and len.
1008 */
1009 show_boot_progress(BOOTSTAGE_ID_RAMDISK);
1009 bootstage_mark(BOOTSTAGE_ID_RAMDISK);
1010 printf("## Loading init Ramdisk from multi component "
1011 "Legacy Image at %08lx ...\n",
1012 (ulong)images->legacy_hdr_os);
1013
1014 image_multi_getimg(images->legacy_hdr_os, 1, &rd_data, &rd_len);
1015 } else {
1016 /*
1017 * no initrd image
1018 */
1010 printf("## Loading init Ramdisk from multi component "
1011 "Legacy Image at %08lx ...\n",
1012 (ulong)images->legacy_hdr_os);
1013
1014 image_multi_getimg(images->legacy_hdr_os, 1, &rd_data, &rd_len);
1015 } else {
1016 /*
1017 * no initrd image
1018 */
1019 show_boot_progress(BOOTSTAGE_ID_NO_RAMDISK);
1019 bootstage_mark(BOOTSTAGE_ID_NO_RAMDISK);
1020 rd_len = rd_data = 0;
1021 }
1022
1023 if (!rd_data) {
1024 debug("## No init Ramdisk\n");
1025 } else {
1026 *rd_start = rd_data;
1027 *rd_end = rd_data + rd_len;

--- 67 unchanged lines hidden (view full) ---

1095 else
1096 *initrd_start = (ulong)lmb_alloc(lmb, rd_len,
1097 0x1000);
1098
1099 if (*initrd_start == 0) {
1100 puts("ramdisk - allocation error\n");
1101 goto error;
1102 }
1020 rd_len = rd_data = 0;
1021 }
1022
1023 if (!rd_data) {
1024 debug("## No init Ramdisk\n");
1025 } else {
1026 *rd_start = rd_data;
1027 *rd_end = rd_data + rd_len;

--- 67 unchanged lines hidden (view full) ---

1095 else
1096 *initrd_start = (ulong)lmb_alloc(lmb, rd_len,
1097 0x1000);
1098
1099 if (*initrd_start == 0) {
1100 puts("ramdisk - allocation error\n");
1101 goto error;
1102 }
1103 show_boot_progress(BOOTSTAGE_ID_COPY_RAMDISK);
1103 bootstage_mark(BOOTSTAGE_ID_COPY_RAMDISK);
1104
1105 *initrd_end = *initrd_start + rd_len;
1106 printf(" Loading Ramdisk to %08lx, end %08lx ... ",
1107 *initrd_start, *initrd_end);
1108
1109 memmove_wd((void *)*initrd_start,
1110 (void *)rd_data, rd_len, CHUNKSZ);
1111

--- 2063 unchanged lines hidden (view full) ---

3175 int verify)
3176{
3177 fit_image_print(fit, rd_noffset, " ");
3178
3179 if (verify) {
3180 puts(" Verifying Hash Integrity ... ");
3181 if (!fit_image_check_hashes(fit, rd_noffset)) {
3182 puts("Bad Data Hash\n");
1104
1105 *initrd_end = *initrd_start + rd_len;
1106 printf(" Loading Ramdisk to %08lx, end %08lx ... ",
1107 *initrd_start, *initrd_end);
1108
1109 memmove_wd((void *)*initrd_start,
1110 (void *)rd_data, rd_len, CHUNKSZ);
1111

--- 2063 unchanged lines hidden (view full) ---

3175 int verify)
3176{
3177 fit_image_print(fit, rd_noffset, " ");
3178
3179 if (verify) {
3180 puts(" Verifying Hash Integrity ... ");
3181 if (!fit_image_check_hashes(fit, rd_noffset)) {
3182 puts("Bad Data Hash\n");
3183 show_boot_error(BOOTSTAGE_ID_FIT_RD_HASH);
3183 bootstage_error(BOOTSTAGE_ID_FIT_RD_HASH);
3184 return 0;
3185 }
3186 puts("OK\n");
3187 }
3188
3184 return 0;
3185 }
3186 puts("OK\n");
3187 }
3188
3189 show_boot_progress(BOOTSTAGE_ID_FIT_RD_CHECK_ALL);
3189 bootstage_mark(BOOTSTAGE_ID_FIT_RD_CHECK_ALL);
3190 if (!fit_image_check_os(fit, rd_noffset, IH_OS_LINUX) ||
3191 !fit_image_check_arch(fit, rd_noffset, arch) ||
3192 !fit_image_check_type(fit, rd_noffset, IH_TYPE_RAMDISK)) {
3193 printf("No Linux %s Ramdisk Image\n",
3194 genimg_get_arch_name(arch));
3190 if (!fit_image_check_os(fit, rd_noffset, IH_OS_LINUX) ||
3191 !fit_image_check_arch(fit, rd_noffset, arch) ||
3192 !fit_image_check_type(fit, rd_noffset, IH_TYPE_RAMDISK)) {
3193 printf("No Linux %s Ramdisk Image\n",
3194 genimg_get_arch_name(arch));
3195 show_boot_error(BOOTSTAGE_ID_FIT_RD_CHECK_ALL);
3195 bootstage_error(BOOTSTAGE_ID_FIT_RD_CHECK_ALL);
3196 return 0;
3197 }
3198
3196 return 0;
3197 }
3198
3199 show_boot_progress(BOOTSTAGE_ID_FIT_RD_CHECK_ALL_OK);
3199 bootstage_mark(BOOTSTAGE_ID_FIT_RD_CHECK_ALL_OK);
3200 return 1;
3201}
3202#endif /* USE_HOSTCC */
3203#endif /* CONFIG_FIT */
3200 return 1;
3201}
3202#endif /* USE_HOSTCC */
3203#endif /* CONFIG_FIT */