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
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development