diff options
author | wdenk <wdenk> | 2003-03-31 16:34:49 +0000 |
---|---|---|
committer | wdenk <wdenk> | 2003-03-31 16:34:49 +0000 |
commit | 85ec0bcc1bc40a67368461fee0435d79305168b1 (patch) | |
tree | 084062015af4a61080c48c1796dcffbc90ab02f1 /common/cmd_nand.c | |
parent | 506f044131515a80c7c8479a84df028be880b34e (diff) | |
download | u-boot-imx-85ec0bcc1bc40a67368461fee0435d79305168b1.zip u-boot-imx-85ec0bcc1bc40a67368461fee0435d79305168b1.tar.gz u-boot-imx-85ec0bcc1bc40a67368461fee0435d79305168b1.tar.bz2 |
* Patch by Arun Dharankar, 24 Mar 2003:
- add threads / scheduler example code
* Add patches by Robert Schwebel, 31 Mar 2003:
- add ctrl-c support for kermit download
- align bdinfo output on ARM
* Add CPU ID, version, and clock speed for INCA-IP
Diffstat (limited to 'common/cmd_nand.c')
-rw-r--r-- | common/cmd_nand.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/common/cmd_nand.c b/common/cmd_nand.c index e933120..a041b29 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -1266,6 +1266,7 @@ static int nand_erase(struct nand_chip* nand, size_t ofs, size_t len) { unsigned long nandptr; struct Nand *mychip; + int ret = 0; if (ofs & (nand->erasesize-1) || len & (nand->erasesize-1)) { printf ("Offset and size must be sector aligned, erasesize = %d\n", @@ -1275,6 +1276,17 @@ static int nand_erase(struct nand_chip* nand, size_t ofs, size_t len) nandptr = nand->IO_ADDR; + /* Select the NAND device */ + NAND_ENABLE_CE(nand); /* set pin low */ + + /* Check the WP bit */ + NanD_Command(nand, NAND_CMD_STATUS); + if (!(READ_NAND(nand->IO_ADDR) & 0x80)) { + printf ("nand_write_ecc: Device is write protected!!!\n"); + ret = -1; + goto out; + } + /* FIXME: Do nand in the background. Use timers or schedule_task() */ while(len) { mychip = &nand->chips[shr(ofs, nand->chipshift)]; @@ -1288,20 +1300,22 @@ static int nand_erase(struct nand_chip* nand, size_t ofs, size_t len) if (READ_NAND(nandptr) & 1) { printf("Error erasing at 0x%lx\n", (long)ofs); /* There was an error */ - goto callback; + ret = -1; + goto out; } ofs += nand->erasesize; len -= nand->erasesize; } - callback: - return 0; +out: + /* De-select the NAND device */ + NAND_DISABLE_CE(nand); /* set pin high */ + + return ret; } static inline int nandcheck(unsigned long potential, unsigned long physadr) { - - return 0; } |