diff options
| -rw-r--r-- | drivers/mtd/nand/davinci_nand.c | 25 | ||||
| -rw-r--r-- | include/asm-arm/arch-davinci/emif_defs.h | 14 | ||||
| -rw-r--r-- | include/configs/davinci_dm355evm.h | 1 | ||||
| -rw-r--r-- | include/configs/davinci_dm355leopard.h | 1 | ||||
| -rw-r--r-- | include/configs/davinci_dm365evm.h | 1 | ||||
| -rw-r--r-- | include/configs/davinci_dm6467evm.h | 1 | ||||
| -rw-r--r-- | include/configs/davinci_dvevm.h | 1 | ||||
| -rw-r--r-- | include/configs/davinci_schmoogie.h | 1 | ||||
| -rw-r--r-- | include/configs/davinci_sffsdr.h | 1 | ||||
| -rw-r--r-- | include/configs/davinci_sonata.h | 1 | 
10 files changed, 29 insertions, 18 deletions
| diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c index 41a95685f..1ad802a61 100644 --- a/drivers/mtd/nand/davinci_nand.c +++ b/drivers/mtd/nand/davinci_nand.c @@ -82,26 +82,20 @@ static void nand_davinci_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int c  static void nand_davinci_enable_hwecc(struct mtd_info *mtd, int mode)  { -	int		dummy; +	u_int32_t	val; -	dummy = emif_regs->NANDF1ECC; +	(void)readl(&(emif_regs->NANDFECC[CONFIG_SYS_NAND_CS - 2])); -	/* FIXME:  only chipselect 0 is supported for now */ -	emif_regs->NANDFCR |= 1 << 8; +	val = readl(&emif_regs->NANDFCR); +	val |= DAVINCI_NANDFCR_1BIT_ECC_START(CONFIG_SYS_NAND_CS); +	writel(val, &emif_regs->NANDFCR);  }  static u_int32_t nand_davinci_readecc(struct mtd_info *mtd, u_int32_t region)  {  	u_int32_t	ecc = 0; -	if (region == 1) -		ecc = emif_regs->NANDF1ECC; -	else if (region == 2) -		ecc = emif_regs->NANDF2ECC; -	else if (region == 3) -		ecc = emif_regs->NANDF3ECC; -	else if (region == 4) -		ecc = emif_regs->NANDF4ECC; +	ecc = readl(&(emif_regs->NANDFECC[region - 1]));  	return(ecc);  } @@ -223,8 +217,11 @@ static void nand_davinci_4bit_enable_hwecc(struct mtd_info *mtd, int mode)  		 * Start a new ECC calculation for reading or writing 512 bytes  		 * of data.  		 */ -		val = (emif_regs->NANDFCR & ~(3 << 4)) | (1 << 12); -		emif_regs->NANDFCR = val; +		val = readl(&emif_regs->NANDFCR); +		val &= ~DAVINCI_NANDFCR_4BIT_ECC_SEL_MASK; +		val |= DAVINCI_NANDFCR_4BIT_ECC_SEL(CONFIG_SYS_NAND_CS); +		val |= DAVINCI_NANDFCR_4BIT_ECC_START; +		writel(val, &emif_regs->NANDFCR);  		break;  	case NAND_ECC_READSYN:  		val = emif_regs->NAND4BITECC1; diff --git a/include/asm-arm/arch-davinci/emif_defs.h b/include/asm-arm/arch-davinci/emif_defs.h index c91e30c8f..d67292f4b 100644 --- a/include/asm-arm/arch-davinci/emif_defs.h +++ b/include/asm-arm/arch-davinci/emif_defs.h @@ -51,10 +51,7 @@ typedef struct {  	dv_reg		NANDFCR;  	dv_reg		NANDFSR;  	u_int8_t	RSVD1[8]; -	dv_reg		NANDF1ECC; -	dv_reg		NANDF2ECC; -	dv_reg		NANDF3ECC; -	dv_reg		NANDF4ECC; +	dv_reg		NANDFECC[4];  	u_int8_t	RSVD2[60];  	dv_reg		NAND4BITECCLOAD;  	dv_reg		NAND4BITECC1; @@ -68,4 +65,13 @@ typedef struct {  } emif_registers;  typedef emif_registers	*emifregs; + +#define DAVINCI_NANDFCR_4BIT_ECC_SEL_MASK		(3 << 4) +#define DAVINCI_NANDFCR_4BIT_ECC_SEL(n)			((n-2) << 4) + +#define DAVINCI_NANDFCR_1BIT_ECC_START(n)		(1 << (8 + (n-2))) + +#define DAVINCI_NANDFCR_4BIT_ECC_START			(1 << 12) +#define DAVINCI_NANDFCR_4BIT_CALC_START			(1 << 13) +  #endif diff --git a/include/configs/davinci_dm355evm.h b/include/configs/davinci_dm355evm.h index d092fb832..37011c093 100644 --- a/include/configs/davinci_dm355evm.h +++ b/include/configs/davinci_dm355evm.h @@ -66,6 +66,7 @@  /* NAND: socketed, two chipselects, normally 2 GBytes */  #define CONFIG_NAND_DAVINCI +#define CONFIG_SYS_NAND_CS		2  #define CONFIG_SYS_NAND_USE_FLASH_BBT  #define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST  #define CONFIG_SYS_NAND_PAGE_2K diff --git a/include/configs/davinci_dm355leopard.h b/include/configs/davinci_dm355leopard.h index ca3dea48f..e09fb7518 100644 --- a/include/configs/davinci_dm355leopard.h +++ b/include/configs/davinci_dm355leopard.h @@ -65,6 +65,7 @@  /* NAND */  #define CONFIG_NAND_DAVINCI +#define CONFIG_SYS_NAND_CS		2  #define CONFIG_SYS_NAND_USE_FLASH_BBT  #define CONFIG_SYS_NAND_HW_ECC diff --git a/include/configs/davinci_dm365evm.h b/include/configs/davinci_dm365evm.h index 491607766..c6e1d107f 100644 --- a/include/configs/davinci_dm365evm.h +++ b/include/configs/davinci_dm365evm.h @@ -74,6 +74,7 @@  /* NAND: socketed, two chipselects, normally 2 GBytes */  #define CONFIG_NAND_DAVINCI +#define CONFIG_SYS_NAND_CS		2  #define CONFIG_SYS_NAND_USE_FLASH_BBT  #define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST  #define CONFIG_SYS_NAND_PAGE_2K diff --git a/include/configs/davinci_dm6467evm.h b/include/configs/davinci_dm6467evm.h index ce2d7c4dd..ddc5990ce 100644 --- a/include/configs/davinci_dm6467evm.h +++ b/include/configs/davinci_dm6467evm.h @@ -75,6 +75,7 @@  #define CONFIG_SYS_NO_FLASH  #ifdef CONFIG_SYS_USE_NAND  #define CONFIG_NAND_DAVINCI +#define CONFIG_SYS_NAND_CS		2  #undef CONFIG_ENV_IS_IN_FLASH  #define CONFIG_ENV_IS_IN_NAND  #define CONFIG_ENV_SIZE			(16 << 10)	/* 16 KiB */ diff --git a/include/configs/davinci_dvevm.h b/include/configs/davinci_dvevm.h index f7d23990c..5774df5cf 100644 --- a/include/configs/davinci_dvevm.h +++ b/include/configs/davinci_dvevm.h @@ -114,6 +114,7 @@  /*=====================*/  #ifdef CONFIG_SYS_USE_NAND  #define CONFIG_NAND_DAVINCI +#define CONFIG_SYS_NAND_CS		2  #undef CONFIG_ENV_IS_IN_FLASH  #define CONFIG_SYS_NO_FLASH  #define CONFIG_ENV_IS_IN_NAND		/* U-Boot env in NAND Flash  */ diff --git a/include/configs/davinci_schmoogie.h b/include/configs/davinci_schmoogie.h index 47db2aa9c..3972ebce6 100644 --- a/include/configs/davinci_schmoogie.h +++ b/include/configs/davinci_schmoogie.h @@ -83,6 +83,7 @@  #undef CONFIG_ENV_IS_IN_FLASH  #define CONFIG_SYS_NO_FLASH  #define CONFIG_NAND_DAVINCI +#define CONFIG_SYS_NAND_CS		2  #define CONFIG_ENV_IS_IN_NAND		/* U-Boot env in NAND Flash  */  #define CONFIG_ENV_SECT_SIZE	2048	/* Env sector Size */  #define CONFIG_ENV_SIZE		(128 << 10)	/* 128 KiB */ diff --git a/include/configs/davinci_sffsdr.h b/include/configs/davinci_sffsdr.h index f24eb7a8b..94be9dcf4 100644 --- a/include/configs/davinci_sffsdr.h +++ b/include/configs/davinci_sffsdr.h @@ -78,6 +78,7 @@  #undef CONFIG_ENV_IS_IN_FLASH  #define CONFIG_SYS_NO_FLASH  #define CONFIG_NAND_DAVINCI +#define CONFIG_SYS_NAND_CS		2  #define CONFIG_ENV_IS_IN_NAND		/* U-Boot env in NAND Flash  */  #define CONFIG_ENV_SECT_SIZE	2048	/* Env sector Size */  #define CONFIG_ENV_SIZE		(128 << 10)	/* 128 KiB */ diff --git a/include/configs/davinci_sonata.h b/include/configs/davinci_sonata.h index 5a55c569d..490821a0e 100644 --- a/include/configs/davinci_sonata.h +++ b/include/configs/davinci_sonata.h @@ -114,6 +114,7 @@  /*=====================*/  #ifdef CONFIG_SYS_USE_NAND  #define CONFIG_NAND_DAVINCI +#define CONFIG_SYS_NAND_CS		2  #undef CONFIG_ENV_IS_IN_FLASH  #define CONFIG_SYS_NO_FLASH  #define CONFIG_ENV_IS_IN_NAND		/* U-Boot env in NAND Flash  */ |