
On 08/16/2012 12:05 AM, Josh Wu wrote:
The Programmable Multibit ECC (PMECC) controller is a programmable binary BCH(Bose, Chaudhuri and Hocquenghem) encoder and decoder. This controller can be used to support both SLC and MLC NAND Flash devices. It supports to generate ECC to correct 2, 4, 8, 12 or 24 bits of error per sector of data.
To use PMECC in this driver, the user needs to set the PMECC correction capability, the sector size and ROM lookup table offsets in board config file.
This driver is ported from Linux kernel atmel_nand PMECC patch. The main difference is in this version it uses registers structure access hardware instead of using macros.
Sigh, I wish U-Boot's code style policies weren't so rigid as to force such a difference relative to the Linux driver.
- /* Computation 2t syndromes based on S(x) */
- /* Odd syndromes */
- for (i = 1; i < 2 * cap; i += 2) {
for (j = 0; j < host->pmecc_degree; j++) {
if (partial_syn[i] & ((unsigned short)0x1 << j))
si[i] = readw(alpha_to + i * j) ^ si[i];
}
Will that (unsigned short) make any difference? Won't it just get promoted back to int for the computation?
i++;
err_nbr--;
- }
- return;
+}
If it came over from Linux this way, I'm not asking you to change it just here, but the return; at the end is superfluous.
- while ((pmecc_readl(host->pmecc, sr) & PMECC_SR_BUSY))
udelay(1);
Timeout?
-Scott