
Hi Stefano and Marek,
-----Original Message----- From: stefano babic [mailto:sbabic@denx.de] Sent: dimanche 1 avril 2012 12:33 To: Gachet Daniel Cc: u-boot@lists.denx.de Subject: Re: [U-Boot] [PATCH] Correct corrupted NAND Flash access on KARO TX25 modules
Am 31/03/2012 09:31, schrieb Gachet Daniel:
This short patch correct corrupted data while reading NAND flash modules on the KARO TX25 module.
The current version of the mxc_nand driver uses the symmetric mode to access the NAND flash, but the devices populated on the KARO TX25 only support an asymmetric mode (i.MX25: bit 8 within NAND_FLASH_CONFIG1 register cleared).
Signed-off-by: Daniel Gachet daniel.gachet@hefr.ch Cc: Wolfgang Denk <wd@denx.de >
diff -upr drivers/mtd/nand/mxc_nand.c drivers/mtd/nand/mxc_nand.c --- drivers/mtd/nand/mxc_nand.c 2011-12-23 20:25:35.000000000 +0100 +++ drivers/mtd/nand/mxc_nand.c 2012-03-30 08:10:13.000000000 +0200 @@ -1290,7 +1290,9 @@ static void mxc_setup_config1(void) uint16_t tmp;
tmp = readw(&host->regs->nfc_config1); +#ifndef MACH_TYPE_TX25 tmp |= NFC_ONE_CYCLE; +#endif
NAK. We cleaned up all u-boot occurrencies of machine id, except the machid passed to the kernel. And when the device tree will be effective, also the machid will be obsolete.
This change seems not strictly related to the Karo's SOM, but it it a configuration of the mxc_nand driver, such as CONFIG_NAND_MXC_V1_1. You can add a CONFIG_NAND_MXC_* value (please add documentation, too) and use it in the driver code.
Can I also ask you if the same setup is used in the Linux driver (this SOM is not mainlined, I suppose you have a porting from the manufacturer) ? As far as I can see, this setup is not used for the Freescale's mx25pdk (the only MX25 board in mainline kernel).
Best regards, Stefano Babic
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================
I found the proposition of Stefano very interesting. My proposition will be to define a specific value for that bit, for instance CONFIG_NAND_MXC_V1_1_NFC_ONE_CYCLE. If this value is defined, the NFC_ONE_CYCLE bit will be set, otherwise not. This value could be defined in the specific board configuration file (./include/configs/...).
The patch will be the following: diff -upr drivers/mtd/nand/mxc_nand.c drivers/mtd/nand/mxc_nand.c --- drivers/mtd/nand/mxc_nand.c 2011-12-23 20:25:35.000000000 +0100 +++ drivers/mtd/nand/mxc_nand.c 2012-04-01 21:07:13.000000000 +0200 @@ -1290,7 +1290,9 @@ static void mxc_setup_config1(void) uint16_t tmp;
tmp = readw(&host->regs->nfc_config1); +#ifdef CONFIG_NAND_MXC_V1_1_NFC_ONE_CYCLE tmp |= NFC_ONE_CYCLE; +#endif tmp |= NFC_4_8N_ECC; writew(tmp, &host->regs->nfc_config1); if (host->pagesize_2k)
Is that a valuable solution for you?
Cordially,
Daniel