[PATCH] Add driver for M-sys / Sandisk diskonchip G4 nand flash

Robert Jarzmik robert.jarzmik at free.fr
Thu Oct 13 02:58:53 EDT 2011


Ivan Djelic <ivan.djelic at parrot.com> writes:

> On Tue, Oct 11, 2011 at 08:17:22PM +0100, Mike Dunn wrote:
>> On 10/11/2011 04:50 AM, Ivan Djelic wrote:
>> >
>> > After a more careful examination, I believe your hardware gives you
>> > recv_ecc^calc_ecc
>> 
>> It might be a little more complicated.
>
> Well, thanks to your ecc samples I have the answer now; the hardware does
> provide recv_ecc^calc_ecc, with a little twist: a parity code in inserted into
> data before performing BCH remainder computations.
> Here is a more precise description:
>
> writing algorithm:
> -----------------
> 1. 512 bytes of data are sent to HW generator
> 2. 7 bytes of user data (oob[0] to oob[6]) are sent to HW generator
> 3. A Hamming (?) parity byte is generated (from oob[0]...oob[6]?) and sent to
>    HW generator
> 4. The BCH engine completes its polynomial remainder computation on the above
>    520 bytes
>
> Note that the HW generator reads and writes bytes in reversed bit order.
>
> I don't really know how the parity byte in step 3 is generated, or what its
> purpose is; it may be there to allow oob reading without performing a full BCH
> decode, but the code seems too small to me to protect anything in a useful way.
> The nice thing is, we don't really need this code to perform BCH decoding.
Hi Ivan,

For the lonely parity byte, I can confirm it's a Hamming parity over 7
bytes. This parity byte is generated by the hardware as well when the page is
written :
 - 512 bytes of data are written into the page
 - then 7 bytes of OOB are written
 - then the "Hamming HW register is read" => we get the ECC back
   => this is the generation you're talking about
 - then 1 byte of OOB is written => we write the Hamming ECC
 - then 7 bytes of BCH ECC registers are read
 - then 7 bytes of BCH ECC are written
 - then 1 byte (dummy byte) is written

The exciting part is that with Mike and your work, I know what the unexplained
'7' now means, and that I can add the ECC checks to docg3 :)

Cheers.

--
Robert



More information about the linux-mtd mailing list