blob: 765f1b9382bd6b1a1d17f777b3361bf985a2e087 [file] [log] [blame]
/*
* linux/include/linux/mtd/nand.h
*
* Copyright © 2000-2010 David Woodhouse <dwmw2@infradead.org>
* Steven J. Hill <sjhill@realitydiluted.com>
* Thomas Gleixner <tglx@linutronix.de>
*
* 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:
* See git changelog.
*/
#ifndef __DRIVERS_STORAGE_MTD_NAND_NAND_H__
#define __DRIVERS_STORAGE_MTD_NAND_NAND_H__
#include "drivers/storage/mtd/mtd.h"
/*
* Standard NAND flash commands
*/
#define NAND_CMD_READ0 0
#define NAND_CMD_READ1 1
#define NAND_CMD_RNDOUT 5
#define NAND_CMD_PAGEPROG 0x10
#define NAND_CMD_READOOB 0x50
#define NAND_CMD_ERASE1 0x60
#define NAND_CMD_STATUS 0x70
#define NAND_CMD_STATUS_MULTI 0x71
#define NAND_CMD_SEQIN 0x80
#define NAND_CMD_RNDIN 0x85
#define NAND_CMD_READID 0x90
#define NAND_CMD_ERASE2 0xd0
#define NAND_CMD_PARAM 0xec
#define NAND_CMD_RESET 0xff
#define NAND_CMD_LOCK 0x2a
#define NAND_CMD_LOCK_TIGHT 0x2c
#define NAND_CMD_UNLOCK1 0x23
#define NAND_CMD_UNLOCK2 0x24
#define NAND_CMD_LOCK_STATUS 0x7a
/* Extended commands for large page devices */
#define NAND_CMD_READSTART 0x30
#define NAND_CMD_RNDOUTSTART 0xE0
#define NAND_CMD_CACHEDPROG 0x15
#define NAND_CMD_NONE -1
/* Status bits */
#define NAND_STATUS_FAIL 0x01
#define NAND_STATUS_FAIL_N1 0x02
#define NAND_STATUS_TRUE_READY 0x20
#define NAND_STATUS_READY 0x40
#define NAND_STATUS_WP 0x80
struct nand_onfi_params {
/* rev info and features block */
/* 'O' 'N' 'F' 'I' */
u8 sig[4];
u16 revision;
u16 features;
u16 opt_cmd;
u8 reserved[22];
/* manufacturer information block */
char manufacturer[12];
char model[20];
u8 jedec_id;
u16 date_code;
u8 reserved2[13];
/* memory organization block */
u32 byte_per_page;
u16 spare_bytes_per_page;
u32 data_bytes_per_ppage;
u16 spare_bytes_per_ppage;
u32 pages_per_block;
u32 blocks_per_lun;
u8 lun_count;
u8 addr_cycles;
u8 bits_per_cell;
u16 bb_per_lun;
u16 block_endurance;
u8 guaranteed_good_blocks;
u16 guaranteed_block_endurance;
u8 programs_per_page;
u8 ppage_attr;
u8 ecc_bits;
u8 interleaved_bits;
u8 interleaved_ops;
u8 reserved3[13];
/* electrical parameter block */
u8 io_pin_capacitance_max;
u16 async_timing_mode;
u16 program_cache_timing_mode;
u16 t_prog;
u16 t_bers;
u16 t_r;
u16 t_ccs;
u16 src_sync_timing_mode;
u16 src_ssync_features;
u16 clk_pin_capacitance_typ;
u16 io_pin_capacitance_typ;
u16 input_pin_capacitance_typ;
u8 input_pin_capacitance_max;
u8 driver_strenght_support;
u16 t_int_r;
u16 t_ald;
u8 reserved4[7];
/* vendor */
u8 reserved5[90];
u16 crc;
} __attribute__((packed));
#define ONFI_CRC_BASE 0x4F4E
/**
* struct nand_flash_dev - NAND Flash Device ID Structure
* Only newer NAND with the pagesize and erasesize implicit
* in the ID are allowed.
* @id: least significant nibble of device ID code
* @chipsize: Total chipsize in Mega Bytes
*/
struct nand_flash_dev {
int id;
int chipsize;
};
extern const struct nand_flash_dev nand_flash_ids[];
#endif /* __DRIVERS_STORAGE_MTD_NAND_NAND_H__ */