diff options
| author | Bartlomiej Sieka <tur@semihalf.com> | 2006-03-05 18:57:33 +0100 | 
|---|---|---|
| committer | Bartlomiej Sieka <tur@semihalf.com> | 2006-03-05 18:57:33 +0100 | 
| commit | addb2e1650fdf872334478393f482dfdce965a61 (patch) | |
| tree | c16d3de22d1e1040d3f8e6ecfaed20bf2f2c5ea6 /include/linux/mtd/nand_legacy.h | |
| parent | 038ccac511214b062c56f22b9413f784b86bcd87 (diff) | |
| download | olio-uboot-2014.01-addb2e1650fdf872334478393f482dfdce965a61.tar.xz olio-uboot-2014.01-addb2e1650fdf872334478393f482dfdce965a61.zip | |
Re-factoring the legacy NAND code (legacy NAND now only in board-specific
code and in SoC code). Boards using the old way have CFG_NAND_LEGACY and
BOARDLIBS = drivers/nand_legacy/libnand_legacy.a added. Build breakage for
NETTA.ERR and NETTA_ISDN - will go away when the new NAND support is
implemented for these boards.
Diffstat (limited to 'include/linux/mtd/nand_legacy.h')
| -rw-r--r-- | include/linux/mtd/nand_legacy.h | 203 | 
1 files changed, 203 insertions, 0 deletions
| diff --git a/include/linux/mtd/nand_legacy.h b/include/linux/mtd/nand_legacy.h new file mode 100644 index 000000000..a8769e72a --- /dev/null +++ b/include/linux/mtd/nand_legacy.h @@ -0,0 +1,203 @@ +/* + *  linux/include/linux/mtd/nand.h + * + *  Copyright (c) 2000 David Woodhouse <dwmw2@mvhi.com> + *                     Steven J. Hill <sjhill@cotw.com> + *		       Thomas Gleixner <gleixner@autronix.de> + * + * $Id: nand.h,v 1.7 2003/07/24 23:30:46 a0384864 Exp $ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + *  Info: + *   Contains standard defines and IDs for NAND flash devices + * + *  Changelog: + *   01-31-2000 DMW     Created + *   09-18-2000 SJH     Moved structure out of the Disk-On-Chip drivers + *			so it can be used by other NAND flash device + *			drivers. I also changed the copyright since none + *			of the original contents of this file are specific + *			to DoC devices. David can whack me with a baseball + *			bat later if I did something naughty. + *   10-11-2000 SJH     Added private NAND flash structure for driver + *   10-24-2000 SJH     Added prototype for 'nand_scan' function + *   10-29-2001 TG	changed nand_chip structure to support + *			hardwarespecific function for accessing control lines + *   02-21-2002 TG	added support for different read/write adress and + *			ready/busy line access function + *   02-26-2002 TG	added chip_delay to nand_chip structure to optimize + *			command delay times for different chips + *   04-28-2002 TG	OOB config defines moved from nand.c to avoid duplicate + *			defines in jffs2/wbuf.c + */ +#ifndef __LINUX_MTD_NAND_LEGACY_H +#define __LINUX_MTD_NAND_LEGACY_H + +#ifndef CFG_NAND_LEGACY +#error This module is for the legacy NAND support +#endif + +/* + * Standard NAND flash commands + */ +#define NAND_CMD_READ0		0 +#define NAND_CMD_READ1		1 +#define NAND_CMD_PAGEPROG	0x10 +#define NAND_CMD_READOOB	0x50 +#define NAND_CMD_ERASE1		0x60 +#define NAND_CMD_STATUS		0x70 +#define NAND_CMD_SEQIN		0x80 +#define NAND_CMD_READID		0x90 +#define NAND_CMD_ERASE2		0xd0 +#define NAND_CMD_RESET		0xff + +/* + * Enumeration for NAND flash chip state + */ +typedef enum { +	FL_READY, +	FL_READING, +	FL_WRITING, +	FL_ERASING, +	FL_SYNCING +} nand_state_t; + + +/* + * NAND Private Flash Chip Data + * + * Structure overview: + * + *  IO_ADDR - address to access the 8 I/O lines of the flash device + * + *  hwcontrol - hardwarespecific function for accesing control-lines + * + *  dev_ready - hardwarespecific function for accesing device ready/busy line + * + *  chip_lock - spinlock used to protect access to this structure + * + *  wq - wait queue to sleep on if a NAND operation is in progress + * + *  state - give the current state of the NAND device + * + *  page_shift - number of address bits in a page (column address bits) + * + *  data_buf - data buffer passed to/from MTD user modules + * + *  data_cache - data cache for redundant page access and shadow for + *		 ECC failure + * + *  ecc_code_buf - used only for holding calculated or read ECCs for + *                 a page read or written when ECC is in use + * + *  reserved - padding to make structure fall on word boundary if + *             when ECC is in use + */ +struct Nand { +	char floor, chip; +	unsigned long curadr; +	unsigned char curmode; +	/* Also some erase/write/pipeline info when we get that far */ +}; + +struct nand_chip { +	int 		page_shift; +	u_char 		*data_buf; +	u_char 		*data_cache; +	int		cache_page; +	u_char 		ecc_code_buf[6]; +	u_char 		reserved[2]; +	char ChipID; /* Type of DiskOnChip */ +	struct Nand *chips; +	int chipshift; +	char* chips_name; +	unsigned long erasesize; +	unsigned long mfr; /* Flash IDs - only one type of flash per device */ +	unsigned long id; +	char* name; +	int numchips; +	char page256; +	char pageadrlen; +	unsigned long IO_ADDR;  /* address to access the 8 I/O lines to the flash device */ +	unsigned long totlen; +	uint oobblock;  /* Size of OOB blocks (e.g. 512) */ +	uint oobsize;   /* Amount of OOB data per block (e.g. 16) */ +	uint eccsize; +	int bus16; +}; + +/* + * NAND Flash Manufacturer ID Codes + */ +#define NAND_MFR_TOSHIBA	0x98 +#define NAND_MFR_SAMSUNG	0xec + +/* + * NAND Flash Device ID Structure + * + * Structure overview: + * + *  name - Complete name of device + * + *  manufacture_id - manufacturer ID code of device. + * + *  model_id - model ID code of device. + * + *  chipshift - total number of address bits for the device which + *              is used to calculate address offsets and the total + *              number of bytes the device is capable of. + * + *  page256 - denotes if flash device has 256 byte pages or not. + * + *  pageadrlen - number of bytes minus one needed to hold the + *               complete address into the flash array. Keep in + *               mind that when a read or write is done to a + *               specific address, the address is input serially + *               8 bits at a time. This structure member is used + *               by the read/write routines as a loop index for + *               shifting the address out 8 bits at a time. + * + *  erasesize - size of an erase block in the flash device. + */ +struct nand_flash_dev { +	char * name; +	int manufacture_id; +	int model_id; +	int chipshift; +	char page256; +	char pageadrlen; +	unsigned long erasesize; +	int bus16; +}; + +/* +* Constants for oob configuration +*/ +#define NAND_NOOB_ECCPOS0		0 +#define NAND_NOOB_ECCPOS1		1 +#define NAND_NOOB_ECCPOS2		2 +#define NAND_NOOB_ECCPOS3		3 +#define NAND_NOOB_ECCPOS4		6 +#define NAND_NOOB_ECCPOS5		7 +#define NAND_NOOB_BADBPOS		-1 +#define NAND_NOOB_ECCVPOS		-1 + +#define NAND_JFFS2_OOB_ECCPOS0		0 +#define NAND_JFFS2_OOB_ECCPOS1		1 +#define NAND_JFFS2_OOB_ECCPOS2		2 +#define NAND_JFFS2_OOB_ECCPOS3		3 +#define NAND_JFFS2_OOB_ECCPOS4		6 +#define NAND_JFFS2_OOB_ECCPOS5		7 +#define NAND_JFFS2_OOB_BADBPOS		5 +#define NAND_JFFS2_OOB_ECCVPOS		4 + +#define NAND_JFFS2_OOB8_FSDAPOS		6 +#define NAND_JFFS2_OOB16_FSDAPOS	8 +#define NAND_JFFS2_OOB8_FSDALEN		2 +#define NAND_JFFS2_OOB16_FSDALEN	8 + +unsigned long nand_probe(unsigned long physadr); +#endif /* __LINUX_MTD_NAND_LEGACY_H */ |