Hello Adrian,

On Fri, 1 Aug 2008, Adrian Hunter wrote:

> Update OneNAND support for OMAP3.

a few quick comments.

> +             reg =
> omap2_onenand_readw(onenand_base+ONENAND_REG_VERSION_ID);

Just a minor nit - please use spaces around binary & ternary operators per 
CodingStyle.

> +                       (sync_write?GPMC_CONFIG1_WRITEMULTIPLE_SUPP:0) |
> +                       (sync_write?GPMC_CONFIG1_WRITETYPE_SYNC:0) |

as above.

> diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c
> index ba83900..378ee17 100644
> --- a/drivers/mtd/onenand/omap2.c
> +++ b/drivers/mtd/onenand/omap2.c
> @@ -223,6 +227,155 @@ static inline int omap2_onenand_bufferram_offset(struct
> mtd_info *mtd, int area)
>       return 0;
> }
> 
> +#if defined(CONFIG_ARCH_OMAP3)
> +
> +static int omap3_onenand_read_bufferram(struct mtd_info *mtd, int area,
> +                                     unsigned char *buffer, int offset,
> +                                     size_t count)
> +{
> +     struct omap2_onenand *info = container_of(mtd, struct omap2_onenand,
> mtd);
> +     struct onenand_chip *this = mtd->priv;
> +     dma_addr_t dma_src, dma_dst;
> +     int bram_offset;
> +     unsigned long timeout;
> +     void *buf = (void *)buffer;
> +     size_t xtra;
> +     volatile unsigned *done;

The way this volatile is used doesn't look right...

> +     INIT_COMPLETION(info->dma_done);
> +     omap_start_dma(info->dma_channel);
> +
> +     timeout = jiffies + msecs_to_jiffies(20);
> +     done = &info->dma_done.done;

So the volatile here appears to apply to the address of 'done', but this 
address does not change, correct?  Only the value of 'done' itself 
changes.

> +     while (time_before(jiffies, timeout))
> +             if (*done)
> +                     break;

Can this be replaced with wait_for_completion_timeout() or something 
similar?

> +     dma_unmap_single(&info->pdev->dev, dma_dst, count, DMA_FROM_DEVICE);
> +
> +     if (!*done) {
> +             dev_err(&info->pdev->dev, "timeout waiting for DMA\n");
> +             goto out_copy;
> +     }

...

> +static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
> +                                      const unsigned char *buffer, int
> offset,
> +                                      size_t count)
> +{
> +     struct omap2_onenand *info = container_of(mtd, struct omap2_onenand,
> mtd);
> +     struct onenand_chip *this = mtd->priv;
> +     dma_addr_t dma_src, dma_dst;
> +     int bram_offset;
> +     unsigned long timeout;
> +     void *buf = (void *)buffer;
> +     volatile unsigned *done;

Same comments in this function per volatile.


- Paul
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to