X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fflash%2Fnand%2Fcore.c;h=44b13ce1de85b09124528dca083b7019b133cc95;hb=34f70956ed31c2739d34bae23fa6ca620e5299f8;hp=50d824946253c3d0e091730f34f292bea5c95bdd;hpb=ef4fbd36d491b1c89cb13d43f6c03e26fd0d8a7d;p=openocd diff --git a/src/flash/nand/core.c b/src/flash/nand/core.c index 50d82494..44b13ce1 100644 --- a/src/flash/nand/core.c +++ b/src/flash/nand/core.c @@ -160,7 +160,14 @@ static struct nand_ecclayout nand_oob_8 = { }; #endif -struct nand_device *get_nand_device_by_name(const char *name) +/** + * Returns the flash bank specified by @a name, which matches the + * driver name and a suffix (option) specify the driver-specific + * bank number. The suffix consists of the '.' and the driver-specific + * bank number: when two davinci banks are defined, then 'davinci.1' refers + * to the second (e.g. DM355EVM). + */ +static struct nand_device *get_nand_device_by_name(const char *name) { unsigned requested = get_flash_name_index(name); unsigned found = 0; @@ -215,8 +222,9 @@ COMMAND_HELPER(nand_command_get_device, unsigned name_index, int nand_build_bbt(struct nand_device *nand, int first, int last) { - uint32_t page = 0x0; + uint32_t page; int i; + int pages_per_block = (nand->erase_size / nand->page_size); uint8_t oob[6]; if ((first < 0) || (first >= nand->num_blocks)) @@ -225,7 +233,8 @@ int nand_build_bbt(struct nand_device *nand, int first, int last) if ((last >= nand->num_blocks) || (last == -1)) last = nand->num_blocks - 1; - for (i = first; i < last; i++) + page = first * pages_per_block; + for (i = first; i <= last; i++) { nand_read_page(nand, page, NULL, 0, oob, 6); @@ -241,7 +250,7 @@ int nand_build_bbt(struct nand_device *nand, int first, int last) nand->blocks[i].is_bad = 0; } - page += (nand->erase_size / nand->page_size); + page += pages_per_block; } return ERROR_OK; @@ -521,7 +530,7 @@ int nand_erase(struct nand_device *nand, int first_block, int last_block) if (!nand->device) return ERROR_NAND_DEVICE_NOT_PROBED; - if ((first_block < 0) || (last_block > nand->num_blocks)) + if ((first_block < 0) || (last_block >= nand->num_blocks)) return ERROR_INVALID_ARGUMENTS; /* make sure we know if a block is bad before erasing it */