nand_ids.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. /*
  2. * drivers/mtd/nandids.c
  3. *
  4. * Copyright (C) 2002 Thomas Gleixner (tglx@linutronix.de)
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2 as
  8. * published by the Free Software Foundation.
  9. *
  10. */
  11. #include <linux/module.h>
  12. #include <linux/mtd/nand.h>
  13. #include <linux/sizes.h>
  14. #define LP_OPTIONS NAND_SAMSUNG_LP_OPTIONS
  15. #define LP_OPTIONS16 (LP_OPTIONS | NAND_BUSWIDTH_16)
  16. #define SP_OPTIONS NAND_NEED_READRDY
  17. #define SP_OPTIONS16 (SP_OPTIONS | NAND_BUSWIDTH_16)
  18. /*
  19. * The chip ID list:
  20. * name, device ID, page size, chip size in MiB, eraseblock size, options
  21. *
  22. * If page size and eraseblock size are 0, the sizes are taken from the
  23. * extended chip ID.
  24. */
  25. struct nand_flash_dev nand_flash_ids[] = {
  26. /*
  27. * Some incompatible NAND chips share device ID's and so must be
  28. * listed by full ID. We list them first so that we can easily identify
  29. * the most specific match.
  30. */
  31. #ifdef CONFIG_MTK_MTD_NAND
  32. #if defined(CONFIG_MTK_TLC_NAND_SUPPORT)
  33. {"SDNTRCAMAOO8G 64G 3.3V 8-bit",
  34. { .id = {0x45, 0xDE, 0x98, 0x92, 0x72, 0x00} },
  35. SZ_16K, 0x0083C580, 0x00408000, 0, 5, 1952},
  36. {"TC58TEG6TGLTA00 64G 3.3V 8-bit",
  37. { .id = {0x98, 0xDE, 0x88, 0xA3, 0x72, 0x00} },
  38. SZ_16K, 0x0085E000, 0x00600000, 0, 5, 1952},
  39. {"TC58NVG2S0F 4G 3.3V 8-bit",
  40. { .id = {0x98, 0xdc, 0x90, 0x26, 0x76, 0x15, 0x01, 0x08} },
  41. SZ_4K, SZ_512 << 10, SZ_256K, 0, 8, 224},
  42. {"TC58NVG3S0F 8G 3.3V 8-bit",
  43. { .id = {0x98, 0xd3, 0x90, 0x26, 0x76, 0x15, 0x02, 0x08} },
  44. SZ_4K, SZ_1K << 10, SZ_256K, 0, 8, 232},
  45. {"TC58NVG5D2 32G 3.3V 8-bit",
  46. { .id = {0x98, 0xd7, 0x94, 0x32, 0x76, 0x56, 0x09, 0x00} },
  47. SZ_8K, SZ_4K << 10, SZ_1M, 0, 8, 640},
  48. {"TC58NVG6D2 64G 3.3V 8-bit",
  49. { .id = {0x98, 0xde, 0x94, 0x82, 0x76, 0x56, 0x04, 0x20} },
  50. SZ_8K, SZ_8K << 10, SZ_2M, 0, 8, 640},
  51. {"MT29F32G08CBADB 32G 3.3V 8-bit",
  52. { .id = {0x2C, 0x44, 0x44, 0x4B, 0xA9, 0x00} },
  53. SZ_8K, SZ_4K << 10, SZ_2M, 0, 5, 640},
  54. {"SDTNQGAMA008G 64G 3.3V 8-bit",
  55. { .id = {0x45, 0xDE, 0x94, 0x93, 0x76, 0x57} },
  56. SZ_16K, SZ_8K << 10, SZ_4M, 0, 6, 1280},
  57. {"TC58TEG5DCKTA00 32G 3.3V 8-bit",
  58. { .id = {0x98, 0xD7, 0x84, 0x93, 0x72, 0x00} },
  59. SZ_16K, SZ_4K << 10, SZ_4M, 0, 5, 1280},
  60. {"SDTNRGAMA008GK 64G 3.3V 8-bit",
  61. { .id = {0x45, 0xDE, 0x94, 0x93, 0x76, 0x00} },
  62. SZ_16K, SZ_8K << 10, SZ_4M, 0, 5, 1280},
  63. {"H27UCG8T2ETR 64G 3.3V 8-bit",
  64. { .id = {0xAD, 0xDE, 0x14, 0xA7, 0x42, 0x00} },
  65. SZ_16K, SZ_8K << 10, SZ_4M, 0, 5, 1600},
  66. {"BW27UCG8T2ETR 64G 3.3V 8-bit",
  67. { .id = {0xAD, 0xDE, 0x94, 0xA7, 0x42, 0x00} },
  68. SZ_16K, SZ_8K << 10, SZ_4M, 0, 5, 1664},
  69. {"SDTNRGAMA004GK 32G 3.3V 8-bit",
  70. { .id = {0x45, 0xD7, 0x84, 0x93, 0x72, 0x00} },
  71. SZ_16K, SZ_4K << 10, SZ_4M, 0, 5, 1280},
  72. {"MT29F128G08CFABA 128G 3.3V 8-bit",
  73. { .id = {0x2C, 0x64, 0x44, 0x4B, 0xA9, 0x00} },
  74. SZ_8K, SZ_8K << 10, SZ_2M, 0, 5, 640},
  75. {"H27UBG8T2CTR 32G 3.3V 8-bit",
  76. { .id = {0xAD, 0xD7, 0x94, 0x91, 0x60, 0x00} },
  77. SZ_8K, SZ_4K << 10, SZ_2M, 0, 5, 640},
  78. {"TC58TEG6DDKTA00 64G 3.3V 8-bit",
  79. { .id = {0x98, 0xDE, 0x94, 0x93, 0x76, 0x00} },
  80. SZ_16K, SZ_8K << 10, SZ_4M, 0, 5, 1280},
  81. #else
  82. {"TC58NVG2S0F 4G 3.3V 8-bit",
  83. { .id = {0x98, 0xdc, 0x90, 0x26, 0x76, 0x15, 0x01, 0x08} },
  84. SZ_4K, SZ_512, SZ_256K, 0, 8, 224},
  85. {"TC58NVG3S0F 8G 3.3V 8-bit",
  86. { .id = {0x98, 0xd3, 0x90, 0x26, 0x76, 0x15, 0x02, 0x08} },
  87. SZ_4K, SZ_1K, SZ_256K, 0, 8, 232},
  88. {"TC58NVG5D2 32G 3.3V 8-bit",
  89. { .id = {0x98, 0xd7, 0x94, 0x32, 0x76, 0x56, 0x09, 0x00} },
  90. SZ_8K, SZ_4K, SZ_1M, 0, 8, 640},
  91. {"TC58NVG6D2 64G 3.3V 8-bit",
  92. { .id = {0x98, 0xde, 0x94, 0x82, 0x76, 0x56, 0x04, 0x20} },
  93. SZ_8K, SZ_8K, SZ_2M, 0, 8, 640},
  94. {"MT29F32G08CBADB 32G 3.3V 8-bit",
  95. { .id = {0x2C, 0x44, 0x44, 0x4B, 0xA9, 0x00} },
  96. SZ_8K, SZ_4K, SZ_2M, 0, 5, 640},
  97. {"SDTNQGAMA008G 64G 3.3V 8-bit",
  98. { .id = {0x45, 0xDE, 0x94, 0x93, 0x76, 0x57} },
  99. SZ_16K, SZ_8K, SZ_4M, 0, 6, 1280},
  100. {"TC58TEG5DCKTA00 32G 3.3V 8-bit",
  101. { .id = {0x98, 0xD7, 0x84, 0x93, 0x72, 0x00} },
  102. SZ_16K, SZ_4K, SZ_4M, 0, 5, 1280},
  103. {"SDTNRGAMA008GK 64G 3.3V 8-bit",
  104. { .id = {0x45, 0xDE, 0x94, 0x93, 0x76, 0x00} },
  105. SZ_16K, SZ_8K, SZ_4M, 0, 5, 1280},
  106. {"H27UCG8T2ETR 64G 3.3V 8-bit",
  107. { .id = {0xAD, 0xDE, 0x14, 0xA7, 0x42, 0x00} },
  108. SZ_16K, SZ_8K, SZ_4M, 0, 5, 1600},
  109. {"BW27UCG8T2ETR 64G 3.3V 8-bit",
  110. { .id = {0xAD, 0xDE, 0x94, 0xA7, 0x42, 0x00} },
  111. SZ_16K, SZ_8K, SZ_4M, 0, 5, 1664},
  112. {"SDTNRGAMA004GK 32G 3.3V 8-bit",
  113. { .id = {0x45, 0xD7, 0x84, 0x93, 0x72, 0x00} },
  114. SZ_16K, SZ_4K, SZ_4M, 0, 5, 1280},
  115. {"MT29F128G08CFABA 128G 3.3V 8-bit",
  116. { .id = {0x2C, 0x64, 0x44, 0x4B, 0xA9, 0x00} },
  117. SZ_8K, SZ_8K, SZ_2M, 0, 5, 640},
  118. {"H27UBG8T2CTR 32G 3.3V 8-bit",
  119. { .id = {0xAD, 0xD7, 0x94, 0x91, 0x60, 0x00} },
  120. SZ_8K, SZ_4K, SZ_2M, 0, 5, 640},
  121. {"TC58TEG6DDKTA00 64G 3.3V 8-bit",
  122. { .id = {0x98, 0xDE, 0x94, 0x93, 0x76, 0x50} },
  123. SZ_16K, SZ_8K, SZ_4M, 0, 5, 1280},
  124. {"H27QCG8D2F5R 64G 3.3V 8-bit",
  125. { .id = {0xAD, 0xDE, 0x14, 0xAB, 0x42, 0x00} },
  126. SZ_16K, SZ_8K, SZ_4M, 0, 5, 1664},
  127. {"TC58TEG6DDLTA00 64G 3.3V 8-bit",
  128. { .id = {0x98, 0xDE, 0x94, 0x93, 0x76, 0x51} },
  129. SZ_16K, SZ_8K, SZ_4M, 0, 5, 1280},
  130. {"TC58TEG7DDLTA0D 128G 3.3V 8-bit",
  131. { .id = {0x98, 0x3A, 0x94, 0x93, 0x76, 0x51} },
  132. SZ_16K, SZ_16K, SZ_4M, 0, 5, 1280},
  133. #endif
  134. #endif
  135. LEGACY_ID_NAND("NAND 4MiB 5V 8-bit", 0x6B, 4, SZ_8K, SP_OPTIONS),
  136. LEGACY_ID_NAND("NAND 4MiB 3,3V 8-bit", 0xE3, 4, SZ_8K, SP_OPTIONS),
  137. LEGACY_ID_NAND("NAND 4MiB 3,3V 8-bit", 0xE5, 4, SZ_8K, SP_OPTIONS),
  138. LEGACY_ID_NAND("NAND 8MiB 3,3V 8-bit", 0xD6, 8, SZ_8K, SP_OPTIONS),
  139. LEGACY_ID_NAND("NAND 8MiB 3,3V 8-bit", 0xE6, 8, SZ_8K, SP_OPTIONS),
  140. LEGACY_ID_NAND("NAND 16MiB 1,8V 8-bit", 0x33, 16, SZ_16K, SP_OPTIONS),
  141. LEGACY_ID_NAND("NAND 16MiB 3,3V 8-bit", 0x73, 16, SZ_16K, SP_OPTIONS),
  142. LEGACY_ID_NAND("NAND 16MiB 1,8V 16-bit", 0x43, 16, SZ_16K, SP_OPTIONS16),
  143. LEGACY_ID_NAND("NAND 16MiB 3,3V 16-bit", 0x53, 16, SZ_16K, SP_OPTIONS16),
  144. LEGACY_ID_NAND("NAND 32MiB 1,8V 8-bit", 0x35, 32, SZ_16K, SP_OPTIONS),
  145. LEGACY_ID_NAND("NAND 32MiB 3,3V 8-bit", 0x75, 32, SZ_16K, SP_OPTIONS),
  146. LEGACY_ID_NAND("NAND 32MiB 1,8V 16-bit", 0x45, 32, SZ_16K, SP_OPTIONS16),
  147. LEGACY_ID_NAND("NAND 32MiB 3,3V 16-bit", 0x55, 32, SZ_16K, SP_OPTIONS16),
  148. LEGACY_ID_NAND("NAND 64MiB 1,8V 8-bit", 0x36, 64, SZ_16K, SP_OPTIONS),
  149. LEGACY_ID_NAND("NAND 64MiB 3,3V 8-bit", 0x76, 64, SZ_16K, SP_OPTIONS),
  150. LEGACY_ID_NAND("NAND 64MiB 1,8V 16-bit", 0x46, 64, SZ_16K, SP_OPTIONS16),
  151. LEGACY_ID_NAND("NAND 64MiB 3,3V 16-bit", 0x56, 64, SZ_16K, SP_OPTIONS16),
  152. LEGACY_ID_NAND("NAND 128MiB 1,8V 8-bit", 0x78, 128, SZ_16K, SP_OPTIONS),
  153. LEGACY_ID_NAND("NAND 128MiB 1,8V 8-bit", 0x39, 128, SZ_16K, SP_OPTIONS),
  154. LEGACY_ID_NAND("NAND 128MiB 3,3V 8-bit", 0x79, 128, SZ_16K, SP_OPTIONS),
  155. LEGACY_ID_NAND("NAND 128MiB 1,8V 16-bit", 0x72, 128, SZ_16K, SP_OPTIONS16),
  156. LEGACY_ID_NAND("NAND 128MiB 1,8V 16-bit", 0x49, 128, SZ_16K, SP_OPTIONS16),
  157. LEGACY_ID_NAND("NAND 128MiB 3,3V 16-bit", 0x74, 128, SZ_16K, SP_OPTIONS16),
  158. LEGACY_ID_NAND("NAND 128MiB 3,3V 16-bit", 0x59, 128, SZ_16K, SP_OPTIONS16),
  159. LEGACY_ID_NAND("NAND 256MiB 3,3V 8-bit", 0x71, 256, SZ_16K, SP_OPTIONS),
  160. /*
  161. * These are the new chips with large page size. Their page size and
  162. * eraseblock size are determined from the extended ID bytes.
  163. */
  164. /* 512 Megabit */
  165. EXTENDED_ID_NAND("NAND 64MiB 1,8V 8-bit", 0xA2, 64, LP_OPTIONS),
  166. EXTENDED_ID_NAND("NAND 64MiB 1,8V 8-bit", 0xA0, 64, LP_OPTIONS),
  167. EXTENDED_ID_NAND("NAND 64MiB 3,3V 8-bit", 0xF2, 64, LP_OPTIONS),
  168. EXTENDED_ID_NAND("NAND 64MiB 3,3V 8-bit", 0xD0, 64, LP_OPTIONS),
  169. EXTENDED_ID_NAND("NAND 64MiB 3,3V 8-bit", 0xF0, 64, LP_OPTIONS),
  170. EXTENDED_ID_NAND("NAND 64MiB 1,8V 16-bit", 0xB2, 64, LP_OPTIONS16),
  171. EXTENDED_ID_NAND("NAND 64MiB 1,8V 16-bit", 0xB0, 64, LP_OPTIONS16),
  172. EXTENDED_ID_NAND("NAND 64MiB 3,3V 16-bit", 0xC2, 64, LP_OPTIONS16),
  173. EXTENDED_ID_NAND("NAND 64MiB 3,3V 16-bit", 0xC0, 64, LP_OPTIONS16),
  174. /* 1 Gigabit */
  175. EXTENDED_ID_NAND("NAND 128MiB 1,8V 8-bit", 0xA1, 128, LP_OPTIONS),
  176. EXTENDED_ID_NAND("NAND 128MiB 3,3V 8-bit", 0xF1, 128, LP_OPTIONS),
  177. EXTENDED_ID_NAND("NAND 128MiB 3,3V 8-bit", 0xD1, 128, LP_OPTIONS),
  178. EXTENDED_ID_NAND("NAND 128MiB 1,8V 16-bit", 0xB1, 128, LP_OPTIONS16),
  179. EXTENDED_ID_NAND("NAND 128MiB 3,3V 16-bit", 0xC1, 128, LP_OPTIONS16),
  180. EXTENDED_ID_NAND("NAND 128MiB 1,8V 16-bit", 0xAD, 128, LP_OPTIONS16),
  181. /* 2 Gigabit */
  182. EXTENDED_ID_NAND("NAND 256MiB 1,8V 8-bit", 0xAA, 256, LP_OPTIONS),
  183. EXTENDED_ID_NAND("NAND 256MiB 3,3V 8-bit", 0xDA, 256, LP_OPTIONS),
  184. EXTENDED_ID_NAND("NAND 256MiB 1,8V 16-bit", 0xBA, 256, LP_OPTIONS16),
  185. EXTENDED_ID_NAND("NAND 256MiB 3,3V 16-bit", 0xCA, 256, LP_OPTIONS16),
  186. /* 4 Gigabit */
  187. EXTENDED_ID_NAND("NAND 512MiB 1,8V 8-bit", 0xAC, 512, LP_OPTIONS),
  188. EXTENDED_ID_NAND("NAND 512MiB 3,3V 8-bit", 0xDC, 512, LP_OPTIONS),
  189. EXTENDED_ID_NAND("NAND 512MiB 1,8V 16-bit", 0xBC, 512, LP_OPTIONS16),
  190. EXTENDED_ID_NAND("NAND 512MiB 3,3V 16-bit", 0xCC, 512, LP_OPTIONS16),
  191. /* 8 Gigabit */
  192. EXTENDED_ID_NAND("NAND 1GiB 1,8V 8-bit", 0xA3, 1024, LP_OPTIONS),
  193. EXTENDED_ID_NAND("NAND 1GiB 3,3V 8-bit", 0xD3, 1024, LP_OPTIONS),
  194. EXTENDED_ID_NAND("NAND 1GiB 1,8V 16-bit", 0xB3, 1024, LP_OPTIONS16),
  195. EXTENDED_ID_NAND("NAND 1GiB 3,3V 16-bit", 0xC3, 1024, LP_OPTIONS16),
  196. /* 16 Gigabit */
  197. EXTENDED_ID_NAND("NAND 2GiB 1,8V 8-bit", 0xA5, 2048, LP_OPTIONS),
  198. EXTENDED_ID_NAND("NAND 2GiB 3,3V 8-bit", 0xD5, 2048, LP_OPTIONS),
  199. EXTENDED_ID_NAND("NAND 2GiB 1,8V 16-bit", 0xB5, 2048, LP_OPTIONS16),
  200. EXTENDED_ID_NAND("NAND 2GiB 3,3V 16-bit", 0xC5, 2048, LP_OPTIONS16),
  201. /* 32 Gigabit */
  202. EXTENDED_ID_NAND("NAND 4GiB 1,8V 8-bit", 0xA7, 4096, LP_OPTIONS),
  203. EXTENDED_ID_NAND("NAND 4GiB 3,3V 8-bit", 0xD7, 4096, LP_OPTIONS),
  204. EXTENDED_ID_NAND("NAND 4GiB 1,8V 16-bit", 0xB7, 4096, LP_OPTIONS16),
  205. EXTENDED_ID_NAND("NAND 4GiB 3,3V 16-bit", 0xC7, 4096, LP_OPTIONS16),
  206. /* 64 Gigabit */
  207. EXTENDED_ID_NAND("NAND 8GiB 1,8V 8-bit", 0xAE, 8192, LP_OPTIONS),
  208. EXTENDED_ID_NAND("NAND 8GiB 3,3V 8-bit", 0xDE, 8192, LP_OPTIONS),
  209. EXTENDED_ID_NAND("NAND 8GiB 1,8V 16-bit", 0xBE, 8192, LP_OPTIONS16),
  210. EXTENDED_ID_NAND("NAND 8GiB 3,3V 16-bit", 0xCE, 8192, LP_OPTIONS16),
  211. /* 128 Gigabit */
  212. EXTENDED_ID_NAND("NAND 16GiB 1,8V 8-bit", 0x1A, 16384, LP_OPTIONS),
  213. EXTENDED_ID_NAND("NAND 16GiB 3,3V 8-bit", 0x3A, 16384, LP_OPTIONS),
  214. EXTENDED_ID_NAND("NAND 16GiB 1,8V 16-bit", 0x2A, 16384, LP_OPTIONS16),
  215. EXTENDED_ID_NAND("NAND 16GiB 3,3V 16-bit", 0x4A, 16384, LP_OPTIONS16),
  216. /* 256 Gigabit */
  217. EXTENDED_ID_NAND("NAND 32GiB 1,8V 8-bit", 0x1C, 32768, LP_OPTIONS),
  218. EXTENDED_ID_NAND("NAND 32GiB 3,3V 8-bit", 0x3C, 32768, LP_OPTIONS),
  219. EXTENDED_ID_NAND("NAND 32GiB 1,8V 16-bit", 0x2C, 32768, LP_OPTIONS16),
  220. EXTENDED_ID_NAND("NAND 32GiB 3,3V 16-bit", 0x4C, 32768, LP_OPTIONS16),
  221. /* 512 Gigabit */
  222. EXTENDED_ID_NAND("NAND 64GiB 1,8V 8-bit", 0x1E, 65536, LP_OPTIONS),
  223. EXTENDED_ID_NAND("NAND 64GiB 3,3V 8-bit", 0x3E, 65536, LP_OPTIONS),
  224. EXTENDED_ID_NAND("NAND 64GiB 1,8V 16-bit", 0x2E, 65536, LP_OPTIONS16),
  225. EXTENDED_ID_NAND("NAND 64GiB 3,3V 16-bit", 0x4E, 65536, LP_OPTIONS16),
  226. {NULL}
  227. };
  228. EXPORT_SYMBOL(nand_flash_ids);
  229. /* Manufacturer IDs */
  230. struct nand_manufacturers nand_manuf_ids[] = {
  231. {NAND_MFR_TOSHIBA, "Toshiba"},
  232. {NAND_MFR_SAMSUNG, "Samsung"},
  233. {NAND_MFR_FUJITSU, "Fujitsu"},
  234. {NAND_MFR_NATIONAL, "National"},
  235. {NAND_MFR_RENESAS, "Renesas"},
  236. {NAND_MFR_STMICRO, "ST Micro"},
  237. {NAND_MFR_HYNIX, "Hynix"},
  238. {NAND_MFR_MICRON, "Micron"},
  239. {NAND_MFR_AMD, "AMD/Spansion"},
  240. {NAND_MFR_MACRONIX, "Macronix"},
  241. {NAND_MFR_EON, "Eon"},
  242. {0x0, "Unknown"}
  243. };
  244. EXPORT_SYMBOL(nand_manuf_ids);
  245. MODULE_LICENSE("GPL");
  246. MODULE_AUTHOR("Thomas Gleixner <tglx@linutronix.de>");
  247. MODULE_DESCRIPTION("Nand device & manufacturer IDs");