docg4.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*
  2. * Copyright (C) 2013 Mike Dunn <mikedunn@newsguy.com>
  3. *
  4. * This file is released under the terms of GPL v2 and any later version.
  5. * See the file COPYING in the root directory of the source tree for details.
  6. *
  7. */
  8. #ifndef __DOCG4_H__
  9. #define __DOCG4_H__
  10. #include <common.h>
  11. #include <linux/mtd/nand.h>
  12. extern int docg4_nand_init(struct mtd_info *mtd,
  13. struct nand_chip *nand, int devnum);
  14. /* SPL-related definitions */
  15. #define DOCG4_IPL_LOAD_BLOCK_COUNT 2 /* number of blocks that IPL loads */
  16. #define DOCG4_BLOCK_CAPACITY_SPL 0x10000 /* reliable mode; redundant pages */
  17. #define DOC_IOSPACE_DATA 0x0800
  18. /* register offsets */
  19. #define DOC_CHIPID 0x1000
  20. #define DOC_DEVICESELECT 0x100a
  21. #define DOC_ASICMODE 0x100c
  22. #define DOC_DATAEND 0x101e
  23. #define DOC_NOP 0x103e
  24. #define DOC_FLASHSEQUENCE 0x1032
  25. #define DOC_FLASHCOMMAND 0x1034
  26. #define DOC_FLASHADDRESS 0x1036
  27. #define DOC_FLASHCONTROL 0x1038
  28. #define DOC_ECCCONF0 0x1040
  29. #define DOC_ECCCONF1 0x1042
  30. #define DOC_HAMMINGPARITY 0x1046
  31. #define DOC_BCH_SYNDROM(idx) (0x1048 + idx)
  32. #define DOC_ASICMODECONFIRM 0x1072
  33. #define DOC_CHIPID_INV 0x1074
  34. #define DOC_POWERMODE 0x107c
  35. #define DOCG4_MYSTERY_REG 0x1050
  36. /* apparently used only to write oob bytes 6 and 7 */
  37. #define DOCG4_OOB_6_7 0x1052
  38. /* DOC_FLASHSEQUENCE register commands */
  39. #define DOC_SEQ_RESET 0x00
  40. #define DOCG4_SEQ_PAGE_READ 0x03
  41. #define DOCG4_SEQ_FLUSH 0x29
  42. #define DOCG4_SEQ_PAGEWRITE 0x16
  43. #define DOCG4_SEQ_PAGEPROG 0x1e
  44. #define DOCG4_SEQ_BLOCKERASE 0x24
  45. /* DOC_FLASHCOMMAND register commands */
  46. #define DOCG4_CMD_PAGE_READ 0x00
  47. #define DOC_CMD_ERASECYCLE2 0xd0
  48. #define DOCG4_CMD_FLUSH 0x70
  49. #define DOCG4_CMD_READ2 0x30
  50. #define DOC_CMD_PROG_BLOCK_ADDR 0x60
  51. #define DOCG4_CMD_PAGEWRITE 0x80
  52. #define DOC_CMD_PROG_CYCLE2 0x10
  53. #define DOC_CMD_RESET 0xff
  54. /* DOC_POWERMODE register bits */
  55. #define DOC_POWERDOWN_READY 0x80
  56. /* DOC_FLASHCONTROL register bits */
  57. #define DOC_CTRL_CE 0x10
  58. #define DOC_CTRL_UNKNOWN 0x40
  59. #define DOC_CTRL_FLASHREADY 0x01
  60. /* DOC_ECCCONF0 register bits */
  61. #define DOC_ECCCONF0_READ_MODE 0x8000
  62. #define DOC_ECCCONF0_UNKNOWN 0x2000
  63. #define DOC_ECCCONF0_ECC_ENABLE 0x1000
  64. #define DOC_ECCCONF0_DATA_BYTES_MASK 0x07ff
  65. /* DOC_ECCCONF1 register bits */
  66. #define DOC_ECCCONF1_BCH_SYNDROM_ERR 0x80
  67. #define DOC_ECCCONF1_ECC_ENABLE 0x07
  68. #define DOC_ECCCONF1_PAGE_IS_WRITTEN 0x20
  69. /* DOC_ASICMODE register bits */
  70. #define DOC_ASICMODE_RESET 0x00
  71. #define DOC_ASICMODE_NORMAL 0x01
  72. #define DOC_ASICMODE_POWERDOWN 0x02
  73. #define DOC_ASICMODE_MDWREN 0x04
  74. #define DOC_ASICMODE_BDETCT_RESET 0x08
  75. #define DOC_ASICMODE_RSTIN_RESET 0x10
  76. #define DOC_ASICMODE_RAM_WE 0x20
  77. /* good status values read after read/write/erase operations */
  78. #define DOCG4_PROGSTATUS_GOOD 0x51
  79. #define DOCG4_PROGSTATUS_GOOD_2 0xe0
  80. /*
  81. * On read operations (page and oob-only), the first byte read from I/O reg is a
  82. * status. On error, it reads 0x73; otherwise, it reads either 0x71 (first read
  83. * after reset only) or 0x51, so bit 1 is presumed to be an error indicator.
  84. */
  85. #define DOCG4_READ_ERROR 0x02 /* bit 1 indicates read error */
  86. /* anatomy of the device */
  87. #define DOCG4_CHIP_SIZE 0x8000000
  88. #define DOCG4_PAGE_SIZE 0x200
  89. #define DOCG4_PAGES_PER_BLOCK 0x200
  90. #define DOCG4_BLOCK_SIZE (DOCG4_PAGES_PER_BLOCK * DOCG4_PAGE_SIZE)
  91. #define DOCG4_NUMBLOCKS (DOCG4_CHIP_SIZE / DOCG4_BLOCK_SIZE)
  92. #define DOCG4_OOB_SIZE 0x10
  93. #define DOCG4_CHIP_SHIFT 27 /* log_2(DOCG4_CHIP_SIZE) */
  94. #define DOCG4_PAGE_SHIFT 9 /* log_2(DOCG4_PAGE_SIZE) */
  95. #define DOCG4_ERASE_SHIFT 18 /* log_2(DOCG4_BLOCK_SIZE) */
  96. /* all but the last byte is included in ecc calculation */
  97. #define DOCG4_BCH_SIZE (DOCG4_PAGE_SIZE + DOCG4_OOB_SIZE - 1)
  98. #define DOCG4_USERDATA_LEN 520 /* 512 byte page plus 8 oob avail to user */
  99. /* expected values from the ID registers */
  100. #define DOCG4_IDREG1_VALUE 0x0400
  101. #define DOCG4_IDREG2_VALUE 0xfbff
  102. /* primitive polynomial used to build the Galois field used by hw ecc gen */
  103. #define DOCG4_PRIMITIVE_POLY 0x4443
  104. #define DOCG4_M 14 /* Galois field is of order 2^14 */
  105. #define DOCG4_T 4 /* BCH alg corrects up to 4 bit errors */
  106. #define DOCG4_FACTORY_BBT_PAGE 16 /* page where read-only factory bbt lives */
  107. #endif /* __DOCG4_H__ */