diff options
-rw-r--r-- | external/ffspart/ffspart.c | 16 | ||||
-rw-r--r-- | external/ffspart/test/files/04-tiny-pnor2.out | bin | 2560 -> 2560 bytes | |||
-rw-r--r-- | external/ffspart/test/results/07-big-files.err | 2 | ||||
-rw-r--r-- | external/ffspart/test/tests/04-tiny-pnor2 | 2 | ||||
-rw-r--r-- | external/ffspart/test/tests/08-small-files | 2 |
5 files changed, 17 insertions, 5 deletions
diff --git a/external/ffspart/ffspart.c b/external/ffspart/ffspart.c index eeee0d4..bb46a9e 100644 --- a/external/ffspart/ffspart.c +++ b/external/ffspart/ffspart.c @@ -31,6 +31,7 @@ #include <libflash/libflash.h> #include <libflash/libffs.h> #include <libflash/blocklevel.h> +#include <libflash/ecc.h> #include <common/arch_flash.h> /* @@ -250,6 +251,14 @@ static int parse_entry(struct blocklevel_device *bl, if (*line != '\0' && *(line + 1) != '\0') { filename = line + 1; + + /* + * Support flashing already ecc'd data as this is the case + * for POWER8 SBE image binary. + */ + if (has_ecc(new_entry) && !strstr(filename, ".ecc")) + blocklevel_ecc_protect(bl, pbase, psize); + data_fd = open(filename, O_RDONLY); if (data_fd == -1) { fprintf(stderr, "Couldn't open file '%s' for '%s' partition " @@ -269,9 +278,12 @@ static int parse_entry(struct blocklevel_device *bl, * Sanity check that the file isn't too large for * partition */ + if (has_ecc(new_entry) && !strstr(filename, ".ecc")) + psize = ecc_buffer_size_minus_ecc(psize); if (pactual > psize) { - fprintf(stderr, "File '%s' for partition '%s' is too large\n", - filename, name); + fprintf(stderr, "File '%s' for partition '%s' is too large," + " %u > %u\n", + filename, name, pactual, psize); close(data_fd); return -1; } diff --git a/external/ffspart/test/files/04-tiny-pnor2.out b/external/ffspart/test/files/04-tiny-pnor2.out Binary files differindex 394edf0..617c4ef 100644 --- a/external/ffspart/test/files/04-tiny-pnor2.out +++ b/external/ffspart/test/files/04-tiny-pnor2.out diff --git a/external/ffspart/test/results/07-big-files.err b/external/ffspart/test/results/07-big-files.err index 083bad2..bfb6fa0 100644 --- a/external/ffspart/test/results/07-big-files.err +++ b/external/ffspart/test/results/07-big-files.err @@ -1,4 +1,4 @@ WARNING: Attempting to parse a partition line without any TOCs created. Generating a default TOC at zero -File 'FILE_ONE' for partition 'ONE' is too large +File 'FILE_ONE' for partition 'ONE' is too large, 257 > 227 Failed to parse input file 'FILE' at line 1 diff --git a/external/ffspart/test/tests/04-tiny-pnor2 b/external/ffspart/test/tests/04-tiny-pnor2 index a7e79ab..3db5f1e 100644 --- a/external/ffspart/test/tests/04-tiny-pnor2 +++ b/external/ffspart/test/tests/04-tiny-pnor2 @@ -4,7 +4,7 @@ touch $DATA_DIR/$CUR_TEST.gen i=1; while [ $i -lt 5 ] ; do j=0; - while [ $j -lt $((0x100)) ] ; do + while [ $j -lt $((0xe0)) ] ; do echo -n "$i" >> $DATA_DIR/$CUR_TEST.$i; j=$(expr $j + 1); done diff --git a/external/ffspart/test/tests/08-small-files b/external/ffspart/test/tests/08-small-files index fb2a98b..1e4f3b3 100644 --- a/external/ffspart/test/tests/08-small-files +++ b/external/ffspart/test/tests/08-small-files @@ -4,7 +4,7 @@ touch $DATA_DIR/$CUR_TEST.gen i=1; while [ $i -lt 5 ] ; do j=0; - while [ $j -lt $((0xff)) ] ; do + while [ $j -lt $((0xe0)) ] ; do echo -n "$i" >> $DATA_DIR/$CUR_TEST.$i; j=$(expr $j + 1); done |