[U-Boot] [PATCH 2/5] nand_util: convert nand_write_skip_bad() to flags
Detlev Zundel
dzu at denx.de
Fri Apr 29 13:44:46 CEST 2011
Hi Ben,
> In a future commit the behaviour of nand_write_skip_bad()
> will be further extended.
>
> Convert the only flag currently passed to the nand_write_
> skip_bad() function to a bitfield of only one allocated
> member. This should avoid an explosion of int's at the
> end of the parameter list or the ambiguous calls like
>
> nand_write_skip_bad(info, offset, len, buf, 0, 1, 1);
> nand_write_skip_bad(info, offset, len, buf, 0, 1, 0);
>
> Instead there will be:
>
> nand_write_skip_bad(info, offset, len, buf, WITH_OOB |
> WITH_OTHER);
>
> Signed-off-by: Ben Gardiner <bengardiner at nanometrics.ca>
> ---
> common/cmd_nand.c | 3 ++-
> drivers/mtd/nand/nand_util.c | 8 ++++----
> include/nand.h | 5 ++++-
> 3 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/common/cmd_nand.c b/common/cmd_nand.c
> index 7bd37de..69b2acc 100644
> --- a/common/cmd_nand.c
> +++ b/common/cmd_nand.c
> @@ -581,7 +581,8 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
> printf("Unknown nand command suffix '%s'.\n", s);
> return 1;
> }
> - ret = nand_write_skip_bad(nand, off, &rwsize, (u_char *)addr, 1);
> + ret = nand_write_skip_bad(nand, off, &rwsize,
> + (u_char *)addr, WITH_OOB);
> #endif
> } else if (!strcmp(s, ".oob")) {
> /* out-of-band data */
I see an occurrence of nand_write_skip_bad just above this if block.
Please replace this also.
> diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c
> index 5a6f7ae..2bd8758 100644
> --- a/drivers/mtd/nand/nand_util.c
> +++ b/drivers/mtd/nand/nand_util.c
> @@ -448,11 +448,11 @@ static int check_skip_len(nand_info_t *nand, loff_t offset, size_t length)
> * @param offset offset in flash
> * @param length buffer length
> * @param buffer buffer to read from
> - * @param withoob whether write with yaffs format
> + * @param flags flags mmofying the behaviour of the write to NAND
> * @return 0 in case of success
> */
> int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
> - u_char *buffer, int withoob)
> + u_char *buffer, int flags)
> {
> int rval = 0, blocksize;
> size_t left_to_write = *length;
> @@ -460,7 +460,7 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
> int need_skip;
>
> #ifdef CONFIG_CMD_NAND_YAFFS
> - if (withoob) {
> + if (flags & WITH_OOB) {
> int pages;
> pages = nand->erasesize / nand->writesize;
> blocksize = (pages * nand->oobsize) + nand->erasesize;
> @@ -529,7 +529,7 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
> write_size = blocksize - block_offset;
>
> #ifdef CONFIG_CMD_NAND_YAFFS
> - if (withoob) {
> + if (flags & WITH_OOB) {
> int page, pages;
> size_t pagesize = nand->writesize;
> size_t pagesize_oob = pagesize + nand->oobsize;
> diff --git a/include/nand.h b/include/nand.h
> index 7459bd0..628317a 100644
> --- a/include/nand.h
> +++ b/include/nand.h
> @@ -114,8 +114,11 @@ typedef struct nand_erase_options nand_erase_options_t;
>
> int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
> u_char *buffer);
> +
> +#define WITH_OOB (1 << 0) /* whether write with yaffs format */
> +
If this flag is really only relevant for YAFFS, then please include this
in its name, i.e. rename it to "WITH_YAFFS_OOB".
> int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
> - u_char *buffer, int withoob);
> + u_char *buffer, int flags);
> int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts);
>
> #define NAND_LOCK_STATUS_TIGHT 0x01
Cheers
Detlev
--
Those who do not understand Unix are condemned to reinvent it,
poorly.
- Henry Spencer, University of Toronto Unix hack
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de
More information about the U-Boot
mailing list