Merge branch 'master' of git://git.denx.de/u-boot-nand-flash
This commit is contained in:
@@ -213,7 +213,6 @@
|
||||
* NAND FLASH driver setup
|
||||
*/
|
||||
#define CONFIG_NAND_MXC
|
||||
#define CONFIG_NAND_MXC_V1_1
|
||||
#define CONFIG_MXC_NAND_REGS_BASE (NFC_BASE_ADDR)
|
||||
#define CONFIG_SYS_MAX_NAND_DEVICE 1
|
||||
#define CONFIG_SYS_NAND_BASE (NFC_BASE_ADDR)
|
||||
|
||||
@@ -231,7 +231,6 @@
|
||||
* NAND FLASH driver setup
|
||||
*/
|
||||
#define CONFIG_NAND_MXC
|
||||
#define CONFIG_NAND_MXC_V1_1
|
||||
#define CONFIG_MXC_NAND_REGS_BASE (NFC_BASE_ADDR)
|
||||
#define CONFIG_SYS_MAX_NAND_DEVICE 1
|
||||
#define CONFIG_SYS_NAND_BASE (NFC_BASE_ADDR)
|
||||
|
||||
@@ -107,7 +107,6 @@
|
||||
|
||||
/* NAND */
|
||||
#define CONFIG_NAND_MXC
|
||||
#define CONFIG_NAND_MXC_V1_1
|
||||
#define CONFIG_MXC_NAND_REGS_BASE (0xBB000000)
|
||||
#define CONFIG_SYS_MAX_NAND_DEVICE 1
|
||||
#define CONFIG_SYS_NAND_BASE (0xBB000000)
|
||||
|
||||
@@ -24,49 +24,48 @@
|
||||
#define __FSL_NFC_H
|
||||
|
||||
/*
|
||||
* TODO: Use same register defs for nand_spl mxc nand driver
|
||||
* and mtd mxc nand driver.
|
||||
* Register map and bit definitions for the Freescale NAND Flash Controller
|
||||
* present in various i.MX devices.
|
||||
*
|
||||
* Register map and bit definitions for the Freescale NAND Flash
|
||||
* Controller present in various i.MX devices.
|
||||
* MX31 and MX27 have version 1, which has:
|
||||
* 4 512-byte main buffers and
|
||||
* 4 16-byte spare buffers
|
||||
* to support up to 2K byte pagesize nand.
|
||||
* Reading or writing a 2K page requires 4 FDI/FDO cycles.
|
||||
*
|
||||
* MX31 and MX27 have version 1 which has
|
||||
* 4 512 byte main buffers and
|
||||
* 4 16 byte spare buffers
|
||||
* to support up to 2K byte pagesize nand.
|
||||
* Reading or writing a 2K page requires 4 FDI/FDO cycles.
|
||||
*
|
||||
* MX25 has version 1.1 which has
|
||||
* 8 512 byte main buffers and
|
||||
* 8 64 byte spare buffers
|
||||
* to support up to 4K byte pagesize nand.
|
||||
* Reading or writing a 2K or 4K page requires only 1 FDI/FDO cycle.
|
||||
* Also some of registers are moved and/or changed meaning as seen below.
|
||||
* MX25 and MX35 have version 2.1, which has:
|
||||
* 8 512-byte main buffers and
|
||||
* 8 64-byte spare buffers
|
||||
* to support up to 4K byte pagesize nand.
|
||||
* Reading or writing a 2K or 4K page requires only 1 FDI/FDO cycle.
|
||||
* Also some of registers are moved and/or changed meaning as seen below.
|
||||
*/
|
||||
#if defined(CONFIG_MX31) || defined(CONFIG_MX27)
|
||||
#if defined(CONFIG_MX27) || defined(CONFIG_MX31)
|
||||
#define MXC_NFC_V1
|
||||
#elif defined(CONFIG_MX25)
|
||||
#define MXC_NFC_V1_1
|
||||
#define is_mxc_nfc_1() 1
|
||||
#define is_mxc_nfc_21() 0
|
||||
#elif defined(CONFIG_MX25) || defined(CONFIG_MX35)
|
||||
#define MXC_NFC_V2_1
|
||||
#define is_mxc_nfc_1() 0
|
||||
#define is_mxc_nfc_21() 1
|
||||
#else
|
||||
#warning "MXC NFC version not defined"
|
||||
#error "MXC NFC implementation not supported"
|
||||
#endif
|
||||
|
||||
#if defined(MXC_NFC_V1)
|
||||
#define NAND_MXC_NR_BUFS 4
|
||||
#define NAND_MXC_SPARE_BUF_SIZE 16
|
||||
#define NAND_MXC_REG_OFFSET 0xe00
|
||||
#define NAND_MXC_2K_MULTI_CYCLE 1
|
||||
#elif defined(MXC_NFC_V1_1)
|
||||
#define NAND_MXC_2K_MULTI_CYCLE
|
||||
#elif defined(MXC_NFC_V2_1)
|
||||
#define NAND_MXC_NR_BUFS 8
|
||||
#define NAND_MXC_SPARE_BUF_SIZE 64
|
||||
#define NAND_MXC_REG_OFFSET 0x1e00
|
||||
#else
|
||||
#error "define CONFIG_NAND_MXC_VXXX to use the mxc spl_nand driver"
|
||||
#endif
|
||||
|
||||
struct fsl_nfc_regs {
|
||||
u32 main_area[NAND_MXC_NR_BUFS][512/4];
|
||||
u32 spare_area[NAND_MXC_NR_BUFS][NAND_MXC_SPARE_BUF_SIZE/4];
|
||||
u8 main_area[NAND_MXC_NR_BUFS][0x200];
|
||||
u8 spare_area[NAND_MXC_NR_BUFS][NAND_MXC_SPARE_BUF_SIZE];
|
||||
/*
|
||||
* reserved size is offset of nfc registers
|
||||
* minus total main and spare sizes
|
||||
@@ -74,44 +73,43 @@ struct fsl_nfc_regs {
|
||||
u8 reserved1[NAND_MXC_REG_OFFSET
|
||||
- NAND_MXC_NR_BUFS * (512 + NAND_MXC_SPARE_BUF_SIZE)];
|
||||
#if defined(MXC_NFC_V1)
|
||||
u16 bufsiz;
|
||||
u16 buf_size;
|
||||
u16 reserved2;
|
||||
u16 buffer_address;
|
||||
u16 flash_add;
|
||||
u16 buf_addr;
|
||||
u16 flash_addr;
|
||||
u16 flash_cmd;
|
||||
u16 configuration;
|
||||
u16 config;
|
||||
u16 ecc_status_result;
|
||||
u16 ecc_rslt_main_area;
|
||||
u16 ecc_rslt_spare_area;
|
||||
u16 nf_wr_prot;
|
||||
u16 unlock_start_blk_add;
|
||||
u16 unlock_end_blk_add;
|
||||
u16 nand_flash_wr_pr_st;
|
||||
u16 nand_flash_config1;
|
||||
u16 nand_flash_config2;
|
||||
#elif defined(MXC_NFC_V1_1)
|
||||
u16 rsltmain_area;
|
||||
u16 rsltspare_area;
|
||||
u16 wrprot;
|
||||
u16 unlockstart_blkaddr;
|
||||
u16 unlockend_blkaddr;
|
||||
u16 nf_wrprst;
|
||||
u16 config1;
|
||||
u16 config2;
|
||||
#elif defined(MXC_NFC_V2_1)
|
||||
u16 reserved2[2];
|
||||
u16 buffer_address;
|
||||
u16 flash_add;
|
||||
u16 buf_addr;
|
||||
u16 flash_addr;
|
||||
u16 flash_cmd;
|
||||
u16 configuration;
|
||||
u16 ecc_status_result;
|
||||
u16 ecc_status_result2;
|
||||
u16 config;
|
||||
u32 ecc_status_result;
|
||||
u16 spare_area_size;
|
||||
u16 nf_wr_prot;
|
||||
u16 wrprot;
|
||||
u16 reserved3[2];
|
||||
u16 nand_flash_wr_pr_st;
|
||||
u16 nand_flash_config1;
|
||||
u16 nand_flash_config2;
|
||||
u16 nf_wrprst;
|
||||
u16 config1;
|
||||
u16 config2;
|
||||
u16 reserved4;
|
||||
u16 unlock_start_blk_add0;
|
||||
u16 unlock_end_blk_add0;
|
||||
u16 unlock_start_blk_add1;
|
||||
u16 unlock_end_blk_add1;
|
||||
u16 unlock_start_blk_add2;
|
||||
u16 unlock_end_blk_add2;
|
||||
u16 unlock_start_blk_add3;
|
||||
u16 unlock_end_blk_add3;
|
||||
u16 unlockstart_blkaddr;
|
||||
u16 unlockend_blkaddr;
|
||||
u16 unlockstart_blkaddr1;
|
||||
u16 unlockend_blkaddr1;
|
||||
u16 unlockstart_blkaddr2;
|
||||
u16 unlockend_blkaddr2;
|
||||
u16 unlockstart_blkaddr3;
|
||||
u16 unlockend_blkaddr3;
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -157,7 +155,7 @@ struct fsl_nfc_regs {
|
||||
*/
|
||||
#define NFC_INT 0x8000
|
||||
|
||||
#ifdef MXC_NFC_V1_1
|
||||
#ifdef MXC_NFC_V2_1
|
||||
#define NFC_4_8N_ECC (1 << 0)
|
||||
#endif
|
||||
#define NFC_SP_EN (1 << 2)
|
||||
@@ -167,5 +165,6 @@ struct fsl_nfc_regs {
|
||||
#define NFC_RST (1 << 6)
|
||||
#define NFC_CE (1 << 7)
|
||||
#define NFC_ONE_CYCLE (1 << 8)
|
||||
#define NFC_FP_INT (1 << 11)
|
||||
|
||||
#endif /* __FSL_NFC_H */
|
||||
|
||||
@@ -85,8 +85,10 @@ extern void nand_wait_ready(struct mtd_info *mtd);
|
||||
#define NAND_CMD_RESET 0xff
|
||||
|
||||
#define NAND_CMD_LOCK 0x2a
|
||||
#define NAND_CMD_LOCK_TIGHT 0x2c
|
||||
#define NAND_CMD_UNLOCK1 0x23
|
||||
#define NAND_CMD_UNLOCK2 0x24
|
||||
#define NAND_CMD_LOCK_STATUS 0x7a
|
||||
|
||||
/* Extended commands for large page devices */
|
||||
#define NAND_CMD_READSTART 0x30
|
||||
@@ -205,9 +207,6 @@ typedef enum {
|
||||
#define NAND_SUBPAGE_READ(chip) ((chip->ecc.mode == NAND_ECC_SOFT) \
|
||||
&& (chip->page_shift > 9))
|
||||
|
||||
/* Mask to zero out the chip options, which come from the id table */
|
||||
#define NAND_CHIPOPTIONS_MSK (0x0000ffff & ~NAND_NO_AUTOINCR)
|
||||
|
||||
/* Non chip related options */
|
||||
/*
|
||||
* Use a flash based bad block table. OOB identifier is saved in OOB area.
|
||||
|
||||
@@ -141,11 +141,11 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
|
||||
int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts);
|
||||
|
||||
#define NAND_LOCK_STATUS_TIGHT 0x01
|
||||
#define NAND_LOCK_STATUS_LOCK 0x02
|
||||
#define NAND_LOCK_STATUS_UNLOCK 0x04
|
||||
|
||||
int nand_lock( nand_info_t *meminfo, int tight );
|
||||
int nand_unlock( nand_info_t *meminfo, ulong start, ulong length );
|
||||
int nand_lock(nand_info_t *meminfo, int tight);
|
||||
int nand_unlock(nand_info_t *meminfo, loff_t start, size_t length,
|
||||
int allexcept);
|
||||
int nand_get_lock_status(nand_info_t *meminfo, loff_t offset);
|
||||
|
||||
int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst);
|
||||
|
||||
Reference in New Issue
Block a user