Merge with git://www.denx.de/git/u-boot.git
[platform/kernel/u-boot.git] / drivers / nand / nand_util.c
index 7570210..cf05043 100644 (file)
 
 #include <common.h>
 
-#if (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined(CFG_NAND_LEGACY)
+#if defined(CONFIG_CMD_NAND) && !defined(CFG_NAND_LEGACY)
 
 #include <command.h>
 #include <watchdog.h>
 #include <malloc.h>
+#include <div64.h>
 
 #include <nand.h>
 #include <jffs2/jffs2.h>
@@ -83,15 +84,8 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
 
        erase.mtd = meminfo;
        erase.len  = meminfo->erasesize;
-       if (opts->offset == 0 && opts->length == 0) {
-               /* erase complete chip */
-               erase.addr = 0;
-               erase_length = meminfo->size;
-       } else {
-               /* erase specified region */
-               erase.addr = opts->offset;
-               erase_length = opts->length;
-       }
+       erase.addr = opts->offset;
+       erase_length = opts->length;
 
        isNAND = meminfo->type == MTD_NANDFLASH ? 1 : 0;
 
@@ -215,10 +209,10 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
                }
 
                if (!opts->quiet) {
-                       int percent = (int)
-                               ((unsigned long long)
+                       unsigned long long n =(unsigned long long)
                                 (erase.addr+meminfo->erasesize-opts->offset)
-                                * 100 / erase_length);
+                                * 100;
+                       int percent = (int)do_div(n, erase_length);
 
                        /* output progress message only at whole percent
                         * steps to reduce the number of messages printed
@@ -482,10 +476,9 @@ int nand_write_opts(nand_info_t *meminfo, const nand_write_options_t *opts)
                imglen -= readlen;
 
                if (!opts->quiet) {
-                       int percent = (int)
-                               ((unsigned long long)
-                                (opts->length-imglen) * 100
-                                / opts->length);
+                       unsigned long long n = (unsigned long long)
+                                (opts->length-imglen) * 100;
+                       int percent = (int)do_div(n, opts->length);
                        /* output progress message only at whole percent
                         * steps to reduce the number of messages printed
                         * on (slow) serial consoles
@@ -658,10 +651,9 @@ int nand_read_opts(nand_info_t *meminfo, const nand_read_options_t *opts)
                }
 
                if (!opts->quiet) {
-                       int percent = (int)
-                               ((unsigned long long)
-                                (opts->length-imglen) * 100
-                                / opts->length);
+                       unsigned long long n = (unsigned long long)
+                                (opts->length-imglen) * 100;
+                       int percent = (int)do_div(n ,opts->length);
                        /* output progress message only at whole percent
                         * steps to reduce the number of messages printed
                         * on (slow) serial consoles
@@ -866,4 +858,4 @@ int nand_unlock(nand_info_t *meminfo, ulong start, ulong length)
        return ret;
 }
 
-#endif /* (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined(CFG_NAND_LEGACY) */
+#endif