Delay FIT format check on sector based devices
PATCH 1/1 Delay FIT format check on sector based devices
Global FIT image operations like format check cannot be performed on a first sector data, defer them to the point when whole FIT image was uploaded to a system RAM.
---
Grant,
Please give this patch a try on your system and let me know if it helped to solve the nand booting issue.
Thanks,
m.
common/cmd_doc.c | 19 ++++++++++--------- common/cmd_fdc.c | 15 ++++++++------- common/cmd_ide.c | 19 ++++++++++--------- common/cmd_nand.c | 38 ++++++++++++++++++++------------------ common/cmd_scsi.c | 15 ++++++++------- common/cmd_usb.c | 15 ++++++++------- 6 files changed, 64 insertions(+), 57 deletions(-)
common/cmd_doc.c +10 -9
@@ -206,7 +206,7 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])image_header_t *hdr;int rcode =0 ;#if defined(CONFIG_FIT ) -const void *fit_hdr; +const void *fit_hdr =NULL ;#endif show_boot_progress (34 );
@@ -275,12 +275,6 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )case IMAGE_FORMAT_FIT : fit_hdr = (const void *)addr; -if (!fit_check_format (fit_hdr)) { -show_boot_progress (-130 ); -puts ("** Bad FIT image format\n" ); -return 1 ; - } -show_boot_progress (131 );puts ("Fit image detected...\n" ); cnt =fit_get_size (fit_hdr);
@@ -304,8 +298,15 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )/* This cannot be done earlier, we need complete FIT image in RAM first */ -if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) -fit_print_contents ((const void *)addr); +if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) { +if (!fit_check_format (fit_hdr)) { +show_boot_progress (-130 ); +puts ("** Bad FIT image format\n" ); +return 1 ; + } +show_boot_progress (131 ); +fit_print_contents (fit_hdr); + }#endif /* Loading ok, update default load address */
common/cmd_fdc.c +8 -7
@@ -787,7 +787,7 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])char *ep;int rcode =0 ;#if defined(CONFIG_FIT ) -const void *fit_hdr; +const void *fit_hdr =NULL ;#endif switch (argc) {
@@ -847,10 +847,6 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )case IMAGE_FORMAT_FIT : fit_hdr = (const void *)addr; -if (!fit_check_format (fit_hdr)) { -puts ("** Bad FIT image format\n" ); -return 1 ; - }puts ("Fit image detected...\n" ); imsize =fit_get_size (fit_hdr);
@@ -879,8 +875,13 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )/* This cannot be done earlier, we need complete FIT image in RAM first */ -if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) -fit_print_contents ((const void *)addr); +if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) { +if (!fit_check_format (fit_hdr)) { +puts ("** Bad FIT image format\n" ); +return 1 ; + } +fit_print_contents (fit_hdr); + }#endif /* Loading ok, update default load address */
common/cmd_ide.c +10 -9
@@ -367,7 +367,7 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])image_header_t *hdr;int rcode =0 ;#if defined(CONFIG_FIT ) -const void *fit_hdr; +const void *fit_hdr =NULL ;#endif show_boot_progress (41 );
@@ -465,12 +465,6 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )case IMAGE_FORMAT_FIT : fit_hdr = (const void *)addr; -if (!fit_check_format (fit_hdr)) { -show_boot_progress (-140 ); -puts ("** Bad FIT image format\n" ); -return 1 ; - } -show_boot_progress (141 );puts ("Fit image detected...\n" ); cnt =fit_get_size (fit_hdr);
@@ -496,8 +490,15 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )/* This cannot be done earlier, we need complete FIT image in RAM first */ -if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) -fit_print_contents ((const void *)addr); +if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) { +if (!fit_check_format (fit_hdr)) { +show_boot_progress (-140 ); +puts ("** Bad FIT image format\n" ); +return 1 ; + } +show_boot_progress (141 ); +fit_print_contents (fit_hdr); + }#endif /* Loading ok, update default load address */
common/cmd_nand.c +20 -18
@@ -484,7 +484,7 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,image_header_t *hdr;int jffs2 =0 ;#if defined(CONFIG_FIT ) -const void *fit_hdr; +const void *fit_hdr =NULL ;#endif s =strchr (cmd,'.' );
@@ -526,12 +526,6 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,#if defined(CONFIG_FIT )case IMAGE_FORMAT_FIT : fit_hdr = (const void *)addr; -if (!fit_check_format (fit_hdr)) { -show_boot_progress (-150 ); -puts ("** Bad FIT image format\n" ); -return 1 ; - } -show_boot_progress (151 );puts ("Fit image detected...\n" ); cnt =fit_get_size (fit_hdr);
@@ -564,8 +558,15 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,#if defined(CONFIG_FIT )/* This cannot be done earlier, we need complete FIT image in RAM first */ -if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) -fit_print_contents ((const void *)addr); +if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) { +if (!fit_check_format (fit_hdr)) { +show_boot_progress (-150 ); +puts ("** Bad FIT image format\n" ); +return 1 ; + } +show_boot_progress (151 ); +fit_print_contents (fit_hdr); + }#endif /* Loading ok, update default load address */
@@ -952,7 +953,7 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])image_header_t *hdr;int rcode =0 ;#if defined(CONFIG_FIT ) -const void *fit_hdr; +const void *fit_hdr =NULL ;#endif show_boot_progress (52 );
@@ -1021,12 +1022,6 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )case IMAGE_FORMAT_FIT : fit_hdr = (const void *)addr; -if (!fit_check_format (fit_hdr)) { -show_boot_progress (-150 ); -puts ("** Bad FIT image format\n" ); -return 1 ; - } -show_boot_progress (151 );puts ("Fit image detected...\n" ); cnt =fit_get_size (fit_hdr);
@@ -1050,8 +1045,15 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )/* This cannot be done earlier, we need complete FIT image in RAM first */ -if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) -fit_print_contents ((const void *)addr); +if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) { +if (!fit_check_format (fit_hdr)) { +show_boot_progress (-150 ); +puts ("** Bad FIT image format\n" ); +return 1 ; + } +show_boot_progress (151 ); +fit_print_contents (fit_hdr); + }#endif /* Loading ok, update default load address */
common/cmd_scsi.c +8 -7
@@ -212,7 +212,7 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])image_header_t *hdr;int rcode =0 ;#if defined(CONFIG_FIT ) -const void *fit_hdr; +const void *fit_hdr =NULL ;#endif switch (argc) {
@@ -291,10 +291,6 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )case IMAGE_FORMAT_FIT : fit_hdr = (const void *)addr; -if (!fit_check_format (fit_hdr)) { -puts ("** Bad FIT image format\n" ); -return 1 ; - }puts ("Fit image detected...\n" ); cnt =fit_get_size (fit_hdr);
@@ -317,8 +313,13 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )/* This cannot be done earlier, we need complete FIT image in RAM first */ -if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) -fit_print_contents ((const void *)addr); +if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) { +if (!fit_check_format (fit_hdr)) { +puts ("** Bad FIT image format\n" ); +return 1 ; + } +fit_print_contents (fit_hdr); + }#endif /* Loading ok, update default load address */
common/cmd_usb.c +8 -7
@@ -316,7 +316,7 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])image_header_t *hdr;block_dev_desc_t *stor_dev;#if defined(CONFIG_FIT ) -const void *fit_hdr; +const void *fit_hdr =NULL ;#endif switch (argc) {
@@ -404,10 +404,6 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )case IMAGE_FORMAT_FIT : fit_hdr = (const void *)addr; -if (!fit_check_format (fit_hdr)) { -puts ("** Bad FIT image format\n" ); -return 1 ; - }puts ("Fit image detected...\n" ); cnt =fit_get_size (fit_hdr);
@@ -430,8 +426,13 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])#if defined(CONFIG_FIT )/* This cannot be done earlier, we need complete FIT image in RAM first */ -if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) -fit_print_contents ((const void *)addr); +if (genimg_get_format ((void *)addr) ==IMAGE_FORMAT_FIT ) { +if (!fit_check_format (fit_hdr)) { +puts ("** Bad FIT image format\n" ); +return 1 ; + } +fit_print_contents (fit_hdr); + }#endif /* Loading ok, update default load address */
PATCH 1/1 Delay FIT format check on sector based devices
Quoted 11 lines · Marian Balakowicz
Global FIT image operations like format check cannot be performed on a first sector data, defer them to the point when whole FIT image was uploaded to a system RAM.
Signed-off-by Marian Balakowicz <[email protected]>---
Grant,
Please give this patch a try on your system and let me know if it helped to solve the nand booting issue.
Marian:
Thanks for the prompt response on the patch. This matches what I mocked up as a fix and testing your solution works for the 'cmd_nand' case on my AMCC board. I did not test and cannot comment on the others so I'll partially ACK it.
Partial Acked-by: Grant Erickson <[email protected]>
Thanks again,
Grant
PATCH 1/1 Delay FIT format check on sector based devices
In reply to Marian BalakowiczQuoted 15 lines · Marian Balakowicz
Global FIT image operations like format check cannot be performed on a first sector data, defer them to the point when whole FIT image was uploaded to a system RAM.
Signed-off-by Marian Balakowicz <[email protected]>---
Grant,
Please give this patch a try on your system and let me know if it helped to solve the nand booting issue.
Thanks,
m.
Quoted 7 lines
common/cmd_doc.c | 19 ++++++++++--------- common/cmd_fdc.c | 15 ++++++++------- common/cmd_ide.c | 19 ++++++++++--------- common/cmd_nand.c | 38 ++++++++++++++++++++------------------ common/cmd_scsi.c | 15 ++++++++------- common/cmd_usb.c | 15 ++++++++------- 6 files changed, 64 insertions(+), 57 deletions(-)
NAND and DOC bits Acked-by: Scott Wood <[email protected]>
-Scott
Wolfgang Denk
AppliedPATCH 1/1 Delay FIT format check on sector based devices
In reply to Marian BalakowiczQuoted 15 lines · In message <[email protected]> you wrote:
Global FIT image operations like format check cannot be performed on a first sector data, defer them to the point when whole FIT image was uploaded to a system RAM.
Signed-off-by Marian Balakowicz <[email protected]>---
Grant,
Please give this patch a try on your system and let me know if it helped to solve the nand booting issue.
Thanks,
m.
Quoted 7 lines
common/cmd_doc.c | 19 ++++++++++--------- common/cmd_fdc.c | 15 ++++++++------- common/cmd_ide.c | 19 ++++++++++--------- common/cmd_nand.c | 38 ++++++++++++++++++++------------------ common/cmd_scsi.c | 15 ++++++++------- common/cmd_usb.c | 15 ++++++++------- 6 files changed, 64 insertions(+), 57 deletions(-)
Applied, thanks.
Best regards,
Wolfgang Denk
Signature · 6 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de If it happens once, it's a bug. If it happens twice, it's a feature. If it happens more than twice, it's a design philosophy.