2005-04-16 15:20:36 -07:00
/*
* Copyright ( C ) 2002 Thomas Gleixner ( tglx @ linutronix . de )
2005-06-23 10:38:54 +01:00
*
2005-04-16 15:20:36 -07:00
* 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 .
*
*/
# include <linux/module.h>
# include <linux/mtd/nand.h>
2013-03-15 11:01:01 +08:00
# include <linux/sizes.h>
2013-03-04 13:39:30 +02:00
# define LP_OPTIONS NAND_SAMSUNG_LP_OPTIONS
# define LP_OPTIONS16 (LP_OPTIONS | NAND_BUSWIDTH_16)
2013-03-13 09:51:31 -07:00
# define SP_OPTIONS NAND_NEED_READRDY
# define SP_OPTIONS16 (SP_OPTIONS | NAND_BUSWIDTH_16)
2007-04-17 18:30:57 +01:00
2013-03-04 13:39:30 +02:00
/*
* The chip ID list :
* name , device ID , page size , chip size in MiB , eraseblock size , options
*
* If page size and eraseblock size are 0 , the sizes are taken from the
* extended chip ID .
*/
struct nand_flash_dev nand_flash_ids [ ] = {
2013-03-15 11:01:01 +08:00
/*
* Some incompatible NAND chips share device ID ' s and so must be
* listed by full ID . We list them first so that we can easily identify
* the most specific match .
*/
2014-12-31 13:58:53 +01:00
{ " TC58NVG0S3E 1G 3.3V 8-bit " ,
{ . id = { 0x98 , 0xd1 , 0x90 , 0x15 , 0x76 , 0x14 , 0x01 , 0x00 } } ,
SZ_2K , SZ_128 , SZ_128K , 0 , 8 , 64 , NAND_ECC_INFO ( 1 , SZ_512 ) ,
2 } ,
2013-03-15 11:01:01 +08:00
{ " TC58NVG2S0F 4G 3.3V 8-bit " ,
{ . id = { 0x98 , 0xdc , 0x90 , 0x26 , 0x76 , 0x15 , 0x01 , 0x08 } } ,
2013-05-17 11:17:33 +08:00
SZ_4K , SZ_512 , SZ_256K , 0 , 8 , 224 , NAND_ECC_INFO ( 4 , SZ_512 ) } ,
2013-03-15 11:01:01 +08:00
{ " TC58NVG3S0F 8G 3.3V 8-bit " ,
{ . id = { 0x98 , 0xd3 , 0x90 , 0x26 , 0x76 , 0x15 , 0x02 , 0x08 } } ,
2013-05-17 11:17:33 +08:00
SZ_4K , SZ_1K , SZ_256K , 0 , 8 , 232 , NAND_ECC_INFO ( 4 , SZ_512 ) } ,
2013-03-15 11:01:01 +08:00
{ " TC58NVG5D2 32G 3.3V 8-bit " ,
{ . id = { 0x98 , 0xd7 , 0x94 , 0x32 , 0x76 , 0x56 , 0x09 , 0x00 } } ,
2013-05-17 11:17:33 +08:00
SZ_8K , SZ_4K , SZ_1M , 0 , 8 , 640 , NAND_ECC_INFO ( 40 , SZ_1K ) } ,
2013-03-15 11:01:01 +08:00
{ " TC58NVG6D2 64G 3.3V 8-bit " ,
{ . id = { 0x98 , 0xde , 0x94 , 0x82 , 0x76 , 0x56 , 0x04 , 0x20 } } ,
2013-05-17 11:17:33 +08:00
SZ_8K , SZ_8K , SZ_2M , 0 , 8 , 640 , NAND_ECC_INFO ( 40 , SZ_1K ) } ,
2014-01-03 13:37:03 +08:00
{ " SDTNRGAMA 64G 3.3V 8-bit " ,
{ . id = { 0x45 , 0xde , 0x94 , 0x93 , 0x76 , 0x50 } } ,
SZ_16K , SZ_8K , SZ_4M , 0 , 6 , 1280 , NAND_ECC_INFO ( 40 , SZ_1K ) } ,
2014-09-22 16:25:11 +02:00
{ " H27UCG8T2ATR-BC 64G 3.3V 8-bit " ,
{ . id = { 0xad , 0xde , 0x94 , 0xda , 0x74 , 0xc4 } } ,
SZ_8K , SZ_8K , SZ_2M , 0 , 6 , 640 , NAND_ECC_INFO ( 40 , SZ_1K ) ,
4 } ,
2013-03-15 11:01:01 +08:00
2013-03-19 10:47:56 +02:00
LEGACY_ID_NAND ( " NAND 4MiB 5V 8-bit " , 0x6B , 4 , SZ_8K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 4MiB 3,3V 8-bit " , 0xE3 , 4 , SZ_8K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 4MiB 3,3V 8-bit " , 0xE5 , 4 , SZ_8K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 8MiB 3,3V 8-bit " , 0xD6 , 8 , SZ_8K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 8MiB 3,3V 8-bit " , 0xE6 , 8 , SZ_8K , SP_OPTIONS ) ,
2013-03-04 15:39:18 +02:00
2013-03-19 10:47:56 +02:00
LEGACY_ID_NAND ( " NAND 16MiB 1,8V 8-bit " , 0x33 , 16 , SZ_16K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 16MiB 3,3V 8-bit " , 0x73 , 16 , SZ_16K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 16MiB 1,8V 16-bit " , 0x43 , 16 , SZ_16K , SP_OPTIONS16 ) ,
LEGACY_ID_NAND ( " NAND 16MiB 3,3V 16-bit " , 0x53 , 16 , SZ_16K , SP_OPTIONS16 ) ,
2013-03-04 15:39:18 +02:00
2013-03-19 10:47:56 +02:00
LEGACY_ID_NAND ( " NAND 32MiB 1,8V 8-bit " , 0x35 , 32 , SZ_16K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 32MiB 3,3V 8-bit " , 0x75 , 32 , SZ_16K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 32MiB 1,8V 16-bit " , 0x45 , 32 , SZ_16K , SP_OPTIONS16 ) ,
LEGACY_ID_NAND ( " NAND 32MiB 3,3V 16-bit " , 0x55 , 32 , SZ_16K , SP_OPTIONS16 ) ,
2013-03-04 15:39:18 +02:00
2013-03-19 10:47:56 +02:00
LEGACY_ID_NAND ( " NAND 64MiB 1,8V 8-bit " , 0x36 , 64 , SZ_16K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 64MiB 3,3V 8-bit " , 0x76 , 64 , SZ_16K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 64MiB 1,8V 16-bit " , 0x46 , 64 , SZ_16K , SP_OPTIONS16 ) ,
LEGACY_ID_NAND ( " NAND 64MiB 3,3V 16-bit " , 0x56 , 64 , SZ_16K , SP_OPTIONS16 ) ,
2013-03-04 15:39:18 +02:00
2013-03-19 10:47:56 +02:00
LEGACY_ID_NAND ( " NAND 128MiB 1,8V 8-bit " , 0x78 , 128 , SZ_16K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 128MiB 1,8V 8-bit " , 0x39 , 128 , SZ_16K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 128MiB 3,3V 8-bit " , 0x79 , 128 , SZ_16K , SP_OPTIONS ) ,
LEGACY_ID_NAND ( " NAND 128MiB 1,8V 16-bit " , 0x72 , 128 , SZ_16K , SP_OPTIONS16 ) ,
LEGACY_ID_NAND ( " NAND 128MiB 1,8V 16-bit " , 0x49 , 128 , SZ_16K , SP_OPTIONS16 ) ,
LEGACY_ID_NAND ( " NAND 128MiB 3,3V 16-bit " , 0x74 , 128 , SZ_16K , SP_OPTIONS16 ) ,
LEGACY_ID_NAND ( " NAND 128MiB 3,3V 16-bit " , 0x59 , 128 , SZ_16K , SP_OPTIONS16 ) ,
2013-03-04 15:39:18 +02:00
2013-03-19 10:47:56 +02:00
LEGACY_ID_NAND ( " NAND 256MiB 3,3V 8-bit " , 0x71 , 256 , SZ_16K , SP_OPTIONS ) ,
2006-05-25 09:50:16 +02:00
/*
2013-03-04 13:39:30 +02:00
* These are the new chips with large page size . Their page size and
* eraseblock size are determined from the extended ID bytes .
2006-05-25 09:50:16 +02:00
*/
2011-11-02 13:34:43 -07:00
/* 512 Megabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 64MiB 1,8V 8-bit " , 0xA2 , 64 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 64MiB 1,8V 8-bit " , 0xA0 , 64 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 64MiB 3,3V 8-bit " , 0xF2 , 64 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 64MiB 3,3V 8-bit " , 0xD0 , 64 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 64MiB 3,3V 8-bit " , 0xF0 , 64 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 64MiB 1,8V 16-bit " , 0xB2 , 64 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 64MiB 1,8V 16-bit " , 0xB0 , 64 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 64MiB 3,3V 16-bit " , 0xC2 , 64 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 64MiB 3,3V 16-bit " , 0xC0 , 64 , LP_OPTIONS16 ) ,
2005-11-07 11:15:49 +00:00
2005-04-16 15:20:36 -07:00
/* 1 Gigabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 128MiB 1,8V 8-bit " , 0xA1 , 128 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 128MiB 3,3V 8-bit " , 0xF1 , 128 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 128MiB 3,3V 8-bit " , 0xD1 , 128 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 128MiB 1,8V 16-bit " , 0xB1 , 128 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 128MiB 3,3V 16-bit " , 0xC1 , 128 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 128MiB 1,8V 16-bit " , 0xAD , 128 , LP_OPTIONS16 ) ,
2005-04-16 15:20:36 -07:00
/* 2 Gigabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 256MiB 1,8V 8-bit " , 0xAA , 256 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 256MiB 3,3V 8-bit " , 0xDA , 256 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 256MiB 1,8V 16-bit " , 0xBA , 256 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 256MiB 3,3V 16-bit " , 0xCA , 256 , LP_OPTIONS16 ) ,
2005-11-07 11:15:49 +00:00
2005-04-16 15:20:36 -07:00
/* 4 Gigabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 512MiB 1,8V 8-bit " , 0xAC , 512 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 512MiB 3,3V 8-bit " , 0xDC , 512 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 512MiB 1,8V 16-bit " , 0xBC , 512 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 512MiB 3,3V 16-bit " , 0xCC , 512 , LP_OPTIONS16 ) ,
2005-11-07 11:15:49 +00:00
2005-04-16 15:20:36 -07:00
/* 8 Gigabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 1GiB 1,8V 8-bit " , 0xA3 , 1024 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 1GiB 3,3V 8-bit " , 0xD3 , 1024 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 1GiB 1,8V 16-bit " , 0xB3 , 1024 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 1GiB 3,3V 16-bit " , 0xC3 , 1024 , LP_OPTIONS16 ) ,
2005-04-16 15:20:36 -07:00
/* 16 Gigabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 2GiB 1,8V 8-bit " , 0xA5 , 2048 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 2GiB 3,3V 8-bit " , 0xD5 , 2048 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 2GiB 1,8V 16-bit " , 0xB5 , 2048 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 2GiB 3,3V 16-bit " , 0xC5 , 2048 , LP_OPTIONS16 ) ,
2006-05-25 09:50:16 +02:00
2010-06-17 12:35:11 -07:00
/* 32 Gigabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 4GiB 1,8V 8-bit " , 0xA7 , 4096 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 4GiB 3,3V 8-bit " , 0xD7 , 4096 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 4GiB 1,8V 16-bit " , 0xB7 , 4096 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 4GiB 3,3V 16-bit " , 0xC7 , 4096 , LP_OPTIONS16 ) ,
2010-08-20 12:36:12 -07:00
/* 64 Gigabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 8GiB 1,8V 8-bit " , 0xAE , 8192 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 8GiB 3,3V 8-bit " , 0xDE , 8192 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 8GiB 1,8V 16-bit " , 0xBE , 8192 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 8GiB 3,3V 16-bit " , 0xCE , 8192 , LP_OPTIONS16 ) ,
2010-08-20 12:36:12 -07:00
/* 128 Gigabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 16GiB 1,8V 8-bit " , 0x1A , 16384 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 16GiB 3,3V 8-bit " , 0x3A , 16384 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 16GiB 1,8V 16-bit " , 0x2A , 16384 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 16GiB 3,3V 16-bit " , 0x4A , 16384 , LP_OPTIONS16 ) ,
2010-08-20 12:36:12 -07:00
/* 256 Gigabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 32GiB 1,8V 8-bit " , 0x1C , 32768 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 32GiB 3,3V 8-bit " , 0x3C , 32768 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 32GiB 1,8V 16-bit " , 0x2C , 32768 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 32GiB 3,3V 16-bit " , 0x4C , 32768 , LP_OPTIONS16 ) ,
2010-08-20 12:36:12 -07:00
/* 512 Gigabit */
2013-03-04 15:39:18 +02:00
EXTENDED_ID_NAND ( " NAND 64GiB 1,8V 8-bit " , 0x1E , 65536 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 64GiB 3,3V 8-bit " , 0x3E , 65536 , LP_OPTIONS ) ,
EXTENDED_ID_NAND ( " NAND 64GiB 1,8V 16-bit " , 0x2E , 65536 , LP_OPTIONS16 ) ,
EXTENDED_ID_NAND ( " NAND 64GiB 3,3V 16-bit " , 0x4E , 65536 , LP_OPTIONS16 ) ,
2010-06-17 12:35:11 -07:00
2013-03-04 15:39:18 +02:00
{ NULL }
2005-04-16 15:20:36 -07:00
} ;
2013-03-04 13:39:30 +02:00
/* Manufacturer IDs */
2005-04-16 15:20:36 -07:00
struct nand_manufacturers nand_manuf_ids [ ] = {
{ NAND_MFR_TOSHIBA , " Toshiba " } ,
{ NAND_MFR_SAMSUNG , " Samsung " } ,
{ NAND_MFR_FUJITSU , " Fujitsu " } ,
{ NAND_MFR_NATIONAL , " National " } ,
{ NAND_MFR_RENESAS , " Renesas " } ,
{ NAND_MFR_STMICRO , " ST Micro " } ,
2006-05-13 18:07:53 +01:00
{ NAND_MFR_HYNIX , " Hynix " } ,
2007-03-21 18:48:02 -07:00
{ NAND_MFR_MICRON , " Micron " } ,
2012-06-20 16:14:02 -07:00
{ NAND_MFR_AMD , " AMD/Spansion " } ,
2011-11-02 13:34:42 -07:00
{ NAND_MFR_MACRONIX , " Macronix " } ,
2012-05-22 07:30:47 -07:00
{ NAND_MFR_EON , " Eon " } ,
2013-12-26 15:37:45 +08:00
{ NAND_MFR_SANDISK , " SanDisk " } ,
2014-01-03 16:50:39 +08:00
{ NAND_MFR_INTEL , " Intel " } ,
2014-11-04 11:32:45 -08:00
{ NAND_MFR_ATO , " ATO " } ,
2005-04-16 15:20:36 -07:00
{ 0x0 , " Unknown " }
} ;
2006-05-13 18:07:53 +01:00
EXPORT_SYMBOL ( nand_manuf_ids ) ;
EXPORT_SYMBOL ( nand_flash_ids ) ;
2005-04-16 15:20:36 -07:00
2006-05-13 18:07:53 +01:00
MODULE_LICENSE ( " GPL " ) ;
MODULE_AUTHOR ( " Thomas Gleixner <tglx@linutronix.de> " ) ;
MODULE_DESCRIPTION ( " Nand device & manufacturer IDs " ) ;