1*3e01ed00SKhoronzhuk, Ivan /* 2*3e01ed00SKhoronzhuk, Ivan * NAND Flash Driver 3*3e01ed00SKhoronzhuk, Ivan * 4*3e01ed00SKhoronzhuk, Ivan * Copyright (C) 2006-2014 Texas Instruments. 5*3e01ed00SKhoronzhuk, Ivan * 6*3e01ed00SKhoronzhuk, Ivan * Based on Linux DaVinci NAND driver by TI. 7*3e01ed00SKhoronzhuk, Ivan */ 8*3e01ed00SKhoronzhuk, Ivan 9*3e01ed00SKhoronzhuk, Ivan #ifndef _DAVINCI_NAND_H_ 10*3e01ed00SKhoronzhuk, Ivan #define _DAVINCI_NAND_H_ 11*3e01ed00SKhoronzhuk, Ivan 12*3e01ed00SKhoronzhuk, Ivan #include <linux/mtd/nand.h> 13*3e01ed00SKhoronzhuk, Ivan #include <asm/arch/hardware.h> 14*3e01ed00SKhoronzhuk, Ivan 15*3e01ed00SKhoronzhuk, Ivan #define NAND_READ_START 0x00 16*3e01ed00SKhoronzhuk, Ivan #define NAND_READ_END 0x30 17*3e01ed00SKhoronzhuk, Ivan #define NAND_STATUS 0x70 18*3e01ed00SKhoronzhuk, Ivan 19*3e01ed00SKhoronzhuk, Ivan #define MASK_CLE 0x10 20*3e01ed00SKhoronzhuk, Ivan #define MASK_ALE 0x08 21*3e01ed00SKhoronzhuk, Ivan 22*3e01ed00SKhoronzhuk, Ivan #ifdef CONFIG_SYS_NAND_MASK_CLE 23*3e01ed00SKhoronzhuk, Ivan #undef MASK_CLE 24*3e01ed00SKhoronzhuk, Ivan #define MASK_CLE CONFIG_SYS_NAND_MASK_CLE 25*3e01ed00SKhoronzhuk, Ivan #endif 26*3e01ed00SKhoronzhuk, Ivan #ifdef CONFIG_SYS_NAND_MASK_ALE 27*3e01ed00SKhoronzhuk, Ivan #undef MASK_ALE 28*3e01ed00SKhoronzhuk, Ivan #define MASK_ALE CONFIG_SYS_NAND_MASK_ALE 29*3e01ed00SKhoronzhuk, Ivan #endif 30*3e01ed00SKhoronzhuk, Ivan 31*3e01ed00SKhoronzhuk, Ivan struct davinci_emif_regs { 32*3e01ed00SKhoronzhuk, Ivan uint32_t ercsr; 33*3e01ed00SKhoronzhuk, Ivan uint32_t awccr; 34*3e01ed00SKhoronzhuk, Ivan uint32_t sdbcr; 35*3e01ed00SKhoronzhuk, Ivan uint32_t sdrcr; 36*3e01ed00SKhoronzhuk, Ivan union { 37*3e01ed00SKhoronzhuk, Ivan uint32_t abncr[4]; 38*3e01ed00SKhoronzhuk, Ivan uint32_t ab1cr; 39*3e01ed00SKhoronzhuk, Ivan uint32_t ab2cr; 40*3e01ed00SKhoronzhuk, Ivan uint32_t ab3cr; 41*3e01ed00SKhoronzhuk, Ivan uint32_t ab4cr; 42*3e01ed00SKhoronzhuk, Ivan }; 43*3e01ed00SKhoronzhuk, Ivan uint32_t sdtimr; 44*3e01ed00SKhoronzhuk, Ivan uint32_t ddrsr; 45*3e01ed00SKhoronzhuk, Ivan uint32_t ddrphycr; 46*3e01ed00SKhoronzhuk, Ivan uint32_t ddrphysr; 47*3e01ed00SKhoronzhuk, Ivan uint32_t totar; 48*3e01ed00SKhoronzhuk, Ivan uint32_t totactr; 49*3e01ed00SKhoronzhuk, Ivan uint32_t ddrphyid_rev; 50*3e01ed00SKhoronzhuk, Ivan uint32_t sdsretr; 51*3e01ed00SKhoronzhuk, Ivan uint32_t eirr; 52*3e01ed00SKhoronzhuk, Ivan uint32_t eimr; 53*3e01ed00SKhoronzhuk, Ivan uint32_t eimsr; 54*3e01ed00SKhoronzhuk, Ivan uint32_t eimcr; 55*3e01ed00SKhoronzhuk, Ivan uint32_t ioctrlr; 56*3e01ed00SKhoronzhuk, Ivan uint32_t iostatr; 57*3e01ed00SKhoronzhuk, Ivan uint32_t rsvd0; 58*3e01ed00SKhoronzhuk, Ivan uint32_t one_nand_cr; 59*3e01ed00SKhoronzhuk, Ivan uint32_t nandfcr; 60*3e01ed00SKhoronzhuk, Ivan uint32_t nandfsr; 61*3e01ed00SKhoronzhuk, Ivan uint32_t rsvd1[2]; 62*3e01ed00SKhoronzhuk, Ivan uint32_t nandfecc[4]; 63*3e01ed00SKhoronzhuk, Ivan uint32_t rsvd2[15]; 64*3e01ed00SKhoronzhuk, Ivan uint32_t nand4biteccload; 65*3e01ed00SKhoronzhuk, Ivan uint32_t nand4bitecc[4]; 66*3e01ed00SKhoronzhuk, Ivan uint32_t nanderradd1; 67*3e01ed00SKhoronzhuk, Ivan uint32_t nanderradd2; 68*3e01ed00SKhoronzhuk, Ivan uint32_t nanderrval1; 69*3e01ed00SKhoronzhuk, Ivan uint32_t nanderrval2; 70*3e01ed00SKhoronzhuk, Ivan }; 71*3e01ed00SKhoronzhuk, Ivan 72*3e01ed00SKhoronzhuk, Ivan #define davinci_emif_regs \ 73*3e01ed00SKhoronzhuk, Ivan ((struct davinci_emif_regs *)DAVINCI_ASYNC_EMIF_CNTRL_BASE) 74*3e01ed00SKhoronzhuk, Ivan 75*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_NANDFCR_NAND_ENABLE(n) (1 << ((n) - 2)) 76*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_NANDFCR_4BIT_ECC_SEL_MASK (3 << 4) 77*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_NANDFCR_4BIT_ECC_SEL(n) (((n) - 2) << 4) 78*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_NANDFCR_1BIT_ECC_START(n) (1 << (8 + ((n) - 2))) 79*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_NANDFCR_4BIT_ECC_START (1 << 12) 80*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_NANDFCR_4BIT_CALC_START (1 << 13) 81*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_NANDFCR_CS2NAND (1 << 0) 82*3e01ed00SKhoronzhuk, Ivan 83*3e01ed00SKhoronzhuk, Ivan /* Chip Select setup */ 84*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_STROBE_SELECT (1 << 31) 85*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_EXT_WAIT (1 << 30) 86*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_WSETUP(n) (n << 26) 87*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_WSTROBE(n) (n << 20) 88*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_WHOLD(n) (n << 17) 89*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_RSETUP(n) (n << 13) 90*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_RSTROBE(n) (n << 7) 91*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_RHOLD(n) (n << 4) 92*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_TA(n) (n << 2) 93*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_ASIZE_16BIT 1 94*3e01ed00SKhoronzhuk, Ivan #define DAVINCI_ABCR_ASIZE_8BIT 0 95*3e01ed00SKhoronzhuk, Ivan 96*3e01ed00SKhoronzhuk, Ivan void davinci_nand_init(struct nand_chip *nand); 97*3e01ed00SKhoronzhuk, Ivan 98*3e01ed00SKhoronzhuk, Ivan #endif 99