[U-Boot] [PATCH 1/3] tools: mxsboot: Staticize functions

Make remaining non-static functions static and the same for vars.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam fabio.estevam@freescale.com Cc: Stefano Babic sbabic@denx.de --- tools/mxsboot.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/tools/mxsboot.c b/tools/mxsboot.c index 3d9cc10..1060cbf 100644 --- a/tools/mxsboot.c +++ b/tools/mxsboot.c @@ -28,14 +28,14 @@ * * TWEAK this if you have different kind of NAND chip. */ -uint32_t nand_writesize = 2048; -uint32_t nand_oobsize = 64; -uint32_t nand_erasesize = 128 * 1024; +static uint32_t nand_writesize = 2048; +static uint32_t nand_oobsize = 64; +static uint32_t nand_erasesize = 128 * 1024;
/* * Sector on which the SigmaTel boot partition (0x53) starts. */ -uint32_t sd_sector = 2048; +static uint32_t sd_sector = 2048;
/* * Each of the U-Boot bootstreams is at maximum 1MB big. @@ -434,7 +434,7 @@ static int mx28_nand_write_firmware(struct mx28_nand_fcb *fcb, int infd, return 0; }
-void usage(void) +static void usage(void) { printf( "Usage: mxsboot [ops] <type> <infile> <outfile>\n" @@ -575,7 +575,7 @@ err0: return ret; }
-int parse_ops(int argc, char **argv) +static int parse_ops(int argc, char **argv) { int i; int tmp;

Without this marker, Linux will complain that the NAND pages with FCB are invalid.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam fabio.estevam@freescale.com Cc: Stefano Babic sbabic@denx.de --- tools/mxsboot.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/tools/mxsboot.c b/tools/mxsboot.c index 1060cbf..90b2173 100644 --- a/tools/mxsboot.c +++ b/tools/mxsboot.c @@ -379,7 +379,7 @@ static uint8_t *mx28_nand_fcb_block(struct mx28_nand_fcb *fcb) return block; }
-static int mx28_nand_write_fcb(struct mx28_nand_fcb *fcb, char *buf) +static int mx28_nand_write_fcb(struct mx28_nand_fcb *fcb, uint8_t *buf) { uint32_t offset; uint8_t *fcbblock; @@ -393,13 +393,15 @@ static int mx28_nand_write_fcb(struct mx28_nand_fcb *fcb, char *buf) for (i = 0; i < STRIDE_PAGES * STRIDE_COUNT; i += STRIDE_PAGES) { offset = i * nand_writesize; memcpy(buf + offset, fcbblock, nand_writesize + nand_oobsize); + /* Mark the NAND page is OK. */ + buf[offset + nand_writesize] = 0xff; }
free(fcbblock); return ret; }
-static int mx28_nand_write_dbbt(struct mx28_nand_dbbt *dbbt, char *buf) +static int mx28_nand_write_dbbt(struct mx28_nand_dbbt *dbbt, uint8_t *buf) { uint32_t offset; int i = STRIDE_PAGES * STRIDE_COUNT; @@ -413,7 +415,7 @@ static int mx28_nand_write_dbbt(struct mx28_nand_dbbt *dbbt, char *buf) }
static int mx28_nand_write_firmware(struct mx28_nand_fcb *fcb, int infd, - char *buf) + uint8_t *buf) { int ret; off_t size; @@ -462,7 +464,7 @@ static int mx28_create_nand_image(int infd, int outfd) struct mx28_nand_fcb *fcb; struct mx28_nand_dbbt *dbbt; int ret = -1; - char *buf; + uint8_t *buf; int size; ssize_t wr_size;

On 27/08/2013 23:32, Marek Vasut wrote:
Without this marker, Linux will complain that the NAND pages with FCB are invalid.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam fabio.estevam@freescale.com Cc: Stefano Babic sbabic@denx.de
Applied to u-boot-imx, thanks !
Best regards, Stefano Babic

Dear Stefano Babic,
On 27/08/2013 23:32, Marek Vasut wrote:
Without this marker, Linux will complain that the NAND pages with FCB are invalid.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam fabio.estevam@freescale.com Cc: Stefano Babic sbabic@denx.de
Applied to u-boot-imx, thanks !
Fabio, can you confirm this does not break MX28EVK please ?
Best regards, Marek Vasut

Hi Marek,
On Tue, Sep 10, 2013 at 6:33 PM, Marek Vasut marex@denx.de wrote:
Dear Stefano Babic,
On 27/08/2013 23:32, Marek Vasut wrote:
Without this marker, Linux will complain that the NAND pages with FCB are invalid.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam fabio.estevam@freescale.com Cc: Stefano Babic sbabic@denx.de
Applied to u-boot-imx, thanks !
Fabio, can you confirm this does not break MX28EVK please ?
I am currently without the NAND flash populated on my mx28evk.
Maybe Hector could help testing it?
Regards,
Fabio Estevam

Dear Fabio Estevam,
Hi Marek,
On Tue, Sep 10, 2013 at 6:33 PM, Marek Vasut marex@denx.de wrote:
Dear Stefano Babic,
On 27/08/2013 23:32, Marek Vasut wrote:
Without this marker, Linux will complain that the NAND pages with FCB are invalid.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam fabio.estevam@freescale.com Cc: Stefano Babic sbabic@denx.de
Applied to u-boot-imx, thanks !
Fabio, can you confirm this does not break MX28EVK please ?
I am currently without the NAND flash populated on my mx28evk.
Maybe Hector could help testing it?
Either way WFM, but I am still not fully confident in this patchset (yet).
Best regards, Marek Vasut

Fix the method of flashing FCB blocks into NAND. The new env writes all four FCB blocks and also does not scrub such a big part of the NAND. This fixed complains about busted NAND blocks in Linux.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam fabio.estevam@freescale.com Cc: Stefano Babic sbabic@denx.de --- include/configs/m28evk.h | 22 ++++++++++++++++++++-- include/configs/mx28evk.h | 22 ++++++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/include/configs/m28evk.h b/include/configs/m28evk.h index eba8759..8a0587c 100644 --- a/include/configs/m28evk.h +++ b/include/configs/m28evk.h @@ -170,11 +170,29 @@ "nand info ; " \ "setexpr fcb_sz ${update_nand_stride} * ${update_nand_count};" \ "setexpr update_nand_fcb ${fcb_sz} * ${nand_writesize}\0" \ + "update_nand_write_fcb=" \ + "setenv i ${update_nand_count} ; " \ + "setenv update_nand_offset 0x0 ; " \ + "setexpr update_nand_step " \ + "${update_nand_stride} * ${nand_writesize} ; " \ + "while test ${i} -gt 0 ; do " \ + "echo ${update_nand_offset} ; " \ + "nand scrub -y ${update_nand_offset} " \ + "${nand_erasesize} ; " \ + "nand write.raw ${loadaddr} " \ + "${update_nand_offset} 0x1 ; " \ + "setexpr i ${i} - 1 ; " \ + "setexpr update_nand_offset " \ + "${update_nand_offset} + " \ + "${update_nand_step} ; " \ + "done ; " \ + "setenv i ; " \ + "setenv update_nand_offset ; " \ + "setenv update_nand_step\0" \ "update_nand_full=" /* Update FCB, DBBT and FW */ \ "if tftp ${update_nand_full_filename} ; then " \ "run update_nand_get_fcb_size ; " \ - "nand scrub -y 0x0 ${filesize} ; " \ - "nand write.raw ${loadaddr} 0x0 ${fcb_sz} ; " \ + "run update_nand_write_fcb ; " \ "setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \ "setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \ "nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \ diff --git a/include/configs/mx28evk.h b/include/configs/mx28evk.h index 07f88ca..b0ae031 100644 --- a/include/configs/mx28evk.h +++ b/include/configs/mx28evk.h @@ -172,11 +172,29 @@ "nand info ; " \ "setexpr fcb_sz ${update_nand_stride} * ${update_nand_count};" \ "setexpr update_nand_fcb ${fcb_sz} * ${nand_writesize}\0" \ + "update_nand_write_fcb=" \ + "setenv i ${update_nand_count} ; " \ + "setenv update_nand_offset 0x0 ; " \ + "setexpr update_nand_step " \ + "${update_nand_stride} * ${nand_writesize} ; " \ + "while test ${i} -gt 0 ; do " \ + "echo ${update_nand_offset} ; " \ + "nand scrub -y ${update_nand_offset} " \ + "${nand_erasesize} ; " \ + "nand write.raw ${loadaddr} " \ + "${update_nand_offset} 0x1 ; " \ + "setexpr i ${i} - 1 ; " \ + "setexpr update_nand_offset " \ + "${update_nand_offset} + " \ + "${update_nand_step} ; " \ + "done ; " \ + "setenv i ; " \ + "setenv update_nand_offset ; " \ + "setenv update_nand_step\0" \ "update_nand_full=" /* Update FCB, DBBT and FW */ \ "if tftp ${update_nand_full_filename} ; then " \ "run update_nand_get_fcb_size ; " \ - "nand scrub -y 0x0 ${filesize} ; " \ - "nand write.raw ${loadaddr} 0x0 ${fcb_sz} ; " \ + "run update_nand_write_fcb ; " \ "setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \ "setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \ "nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \

Fix the method of flashing FCB blocks into NAND. The new env writes all four FCB blocks and also does not scrub such a big part of the NAND. This fixed complains about busted NAND blocks in Linux.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam fabio.estevam@freescale.com Cc: Stefano Babic sbabic@denx.de --- include/configs/m28evk.h | 23 +++++++++++++++++++++-- include/configs/mx28evk.h | 23 +++++++++++++++++++++-- 2 files changed, 42 insertions(+), 4 deletions(-)
V2: Write the whole stride (64 pages) in the FCB case, not only one page.
diff --git a/include/configs/m28evk.h b/include/configs/m28evk.h index eba8759..6e1ecbe 100644 --- a/include/configs/m28evk.h +++ b/include/configs/m28evk.h @@ -170,11 +170,30 @@ "nand info ; " \ "setexpr fcb_sz ${update_nand_stride} * ${update_nand_count};" \ "setexpr update_nand_fcb ${fcb_sz} * ${nand_writesize}\0" \ + "update_nand_write_fcb=" \ + "setenv i ${update_nand_count} ; " \ + "setenv update_nand_offset 0x0 ; " \ + "setexpr update_nand_step " \ + "${update_nand_stride} * ${nand_writesize} ; " \ + "while test ${i} -gt 0 ; do " \ + "echo ${update_nand_offset} ; " \ + "nand scrub -y ${update_nand_offset} " \ + "${nand_erasesize} ; " \ + "nand write.raw ${loadaddr} " \ + "${update_nand_offset} " \ + "${update_nand_stride} ; " \ + "setexpr i ${i} - 1 ; " \ + "setexpr update_nand_offset " \ + "${update_nand_offset} + " \ + "${update_nand_step} ; " \ + "done ; " \ + "setenv i ; " \ + "setenv update_nand_offset ; " \ + "setenv update_nand_step\0" \ "update_nand_full=" /* Update FCB, DBBT and FW */ \ "if tftp ${update_nand_full_filename} ; then " \ "run update_nand_get_fcb_size ; " \ - "nand scrub -y 0x0 ${filesize} ; " \ - "nand write.raw ${loadaddr} 0x0 ${fcb_sz} ; " \ + "run update_nand_write_fcb ; " \ "setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \ "setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \ "nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \ diff --git a/include/configs/mx28evk.h b/include/configs/mx28evk.h index 07f88ca..e2324d6 100644 --- a/include/configs/mx28evk.h +++ b/include/configs/mx28evk.h @@ -172,11 +172,30 @@ "nand info ; " \ "setexpr fcb_sz ${update_nand_stride} * ${update_nand_count};" \ "setexpr update_nand_fcb ${fcb_sz} * ${nand_writesize}\0" \ + "update_nand_write_fcb=" \ + "setenv i ${update_nand_count} ; " \ + "setenv update_nand_offset 0x0 ; " \ + "setexpr update_nand_step " \ + "${update_nand_stride} * ${nand_writesize} ; " \ + "while test ${i} -gt 0 ; do " \ + "echo ${update_nand_offset} ; " \ + "nand scrub -y ${update_nand_offset} " \ + "${nand_erasesize} ; " \ + "nand write.raw ${loadaddr} " \ + "${update_nand_offset} " \ + "${update_nand_stride} ; " \ + "setexpr i ${i} - 1 ; " \ + "setexpr update_nand_offset " \ + "${update_nand_offset} + " \ + "${update_nand_step} ; " \ + "done ; " \ + "setenv i ; " \ + "setenv update_nand_offset ; " \ + "setenv update_nand_step\0" \ "update_nand_full=" /* Update FCB, DBBT and FW */ \ "if tftp ${update_nand_full_filename} ; then " \ "run update_nand_get_fcb_size ; " \ - "nand scrub -y 0x0 ${filesize} ; " \ - "nand write.raw ${loadaddr} 0x0 ${fcb_sz} ; " \ + "run update_nand_write_fcb ; " \ "setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \ "setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \ "nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \

Dear Marek Vasut,
Fix the method of flashing FCB blocks into NAND. The new env writes all four FCB blocks and also does not scrub such a big part of the NAND. This fixed complains about busted NAND blocks in Linux.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam fabio.estevam@freescale.com Cc: Stefano Babic sbabic@denx.de
include/configs/m28evk.h | 23 +++++++++++++++++++++-- include/configs/mx28evk.h | 23 +++++++++++++++++++++-- 2 files changed, 42 insertions(+), 4 deletions(-)
V2: Write the whole stride (64 pages) in the FCB case, not only one page.
diff --git a/include/configs/m28evk.h b/include/configs/m28evk.h index eba8759..6e1ecbe 100644 --- a/include/configs/m28evk.h +++ b/include/configs/m28evk.h @@ -170,11 +170,30 @@ "nand info ; " \ "setexpr fcb_sz ${update_nand_stride} * ${update_nand_count};" \ "setexpr update_nand_fcb ${fcb_sz} * ${nand_writesize}\0" \
- "update_nand_write_fcb=" \
"setenv i ${update_nand_count} ; " \
"setenv update_nand_offset 0x0 ; " \
"setexpr update_nand_step " \
"${update_nand_stride} * ${nand_writesize} ; " \
"while test ${i} -gt 0 ; do " \
"echo ${update_nand_offset} ; " \
"nand scrub -y ${update_nand_offset} " \
"${nand_erasesize} ; " \
"nand write.raw ${loadaddr} " \
"${update_nand_offset} " \
"${update_nand_stride} ; " \
Uh, I think this might need to be update_nand_step instead of update_nand_stride here.
[...]
Best regards, Marek Vasut

I was wondering about the following warnings while bootings linux 3.15.0-rc5:
[ 0.998885] nand: device found, Manufacturer ID: 0x98, Chip ID: 0xd1 [ 1.005485] nand: Toshiba NAND 128MiB 3,3V 8-bit [ 1.010165] nand: 128MiB, SLC, page size: 2048, OOB size: 64 [ 1.016176] Scanning device for bad blocks [ 1.022444] Bad eraseblock 1 at 0x000000020000 [ 1.027444] Bad eraseblock 2 at 0x000000040000 [ 1.032612] Bad eraseblock 3 at 0x000000060000
I noticed that these are the FCB pages for the NAND boot. Google found me this old thread. Nevertheless, I applied the patch on our custom i.MX28 board and the warnings disappeared.
But I still have some questions and remarks:
Marek Vasut-3 wrote
Fix the method of flashing FCB blocks into NAND. The new env writes all four FCB blocks and also does not scrub such a big part of the NAND. This fixed complains about busted NAND blocks in Linux.
- "update_nand_write_fcb=" \
"setenv i ${update_nand_count} ; " \
"setenv update_nand_offset 0x0 ; " \
"setexpr update_nand_step " \
"${update_nand_stride} * ${nand_writesize} ; " \
"while test ${i} -gt 0 ; do " \
"echo ${update_nand_offset} ; " \
"nand scrub -y ${update_nand_offset} " \
"${nand_erasesize} ; " \
"nand write.raw ${loadaddr} " \
"${update_nand_offset} " \
"${update_nand_stride} ; " \
Why not just write a page (which contains the FCB) instead of the whole stride?
There is also a problem about scrubbing of size 128K (which is the erase size) and writing 128K (which is the size of a search area with 64 pages). This works for the default settings (fuses not blown) of search stride = 1*64 and search count = 4. But if the fuses is blown and stride = 2*64 and count = 2 it will scrub 128K and write 256K (size of 128 pages). So the second half of the search area is not erased before writing.
Marek Vasut-3 wrote
"update_nand_full=" /* Update FCB, DBBT and FW */ \ "if tftp ${update_nand_full_filename} ; then " \ "run update_nand_get_fcb_size ; " \
"nand scrub -y 0x0 ${filesize} ; " \
"nand write.raw ${loadaddr} 0x0 ${fcb_sz} ; " \
"setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \ "setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \ "nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \"run update_nand_write_fcb ; " \
Running update_nand_write_fcb erases and writes the FCB search area. The remaining bytes of the u-boot.nand file are writting before erasing the corresponding NAND flash bytes. I added something like this before:
"setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \ "setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \ + "nand erase ${update_nand_fcb} ${update_sz}; " \ "nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \
Is there any reason why this patch is not applied to the u-boot-imx repo?
-- View this message in context: http://u-boot.10912.n7.nabble.com/PATCH-1-3-tools-mxsboot-Staticize-function... Sent from the U-Boot mailing list archive at Nabble.com.

On Wednesday, May 21, 2014 at 04:08:09 PM, jkrause wrote:
I was wondering about the following warnings while bootings linux 3.15.0-rc5:
[ 0.998885] nand: device found, Manufacturer ID: 0x98, Chip ID: 0xd1 [ 1.005485] nand: Toshiba NAND 128MiB 3,3V 8-bit [ 1.010165] nand: 128MiB, SLC, page size: 2048, OOB size: 64 [ 1.016176] Scanning device for bad blocks [ 1.022444] Bad eraseblock 1 at 0x000000020000 [ 1.027444] Bad eraseblock 2 at 0x000000040000 [ 1.032612] Bad eraseblock 3 at 0x000000060000
I noticed that these are the FCB pages for the NAND boot. Google found me this old thread. Nevertheless, I applied the patch on our custom i.MX28 board and the warnings disappeared.
Yeah, but sometimes this patch made my board unbootable and I didn't have time to investigate further. That is why it was never applied, to prevent that.
But I still have some questions and remarks:
Marek Vasut-3 wrote
Fix the method of flashing FCB blocks into NAND. The new env writes all four FCB blocks and also does not scrub such a big part of the NAND. This fixed complains about busted NAND blocks in Linux.
- "update_nand_write_fcb=" \
"setenv i ${update_nand_count} ; " \
"setenv update_nand_offset 0x0 ; " \
"setexpr update_nand_step " \
"${update_nand_stride} * ${nand_writesize} ; " \
"while test ${i} -gt 0 ; do " \
"echo ${update_nand_offset} ; " \
"nand scrub -y ${update_nand_offset} " \
"${nand_erasesize} ; " \
"nand write.raw ${loadaddr} " \
"${update_nand_offset} " \
"${update_nand_stride} ; " \
Why not just write a page (which contains the FCB) instead of the whole stride?
Feel free to roll V3 of the patch.
There is also a problem about scrubbing of size 128K (which is the erase size) and writing 128K (which is the size of a search area with 64 pages). This works for the default settings (fuses not blown) of search stride = 1*64 and search count = 4. But if the fuses is blown and stride = 2*64 and count = 2 it will scrub 128K and write 256K (size of 128 pages). So the second half of the search area is not erased before writing.
Yes, we only support the default factory configuration. There are ways to tweak the code to use different geometries, but that was to my knowledge never even tested.
Marek Vasut-3 wrote
"update_nand_full=" /* Update FCB, DBBT and FW */ \
"if tftp ${update_nand_full_filename} ; then " \ "run update_nand_get_fcb_size ; " \
"nand scrub -y 0x0 ${filesize} ; " \
"nand write.raw ${loadaddr} 0x0 ${fcb_sz} ; " \
"run update_nand_write_fcb ; " \
"setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \ "setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \ "nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \
Running update_nand_write_fcb erases and writes the FCB search area. The remaining bytes of the u-boot.nand file are writting before erasing the corresponding NAND flash bytes. I added something like this before:
"setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \ "setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \
"nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \"nand erase ${update_nand_fcb} ${update_sz}; " \
Is there any reason why this patch is not applied to the u-boot-imx repo?
Yes, see above. Feel free to submit V3 with detailed changelog and I can try if it still breaks my platforms.

On 27/08/2013 23:32, Marek Vasut wrote:
Make remaining non-static functions static and the same for vars.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam fabio.estevam@freescale.com Cc: Stefano Babic sbabic@denx.de
Applied to u-boot-imx, thanks.
Best regards, Stefano Babic
participants (4)
-
Fabio Estevam
-
jkrause
-
Marek Vasut
-
Stefano Babic