mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 18:35:42 +01:00 
			
		
		
		
	Signed-off-by: Wolfgang Denk <wd@denx.de> [trini: Fixup common/cmd_io.c] Signed-off-by: Tom Rini <trini@ti.com>
		
			
				
	
	
		
			133 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2013 Mike Dunn <mikedunn@newsguy.com>
 | |
|  *
 | |
|  * SPDX-License-Identifier:	GPL-2.0+
 | |
|  */
 | |
| 
 | |
| #ifndef __DOCG4_H__
 | |
| #define __DOCG4_H__
 | |
| 
 | |
| #include <common.h>
 | |
| #include <linux/mtd/nand.h>
 | |
| 
 | |
| extern int docg4_nand_init(struct mtd_info *mtd,
 | |
| 			   struct nand_chip *nand, int devnum);
 | |
| 
 | |
| /* SPL-related definitions */
 | |
| #define DOCG4_IPL_LOAD_BLOCK_COUNT 2  /* number of blocks that IPL loads */
 | |
| #define DOCG4_BLOCK_CAPACITY_SPL 0x10000 /* reliable mode; redundant pages */
 | |
| 
 | |
| #define DOC_IOSPACE_DATA		0x0800
 | |
| 
 | |
| /* register offsets */
 | |
| #define DOC_CHIPID			0x1000
 | |
| #define DOC_DEVICESELECT		0x100a
 | |
| #define DOC_ASICMODE			0x100c
 | |
| #define DOC_DATAEND			0x101e
 | |
| #define DOC_NOP				0x103e
 | |
| 
 | |
| #define DOC_FLASHSEQUENCE		0x1032
 | |
| #define DOC_FLASHCOMMAND		0x1034
 | |
| #define DOC_FLASHADDRESS		0x1036
 | |
| #define DOC_FLASHCONTROL		0x1038
 | |
| #define DOC_ECCCONF0			0x1040
 | |
| #define DOC_ECCCONF1			0x1042
 | |
| #define DOC_HAMMINGPARITY		0x1046
 | |
| #define DOC_BCH_SYNDROM(idx)		(0x1048 + idx)
 | |
| 
 | |
| #define DOC_ASICMODECONFIRM		0x1072
 | |
| #define DOC_CHIPID_INV			0x1074
 | |
| #define DOC_POWERMODE			0x107c
 | |
| 
 | |
| #define DOCG4_MYSTERY_REG		0x1050
 | |
| 
 | |
| /* apparently used only to write oob bytes 6 and 7 */
 | |
| #define DOCG4_OOB_6_7			0x1052
 | |
| 
 | |
| /* DOC_FLASHSEQUENCE register commands */
 | |
| #define DOC_SEQ_RESET			0x00
 | |
| #define DOCG4_SEQ_PAGE_READ		0x03
 | |
| #define DOCG4_SEQ_FLUSH			0x29
 | |
| #define DOCG4_SEQ_PAGEWRITE		0x16
 | |
| #define DOCG4_SEQ_PAGEPROG		0x1e
 | |
| #define DOCG4_SEQ_BLOCKERASE		0x24
 | |
| 
 | |
| /* DOC_FLASHCOMMAND register commands */
 | |
| #define DOCG4_CMD_PAGE_READ             0x00
 | |
| #define DOC_CMD_ERASECYCLE2		0xd0
 | |
| #define DOCG4_CMD_FLUSH                 0x70
 | |
| #define DOCG4_CMD_READ2                 0x30
 | |
| #define DOC_CMD_PROG_BLOCK_ADDR		0x60
 | |
| #define DOCG4_CMD_PAGEWRITE		0x80
 | |
| #define DOC_CMD_PROG_CYCLE2		0x10
 | |
| #define DOC_CMD_RESET			0xff
 | |
| 
 | |
| /* DOC_POWERMODE register bits */
 | |
| #define DOC_POWERDOWN_READY		0x80
 | |
| 
 | |
| /* DOC_FLASHCONTROL register bits */
 | |
| #define DOC_CTRL_CE			0x10
 | |
| #define DOC_CTRL_UNKNOWN		0x40
 | |
| #define DOC_CTRL_FLASHREADY		0x01
 | |
