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

Reply via email to