diff options
Diffstat (limited to 'include/linux/mtd')
| -rw-r--r-- | include/linux/mtd/onenand.h | 16 | ||||
| -rw-r--r-- | include/linux/mtd/onenand_regs.h | 18 | 
2 files changed, 31 insertions, 3 deletions
| diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h index 9a6f31752..68e174e31 100644 --- a/include/linux/mtd/onenand.h +++ b/include/linux/mtd/onenand.h @@ -20,8 +20,9 @@  #include <linux/mtd/compat.h>  #include <linux/mtd/bbm.h> +#define MAX_DIES		2  #define MAX_BUFFERRAM		2 -#define MAX_ONENAND_PAGESIZE	(2048 + 64) +#define MAX_ONENAND_PAGESIZE	(4096 + 128)  /* Scan and identify a OneNAND device */  extern int onenand_scan (struct mtd_info *mtd, int max_chips); @@ -39,9 +40,14 @@ struct onenand_bufferram {  /**   * struct onenand_chip - OneNAND Private Flash Chip Data   * @param base		[BOARDSPECIFIC] address to access OneNAND + * @dies:               [INTERN][FLEXONENAND] number of dies on chip + * @boundary:           [INTERN][FLEXONENAND] Boundary of the dies + * @diesize:            [INTERN][FLEXONENAND] Size of the dies   * @param chipsize	[INTERN] the size of one chip for multichip arrays   * @param device_id	[INTERN] device ID   * @param verstion_id	[INTERN] version ID + * @technology		[INTERN] describes the internal NAND array technology such as SLC or MLC. + * @density_mask:	[INTERN] chip density, used for DDP devices   * @param options	[BOARDSPECIFIC] various chip options. They can partly be set to inform onenand_scan about   * @param erase_shift	[INTERN] number of address bits in a block   * @param page_shift	[INTERN] number of address bits in a page @@ -64,9 +70,13 @@ struct onenand_bufferram {   */  struct onenand_chip {  	void __iomem *base; +	unsigned int dies; +	unsigned int boundary[MAX_DIES]; +	unsigned int diesize[MAX_DIES];  	unsigned int chipsize;  	unsigned int device_id;  	unsigned int version_id; +	unsigned int technology;  	unsigned int density_mask;  	unsigned int options; @@ -124,6 +134,8 @@ struct onenand_chip {  #define ONENAND_SET_BUFFERRAM0(this)		(this->bufferram_index = 0)  #define ONENAND_SET_BUFFERRAM1(this)		(this->bufferram_index = 1) +#define FLEXONENAND(this)	(this->device_id & DEVICE_IS_FLEXONENAND) +#define ONENAND_IS_MLC(this)	(this->technology & ONENAND_TECHNOLOGY_IS_MLC)  #define ONENAND_IS_DDP(this)						\  	(this->device_id & ONENAND_DEVICE_IS_DDP) @@ -157,4 +169,6 @@ struct onenand_manufacturers {  int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from,  			struct mtd_oob_ops *ops); +unsigned int onenand_block(struct onenand_chip *this, loff_t addr); +int flexonenand_region(struct mtd_info *mtd, loff_t addr);  #endif				/* __LINUX_MTD_ONENAND_H */ diff --git a/include/linux/mtd/onenand_regs.h b/include/linux/mtd/onenand_regs.h index 07fed1c60..8449a3cdc 100644 --- a/include/linux/mtd/onenand_regs.h +++ b/include/linux/mtd/onenand_regs.h @@ -67,6 +67,9 @@  /*   * Device ID Register F001h (R)   */ +#define DEVICE_IS_FLEXONENAND		(1 << 9) +#define FLEXONENAND_PI_MASK		(0x3ff) +#define FLEXONENAND_PI_UNLOCK_SHIFT	(14)  #define ONENAND_DEVICE_DENSITY_MASK	(0xf)  #define ONENAND_DEVICE_DENSITY_SHIFT	(4)  #define ONENAND_DEVICE_IS_DDP		(1 << 3) @@ -84,6 +87,11 @@  #define ONENAND_VERSION_PROCESS_SHIFT	(8)  /* + * Technology Register F006h (R) + */ +#define ONENAND_TECHNOLOGY_IS_MLC	(1 << 0) + +/*   * Start Address 1 F100h (R/W)   */  #define ONENAND_DDP_SHIFT		(15) @@ -93,7 +101,7 @@  /*   * Start Address 8 F107h (R/W)   */ -#define ONENAND_FPA_MASK		(0x3f) +#define ONENAND_FPA_MASK		(0x7f)  #define ONENAND_FPA_SHIFT		(2)  #define ONENAND_FSA_MASK		(0x03) @@ -105,7 +113,7 @@  #define ONENAND_BSA_BOOTRAM		(0 << 2)  #define ONENAND_BSA_DATARAM0		(2 << 2)  #define ONENAND_BSA_DATARAM1		(3 << 2) -#define ONENAND_BSC_MASK		(0x03) +#define ONENAND_BSC_MASK		(0x07)  /*   * Command Register F220h (R/W) @@ -125,9 +133,14 @@  #define ONENAND_CMD_ERASE_VERIFY	(0x71)  #define ONENAND_CMD_RESET		(0xF0)  #define ONENAND_CMD_READID		(0x90) +#define FLEXONENAND_CMD_RESET		(0xF3) +#define FLEXONENAND_CMD_PI_UPDATE	(0x05) +#define FLEXONENAND_CMD_PI_ACCESS	(0x66) +#define FLEXONENAND_CMD_RECOVER_LSB	(0x05)  /* NOTE: Those are not *REAL* commands */  #define ONENAND_CMD_BUFFERRAM		(0x1978) +#define FLEXONENAND_CMD_READ_PI		(0x1985)  /*   * System Configuration 1 Register F221h (R, R/W) @@ -190,5 +203,6 @@  #define ONENAND_ECC_2BIT		(1 << 1)  #define ONENAND_ECC_2BIT_ALL		(0xAAAA)  #define ONENAND_ECC_4BIT_UNCORRECTABLE	(0x1010) +#define FLEXONENAND_UNCORRECTABLE_ERROR (0x1010)  #endif				/* __ONENAND_REG_H */ |