diff options
| author | William Juul <william.juul@datarespons.no> | 2007-10-31 13:53:06 +0100 | 
|---|---|---|
| committer | Scott Wood <scottwood@freescale.com> | 2008-08-12 11:31:15 -0500 | 
| commit | cfa460adfdefcc30d104e1a9ee44994ee349bb7b (patch) | |
| tree | 59400f96629aec9c968b0e3251628302824f5d35 /include/linux/mtd/nftl.h | |
| parent | cd82919e6c8a73b363a26f34b734923844e52d1c (diff) | |
| download | olio-uboot-2014.01-cfa460adfdefcc30d104e1a9ee44994ee349bb7b.tar.xz olio-uboot-2014.01-cfa460adfdefcc30d104e1a9ee44994ee349bb7b.zip | |
Update MTD to that of Linux 2.6.22.1
A lot changed in the Linux MTD code, since it was last ported from
Linux to U-Boot. This patch takes U-Boot NAND support to the level
of Linux 2.6.22.1 and will enable support for very large NAND devices
(4KB pages) and ease the compatibility between U-Boot and Linux
filesystems.
This patch is tested on two custom boards with PPC and ARM
processors running YAFFS in U-Boot and Linux using gcc-4.1.2
cross compilers.
MAKEALL ppc/arm has some issues:
 * DOC/OneNand/nand_spl is not building (I have not tried porting
   these parts, and since I do not have any HW and I am not familiar
   with this code/HW I think its best left to someone else.)
Except for the issues mentioned above, I have ported all drivers
necessary to run MAKEALL ppc/arm without errors and warnings. Many
drivers were trivial to port, but some were not so trivial. The
following drivers must be examined carefully and maybe rewritten to
some degree:
 cpu/ppc4xx/ndfc.c
 cpu/arm926ejs/davinci/nand.c
 board/delta/nand.c
 board/zylonite/nand.c
Signed-off-by: William Juul <william.juul@tandberg.com>
Signed-off-by: Stig Olsen <stig.olsen@tandberg.com>
Signed-off-by: Scott Wood <scottwood@freescale.com>
Diffstat (limited to 'include/linux/mtd/nftl.h')
| -rw-r--r-- | include/linux/mtd/nftl.h | 93 | 
1 files changed, 21 insertions, 72 deletions
| diff --git a/include/linux/mtd/nftl.h b/include/linux/mtd/nftl.h index b0337c340..04963a52e 100644 --- a/include/linux/mtd/nftl.h +++ b/include/linux/mtd/nftl.h @@ -1,75 +1,16 @@ - -/* Defines for NAND Flash Translation Layer  */ -/* (c) 1999 Machine Vision Holdings, Inc.    */ -/* Author: David Woodhouse <dwmw2@mvhi.com>  */ -/* $Id: nftl.h,v 1.10 2000/12/29 00:25:38 dwmw2 Exp $ */ +/* + * $Id: nftl.h,v 1.16 2004/06/30 14:49:00 dbrown Exp $ + * + * (C) 1999-2003 David Woodhouse <dwmw2@infradead.org> + */  #ifndef __MTD_NFTL_H__  #define __MTD_NFTL_H__ -/* Block Control Information */ - -struct nftl_bci { -	unsigned char ECCSig[6]; -	__u8 Status; -	__u8 Status1; -}__attribute__((packed)); - -/* Unit Control Information */ - -struct nftl_uci0 { -	__u16 VirtUnitNum; -	__u16 ReplUnitNum; -	__u16 SpareVirtUnitNum; -	__u16 SpareReplUnitNum; -} __attribute__((packed)); - -struct nftl_uci1 { -	__u32 WearInfo; -	__u16 EraseMark; -	__u16 EraseMark1; -} __attribute__((packed)); +#include <linux/mtd/mtd.h> +#include <linux/mtd/blktrans.h> -struct nftl_uci2 { -	__u16 FoldMark; -	__u16 FoldMark1; -	__u32 unused; -} __attribute__((packed)); - -union nftl_uci { -	struct nftl_uci0 a; -	struct nftl_uci1 b; -	struct nftl_uci2 c; -}; - -struct nftl_oob { -	struct nftl_bci b; -	union nftl_uci u; -}; - -/* NFTL Media Header */ - -struct NFTLMediaHeader { -	char DataOrgID[6]; -	__u16 NumEraseUnits; -	__u16 FirstPhysicalEUN; -	__u32 FormattedSize; -	unsigned char UnitSizeFactor; -} __attribute__((packed)); - -#define MAX_ERASE_ZONES (8192 - 512) - -#define ERASE_MARK 0x3c69 -#define SECTOR_FREE 0xff -#define SECTOR_USED 0x55 -#define SECTOR_IGNORE 0x11 -#define SECTOR_DELETED 0x00 - -#define FOLD_MARK_IN_PROGRESS 0x5555 - -#define ZONE_GOOD 0xff -#define ZONE_BAD_ORIGINAL 0 -#define ZONE_BAD_MARKED 7 +#include <linux/mtd/nftl-user.h>  /* these info are used in ReplUnitTable */  #define BLOCK_NIL          0xffff /* last block of a chain */ @@ -78,7 +19,7 @@ struct NFTLMediaHeader {  #define BLOCK_RESERVED     0xfffc /* bios block or bad block */  struct NFTLrecord { -	struct DiskOnChip *mtd; +	struct mtd_blktrans_dev mbd;  	__u16 MediaUnit, SpareMediaUnit;  	__u32 EraseSize;  	struct NFTLMediaHeader MediaHdr; @@ -90,16 +31,24 @@ struct NFTLrecord {  	__u16 lastEUN;                  /* should be suppressed */  	__u16 numfreeEUNs;  	__u16 LastFreeEUN;		/* To speed up finding a free EUN */ -	__u32 nr_sects;  	int head,sect,cyl;  	__u16 *EUNtable;		/* [numvunits]: First EUN for each virtual unit  */  	__u16 *ReplUnitTable;		/* [numEUNs]: ReplUnitNumber for each */ -	unsigned int nb_blocks;		/* number of physical blocks */ -	unsigned int nb_boot_blocks;	/* number of blocks used by the bios */ +        unsigned int nb_blocks;		/* number of physical blocks */ +        unsigned int nb_boot_blocks;	/* number of blocks used by the bios */ +        struct erase_info instr; +	struct nand_ecclayout oobinfo;  }; +int NFTL_mount(struct NFTLrecord *s); +int NFTL_formatblock(struct NFTLrecord *s, int block); + +#ifndef NFTL_MAJOR +#define NFTL_MAJOR 93 +#endif +  #define MAX_NFTLS 16 -#define MAX_SECTORS_PER_UNIT 32 +#define MAX_SECTORS_PER_UNIT 64  #define NFTL_PARTN_BITS 4  #endif /* __MTD_NFTL_H__ */ |