embeddedsw/XilinxProcessorIPLib/drivers/nandps/src/xnandps_onfi.h
Jagannadha Sutradharudu Teki 2c8f92039d embeddesw: Add initial code support
Added initial support Xilinx Embedded Software.

Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
2014-06-24 16:45:01 +05:30

314 lines
11 KiB
C
Executable file

/******************************************************************************
*
* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/*****************************************************************************/
/**
*
* @file xnandps_onfi.h
*
* This file implements ONFI specific commands which are used to get the
* parameter page information.
*
* The following commands are supported currently.
* - Reset
* - Read ID
* - READ Parameter Page
* - Read Status
* - Change Read Column
* - Get Features
* - Set Features
*
* @note None
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ---- ---------- -----------------------------------------------
* 1.00a nm 12/10/2010 First release
* 1.04a nm 04/25/2013 Implemented PR# 699544. Added page cache read
* and program commands to ONFI command list.
* </pre>
*
******************************************************************************/
#ifndef ONFI_H /* prevent circular inclusions */
#define ONFI_H /* by using protection macros */
#ifdef __cplusplus
extern "C" {
#endif
/***************************** Include Files *********************************/
#include "xnandps.h"
/************************** Constant Definitions *****************************/
/*
* Standard ONFI NAND flash commands
*/
/*
* Mandatory commands
*/
#define ONFI_CMD_READ1 0x00 /**< ONFI Read command
(1st cycle) */
#define ONFI_CMD_READ2 0x30 /**< ONFI Read command
(2nd cycle) */
#define ONFI_CMD_CHANGE_READ_COLUMN1 0x05 /**< ONFI Change Read
Column command (1st
cycle) */
#define ONFI_CMD_CHANGE_READ_COLUMN2 0xE0 /**< ONFI Change Read
Column command (2nd
cycle) */
#define ONFI_CMD_BLOCK_ERASE1 0x60 /**< ONFI Block Erase
(1st cycle) */
#define ONFI_CMD_BLOCK_ERASE2 0xD0 /**< ONFI Block Erase
(2nd cycle) */
#define ONFI_CMD_READ_STATUS 0x70 /**< ONFI Read status
command */
#define ONFI_CMD_PAGE_PROG1 0x80 /**< ONFI Page Program
command (1st cycle)
*/
#define ONFI_CMD_PAGE_PROG2 0x10 /**< ONFI Page Program
command (2nd cycle)
*/
#define ONFI_CMD_CHANGE_WRITE_COLUMN 0x85 /**< ONFI Change Write
Column command */
#define ONFI_CMD_READ_ID 0x90 /**< ONFI Read ID
command */
#define ONFI_CMD_READ_PARAM_PAGE 0xEC /**< ONFI Read
Parameter Page
command */
#define ONFI_CMD_RESET 0xFF /**< ONFI Reset
command */
/*
* Optional commands
*/
#define ONFI_CMD_COPYBACK_READ1 0x00 /**< ONFI Copyback Read
command (1st cycle)
*/
#define ONFI_CMD_COPYBACK_READ2 0x35 /**< ONFI Copyback Read
command (2nd cycle)
*/
#define ONFI_CMD_READ_CACHE_ENHANCED1 0x00 /**< ONFI Read cache
enhanced command (1st
cycle) */
#define ONFI_CMD_READ_CACHE_ENHANCED2 0x31 /**< ONFI Read cache
enhanced command (2nd
cycle) */
#define ONFI_CMD_READ_CACHE 0x31 /**< ONFI Read cache
command */
#define ONFI_CMD_READ_CACHE_END 0x3F /**< ONFI Read cache
end command */
#define ONFI_CMD_BLOCK_ERASE_INTERLEAVED2 0xD1 /**< ONFI Block Erase
interleaved command
(2nd cycle) */
#define ONFI_CMD_READ_STATUS_ENHANCED 0x78 /**< ONFI Read Status
enhanced command */
#define ONFI_CMD_PAGE_PROGRAM_INTERLEAVED2 0x11 /**< ONFI Page Program
interleaved command
(2nd cycle) */
#define ONFI_CMD_PAGE_CACHE_PROGRAM1 0x80 /**< ONFI Page cache
program (1st cycle)
*/
#define ONFI_CMD_PAGE_CACHE_PROGRAM2 0x15 /**< ONFI Page cache
program (2nd cycle)
*/
#define ONFI_CMD_COPYBACK_PROGRAM1 0x85 /**< ONFI Copyback
program command (1st
cycle) */
#define ONFI_CMD_COPYBACK_PROGRAM2 0x10 /**< ONFI Copyback
program command (2nd
cycle) */
#define ONFI_CMD_COPYBACK_PROGRAM_INTERLEAVED2 0x11 /**< ONFI Copyback
program interleaved
command (2nd cycle)
*/
#define ONFI_CMD_READ_UNIQUEID 0xED /**< ONFI Read Unique
ID command */
#define ONFI_CMD_GET_FEATURES 0xEE /**< ONFI Get features
command */
#define ONFI_CMD_SET_FEATURES 0xEF /**< ONFI Set features
command */
/*
* ONFI Status Register bit offsets
*/
#define ONFI_STATUS_FAIL 0x01 /**< ONFI Status
Register : FAIL */
#define ONFI_STATUS_FAILC 0x02 /**< ONFI Status
Register : FAILC */
#define ONFI_STATUS_ARDY 0x20 /**< ONFI Status
Register : ARDY */
#define ONFI_STATUS_RDY 0x40 /**< ONFI Status
Register : RDY */
#define ONFI_STATUS_WP 0x80 /**< ONFI Status
Register : WR */
/*
* ONFI constants
*/
#define ONFI_ID_LEN 4 /**< ONFI ID Length */
#define ONFI_CRC_INIT 0x4F4E /**< ONFI CRC16
Inititialization constant */
#define ONFI_CRC_POLYNOM 0x8005 /**< ONFI CRC16 polynomial */
#define ONFI_CRC_ORDER 16 /**< ONFI CRC16 order */
#define ONFI_PARAM_PAGE_LEN 256 /**< ONFI Parameter page length
*/
#define ONFI_CRC_LEN 254 /**< ONFI CRC16 length */
#define ONFI_SIGNATURE_LEN 4 /**< ONFI Signature Length */
/**
* This enum defines the onfi commands.
*/
enum OnfiCommandsEnum {
READ=0, /**< ONFI Read */
CHANGE_READ_COLUMN, /**< ONFI Change Read Column */
BLOCK_ERASE, /**< ONFI Block Erase */
READ_STATUS, /**< ONFI Read Status */
PAGE_PROGRAM, /**< ONFI Page Program */
CHANGE_WRITE_COLUMN, /**< ONFI Change Write Column */
READ_ID, /**< ONFI Read ID */
READ_PARAM_PAGE, /**< ONFI Read Parameter Page */
RESET, /**< ONFI Reset */
GET_FEATURES, /**< ONFI Get Features */
SET_FEATURES, /**< ONFI Set Features */
READ_CACHE_RANDOM, /**< ONFI Read page cache random */
READ_CACHE_END_SEQ, /**< ONFI Read page cache end */
PAGE_CACHE_PROGRAM /**< ONFI Program page cache */
};
/**************************** Type Definitions *******************************/
/**
* ONFI 1.0 support
*/
/*
* Parameter page structure of ONFI 1.0 specification.
* Enhanced this sturcture to include ONFI 2.3 information for EZ NAND support.
*/
typedef struct {
/*
* Revision information and features block
*/
u8 Signature[4]; /**< Parameter page signature */
u16 Revision; /**< Revision Number */
u16 Features; /**< Features supported */
u16 OptionalCmds; /**< Optional commands supported */
u8 Reserved0[2]; /**< ONFI 2.3: Reserved */
u16 ExtParamPageLen; /**< ONFI 2.3: extended parameter page
length */
u8 NumOfParamPages; /**< ONFI 2.3: No of parameter pages */
u8 Reserved1[17]; /**< Reserved */
/*
* Manufacturer information block
*/
u8 DeviceManufacturer[12]; /**< Device manufacturer */
u8 DeviceModel[20]; /**< Device model */
u8 JedecManufacturerId; /**< JEDEC Manufacturer ID */
u8 DateCode[2]; /**< Date code */
u8 Reserved2[13]; /**< Reserved */
/*
* Memory organization block
*/
u32 BytesPerPage; /**< Number of data bytes per page */
u16 SpareBytesPerPage; /**< Number of spare bytes per page */
u32 BytesPerPartialPage; /**< Number of data bytes per partial
page */
u16 SpareBytesPerPartialPage; /**< Number of spare bytes per partial
page */
u32 PagesPerBlock; /**< Number of pages per block */
u32 BlocksPerLun; /**< Number of blocks per logical unit
(LUN) */
u8 NumLuns; /**< Number of LUN's */
u8 AddrCycles; /**< Number of address cycles */
u8 BitsPerCell; /**< Number of bits per cell */
u16 MaxBadBlocksPerLun; /**< Bad blocks maximum per LUN */
u16 BlockEndurance; /**< Block endurance */
u8 GuaranteedValidBlock; /**< Guaranteed valid blocks at
beginning of target */
u16 BlockEnduranceGvb; /**< Block endurance for guaranteed
valid block */
u8 ProgramsPerPage; /**< Number of programs per page */
u8 PartialProgAttr; /**< Partial programming attributes */
u8 EccBits; /**< Number of bits ECC
correctability */
u8 InterleavedAddrBits; /**< Number of interleaved address
bits */
u8 InterleavedOperation; /**< Interleaved operation
attributes */
u8 EzNandSupport; /**< ONFI 2.3: EZ NAND support
parameters */
u8 Reserved3[12]; /**< Reserved */
/*
* Electrical parameters block
*/
u8 IOPinCapacitance; /**< I/O pin capacitance */
u16 TimingMode; /**< Timing mode support */
u16 PagecacheTimingMode; /**< Program cache timing mode */
u16 TProg; /**< Maximum page program time */
u16 TBers; /**< Maximum block erase time */
u16 TR; /**< Maximum page read time */
u16 TCcs; /**< Maximum change column setup
time */
u16 SynTimingMode; /**< ONFI 2.3: Source synchronous
timing mode support */
u8 SynFeatures; /**< ONFI 2.3: Source synchronous
features */
u16 ClkInputPinCap; /**< ONFI 2.3: CLK input pin
capacitance */
u16 IOPinCap; /**< ONFI 2.3: I/O pin capacitance */
u16 InputPinCap; /**< ONFI 2.3: Input pin capacitance
typical */
u8 InputPinCapMax; /**< ONFI 2.3: Input pin capacitance
maximum */
u8 DrvStrength; /**< ONFI 2.3: Driver strength
support */
u16 TMr; /**< ONFI 2.3: Maximum multi-plane
read time */
u16 TAdl; /**< ONFI 2.3: Program page register
clear enhancement value */
u16 TEr; /**< ONFI 2.3: Typical page read time
for EZ NAND */
u8 Reserved4[6]; /**< Reserved */
/*
* Vendor block
*/
u16 VendorRevisionNum; /**< Vendor specific revision
number */
u8 VendorSpecific[88]; /**< Vendor specific */
u16 Crc; /**< Integrity CRC */
}__attribute__((packed))OnfiNand_Geometry;
/************************** Function Prototypes ******************************/
#ifdef __cplusplus
}
#endif
#endif /* end of protection macro */