[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