| /******************************************************************************** |
| * Marvell GPL License Option |
| * |
| * If you received this File from Marvell, you may opt to use, redistribute and/or |
| * modify this File in accordance with the terms and conditions of the General |
| * Public License Version 2, June 1991 (the "GPL License"), a copy of which is |
| * available along with the File in the license.txt file or by writing to the Free |
| * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or |
| * on the worldwide web at http://www.gnu.org/licenses/gpl.txt. |
| * |
| * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY |
| * DISCLAIMED. The GPL License provides additional details about this warranty |
| * disclaimer. |
| ******************************************************************************/ |
| |
| #ifndef __MV__NAND_H |
| #define __MV__NAND_H |
| |
| #if !defined(__UBOOT__) |
| #endif /* #if defined(__UBOOT__) */ |
| /* Chip can not auto increment pages */ |
| #define NAND_NO_AUTOINCR 0x00000001 |
| /* Buswitdh is 16 bit */ |
| #define NAND_BUSWIDTH_16 0x00000002 |
| /* Device supports partial programming without padding */ |
| #define NAND_NO_PADDING 0x00000004 |
| /* Chip has cache program function */ |
| #define NAND_CACHEPRG 0x00000008 |
| /* Chip has copy back function */ |
| #define NAND_COPYBACK 0x00000010 |
| /* AND Chip which has 4 banks and a confusing page / block |
| * assignment. See Renesas datasheet for further information */ |
| #define NAND_IS_AND 0x00000020 |
| /* Chip has a array of 4 pages which can be read without |
| * additional ready /busy waits */ |
| #define NAND_4PAGE_ARRAY 0x00000040 |
| /* Chip requires that BBT is periodically rewritten to prevent |
| * bits from adjacent blocks from 'leaking' in altering data. |
| * This happens with the Renesas AG-AND chips, possibly others. */ |
| #define BBT_AUTO_REFRESH 0x00000080 |
| /* Chip does not require ready check on read. True |
| * * for all large page devices, as they do not support |
| * * autoincrement.*/ |
| #define NAND_NO_READRDY 0x00000100 |
| /* Chip does not allow subpage writes */ |
| #define NAND_NO_SUBPAGE_WRITE 0x00000200 |
| |
| /* Options valid for Samsung large page devices */ |
| #define NAND_SAMSUNG_LP_OPTIONS \ |
| (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK) |
| #define NAND_SMALL_BADBLOCK_POS 5 |
| #define NAND_LARGE_BADBLOCK_POS 0 |
| |
| #define NAND_MFR_AMD 0x01 |
| #define NAND_MFR_TOSHIBA 0x98 |
| #define NAND_MFR_SAMSUNG 0xec |
| #define NAND_MFR_HYNIX 0xad |
| #define NAND_MFR_STMICRO 0x20 |
| #define NAND_MFR_NATIONAL 0x8f |
| #define NAND_MFR_FUJITSU 0x04 |
| #define NAND_MFR_RENESAS 0x07 |
| #define NAND_MFR_MICRON 0x2C |
| |
| struct mv_nand_flash_dev { |
| char *name; |
| int id; |
| unsigned long pagesize; /* Bytes */ |
| unsigned long chipsize; /* MB */ |
| unsigned long erasesize; /* Bytes */ |
| unsigned long options; |
| }; |
| |
| struct nand_manufacturers { |
| int id; |
| char *name; |
| }; |
| |
| |
| int mv_nand_probe(void); |
| int mv_nand_read_page(loff_t ofs, char *buf); |
| int mv_nand_read_large_page(loff_t srcx , char *buf, int oob); |
| int mv_nand_write_large_page(loff_t srcx, char *buf, int oob); |
| int mv_nand_block_bad(loff_t ofs, int getchip); |
| int mv_nand_erase(loff_t srcx); |
| int mv_nand_write_page(loff_t ofs, char *buf); |
| int mv_nand_read_id(char *buf); |
| int mv_nand_mark_badblock(loff_t ofs, int getchip); |
| int mv_nand_read_block(long long nand_start, char* data_buf, int data_size); |
| |
| unsigned int mv_nand_page_size(void); |
| unsigned int mv_nand_block_size(void); |
| unsigned int mv_nand_oob_size(void); |
| loff_t mv_nand_chip_size(void); |
| int mv_nand_reset_chip(int getchip); |
| #endif |