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 */ |