mtd: sh_flctl: Add DMA capabilty

Bastian Hecht hechtb at gmail.com
Tue May 10 09:25:55 PDT 2016


Hi Dan,

thanks for the bug report and the comments.

Currently I don't work as a software engineer and have no development
environment at all, so I can't really take care of this problem.

Best,

 Bastian


2016-05-03 20:48 GMT+02:00 Dan Carpenter <dan.carpenter at oracle.com>:
> Hello Bastian Hecht,
>
> The patch 83738d87e3a0: "mtd: sh_flctl: Add DMA capabilty" from Oct
> 19, 2012, leads to the following static checker warning:
>
>         drivers/mtd/nand/sh_flctl.c:532 write_ec_fiforeg()
>         error: wrong number of bits for 'cpu_to_be32' (64 vs 32) left= '*buf + i' *buf + i = (__builtin_bswap32(((*buf + i))))
>
> drivers/mtd/nand/sh_flctl.c
>    523  static void write_ec_fiforeg(struct sh_flctl *flctl, int rlen,
>    524                                                  unsigned int offset)
>    525  {
>    526          int i, len_4align;
>    527          unsigned long *buf = (unsigned long *)&flctl->done_buff[offset];
>                 ^^^^^^^^^^^^^^^^^^
> Long can be 8 bytes.  Are we really assuming a 32 bit CPU in this day
> and era?
>
>
>    528
>    529          len_4align = (rlen + 3) / 4;
>    530
>    531          for (i = 0; i < len_4align; i++)
>    532                  buf[i] = cpu_to_be32(buf[i]);
>
> Storing a be32 in long is not right.
>
>    533
>    534          /* initiate DMA transfer */
>    535          if (flctl->chan_fifo0_tx && rlen >= 32 &&
>    536                  flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_MEM_TO_DEV) > 0)
>    537                          return; /* DMA success */
>    538
>    539          /* do polling transfer */
>    540          for (i = 0; i < len_4align; i++) {
>    541                  wait_wecfifo_ready(flctl);
>    542                  writel(buf[i], FLECFIFO(flctl));
>                         ^^^^^^
> writel() is named historically.  It actually writes u32s.  This code has
> endian bugs.  Read.  https://lwn.net/Articles/205624/
>
>    543          }
>    544  }
>
>
> regards,
> dan carpenter



More information about the linux-mtd mailing list