mtd: mxc_nand: configure pages per block for v2 controller
This patch initializes the pages per block field in CONFIG1 for v2 controllers. It also sets the FP_INT field. This is the last field not correctly initialized, so we can switch from read/modify/write the CONFIG1 reg to just write the correct value. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Acked-by: John Ogness <john.ogness@linutronix.de> Tested-by: John Ogness <john.ogness@linutronix.de> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
53d1e137d5
commit
b8db2f51dc
1 changed files with 18 additions and 13 deletions
|
@ -67,7 +67,9 @@
|
|||
#define NFC_V1_V2_CONFIG1_BIG (1 << 5)
|
||||
#define NFC_V1_V2_CONFIG1_RST (1 << 6)
|
||||
#define NFC_V1_V2_CONFIG1_CE (1 << 7)
|
||||
#define NFC_V1_V2_CONFIG1_ONE_CYCLE (1 << 8)
|
||||
#define NFC_V2_CONFIG1_ONE_CYCLE (1 << 8)
|
||||
#define NFC_V2_CONFIG1_PPB(x) (((x) & 0x3) << 9)
|
||||
#define NFC_V2_CONFIG1_FP_INT (1 << 11)
|
||||
|
||||
#define NFC_V1_V2_CONFIG2_INT (1 << 15)
|
||||
|
||||
|
@ -729,27 +731,30 @@ static void preset_v1_v2(struct mtd_info *mtd)
|
|||
{
|
||||
struct nand_chip *nand_chip = mtd->priv;
|
||||
struct mxc_nand_host *host = nand_chip->priv;
|
||||
uint16_t tmp;
|
||||
uint16_t config1 = 0;
|
||||
|
||||
/* enable interrupt, disable spare enable */
|
||||
tmp = readw(NFC_V1_V2_CONFIG1);
|
||||
tmp &= ~NFC_V1_V2_CONFIG1_INT_MSK;
|
||||
tmp &= ~NFC_V1_V2_CONFIG1_SP_EN;
|
||||
if (nand_chip->ecc.mode == NAND_ECC_HW) {
|
||||
tmp |= NFC_V1_V2_CONFIG1_ECC_EN;
|
||||
} else {
|
||||
tmp &= ~NFC_V1_V2_CONFIG1_ECC_EN;
|
||||
}
|
||||
if (nand_chip->ecc.mode == NAND_ECC_HW)
|
||||
config1 |= NFC_V1_V2_CONFIG1_ECC_EN;
|
||||
|
||||
if (nfc_is_v21())
|
||||
config1 |= NFC_V2_CONFIG1_FP_INT;
|
||||
|
||||
if (!cpu_is_mx21())
|
||||
config1 |= NFC_V1_V2_CONFIG1_INT_MSK;
|
||||
|
||||
if (nfc_is_v21() && mtd->writesize) {
|
||||
uint16_t pages_per_block = mtd->erasesize / mtd->writesize;
|
||||
|
||||
host->eccsize = get_eccsize(mtd);
|
||||
if (host->eccsize == 4)
|
||||
tmp |= NFC_V2_CONFIG1_ECC_MODE_4;
|
||||
config1 |= NFC_V2_CONFIG1_ECC_MODE_4;
|
||||
|
||||
config1 |= NFC_V2_CONFIG1_PPB(ffs(pages_per_block) - 6);
|
||||
} else {
|
||||
host->eccsize = 1;
|
||||
}
|
||||
|
||||
writew(tmp, NFC_V1_V2_CONFIG1);
|
||||
writew(config1, NFC_V1_V2_CONFIG1);
|
||||
/* preset operation */
|
||||
|
||||
/* Unlock the internal RAM Buffer */
|
||||
|
|
Loading…
Reference in a new issue