I'm fine with that.  It probably is better to keep an eye on the actual read
data function as well.  Feel free to make the same tweak to the NAND write
page data function as well (patch 2/2 in the series).

// Dean Glazeski


On Thu, Dec 17, 2009 at 11:51 PM, David Brownell <davi...@pacbell.net>wrote:

> 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