
21 Apr
2015
21 Apr
'15
1:17 a.m.
On Wed, 2015-04-08 at 16:44 +0200, Stefan Agner wrote:
- case ALT_BUF_ONFI:
/* Reverse byte since the controller uses big endianness */
c = nfc->column % 4;
c = nfc->column - c + (3 - c);
These two lines can be simplified to "c = nfc->column ^ 3;"
Doesn't this driver run on some big-endian targets, in which case you wouldn't want to reverse? I think you should instead be using in_be32() and then extracting the byte within the word after it's been put into cpu byte order.
tmp = *((u8 *)(nfc->regs + NFC_MAIN_AREA(0) + c));
break;
- default:
tmp = *((u8 *)(nfc->regs + NFC_MAIN_AREA(0) + c));
break;
Why is the byte order different here? I guess you've been writing data backwards onto the NAND chip? Won't that mess up factory bad block markers?
-Scott