nand_device_list.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. /*
  2. * Copyright (C) 2015 MediaTek Inc.
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 as
  6. * published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. */
  13. #ifndef __NAND_DEVICE_LIST_H__
  14. #define __NAND_DEVICE_LIST_H__
  15. struct tag_nand_number {
  16. u32 number;
  17. };
  18. #define MAX_FLASH 20
  19. #define NAND_MAX_ID 6
  20. #define CHIP_CNT 21
  21. #define P_SIZE 16384
  22. #define P_PER_BLK 256
  23. #define C_SIZE 8192
  24. #define RAMDOM_READ (1<<0)
  25. #define CACHE_READ (1<<1)
  26. #define RAND_TYPE_SAMSUNG 0
  27. #define RAND_TYPE_TOSHIBA 1
  28. #define RAND_TYPE_NONE 2
  29. #ifndef FALSE
  30. #define FALSE (0)
  31. #endif
  32. #ifndef TRUE
  33. #define TRUE (1)
  34. #endif
  35. #define READ_RETRY_MAX 10
  36. struct gFeature {
  37. u32 address;
  38. u32 feature;
  39. };
  40. enum readRetryType {
  41. RTYPE_MICRON,
  42. RTYPE_SANDISK,
  43. RTYPE_SANDISK_19NM,
  44. RTYPE_TOSHIBA,
  45. RTYPE_HYNIX,
  46. RTYPE_HYNIX_16NM,
  47. RTYPE_SANDISK_TLC_1YNM,
  48. RTYPE_TOSHIBA_TLC
  49. };
  50. struct gFeatureSet {
  51. u8 sfeatureCmd;
  52. u8 gfeatureCmd;
  53. u8 readRetryPreCmd;
  54. u8 readRetryCnt;
  55. u32 readRetryAddress;
  56. u32 readRetryDefault;
  57. u32 readRetryStart;
  58. enum readRetryType rtype;
  59. struct gFeature Interface;
  60. struct gFeature Async_timing;
  61. };
  62. struct gRandConfig {
  63. u8 type;
  64. u32 seed[6];
  65. };
  66. enum pptbl {
  67. MICRON_8K,
  68. HYNIX_8K,
  69. SANDISK_16K,
  70. PPTBL_NONE,
  71. };
  72. struct MLC_feature_set {
  73. enum pptbl ptbl_idx;
  74. struct gFeatureSet FeatureSet;
  75. struct gRandConfig randConfig;
  76. };
  77. enum flashdev_vendor {
  78. VEND_SAMSUNG,
  79. VEND_MICRON,
  80. VEND_TOSHIBA,
  81. VEND_HYNIX,
  82. VEND_SANDISK,
  83. VEND_BIWIN,
  84. VEND_NONE,
  85. };
  86. enum flashdev_IOWidth {
  87. IO_8BIT = 8,
  88. IO_16BIT = 16,
  89. IO_TOGGLEDDR = 9,
  90. IO_TOGGLESDR = 10,
  91. IO_ONFI = 12,
  92. };
  93. #define NAND_FLASH_SLC (0x0000)
  94. #define NAND_FLASH_MLC (0x0001)
  95. #define NAND_FLASH_TLC (0x0002)
  96. #define NAND_FLASH_MLC_HYBER (0x0003)
  97. #define NAND_FLASH_MASK (0x00FF)
  98. struct NFI_TLC_CTRL {
  99. bool slcopmodeEn; /*TRUE: slc mode FALSE: tlc mode*/
  100. bool pPlaneEn; /*this chip has pseudo plane*/
  101. bool needchangecolumn; /*read page with change column address command*/
  102. bool normaltlc; /*whether need 09/0d 01/02/03*/
  103. u16 en_slc_mode_cmd; /*enable slc mode cmd*/
  104. u16 dis_slc_mode_cmd; /*disable slc mode cmd: 0xff is invalid*/
  105. bool ecc_recalculate_en; /*for nfi config*/
  106. u8 ecc_required; /*required ecc bit*/
  107. u8 block_bit; /*block address start bit;*/
  108. u8 pPlane_bit; /*pesudo plane bit;*/
  109. };
  110. enum NFI_TLC_PG_CYCLE {
  111. PROGRAM_1ST_CYCLE = 1,
  112. PROGRAM_2ND_CYCLE = 2,
  113. PROGRAM_3RD_CYCLE = 3
  114. };
  115. enum NFI_TLC_WL_PRE {
  116. WL_LOW_PAGE = 0,
  117. WL_MID_PAGE = 1,
  118. WL_HIGH_PAGE = 2,
  119. };
  120. struct NFI_TLC_WL_INFO {
  121. u32 word_line_idx;
  122. enum NFI_TLC_WL_PRE wl_pre;
  123. };
  124. #endif
  125. struct flashdev_info_t {
  126. u8 id[NAND_MAX_ID];
  127. u8 id_length;
  128. u8 addr_cycle;
  129. enum flashdev_IOWidth iowidth;
  130. u32 totalsize;
  131. u16 blocksize;
  132. u16 pagesize;
  133. u16 sparesize;
  134. u32 timmingsetting;
  135. u32 dqs_delay_ctrl;
  136. u32 s_acccon;
  137. u32 s_acccon1;
  138. u32 freq;
  139. enum flashdev_vendor vendor;
  140. u16 sectorsize;
  141. u8 devciename[30];
  142. u32 advancedmode;
  143. struct MLC_feature_set feature_set;
  144. u16 NAND_FLASH_TYPE;
  145. struct NFI_TLC_CTRL tlcControl;
  146. };
  147. #define flashdev_info struct flashdev_info_t
  148. #define gen_FlashTable_p gen_FlashTable
  149. static const struct flashdev_info_t gen_FlashTable[] = {
  150. {{0x45, 0xDE, 0x94, 0x93, 0x76, 0x57}, 6, 5, IO_8BIT, 0x800000, 4096, 16384, 1280,
  151. 0x10401011, 0xC03222, 0x101, 0, 80, VEND_SANDISK, 1024, "SDTNQGAMA008G ", 0 ,
  152. {SANDISK_16K, {0xEF, 0xEE, 0xFF, 16, 0x11, 0, 1, RTYPE_SANDISK_19NM, {0x80, 0x00}, {0x80, 0x01} },
  153. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  154. NAND_FLASH_MLC, {FALSE, FALSE, FALSE, FALSE, 0xFF, 0xFF, FALSE, 0xFF, 8, 0xFF} },
  155. {{0x98, 0xD7, 0x84, 0x93, 0x72, 0x00}, 5, 5, IO_8BIT, 0x400000, 4096, 16384, 1280,
  156. 0x10401011, 0xC03222, 0x101, 0, 80, VEND_TOSHIBA, 1024, "TC58TEG5DCKTA00", 0 ,
  157. {SANDISK_16K, {0xEF, 0xEE, 0xFF, 7, 0xFF, 7, 0, RTYPE_TOSHIBA, {0x80, 0x00}, {0x80, 0x01} },
  158. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  159. NAND_FLASH_MLC, {FALSE, FALSE, FALSE, FALSE, 0xFF, 0xFF, FALSE, 0xFF, 8, 0xFF} },
  160. {{0x45, 0xDE, 0x94, 0x93, 0x76, 0x00}, 5, 5, IO_8BIT, 0x800000, 4096, 16384, 1280,
  161. 0x10804222, 0x60000, 0x33418010, 0x01010100, 100, VEND_SANDISK, 1024, "SDTNRGAMA008GK ", 0 ,
  162. {SANDISK_16K, {0xEF, 0xEE, 0x5D, 36, 0x11, 0, 0xFFFFFFFF, RTYPE_SANDISK, {0x80, 0x00}, {0x80, 0x01} },
  163. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  164. NAND_FLASH_MLC_HYBER, {FALSE, FALSE, FALSE, FALSE, 0xA2, 0xFF, FALSE, 0xFF, 8, 0xFF} },
  165. {{0xAD, 0xDE, 0x14, 0xA7, 0x42, 0x00}, 5, 5, IO_TOGGLESDR, 0x800000, 4096, 16384, 1600,
  166. 0x10804222, 0x60000, 0x33418010, 0x01010100, 100, VEND_HYNIX, 1024, "H27UCG8T2ETR", 0 ,
  167. {SANDISK_16K, {0xEF, 0xEE, 0xFF, 8, 0xFF, 0, 0, RTYPE_HYNIX_16NM, {0x01, 0x20}, {0X01, 0x00} },
  168. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  169. NAND_FLASH_MLC_HYBER, {FALSE, FALSE, FALSE, FALSE, 0xBF, 0xBE, FALSE, 0xFF, 8, 0xFF} },
  170. {{0x2C, 0x44, 0x44, 0x4B, 0xA9, 0x00}, 5, 5, IO_8BIT, 0x400000, 2048, 8192, 640,
  171. 0x10401011, 0xC03222, 0x101, 0, 80, VEND_MICRON, 1024, "MT29F32G08CBADB ", 0 ,
  172. {MICRON_8K, {0xEF, 0xEE, 0xFF, 7, 0x89, 0, 1, RTYPE_MICRON, {0x1, 0x14}, {0x1, 0x5} },
  173. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  174. NAND_FLASH_MLC, {FALSE, FALSE, FALSE, FALSE, 0xFF, 0xFF, FALSE, 0xFF, 8, 0xFF} },
  175. {{0xAD, 0xDE, 0x94, 0xA7, 0x42, 0x00}, 5, 5, IO_8BIT, 0x800000, 4096, 16384, 1280,
  176. 0x10401011, 0xC03222, 0x101, 0, 80, VEND_BIWIN, 1024, "BW27UCG8T2ETR", 0 ,
  177. {SANDISK_16K, {0xFF, 0xFF, 0xFF, 7, 0xFF, 0, 1, RTYPE_HYNIX_16NM, {0XFF, 0xFF}, {0XFF, 0xFF} },
  178. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  179. NAND_FLASH_MLC, {FALSE, FALSE, FALSE, FALSE, 0xFF, 0xFF, FALSE, 0xFF, 8, 0xFF} },
  180. {{0x45, 0xD7, 0x84, 0x93, 0x72, 0x00}, 5, 5, IO_8BIT, 0x400000, 4096, 16384, 1280,
  181. 0x10401011, 0xC03222, 0x101, 0, 80, VEND_SANDISK, 1024, "SDTNRGAMA004GK ", 0 ,
  182. {SANDISK_16K, {0xEF, 0xEE, 0x5D, 36, 0x11, 0, 0xFFFFFFFF, RTYPE_SANDISK, {0x80, 0x00}, {0x80, 0x01} },
  183. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  184. NAND_FLASH_MLC_HYBER, {FALSE, FALSE, FALSE, FALSE, 0xA2, 0xFF, FALSE, 0xFF, 8, 0xFF} },
  185. {{0x2C, 0x64, 0x44, 0x4B, 0xA9, 0x00}, 5, 5, IO_8BIT, 0x800000, 2048, 8192, 640,
  186. 0x10401011, 0xC03222, 0x101, 0, 80, VEND_MICRON, 1024, "MT29F128G08CFABA ", 0 ,
  187. {MICRON_8K, {0xEF, 0xEE, 0xFF, 7, 0x89, 0, 1, RTYPE_MICRON, {0x1, 0x14}, {0x1, 0x5} },
  188. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  189. NAND_FLASH_MLC, {FALSE, FALSE, FALSE, FALSE, 0xFF, 0xFF, FALSE, 0xFF, 8, 0xFF} },
  190. {{0xAD, 0xD7, 0x94, 0x91, 0x60, 0x00}, 5, 5, IO_8BIT, 0x400000, 2048, 8192, 640,
  191. 0x10401011, 0xC03222, 0x101, 0, 80, VEND_HYNIX, 1024, "H27UBG8T2CTR", 0 ,
  192. {HYNIX_8K, {0xFF, 0xFF, 0xFF, 7, 0xFF, 0, 1, RTYPE_HYNIX, {0XFF, 0xFF}, {0XFF, 0xFF} },
  193. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  194. NAND_FLASH_MLC, {FALSE, FALSE, FALSE, FALSE, 0xFF, 0xFF, FALSE, 0xFF, 8, 0xFF} },
  195. {{0x98, 0xDE, 0x94, 0x93, 0x76, 0x00}, 5, 5, IO_8BIT, 0x800000, 4096, 16384, 1280,
  196. 0x10401011, 0xC03222, 0x101, 0, 80, VEND_TOSHIBA, 1024, "TC58TEG6DDKTA00", 0 ,
  197. {SANDISK_16K, {0xEF, 0xEE, 0xFF, 7, 0xFF, 7, 0, RTYPE_TOSHIBA, {0x80, 0x00}, {0x80, 0x01} },
  198. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  199. NAND_FLASH_MLC_HYBER, {FALSE, FALSE, FALSE, FALSE, 0xA2, 0xFF, FALSE, 0xFF, 8, 0xFF} },
  200. {{0x45, 0xDE, 0xA8, 0x92, 0x76, 0x00}, 5, 5, IO_8BIT, 0x83C580, 4128, 16384, 1952,
  201. 0x10401011, 0xC03222, 0x101, 0, 80, VEND_SANDISK, 1024, "SDTNRCAMAOO8G", 0 ,
  202. {PPTBL_NONE, {0xEF, 0xEE, 0x5D, 39, 0x11, 0, 0, RTYPE_SANDISK_TLC_1YNM, {0x80, 0x00}, {0x80, 0x01} },
  203. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  204. NAND_FLASH_TLC, {TRUE, TRUE, TRUE, TRUE, 0xA2, 0xFF, TRUE, 68, 9, 8} },
  205. {{0x98, 0xDE, 0x88, 0xA3, 0x72, 0x00}, 5, 5, IO_8BIT, 0x85E000, 6144, 16384, 1952,
  206. 0x10818022, 0xC03222, 0x101, 0, 80, VEND_TOSHIBA, 1024, "TC58TEG6TGLTA00", 0 ,
  207. {PPTBL_NONE, {0xEF, 0xEE, 0x5D, 39, 0x11, 0, 0, RTYPE_TOSHIBA_TLC, {0x80, 0x00}, {0x80, 0x01} },
  208. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  209. NAND_FLASH_TLC, {TRUE, FALSE, TRUE, TRUE, 0xA2, 0xFF, TRUE, 68, 8, 0} },
  210. {{0xAD, 0xDE, 0x18, 0x03, 0x00, 0x40}, 5, 5, IO_8BIT, 0x858000, 6144, 16384, 1952,
  211. 0x10818022, 0xC03222, 0x101, 0, 80, VEND_HYNIX, 1024, "H27QCG882M5R", 0 ,
  212. {PPTBL_NONE, {0xEF, 0xEE, 0x5D, 39, 0x11, 0, 0, RTYPE_TOSHIBA_TLC, {0x80, 0x00}, {0x80, 0x01} },
  213. {RAND_TYPE_SAMSUNG, {0x2D2D, 1, 1, 1, 1, 1} } },
  214. NAND_FLASH_TLC, {TRUE, FALSE, FALSE, TRUE, 0xA2, 0xFF, TRUE, 68, 8, 0} },
  215. };