On Thursday 17 December 2009, Dean Glazeski wrote: > +int nand_read_data_page(struct nand_device *nand, uint8_t *data, uint32_t > size) > +{ > + uint32_t i; > + int retval = ERROR_NAND_OPERATION_FAILED; > + > + if (nand->controller->read_block_data != NULL) { > + retval = (nand->controller->read_block_data)(nand, data, > size); > + } > + > + if (ERROR_NAND_NO_BUFFER == retval) { > + int incr = (nand->device->options & NAND_BUSWIDTH_16) ? 2 : 1; > + for (i = 0; i < size; i += incr) { > + nand->controller->read_data(nand, data); > + data += incr; > + } > + } > + > + return ERROR_OK;
However, returning ERROR_OK if retval != NAND_NO_BUFFER is wrong on multiple counts. Any problem if I just combine it with the appended fixup patch? - Dave --- oocd.orig/src/flash/nand/core.c 2009-12-17 21:48:27.000000000 -0800 +++ oocd/src/flash/nand/core.c 2009-12-17 21:47:05.000000000 -0800 @@ -770,22 +770,23 @@ int nand_page_command(struct nand_device int nand_read_data_page(struct nand_device *nand, uint8_t *data, uint32_t size) { - uint32_t i; - int retval = ERROR_NAND_OPERATION_FAILED; + int retval = ERROR_NAND_NO_BUFFER; - if (nand->controller->read_block_data != NULL) { + if (nand->controller->read_block_data != NULL) retval = (nand->controller->read_block_data)(nand, data, size); - } if (ERROR_NAND_NO_BUFFER == retval) { + uint32_t i; int incr = (nand->device->options & NAND_BUSWIDTH_16) ? 2 : 1; - for (i = 0; i < size; i += incr) { - nand->controller->read_data(nand, data); + + retval = ERROR_OK; + for (i = 0; retval == ERROR_OK && i < size; i += incr) { + retval = nand->controller->read_data(nand, data); data += incr; } } - return ERROR_OK; + return retval; } int nand_read_page_raw(struct nand_device *nand, uint32_t page, _______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development