When data.header_gap == 0, like on i.MX6, we seek to the start of the file after writing the barebox header there and proceed to overwrite it again. Therefore we can no longer detect the filetype and affected images can't be booted/flashed directly on < i.MX8 anymore. Fix this up: - on i.MX8, there is nothing at the start, so it's ok to write there - on i.MX6, we overwrite buf[0..sizeof_bb_header-1], but that's the way it was before Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- scripts/imx/imx-image.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/scripts/imx/imx-image.c b/scripts/imx/imx-image.c index 64be682417e0..de04962b09d1 100644 --- a/scripts/imx/imx-image.c +++ b/scripts/imx/imx-image.c @@ -978,10 +978,7 @@ int main(int argc, char *argv[]) } if (data.cpu_type == IMX_CPU_IMX35) { - xwrite(outfd, add_barebox_header ? bb_header : buf, - sizeof_bb_header); - xwrite(outfd, buf + sizeof_bb_header, - header_len - sizeof_bb_header); + xwrite(outfd, buf, header_len); xwrite(outfd, buf, header_len); } else { if (add_barebox_header && @@ -990,9 +987,6 @@ int main(int argc, char *argv[]) exit(1); } - xwrite(outfd, add_barebox_header ? bb_header : buf, - sizeof_bb_header); - if (lseek(outfd, data.header_gap, SEEK_SET) < 0) { perror("lseek"); exit(1); @@ -1001,6 +995,9 @@ int main(int argc, char *argv[]) xwrite(outfd, buf, header_len); } + if (add_barebox_header) + pwrite(outfd, bb_header, sizeof_bb_header, 0); + xwrite(outfd, infile, insize); /* pad until next 4k boundary */ -- 2.27.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox