cfi_cmdset_0001.c: do_write_buffer: wrong length

Nicolas Pitre nico at cam.org
Fri Dec 8 13:21:43 EST 2000



On Fri, 8 Dec 2000, David Vrabel wrote:

> Hi,
>
> In cfi_cmdset_0001.c do_write_buffer writes an incorrect length to the
> chip
>
>     cfi_write(map, CMD((len/(cfi->device_type*CFIDEV_INTERLEAVE))-1),
> cmd_adr);
>
> which with 1 x16 chip in x8 mode eg on the SBC-MediaGX (buswidth == 1;
> interleave == 1;
> devicetype == 2) works out as
>
>     cfi_write(map, CMD(len/2-1), cmd_adr); <-- Fails
>
> When it should be
>
>     cfi_write(map, CMD(len-1), cmd_adr); <-- Works
>
> Should it it be?
>     cfi_write(map, CMD(len/map->buswidth-1), cmd_adr);

No.  This will break the case where the interleave isn't 1.

Hmmm... Will it?

Euh...  Each time I get around this question I get confused...

Does someone have the data sheet nearby? (I don't ATM)...  What should the
lenght be if a x16 chip is used in x8 mode?  bytes/sizeof(char) or
bytes/sizeof(short)?

On a 2 x16 arrangement you have buswidth=4, interleave=2, devicetype=2.  In
that case it should be len/4 - 1.

Maybe you are right after all.


Nicolas



To unsubscribe, send "unsubscribe mtd" to majordomo at infradead.org



More information about the linux-mtd mailing list