[PATCH] mtd: nand: pxa3xx: Fix READOOB implementation

Sean Nyekjær sean.nyekjaer at prevas.dk
Mon Dec 18 04:45:16 PST 2017



On 2017-12-18 13:33, Ezequiel Garcia wrote:
> On 18 December 2017 at 07:32, Boris Brezillon
> <boris.brezillon at free-electrons.com> wrote:
>> In the current driver, OOB bytes are accessed in raw mode, and when a
>> page access is done with NDCR_SPARE_EN set and NDCR_ECC_EN cleared, the
>> driver must read the whole spare area (64 bytes in case of a 2k page,
>> 16 bytes for a 512 page). The driver was only reading the free OOB
>> bytes, which was leaving some unread data in the FIFO and was somehow
>> leading to a timeout.
>>
>> We could patch the driver to read ->spare_size + ->ecc_size instead of
>> just ->spare_size when READOOB is requested, but we'd better make
>> in-band and OOB accesses consistent.
>> Since the driver is always accessing in-band data in non-raw mode (with
>> the ECC engine enabled), we should also access OOB data in this mode.
>> That's particularly useful when using the BCH engine because in this
>> mode the free OOB bytes are also ECC protected.
>>
>> Fixes: 43bcfd2bb24a ("mtd: nand: pxa3xx: Add driver-specific ECC BCH support")
>> Cc: <stable at kernel.vger.org>
>> Reported-by: Sean Nyekjær <sean.nyekjaer at prevas.dk>
>> Tested-by: Willy Tarreau <w at 1wt.eu>
>> Signed-off-by: Boris Brezillon <boris.brezillon at free-electrons.com>
>> ---
>>   drivers/mtd/nand/pxa3xx_nand.c | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
>> index 021374fe59dc..d1979c7dbe7e 100644
>> --- a/drivers/mtd/nand/pxa3xx_nand.c
>> +++ b/drivers/mtd/nand/pxa3xx_nand.c
>> @@ -961,6 +961,7 @@ static void prepare_start_command(struct pxa3xx_nand_info *info, int command)
>>
>>          switch (command) {
>>          case NAND_CMD_READ0:
>> +       case NAND_CMD_READOOB:
>>          case NAND_CMD_PAGEPROG:
>>                  info->use_ecc = 1;
>>                  break;
>> --
>> 2.11.0
>>
> Acked-by: Ezequiel Garcia <ezequiel at vanguardiasur.com.ar>
>
> Thanks a lot Boris!

Tested-by: Sean Nyekjaer <sean.nyekjaer at prevas.dk>

Thanks




More information about the linux-mtd mailing list