i.MX25: Set OOB size (MXC NFC)
authorTimo Ketola <timo@exertus.fi>
Tue, 17 Jan 2012 08:42:19 +0000 (10:42 +0200)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 23 Jan 2012 11:46:43 +0000 (11:46 +0000)
SPAS register (OOB size) is left wrong after reset with respect to 2KiB page NAND chip. That will lead to ECC errors after 'reset halt'.

Change-Id: If5a4685cb8d6be35879453951611ef1059da219c
Signed-off-by: Timo Ketola <timo@exertus.fi>
Reviewed-on: http://openocd.zylin.com/384
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/flash/nand/mxc.c

index b6694ca..3017019 100644 (file)
@@ -39,6 +39,7 @@
  * !! all function only tested with 2k page nand device; mxc_write_page
  *    writes the 4 MAIN_BUFFER's and is not compatible with < 2k page
  * !! oob must be be used due to NFS bug
+ * !! oob must be 64 bytes per 2KiB page
 */
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -48,6 +49,8 @@
 #include "mxc.h"
 #include <target/target.h>
 
+#define        OOB_SIZE        64
+
 #define nfc_is_v1() (mxc_nf_info->mxc_version == MXC_VERSION_MX27 || \
                                        mxc_nf_info->mxc_version == MXC_VERSION_MX31)
 #define nfc_is_v2() (mxc_nf_info->mxc_version == MXC_VERSION_MX25 || \
@@ -732,6 +735,7 @@ static int initialize_nf_controller(struct nand_device *nand)
                LOG_DEBUG("MXC_NF : work without ECC mode");
        }
        if (nfc_is_v2()) {
+               target_write_u16(target, MXC_NF_V2_SPAS, OOB_SIZE / 2);
                if (nand->page_size) {
                        uint16_t pages_per_block = nand->erase_size / nand->page_size;
                        work_mode |= MXC_NF_V2_CFG1_PPB(ffs(pages_per_block) - 6);