emifa.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. /**
  2. * \file emifa.h
  3. *
  4. * \brief Definitions used for EMIFA
  5. *
  6. * This file contains the driver API prototypes and macro definitions.
  7. */
  8. /*
  9. * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
  10. */
  11. /*
  12. * Redistribution and use in source and binary forms, with or without
  13. * modification, are permitted provided that the following conditions
  14. * are met:
  15. *
  16. * Redistributions of source code must retain the above copyright
  17. * notice, this list of conditions and the following disclaimer.
  18. *
  19. * Redistributions in binary form must reproduce the above copyright
  20. * notice, this list of conditions and the following disclaimer in the
  21. * documentation and/or other materials provided with the
  22. * distribution.
  23. *
  24. * Neither the name of Texas Instruments Incorporated nor the names of
  25. * its contributors may be used to endorse or promote products derived
  26. * from this software without specific prior written permission.
  27. *
  28. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  29. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  30. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  31. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  32. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  33. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  34. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  35. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  36. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  37. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  38. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  39. *
  40. */
  41. #ifndef _EMIFA_H_
  42. #define _EMIFA_H__
  43. #include "hw_emifa2.h"
  44. #ifdef __cplusplus
  45. extern "C" {
  46. #endif
  47. /*******************************************************************************
  48. * MACRO DEFINITIONS
  49. *******************************************************************************/
  50. /*****************************************************************************/
  51. /*
  52. ** Values that can be passed to EMIFANandCSSet API as CSNum to select
  53. ** Chip Select.
  54. */
  55. /* Chip Select 2 */
  56. #define EMIFA_CHIP_SELECT_2 0
  57. /* Chip Select 3 */
  58. #define EMIFA_CHIP_SELECT_3 1
  59. /* Chip Select 4 */
  60. #define EMIFA_CHIP_SELECT_4 2
  61. /* Chip Select 5 */
  62. #define EMIFA_CHIP_SELECT_5 3
  63. /*****************************************************************************/
  64. /*
  65. ** Values that can be used to initialize NANDDevInfo structure
  66. ** Chip Select.
  67. */
  68. /* Chip Select 2 */
  69. #define EMIFA_CHIP_SELECT_2_SIZE (0x02000000)
  70. /* Chip Select 3 */
  71. #define EMIFA_CHIP_SELECT_3_SIZE (0x02000000)
  72. /* Chip Select 4 */
  73. #define EMIFA_CHIP_SELECT_4_SIZE (0x02000000)
  74. /* Chip Select 5 */
  75. #define EMIFA_CHIP_SELECT_5_SIZE (0x02000000)
  76. /*****************************************************************************/
  77. /*
  78. ** Values that can be passed to EMIFACSWaitPinSelect API as pin to select
  79. ** EMA_WAIT Pin.
  80. */
  81. /* EMA_WAIT[0] pin */
  82. #define EMIFA_EMA_WAIT_PIN0 0
  83. /* EMA_WAIT[1] pin */
  84. #define EMIFA_EMA_WAIT_PIN1 1
  85. /*****************************************************************************/
  86. /*
  87. ** Values that can be passed to EMIFAWaitPinPolaritySet API as pinPolarity to
  88. ** select Pin polarity.
  89. */
  90. /* EMA_WAIT pin polarity low*/
  91. #define EMIFA_EMA_WAIT_PIN_POLARITY_LOW 0
  92. /* EMA_WAIT pin polarity low*/
  93. #define EMIFA_EMA_WAIT_PIN_POLARITY_HIGH 1
  94. /*****************************************************************************/
  95. /*
  96. ** Values that can be passed to EMIFADataBusWidthSelect API as width to set the
  97. ** bus width.
  98. */
  99. #define EMIFA_DATA_BUSWITTH_8BIT 0
  100. #define EMIFA_DATA_BUSWITTH_16BIT 1
  101. /*****************************************************************************/
  102. /*
  103. ** Values that can be passed to EMIFAOpModeSelect API as mode to set the
  104. ** Asynchronous interface opmode.
  105. */
  106. #define EMIFA_ASYNC_INTERFACE_NORMAL_MODE 0
  107. #define EMIFA_ASYNC_INTERFACE_STROBE_MODE 1
  108. /*****************************************************************************/
  109. /*
  110. ** Values that can be passed to EMIFAExtendedWaitEnable API as flag to select
  111. ** or deselect the extended wait cycles.
  112. */
  113. #define EMIFA_EXTENDED_WAIT_ENABLE 1
  114. #define EMIFA_EXTENDED_WAIT_DISABLE 0
  115. /*****************************************************************************/
  116. /*
  117. ** Values that can be passed to EMIFANORPageSizeSet API as pagesize to set the
  118. ** page size for NOR.
  119. */
  120. #define EMIFA_NOR_PAGE_SIZE_4WORDS 0
  121. #define EMIFA_NOR_PAGE_SIZE_8WORDS 1
  122. /*****************************************************************************/
  123. /*
  124. ** Values that can be passed to EMIFANANDEccValGet API as eccValIndex to
  125. ** specify the ecc value to read.
  126. */
  127. #define EMIFA_NAND_4BITECCVAL1 1
  128. #define EMIFA_NAND_4BITECCVAL2 2
  129. #define EMIFA_NAND_4BITECCVAL3 3
  130. #define EMIFA_NAND_4BITECCVAL4 4
  131. #define EMIFA_NAND_4BITECCVAL5 5
  132. #define EMIFA_NAND_4BITECCVAL6 6
  133. #define EMIFA_NAND_4BITECCVAL7 7
  134. #define EMIFA_NAND_4BITECCVAL8 8
  135. /*****************************************************************************/
  136. /*
  137. ** Values that can be passed to EMIFANAND4BitEccErrAddrGet API as
  138. ** eccErrAddrIndex to specify the ecc error address to read.
  139. */
  140. #define EMIFA_4BITECC_ERRADDR_INDEX_1 1
  141. #define EMIFA_4BITECC_ERRADDR_INDEX_2 2
  142. #define EMIFA_4BITECC_ERRADDR_INDEX_3 3
  143. #define EMIFA_4BITECC_ERRADDR_INDEX_4 4
  144. /*****************************************************************************/
  145. /*
  146. ** Values that define the state values in the ECC_STATE field of NANDFSR
  147. ** as returned by EMIFANAND4BitECCStateGet.
  148. */
  149. #define EMIFA_4BITECC_CORRECTION_ECCSTATE_0 (0u)
  150. #define EMIFA_4BITECC_CORRECTION_ECCSTATE_1 (1u)
  151. #define EMIFA_4BITECC_CORRECTION_ECCSTATE_2 (2u)
  152. #define EMIFA_4BITECC_CORRECTION_ECCSTATE_3 (3u)
  153. /*****************************************************************************/
  154. /*
  155. ** Values that can be passed to EMIFANANDECCStart API as eccType to specify
  156. ** specify the ecc type.
  157. */
  158. #define EMIFA_NAND_1BIT_ECC 0
  159. #define EMIFA_NAND_4BIT_ECC 1
  160. /*****************************************************************************/
  161. /*
  162. ** Values that can be passed to EMIFANAND4BitEccErrValGet API as eccErrValIndex
  163. ** to specify the ecc error value to read.
  164. */
  165. #define EMIFA_4BITECC_ERRVAL_INDEX_1 1
  166. #define EMIFA_4BITECC_ERRVAL_INDEX_2 2
  167. #define EMIFA_4BITECC_ERRVAL_INDEX_3 3
  168. #define EMIFA_4BITECC_ERRVAL_INDEX_4 4
  169. /*****************************************************************************/
  170. /*
  171. ** Values that can be passed to EMIFASDRAMSelfRefModeConfig API as flag
  172. ** to specify the selfrefresh mode to enter or exit.
  173. */
  174. #define EMIFA_SDRAM_SELFREF_MODE_ENTER 1
  175. #define EMIFA_SDRAM_SELFREF_MODE_EXIT 0
  176. /*****************************************************************************/
  177. /*
  178. ** Values that can be passed to EMIFASDRAMPowDownModeConfig API as flag
  179. ** to specify the powerdown mode ot enter or exit.
  180. */
  181. #define EMIFA_SDRAM_POWDOWN_MODE_ENTER 1
  182. #define EMIFA_SDRAM_POWDOEN_MODE_EXIT 0
  183. /*****************************************************************************/
  184. /*
  185. ** Values that can be passed to EMIFA_SDRAM_CONF macro as psize
  186. ** to specify the internal page size.
  187. */
  188. #define EMIFA_SDRAM_8COLUMN_ADDR_BITS 0
  189. #define EMIFA_SDRAM_9COLUMN_ADDR_BITS 1
  190. #define EMIFA_SDRAM_10COLUMN_ADDR_BITS 2
  191. #define EMIFA_SDRAM_11COLUMN_ADDR_BITS 3
  192. /*****************************************************************************/
  193. /*
  194. ** Values that can be passed to EMIFA_SDRAM_CONF macro as ibank
  195. ** to specify the Internal SDRAM bank size.
  196. */
  197. #define EMIFA_SDRAM_1BANK 0
  198. #define EMIFA_SDRAM_2BANK 1
  199. #define EMIFA_SDRAM_4BANK 2
  200. /*****************************************************************************/
  201. /*
  202. ** Values that can be passed to EMIFA_SDRAM_CONF macro as bit11_9lock
  203. ** to specify the CAS lat write lock flag.
  204. */
  205. #define EMIFA_SDRAM_CAS_WRITE_LOCK 0
  206. #define EMIFA_SDRAM_CAS_WRITE_UNLOCK 1
  207. /*****************************************************************************/
  208. /*
  209. ** Values that can be passed to EMIFA_SDRAM_CONF macro as nm
  210. ** to specify the Narrow mode bit.
  211. */
  212. #define EMIFA_SDRAM_32BIT 0
  213. #define EMIFA_SDRAM_16BIT 1
  214. /*****************************************************************************/
  215. /*
  216. ** Values that can be passed to EMIFA_SDRAM_CONF macro as caslat
  217. ** to specify the CAS latency.
  218. */
  219. #define EMIFA_SDRAM_CAS_LAT_2CYCLES EMIFA_SDCR_CL_CL2
  220. #define EMIFA_SDRAM_CAS_LAT_3CYCLES EMIFA_SDCR_CL_CL3
  221. /*****************************************************************************/
  222. /*
  223. ** Values that can be passed to EMIFANORPageModeConfig API as flag
  224. ** to specify the page mode to enable or disable.
  225. */
  226. #define EMIFA_NOR_PAGEMODE_ENABLE 1
  227. #define EMIFA_NOR_PAGEMODE_DISABLE 0
  228. /*****************************************************************************/
  229. /*
  230. ** Values that can be passed to EMIFARawIntStatusRead,EMIFARawIntClear,
  231. ** EMIFAMskedIntStatusRead,EMIFAMskedIntClear,EMIFAMskedIntSet,
  232. ** EMIFAMskedIntClear API as intFlag to specify the interrupt name.
  233. */
  234. #define EMIFA_ASYNC_TIMOUT_INT 1
  235. #define EMIFA_LINE_TRAP_INT 2
  236. #define EMIFA_WAIT_RISE_INT 3
  237. /*****************************************************************************/
  238. /*
  239. * \brief This macro used to make the conf value which is used to configure the
  240. * async wait time.\n
  241. *
  242. * \param wset Write setup time or width in EMA_CLK cycles.\n
  243. *
  244. * wstb Write strobe time or width in EMA_CLK cycles.\n
  245. *
  246. * whld Write hold time or width in EMA_CLK cycles.\n
  247. *
  248. * rset Read setup time or width in EMA_CLK cycles.\n
  249. *
  250. * rstb Read strobe time or width in EMA_CLK cycles.\n
  251. *
  252. * rhld Read hold time or width in EMA_CLK cycles.\n
  253. *
  254. * ta Minimum Turn-Around time..\n
  255. *
  256. */
  257. #define EMIFA_ASYNC_WAITTIME_CONFIG(wset, wstb, whld, rset, rstb, rhld, ta ) ((unsigned int) \
  258. ((wset << EMIFA_CE2CFG_W_SETUP_SHIFT) & EMIFA_CE2CFG_W_SETUP) | \
  259. ((wstb << EMIFA_CE2CFG_W_STROBE_SHIFT) & EMIFA_CE2CFG_W_STROBE) | \
  260. ((whld << EMIFA_CE2CFG_W_HOLD_SHIFT) & EMIFA_CE2CFG_W_HOLD) | \
  261. ((rset << EMIFA_CE2CFG_R_SETUP_SHIFT) & EMIFA_CE2CFG_R_SETUP) | \
  262. ((rstb << EMIFA_CE2CFG_R_STROBE_SHIFT) & EMIFA_CE2CFG_R_STROBE) | \
  263. ((rhld << EMIFA_CE2CFG_R_HOLD_SHIFT) & EMIFA_CE2CFG_R_HOLD) | \
  264. ((ta << EMIFA_CE2CFG_TA_SHIFT) & EMIFA_CE2CFG_TA))
  265. /*****************************************************************************/
  266. /*
  267. * \brief This macro used to make the conf value which is used to configure the
  268. * SDRAM.\n
  269. *
  270. * \param psize -- internal page size.It can take follwing values.
  271. * EMIFA_SDRAM_8COLUMN_ADDR_BITS
  272. * EMIFA_SDRAM_9COLUMN_ADDR_BITS
  273. * EMIFA_SDRAM_10COLUMN_ADDR_BITS
  274. * EMIFA_SDRAM_11COLUMN_ADDR_BITS
  275. * ibank -- Internal SDRAM bank size. It can take following values.
  276. * EMIFA_SDRAM_1BANK
  277. * EMIFA_SDRAM_2BANK
  278. * EMIFA_SDRAM_4BANK
  279. * bit11_9lock -- CAS lat write lock flag. It can take following values.
  280. * EMIFA_SDRAM_CAS_WRITE_LOCK
  281. * EMIFA_SDRAM_CAS_WRITE_UNLOCK
  282. * caslat -- CAS latency. It can take following values.
  283. * EMIFA_SDRAM_CAS_LAT_2CYCLES
  284. * EMIFA_SDRAM_CAS_LAT_3CYCLES
  285. * nm -- Narrow mode bit.This defines whether a 16- or
  286. * 32-bit-wide SDRAM is connected to the EMIFA.It can
  287. * take following values.
  288. * EMIFA_SDRAM_32BIT
  289. * EMIFA_SDRAM_16BIT
  290. *
  291. */
  292. #define EMIFA_SDRAM_CONF(psize, ibank, bit11_9lock, caslat, nm ) ((unsigned int) \
  293. ((psize << EMIFA_SDCR_PAGESIZE_SHIFT) & EMIFA_SDCR_PAGESIZE) | \
  294. ((ibank << EMIFA_SDCR_IBANK_SHIFT) & EMIFA_SDCR_IBANK) | \
  295. ((bit11_9lock << EMIFA_SDCR_BIT11_9LOCK_SHIFT) & EMIFA_SDCR_BIT11_9LOCK) | \
  296. ((caslat << EMIFA_SDCR_CL_SHIFT) & EMIFA_SDCR_CL) | \
  297. ((nm << EMIFA_SDCR_NM_SHIFT) & EMIFA_SDCR_NM))
  298. /*****************************************************************************/
  299. /*
  300. * \brief This macro used to make the conf value which is used to configure the
  301. * SDRAM.\n
  302. *
  303. * \param t_rrd -- internal page size.It can take follwing values.
  304. * t_rc -- EMA_CLK clock cycles from Activate to Activate
  305. * t_ras -- EMA_CLK clock cycles from Activate(ACTV) to Precharge(PRE)
  306. * t_wr -- EMA_CLK cycles from last Write (WRT) to Precharge (PRE)
  307. * t_rcd -- EMA_CLK cycles from Active(ACTV) to Rd(READ) or Wr(WRT).
  308. * t_rp -- EMA_CLK cycles from Precharge (PRE) to Activate (ACTV)
  309. * or Refresh (REFR) command,
  310. * t_rfc -- EMA_CLK cycles from Refresh (REFR) to Refresh (REFR).
  311. *
  312. */
  313. #define EMIFA_SDRAM_TIMING_CONF(t_rrd, t_rc, t_ras, t_wr, t_rcd, t_rp, t_rfc ) ((unsigned int) \
  314. ((t_rrd << EMIFA_SDTIMR_T_RRD_SHIFT) & EMIFA_SDTIMR_T_RRD) | \
  315. ((t_rc << EMIFA_SDTIMR_T_RC_SHIFT) & EMIFA_SDTIMR_T_RC) | \
  316. ((t_ras << EMIFA_SDTIMR_T_RAS_SHIFT) & EMIFA_SDTIMR_T_RAS) | \
  317. ((t_wr << EMIFA_SDTIMR_T_WR_SHIFT) & EMIFA_SDTIMR_T_WR) | \
  318. ((t_rcd << EMIFA_SDTIMR_T_RCD_SHIFT) & EMIFA_SDTIMR_T_RCD) | \
  319. ((t_rp << EMIFA_SDTIMR_T_RP_SHIFT) & EMIFA_SDTIMR_T_RP) | \
  320. ((t_rfc << EMIFA_SDTIMR_T_RFC_SHIFT) & EMIFA_SDTIMR_T_RFC))
  321. /***************************************************************************/
  322. /*
  323. ** Function Prototypes
  324. */
  325. extern unsigned int EMIFAModuleIdRead(unsigned int baseAddr);
  326. extern void EMIFANAND4BitECCAddrCalcStart(unsigned int baseAddr);
  327. extern unsigned int EMIFANAND4BitECCStateGet(unsigned int baseAddr);
  328. extern void EMIFASDRAMRefDurPowDownModeEnable(unsigned int baseAddr);
  329. extern void EMIFASdramConfig(unsigned int baseAddr,unsigned int conf);
  330. extern void EMIFANANDCSSet(unsigned int baseAddr, unsigned int CSNum);
  331. extern unsigned int EMIFANAND4BitECCNumOfErrsGet(unsigned int baseAddr);
  332. extern void EMIFARawIntClear(unsigned int baseAddr,unsigned int intFlag);
  333. extern void EMIFAMskedIntEnable(unsigned int baseAddr,unsigned int flag);
  334. extern void EMIFAMskedIntDisable(unsigned int baseAddr,unsigned int flag);
  335. extern void EMIFAMskedIntClear(unsigned int baseAddr,unsigned int intFlag);
  336. extern void EMIFASDRAMRefRateSet(unsigned int baseAddr,unsigned int refRate);
  337. extern void EMIFASDRAMTimingConfig(unsigned int baseAddr, unsigned int conf);
  338. extern void EMIFANAND4BitECCLoad(unsigned int baseAddr,unsigned int eccLdVal);
  339. extern void EMIFANAND4BitECCSelect(unsigned int baseAddr, unsigned int CSNum);
  340. extern void EMIFAMaxExtWaitCycleSet(unsigned int baseAddr,
  341. unsigned int waitVal);
  342. extern void EMIFASDRAMSelfRefModeConfig(unsigned int baseAddr,
  343. unsigned int flag);
  344. extern unsigned int EMIFARawIntStatusRead(unsigned int baseAddr,
  345. unsigned int intFlag);
  346. extern unsigned int EMIFAMskedIntStatusRead(unsigned int baseAddr,
  347. unsigned int intFlag);
  348. extern void EMIFASDRAMPowDownModeConfig(unsigned int baseAddr,
  349. unsigned int flag);
  350. extern unsigned int EMIFAWaitPinStatusGet(unsigned int baseAddr,
  351. unsigned int pinNum);
  352. extern void EMIFASDRAMSelfRefExitTimeConfig(unsigned int baseAddr,
  353. unsigned int exitTime);
  354. extern unsigned int EMIFANAND4BitEccErrAddrGet(unsigned int baseAddr,
  355. unsigned int eccErrAddrIndex);
  356. extern unsigned int EMIFANAND4BitEccErrValGet(unsigned int baseAddr,
  357. unsigned int eccErrValIndex);
  358. extern void EMIFACSWaitPinSelect(unsigned int baseAddr,
  359. unsigned int CSNum,unsigned int pin);
  360. extern void EMIFAAsyncDevOpModeSelect(unsigned int baseAddr,unsigned int CSNum,
  361. unsigned int mode);
  362. extern void EMIFAExtendedWaitConfig(unsigned int baseAddr,unsigned int CSNum,
  363. unsigned int flag);
  364. extern void EMIFAAsyncDevDataBusWidthSelect(unsigned int baseAddr,
  365. unsigned int CSNum,
  366. unsigned int width);
  367. extern void EMIFAWaitTimingConfig(unsigned int baseAddr,unsigned int csNum,
  368. unsigned int conf);
  369. extern void EMIFAWaitPinPolaritySet(unsigned int baseAddr,unsigned int pin,
  370. unsigned int pinPolarity);
  371. extern void EMIFANORPageModeConfig(unsigned int baseAddr, unsigned int CSNum,
  372. unsigned int flag);
  373. extern void EMIFANORPageSizeSet(unsigned int baseAddr,unsigned int CSNum,
  374. unsigned int pageSize);
  375. extern void EMIFANORPageAccessDelaySet(unsigned int baseAddr,
  376. unsigned int CSNum,unsigned int delay);
  377. extern void EMIFANANDECCStart(unsigned int baseAddr,unsigned int eccType,
  378. unsigned int CSNum);
  379. extern unsigned int EMIFANANDEccValGet(unsigned int baseAddr,
  380. unsigned int eccType,
  381. unsigned int eccValIndexOrCS);
  382. #ifdef __cplusplus
  383. }
  384. #endif
  385. #endif