@ -283,53 +283,55 @@ static void omap_hwecc_init_bch(struct nand_chip *chip, int32_t mode)
if ( bch - > ecc_scheme = = OMAP_ECC_BCH8_CODE_HW ) {
wr_mode = BCH_WRAPMODE_1 ;
switch ( bch - > nibbles ) {
case ECC_BCH4_NIBBLES :
unused_length = 3 ;
break ;
case ECC_BCH8_NIBBLES :
unused_length = 2 ;
break ;
case ECC_BCH16_NIBBLES :
unused_length = 0 ;
break ;
}
/*
* This is ecc_size_config for ELM mode .
* Here we are using different settings for read and write access and
* also depending on BCH strength .
*/
switch ( mode ) {
case NAND_ECC_WRITE :
/* write access only setup eccsize1 config */
val = ( ( unused_length + bch - > nibbles ) < < 22 ) ;
break ;
switch ( bch - > nibbles ) {
case ECC_BCH4_NIBBLES :
unused_length = 3 ;
break ;
case ECC_BCH8_NIBBLES :
unused_length = 2 ;
break ;
case ECC_BCH16_NIBBLES :
unused_length = 0 ;
break ;
}
case NAND_ECC_READ :
default :
/*
* by default eccsize0 selected for ecc1resultsize
* eccsize0 config .
* This is ecc_size_config for ELM mode . Here we are using
* different settings for read and write access and also
* depending on BCH strength .
*/
val = ( bch - > nibbles < < 12 ) ;
/* eccsize1 config */
val | = ( unused_length < < 22 ) ;
break ;
}
switch ( mode ) {
case NAND_ECC_WRITE :
/* write access only setup eccsize1 config */
val = ( ( unused_length + bch - > nibbles ) < < 22 ) ;
break ;
case NAND_ECC_READ :
default :
/*
* by default eccsize0 selected for ecc1resultsize
* eccsize0 config .
*/
val = ( bch - > nibbles < < 12 ) ;
/* eccsize1 config */
val | = ( unused_length < < 22 ) ;
break ;
}
} else {
/*
* This ecc_size_config setting is for BCH sw library .
*
* Note : we only support BCH8 currently with BCH sw library !
* Should be really easy to adobt to BCH4 , however some omap3 have
* flaws with BCH4 .
*
* Here we are using wrapping mode 6 both for reading and writing , with :
* size0 = 0 ( no additional protected byte in spare area )
* size1 = 32 ( skip 32 nibbles = 16 bytes per sector in spare area )
*/
val = ( 32 < < 22 ) | ( 0 < < 12 ) ;
/*
* This ecc_size_config setting is for BCH sw library .
*
* Note : we only support BCH8 currently with BCH sw library !
* Should be really easy to adobt to BCH4 , however some omap3
* have flaws with BCH4 .
*
* Here we are using wrapping mode 6 both for reading and
* writing , with :
* size0 = 0 ( no additional protected byte in spare area )
* size1 = 32 ( skip 32 nibbles = 16 bytes per sector in
* spare area )
*/
val = ( 32 < < 22 ) | ( 0 < < 12 ) ;
}
/* ecc size configuration */
writel ( val , & gpmc_cfg - > ecc_size_config ) ;