Skip to content

Commit

Permalink
mtd: mxc_nand: configure pages per block for v2 controller
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Sascha Hauer authored and David Woodhouse committed Sep 13, 2010
1 parent 53d1e13 commit b8db2f5
Showing 1 changed file with 19 additions and 14 deletions.
33 changes: 19 additions & 14 deletions drivers/mtd/nand/mxc_nand.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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;

/* 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;
}
uint16_t config1 = 0;

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 */
Expand Down

0 comments on commit b8db2f5

Please sign in to comment.