| 
 | |
| /* DOC_ECCCONF0 register bits */
 | |
| #define DOC_ECCCONF0_READ_MODE		0x8000
 | |
| #define DOC_ECCCONF0_UNKNOWN		0x2000
 | |
| #define DOC_ECCCONF0_ECC_ENABLE	        0x1000
 | |
| #define DOC_ECCCONF0_DATA_BYTES_MASK	0x07ff
 | |
| 
 | |
| /* DOC_ECCCONF1 register bits */
 | |
| #define DOC_ECCCONF1_BCH_SYNDROM_ERR	0x80
 | |
| #define DOC_ECCCONF1_ECC_ENABLE         0x07
 | |
| #define DOC_ECCCONF1_PAGE_IS_WRITTEN	0x20
 | |
| 
 | |
| /* DOC_ASICMODE register bits */
 | |
| #define DOC_ASICMODE_RESET		0x00
 | |
| #define DOC_ASICMODE_NORMAL		0x01
 | |
| #define DOC_ASICMODE_POWERDOWN		0x02
 | |
| #define DOC_ASICMODE_MDWREN		0x04
 | |
| #define DOC_ASICMODE_BDETCT_RESET	0x08
 | |
| #define DOC_ASICMODE_RSTIN_RESET	0x10
 | |
| #define DOC_ASICMODE_RAM_WE		0x20
 | |
| 
 | |
| /* good status values read after read/write/erase operations */
 | |
| #define DOCG4_PROGSTATUS_GOOD          0x51
 | |
| #define DOCG4_PROGSTATUS_GOOD_2        0xe0
 | |
| 
 | |
| /*
 | |
|  * On read operations (page and oob-only), the first byte read from I/O reg is a
 | |
|  * status.  On error, it reads 0x73; otherwise, it reads either 0x71 (first read
 | |
|  * after reset only) or 0x51, so bit 1 is presumed to be an error indicator.
 | |
|  */
 | |
| #define DOCG4_READ_ERROR           0x02 /* bit 1 indicates read error */
 | |
| 
 | |
| /* anatomy of the device */
 | |
| #define DOCG4_CHIP_SIZE        0x8000000
 | |
| #define DOCG4_PAGE_SIZE        0x200
 | |
| #define DOCG4_PAGES_PER_BLOCK  0x200
 | |
| #define DOCG4_BLOCK_SIZE       (DOCG4_PAGES_PER_BLOCK * DOCG4_PAGE_SIZE)
 | |
| #define DOCG4_NUMBLOCKS        (DOCG4_CHIP_SIZE / DOCG4_BLOCK_SIZE)
 | |
| #define DOCG4_OOB_SIZE         0x10
 | |
| #define DOCG4_CHIP_SHIFT       27    /* log_2(DOCG4_CHIP_SIZE) */
 | |
| #define DOCG4_PAGE_SHIFT       9     /* log_2(DOCG4_PAGE_SIZE) */
 | |
| #define DOCG4_ERASE_SHIFT      18    /* log_2(DOCG4_BLOCK_SIZE) */
 | |
| 
 | |
| /* all but the last byte is included in ecc calculation */
 | |
| #define DOCG4_BCH_SIZE         (DOCG4_PAGE_SIZE + DOCG4_OOB_SIZE - 1)
 | |
| 
 | |
| #define DOCG4_USERDATA_LEN     520 /* 512 byte page plus 8 oob avail to user */
 | |
| 
 | |
| /* expected values from the ID registers */
 | |
| #define DOCG4_IDREG1_VALUE     0x0400
 | |
| #define DOCG4_IDREG2_VALUE     0xfbff
 | |
| 
 | |
| /* primitive polynomial used to build the Galois field used by hw ecc gen */
 | |
| #define DOCG4_PRIMITIVE_POLY   0x4443
 | |
| 
 | |
| #define DOCG4_M                14  /* Galois field is of order 2^14 */
 | |
| #define DOCG4_T                4   /* BCH alg corrects up to 4 bit errors */
 | |
| 
 | |
| #define DOCG4_FACTORY_BBT_PAGE 16 /* page where read-only factory bbt lives */
 | |
| 
 | |
| #endif	/* __DOCG4_H__ */
 |