msdc_reg.h 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("MediaTek Software") are
  4. * protected under relevant copyright laws. The information contained herein
  5. * is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. * Without the prior written permission of MediaTek inc. and/or its licensors,
  7. * any reproduction, modification, use or disclosure of MediaTek Software,
  8. * and information contained herein, in whole or in part, shall be strictly prohibited.
  9. */
  10. /* MediaTek Inc. (C) 2019. All rights reserved.
  11. *
  12. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. *
  31. * The following software/firmware and/or related documentation ("MediaTek Software")
  32. * have been modified by MediaTek Inc. All revisions are subject to any receiver\'s
  33. * applicable license agreements with MediaTek Inc.
  34. */
  35. #ifndef _MSDC_REG_H_
  36. #define _MSDC_REG_H_
  37. #include "cust_msdc.h"
  38. #include "msdc_cfg.h"
  39. #include "msdc_utils.h"
  40. #include "mmc_core.h"
  41. #include "msdc_irq.h"
  42. #include "mmc_test.h"
  43. #if defined(MMC_MSDC_DRV_PRELOADER)
  44. #include "platform.h"
  45. #include "pll.h"
  46. #include "sync_write.h"
  47. #endif
  48. #if defined(MMC_MSDC_DRV_LK)
  49. #include "sync_write.h"
  50. #include "mt_reg_base.h"
  51. #endif
  52. #if defined(MMC_MSDC_DRV_CTP)
  53. #include "reg_base.H"
  54. #include "intrCtrl.h"
  55. #endif
  56. #if defined(MSDC_ENABLE_DMA_MODE)
  57. #include "msdc_dma.h"
  58. #endif
  59. #if defined(FEATURE_MMC_SW_CMDQ)
  60. #include "mmc_cmdq.h"
  61. #endif
  62. //#define MTK_MSDC_DUMP_FIFO
  63. /*--------------------------------------------------------------------------*/
  64. /* Common Macro */
  65. /*--------------------------------------------------------------------------*/
  66. #define REG_ADDR(x) ((volatile u32 *)(base + OFFSET_##x))
  67. /*--------------------------------------------------------------------------*/
  68. /* Register Offset */
  69. /*--------------------------------------------------------------------------*/
  70. #define OFFSET_MSDC_CFG (0x0)
  71. #define OFFSET_MSDC_IOCON (0x04)
  72. #define OFFSET_MSDC_PS (0x08)
  73. #define OFFSET_MSDC_INT (0x0c)
  74. #define OFFSET_MSDC_INTEN (0x10)
  75. #define OFFSET_MSDC_FIFOCS (0x14)
  76. #define OFFSET_MSDC_TXDATA (0x18)
  77. #define OFFSET_MSDC_RXDATA (0x1c)
  78. #define OFFSET_SDC_CFG (0x30)
  79. #define OFFSET_SDC_CMD (0x34)
  80. #define OFFSET_SDC_ARG (0x38)
  81. #define OFFSET_SDC_STS (0x3c)
  82. #define OFFSET_SDC_RESP0 (0x40)
  83. #define OFFSET_SDC_RESP1 (0x44)
  84. #define OFFSET_SDC_RESP2 (0x48)
  85. #define OFFSET_SDC_RESP3 (0x4c)
  86. #define OFFSET_SDC_BLK_NUM (0x50)
  87. #define OFFSET_SDC_VOL_CHG (0x54)
  88. #define OFFSET_SDC_CSTS (0x58)
  89. #define OFFSET_SDC_CSTS_EN (0x5c)
  90. #define OFFSET_SDC_DCRC_STS (0x60)
  91. #define OFFSET_SDC_ADV_CFG0 (0x64)
  92. #define OFFSET_EMMC_CFG0 (0x70)
  93. #define OFFSET_EMMC_CFG1 (0x74)
  94. #define OFFSET_EMMC_STS (0x78)
  95. #define OFFSET_EMMC_IOCON (0x7c)
  96. #define OFFSET_SDC_ACMD_RESP (0x80)
  97. #define OFFSET_SDC_ACMD19_TRG (0x84)
  98. #define OFFSET_SDC_ACMD19_STS (0x88)
  99. #define OFFSET_MSDC_DMA_SA_HIGH (0x8C)
  100. #define OFFSET_MSDC_DMA_SA (0x90)
  101. #define OFFSET_MSDC_DMA_CA (0x94)
  102. #define OFFSET_MSDC_DMA_CTRL (0x98)
  103. #define OFFSET_MSDC_DMA_CFG (0x9c)
  104. #define OFFSET_MSDC_DBG_SEL (0xa0)
  105. #define OFFSET_MSDC_DBG_OUT (0xa4)
  106. #define OFFSET_MSDC_DMA_LEN (0xa8)
  107. #define OFFSET_MSDC_PATCH_BIT0 (0xb0)
  108. #define OFFSET_MSDC_PATCH_BIT1 (0xb4)
  109. #define OFFSET_MSDC_PATCH_BIT2 (0xb8)
  110. #define OFFSET_DAT0_TUNE_CRC (0xc0)
  111. #define OFFSET_DAT1_TUNE_CRC (0xc4)
  112. #define OFFSET_DAT2_TUNE_CRC (0xc8)
  113. #define OFFSET_DAT3_TUNE_CRC (0xcc)
  114. #define OFFSET_CMD_TUNE_CRC (0xd0)
  115. #define OFFSET_SDIO_TUNE_WIND (0xd4)
  116. #define OFFSET_MSDC_PAD_TUNE0 (0xf0)
  117. #define OFFSET_MSDC_PAD_TUNE1 (0xf4)
  118. #define OFFSET_MSDC_DAT_RDDLY0 (0xf8)
  119. #define OFFSET_MSDC_DAT_RDDLY1 (0xfc)
  120. #define OFFSET_MSDC_DAT_RDDLY2 (0x100)
  121. #define OFFSET_MSDC_DAT_RDDLY3 (0x104)
  122. #define OFFSET_MSDC_HW_DBG (0x110)
  123. #define OFFSET_MSDC_VERSION (0x114)
  124. #define OFFSET_MSDC_ECO_VER (0x118)
  125. #define OFFSET_EMMC50_PAD_CTL0 (0x180)
  126. #define OFFSET_EMMC50_PAD_DS_CTL0 (0x184)
  127. #define OFFSET_EMMC50_PAD_DS_TUNE (0x188)
  128. #define OFFSET_EMMC50_PAD_CMD_TUNE (0x18c)
  129. #define OFFSET_EMMC50_PAD_DAT01_TUNE (0x190)
  130. #define OFFSET_EMMC50_PAD_DAT23_TUNE (0x194)
  131. #define OFFSET_EMMC50_PAD_DAT45_TUNE (0x198)
  132. #define OFFSET_EMMC50_PAD_DAT67_TUNE (0x19c)
  133. #define OFFSET_EMMC51_CFG0 (0x204)
  134. #define OFFSET_EMMC50_CFG0 (0x208)
  135. #define OFFSET_EMMC50_CFG1 (0x20c)
  136. #define OFFSET_EMMC50_CFG2 (0x21c)
  137. #define OFFSET_EMMC50_CFG3 (0x220)
  138. #define OFFSET_EMMC50_CFG4 (0x224)
  139. #define OFFSET_SDC_FIFO_CFG (0x228)
  140. /*--------------------------------------------------------------------------*/
  141. /* Register Address */
  142. /*--------------------------------------------------------------------------*/
  143. /* common register */
  144. #define MSDC_CFG REG_ADDR(MSDC_CFG)
  145. #define MSDC_IOCON REG_ADDR(MSDC_IOCON)
  146. #define MSDC_PS REG_ADDR(MSDC_PS)
  147. #define MSDC_INT REG_ADDR(MSDC_INT)
  148. #define MSDC_INTEN REG_ADDR(MSDC_INTEN)
  149. #define MSDC_FIFOCS REG_ADDR(MSDC_FIFOCS)
  150. #define MSDC_TXDATA REG_ADDR(MSDC_TXDATA)
  151. #define MSDC_RXDATA REG_ADDR(MSDC_RXDATA)
  152. /* sdmmc register */
  153. #define SDC_CFG REG_ADDR(SDC_CFG)
  154. #define SDC_CMD REG_ADDR(SDC_CMD)
  155. #define SDC_ARG REG_ADDR(SDC_ARG)
  156. #define SDC_STS REG_ADDR(SDC_STS)
  157. #define SDC_RESP0 REG_ADDR(SDC_RESP0)
  158. #define SDC_RESP1 REG_ADDR(SDC_RESP1)
  159. #define SDC_RESP2 REG_ADDR(SDC_RESP2)
  160. #define SDC_RESP3 REG_ADDR(SDC_RESP3)
  161. #define SDC_BLK_NUM REG_ADDR(SDC_BLK_NUM)
  162. #define SDC_VOL_CHG REG_ADDR(SDC_VOL_CHG)
  163. #define SDC_CSTS REG_ADDR(SDC_CSTS)
  164. #define SDC_CSTS_EN REG_ADDR(SDC_CSTS_EN)
  165. #define SDC_DCRC_STS REG_ADDR(SDC_DCRC_STS)
  166. #define SDC_ADV_CFG0 REG_ADDR(SDC_ADV_CFG0)
  167. /* emmc register*/
  168. #define EMMC_CFG0 REG_ADDR(EMMC_CFG0)
  169. #define EMMC_CFG1 REG_ADDR(EMMC_CFG1)
  170. #define EMMC_STS REG_ADDR(EMMC_STS)
  171. #define EMMC_IOCON REG_ADDR(EMMC_IOCON)
  172. /* auto command register */
  173. #define SDC_ACMD_RESP REG_ADDR(SDC_ACMD_RESP)
  174. #define SDC_ACMD19_TRG REG_ADDR(SDC_ACMD19_TRG)
  175. #define SDC_ACMD19_STS REG_ADDR(SDC_ACMD19_STS)
  176. /* dma register */
  177. #define MSDC_DMA_SA_HIGH REG_ADDR(MSDC_DMA_SA_HIGH)
  178. #define MSDC_DMA_SA REG_ADDR(MSDC_DMA_SA)
  179. #define MSDC_DMA_CA REG_ADDR(MSDC_DMA_CA)
  180. #define MSDC_DMA_CTRL REG_ADDR(MSDC_DMA_CTRL)
  181. #define MSDC_DMA_CFG REG_ADDR(MSDC_DMA_CFG)
  182. #define MSDC_DMA_LEN REG_ADDR(MSDC_DMA_LEN)
  183. /* data read delay */
  184. #define MSDC_DAT_RDDLY0 REG_ADDR(MSDC_DAT_RDDLY0)
  185. #define MSDC_DAT_RDDLY1 REG_ADDR(MSDC_DAT_RDDLY1)
  186. #define MSDC_DAT_RDDLY2 REG_ADDR(MSDC_DAT_RDDLY2)
  187. #define MSDC_DAT_RDDLY3 REG_ADDR(MSDC_DAT_RDDLY3)
  188. /* debug register */
  189. #define MSDC_DBG_SEL REG_ADDR(MSDC_DBG_SEL)
  190. #define MSDC_DBG_OUT REG_ADDR(MSDC_DBG_OUT)
  191. /* misc register */
  192. #define MSDC_PATCH_BIT0 REG_ADDR(MSDC_PATCH_BIT0)
  193. #define MSDC_PATCH_BIT1 REG_ADDR(MSDC_PATCH_BIT1)
  194. #define MSDC_PATCH_BIT2 REG_ADDR(MSDC_PATCH_BIT2)
  195. #define DAT0_TUNE_CRC REG_ADDR(DAT0_TUNE_CRC)
  196. #define DAT1_TUNE_CRC REG_ADDR(DAT1_TUNE_CRC)
  197. #define DAT2_TUNE_CRC REG_ADDR(DAT2_TUNE_CRC)
  198. #define DAT3_TUNE_CRC REG_ADDR(DAT3_TUNE_CRC)
  199. #define CMD_TUNE_CRC REG_ADDR(CMD_TUNE_CRC)
  200. #define SDIO_TUNE_WIND REG_ADDR(SDIO_TUNE_WIND)
  201. #define MSDC_PAD_TUNE0 REG_ADDR(MSDC_PAD_TUNE0)
  202. #define MSDC_PAD_TUNE1 REG_ADDR(MSDC_PAD_TUNE1)
  203. #define MSDC_HW_DBG REG_ADDR(MSDC_HW_DBG)
  204. #define MSDC_VERSION REG_ADDR(MSDC_VERSION)
  205. #define MSDC_ECO_VER REG_ADDR(MSDC_ECO_VER)
  206. /* eMMC 5.0 register */
  207. #define EMMC50_PAD_CTL0 REG_ADDR(EMMC50_PAD_CTL0)
  208. #define EMMC50_PAD_DS_CTL0 REG_ADDR(EMMC50_PAD_DS_CTL0)
  209. #define EMMC50_PAD_DS_TUNE REG_ADDR(EMMC50_PAD_DS_TUNE)
  210. #define EMMC50_PAD_CMD_TUNE REG_ADDR(EMMC50_PAD_CMD_TUNE)
  211. #define EMMC50_PAD_DAT01_TUNE REG_ADDR(EMMC50_PAD_DAT01_TUNE)
  212. #define EMMC50_PAD_DAT23_TUNE REG_ADDR(EMMC50_PAD_DAT23_TUNE)
  213. #define EMMC50_PAD_DAT45_TUNE REG_ADDR(EMMC50_PAD_DAT45_TUNE)
  214. #define EMMC50_PAD_DAT67_TUNE REG_ADDR(EMMC50_PAD_DAT67_TUNE)
  215. #define EMMC51_CFG0 REG_ADDR(EMMC51_CFG0)
  216. #define EMMC50_CFG0 REG_ADDR(EMMC50_CFG0)
  217. #define EMMC50_CFG1 REG_ADDR(EMMC50_CFG1)
  218. #define EMMC50_CFG2 REG_ADDR(EMMC50_CFG2)
  219. #define EMMC50_CFG3 REG_ADDR(EMMC50_CFG3)
  220. #define EMMC50_CFG4 REG_ADDR(EMMC50_CFG4)
  221. #define SDC_FIFO_CFG REG_ADDR(SDC_FIFO_CFG)
  222. #define MSDC_AES_SEL REG_ADDR(MSDC_AES_SEL)
  223. /* HW CMDQ registger */
  224. #define MTKCQ_CFG0 REG_ADDR(MTKCQ_CFG0)
  225. #define MTKCQ_CFG1 REG_ADDR(MTKCQ_CFG1)
  226. #define MTKCQ_CFG2 REG_ADDR(MTKCQ_CFG2)
  227. #define MTKCQ_ERR_ST REG_ADDR(MTKCQ_ERR_ST)
  228. #define MTKCQ_CMD45_READY REG_ADDR(MTKCQ_CMD45_READY)
  229. #define MTKCQ_TASK_READY_ST REG_ADDR(MTKCQ_TASK_READY_ST)
  230. #define MTKCQ_TASK_DONE_ST REG_ADDR(MTKCQ_TASK_DONE_ST)
  231. #define MTKCQ_ERR_ST_CLR REG_ADDR(MTKCQ_ERR_ST_CLR)
  232. #define MTKCQ_CMD_DONE_CLR REG_ADDR(MTKCQ_CMD_DONE_CLR)
  233. #define MTKCQ_SW_CTL_CQ REG_ADDR(MTKCQ_SW_CTL_CQ)
  234. #define MTKCQ_CMD44_RESP REG_ADDR(MTKCQ_CMD44_RESP)
  235. #define MTKCQ_CMD45_RESP REG_ADDR(MTKCQ_CMD45_RESP)
  236. #define MTKCQ_CMD13_RCA REG_ADDR(MTKCQ_CMD13_RCA)
  237. #define EMMC51_CQCB_CFG3 REG_ADDR(EMMC51_CQCB_CFG3)
  238. #define EMMC51_CQCB_CMD44 REG_ADDR(EMMC51_CQCB_CMD44)
  239. #define EMMC51_CQCB_CMD45 REG_ADDR(EMMC51_CQCB_CMD45)
  240. #define EMMC51_CQCB_TIDMAP REG_ADDR(EMMC51_CQCB_TIDMAP)
  241. #define EMMC51_CQCB_TIDMAPCLR REG_ADDR(EMMC51_CQCB_TIDMAPCLR)
  242. #define EMMC51_CQCB_CURCMD REG_ADDR(EMMC51_CQCB_CURCMD)
  243. /*--------------------------------------------------------------------------*/
  244. /* Register Mask */
  245. /*--------------------------------------------------------------------------*/
  246. /* MSDC_CFG mask */
  247. #define MSDC_CFG_MODE (0x1 << 0) /* RW */
  248. #define MSDC_CFG_CKPDN (0x1 << 1) /* RW */
  249. #define MSDC_CFG_RST (0x1 << 2) /* A0 */
  250. #define MSDC_CFG_PIO (0x1 << 3) /* RW */
  251. #define MSDC_CFG_CKDRVEN (0x1 << 4) /* RW */
  252. #define MSDC_CFG_BV18SDT (0x1 << 5) /* RW */
  253. #define MSDC_CFG_BV18PSS (0x1 << 6) /* R */
  254. #define MSDC_CFG_CKSTB (0x1 << 7) /* R */
  255. #define MSDC_CFG_CKDIV (0xfff << 8) /* RW */
  256. #define MSDC_CFG_CKDIV_BITS (12)
  257. #define MSDC_CFG_CKMOD (0x3 << 20) /* W1C */
  258. #define MSDC_CFG_CKMOD_BITS (2)
  259. #define MSDC_CFG_CKMOD_HS400 (0x1 << 22) /* RW */
  260. #define MSDC_CFG_START_BIT (0x3 << 23) /* RW */
  261. #define MSDC_CFG_SCLK_STOP_DDR (0x1 << 25) /* RW */
  262. #define MSDC_CFG_DVFS_EN (0x1 << 30) /* RW */
  263. /* MSDC_IOCON mask */
  264. #define MSDC_IOCON_SDR104CKS (0x1 << 0) /* RW */
  265. #define MSDC_IOCON_RSPL (0x1 << 1) /* RW */
  266. #define MSDC_IOCON_R_D_SMPL (0x1 << 2) /* RW */
  267. #define MSDC_IOCON_DDLSEL (0x1 << 3) /* RW */
  268. #define MSDC_IOCON_DDR50CKD (0x1 << 4) /* RW */
  269. #define MSDC_IOCON_R_D_SMPL_SEL (0x1 << 5) /* RW */
  270. #define MSDC_IOCON_W_D_SMPL (0x1 << 8) /* RW */
  271. #define MSDC_IOCON_W_D_SMPL_SEL (0x1 << 9) /* RW */
  272. #define MSDC_IOCON_W_D0SPL (0x1 << 10) /* RW */
  273. #define MSDC_IOCON_W_D1SPL (0x1 << 11) /* RW */
  274. #define MSDC_IOCON_W_D2SPL (0x1 << 12) /* RW */
  275. #define MSDC_IOCON_W_D3SPL (0x1 << 13) /* RW */
  276. #define MSDC_IOCON_R_D0SPL (0x1 << 16) /* RW */
  277. #define MSDC_IOCON_R_D1SPL (0x1 << 17) /* RW */
  278. #define MSDC_IOCON_R_D2SPL (0x1 << 18) /* RW */
  279. #define MSDC_IOCON_R_D3SPL (0x1 << 19) /* RW */
  280. #define MSDC_IOCON_R_D4SPL (0x1 << 20) /* RW */
  281. #define MSDC_IOCON_R_D5SPL (0x1 << 21) /* RW */
  282. #define MSDC_IOCON_R_D6SPL (0x1 << 22) /* RW */
  283. #define MSDC_IOCON_R_D7SPL (0x1 << 23) /* RW */
  284. /* MSDC_PS mask */
  285. #define MSDC_PS_CDEN (0x1 << 0) /* RW */
  286. #define MSDC_PS_CDSTS (0x1 << 1) /* R */
  287. #define MSDC_PS_CDDEBOUNCE (0xf << 12) /* RW */
  288. #define MSDC_PS_DAT (0xff << 16) /* R */
  289. #define MSDC_PS_CMD (0x1 << 24) /* R */
  290. #define MSDC_PS_WP (0x1UL << 31) /* R */
  291. /* MSDC_INT mask */
  292. #define MSDC_INT_MMCIRQ (0x1 << 0) /* W1C */
  293. #define MSDC_INT_CDSC (0x1 << 1) /* W1C */
  294. #define MSDC_INT_ACMDRDY (0x1 << 3) /* W1C */
  295. #define MSDC_INT_ACMDTMO (0x1 << 4) /* W1C */
  296. #define MSDC_INT_ACMDCRCERR (0x1 << 5) /* W1C */
  297. #define MSDC_INT_DMAQ_EMPTY (0x1 << 6) /* W1C */
  298. #define MSDC_INT_SDIOIRQ (0x1 << 7) /* W1C */
  299. #define MSDC_INT_CMDRDY (0x1 << 8) /* W1C */
  300. #define MSDC_INT_CMDTMO (0x1 << 9) /* W1C */
  301. #define MSDC_INT_RSPCRCERR (0x1 << 10) /* W1C */
  302. #define MSDC_INT_CSTA (0x1 << 11) /* R */
  303. #define MSDC_INT_XFER_COMPL (0x1 << 12) /* W1C */
  304. #define MSDC_INT_DXFER_DONE (0x1 << 13) /* W1C */
  305. #define MSDC_INT_DATTMO (0x1 << 14) /* W1C */
  306. #define MSDC_INT_DATCRCERR (0x1 << 15) /* W1C */
  307. #define MSDC_INT_ACMD19_DONE (0x1 << 16) /* W1C */
  308. #define MSDC_INT_BDCSERR (0x1 << 17) /* W1C */
  309. #define MSDC_INT_GPDCSERR (0x1 << 18) /* W1C */
  310. #define MSDC_INT_DMAPRO (0x1 << 19) /* W1C */
  311. #define MSDC_INT_GEAR_OUT_BOUND (0x1 << 20) /* W1C */
  312. #define MSDC_INT_ACMD53_DONE (0x1 << 21) /* W1C */
  313. #define MSDC_INT_ACMD53_FAIL (0x1 << 22) /* W1C */
  314. #define MSDC_INT_AXI_RESP_ERR (0x1 << 23) /* W1C */
  315. /* MSDC_INTEN mask */
  316. #define MSDC_INTEN_MMCIRQ (0x1 << 0) /* RW */
  317. #define MSDC_INTEN_CDSC (0x1 << 1) /* RW */
  318. #define MSDC_INTEN_ACMDRDY (0x1 << 3) /* RW */
  319. #define MSDC_INTEN_ACMDTMO (0x1 << 4) /* RW */
  320. #define MSDC_INTEN_ACMDCRCERR (0x1 << 5) /* RW */
  321. #define MSDC_INTEN_DMAQ_EMPTY (0x1 << 6) /* RW */
  322. #define MSDC_INTEN_SDIOIRQ (0x1 << 7) /* RW */
  323. #define MSDC_INTEN_CMDRDY (0x1 << 8) /* RW */
  324. #define MSDC_INTEN_CMDTMO (0x1 << 9) /* RW */
  325. #define MSDC_INTEN_RSPCRCERR (0x1 << 10) /* RW */
  326. #define MSDC_INTEN_CSTA (0x1 << 11) /* RW */
  327. #define MSDC_INTEN_XFER_COMPL (0x1 << 12) /* RW */
  328. #define MSDC_INTEN_DXFER_DONE (0x1 << 13) /* RW */
  329. #define MSDC_INTEN_DATTMO (0x1 << 14) /* RW */
  330. #define MSDC_INTEN_DATCRCERR (0x1 << 15) /* RW */
  331. #define MSDC_INTEN_ACMD19_DONE (0x1 << 16) /* RW */
  332. #define MSDC_INTEN_BDCSERR (0x1 << 17) /* RW */
  333. #define MSDC_INTEN_GPDCSERR (0x1 << 18) /* RW */
  334. #define MSDC_INTEN_DMAPRO (0x1 << 19) /* RW */
  335. #define MSDC_INTEN_GOBOUND (0x1 << 20) /* RW */
  336. #define MSDC_INTEN_ACMD53_DONE (0x1 << 21) /* RW */
  337. #define MSDC_INTEN_ACMD53_FAIL (0x1 << 22) /* RW */
  338. #define MSDC_INTEN_AXI_RESP_ERR (0x1 << 23) /* RW */
  339. /* MSDC_FIFOCS mask */
  340. #define MSDC_FIFOCS_RXCNT (0xff << 0) /* R */
  341. #define MSDC_FIFOCS_TXCNT (0xff << 16) /* R */
  342. #define MSDC_FIFOCS_CLR (0x1UL << 31) /* RW */
  343. /* SDC_CFG mask */
  344. #define SDC_CFG_SDIOINTWKUP (0x1 << 0) /* RW */
  345. #define SDC_CFG_INSWKUP (0x1 << 1) /* RW */
  346. #define SDC_CFG_WRDTOC (0x1fff << 2) /* RW */
  347. #define SDC_CFG_BUSWIDTH (0x3 << 16) /* RW */
  348. #define SDC_CFG_SDIO (0x1 << 19) /* RW */
  349. #define SDC_CFG_SDIOIDE (0x1 << 20) /* RW */
  350. #define SDC_CFG_INTATGAP (0x1 << 21) /* RW */
  351. #define SDC_CFG_DTOC (0xffUL << 24) /* RW */
  352. /* SDC_CMD mask */
  353. #define SDC_CMD_OPC (0x3f << 0) /* RW */
  354. #define SDC_CMD_BRK (0x1 << 6) /* RW */
  355. #define SDC_CMD_RSPTYP (0x7 << 7) /* RW */
  356. #define SDC_CMD_DTYP (0x3 << 11) /* RW */
  357. #define SDC_CMD_RW (0x1 << 13) /* RW */
  358. #define SDC_CMD_STOP (0x1 << 14) /* RW */
  359. #define SDC_CMD_GOIRQ (0x1 << 15) /* RW */
  360. #define SDC_CMD_BLKLEN (0xfff << 16) /* RW */
  361. #define SDC_CMD_AUTOCMD (0x3 << 28) /* RW */
  362. #define SDC_CMD_VOLSWTH (0x1 << 30) /* RW */
  363. #define SDC_CMD_ACMD53 (0x1UL << 31) /* RW */
  364. /* SDC_STS mask */
  365. #define SDC_STS_SDCBUSY (0x1 << 0) /* RW */
  366. #define SDC_STS_CMDBUSY (0x1 << 1) /* RW */
  367. #define SDC_STS_START_BIT_CRCERR (0x1 << 2)
  368. #define SDC_STS_CMD_WR_BUSY (0x1 << 16) /* W1C */
  369. #define SDC_STS_DATA_TIMEOUT_TYPE (0x3 << 17) /* RU */
  370. #define SDC_STS_CMD_TIMEOUT_TYPE (0x3 << 19) /* RU */
  371. #define SDC_STS_SWR_COMPL (0x1 << 31) /* RO */
  372. /* SDC_VOL mask */
  373. #define SDC_VOL_CHG_CNT (0xffff << 0) /* RW */
  374. /* SDC_DCRC_STS mask */
  375. #define SDC_DCRC_STS_POS (0xff << 0) /* RO */
  376. #define SDC_DCRC_STS_NEG (0xff << 8) /* RO */
  377. /* SDC_ADV_CFG0 mask */
  378. #define SDC_ADV_CFG0_RESP_CRC (0x7f << 0) /* RU */
  379. #define SDC_ADV_CFG0_RESP_INDEX (0x3f << 7) /* RU */
  380. #define SDC_ADV_CFG0_RESP_ENDBIT (0x1 << 13) /* RU */
  381. #define SDC_ADV_CFG0_ENDBIT_CHECK (0x1 << 14) /* RW */
  382. #define SDC_ADV_CFG0_INDEX_CHECK (0x1 << 15) /* RW */
  383. #define SDC_ADV_CFG0_DAT_BUF_CLK_DIV (0x3 << 16) /* RW */
  384. #define SDC_ADV_CFG0_DAT_BUF_FREQ_CTL_EN (0x1 << 18) /* RW */
  385. #define SDC_ADV_CFG0_SDIO_IRQ_ENHANCE_EN (0x1 << 19) /* RW */
  386. #define SDC_ADV_CFG0_SDC_RX_ENH_EN (0x1 << 20) /* RW */
  387. /* EMMC_CFG0 mask */
  388. #define EMMC_CFG0_BOOTSTART (0x1 << 0) /* W */
  389. #define EMMC_CFG0_BOOTSTOP (0x1 << 1) /* W */
  390. #define EMMC_CFG0_BOOTMODE (0x1 << 2) /* RW */
  391. #define EMMC_CFG0_BOOTACKDIS (0x1 << 3) /* RW */
  392. #define EMMC_CFG0_BOOTWDLY (0x7 << 12) /* RW */
  393. #define EMMC_CFG0_BOOTSUPP (0x1 << 15) /* RW */
  394. /* EMMC_CFG1 mask */
  395. #define EMMC_CFG1_BOOTDATTMC (0xfffff << 0) /* RW */
  396. #define EMMC_CFG1_BOOTACKTMC (0xfffUL << 20) /* RW */
  397. /* EMMC_STS mask */
  398. #define EMMC_STS_BOOTCRCERR (0x1 << 0) /* W1C */
  399. #define EMMC_STS_BOOTACKERR (0x1 << 1) /* W1C */
  400. #define EMMC_STS_BOOTDATTMO (0x1 << 2) /* W1C */
  401. #define EMMC_STS_BOOTACKTMO (0x1 << 3) /* W1C */
  402. #define EMMC_STS_BOOTUPSTATE (0x1 << 4) /* R */
  403. #define EMMC_STS_BOOTACKRCV (0x1 << 5) /* W1C */
  404. #define EMMC_STS_BOOTDATRCV (0x1 << 6) /* R */
  405. /* EMMC_IOCON mask */
  406. #define EMMC_IOCON_BOOTRST (0x1 << 0) /* RW */
  407. /* SDC_ACMD19_TRG mask */
  408. #define SDC_ACMD19_TRG_TUNESEL (0xf << 0) /* RW */
  409. /* MSDC_DMA_SA_HIGH */
  410. #define MSDC_DMA_SURR_ADDR_HIGH4BIT (0xf << 0) /* RW */
  411. /* MSDC_DMA_CTRL mask */
  412. #define MSDC_DMA_CTRL_START (0x1 << 0) /* W */
  413. #define MSDC_DMA_CTRL_STOP (0x1 << 1) /* W */
  414. #define MSDC_DMA_CTRL_RESUME (0x1 << 2) /* W */
  415. #define MSDC_DMA_CTRL_REDAYM (0x1 << 3) /* RO */
  416. #define MSDC_DMA_CTRL_MODE (0x1 << 8) /* RW */
  417. #define MSDC_DMA_CTRL_ALIGN (0x1 << 9) /* RW */
  418. #define MSDC_DMA_CTRL_LASTBUF (0x1 << 10) /* RW */
  419. #define MSDC_DMA_CTRL_SPLIT1K (0x1 << 11) /* RW */
  420. #define MSDC_DMA_CTRL_BRUSTSZ (0x7 << 12) /* RW */
  421. /* MSDC_DMA_CFG mask */
  422. #define MSDC_DMA_CFG_STS (0x1 << 0) /* R */
  423. #define MSDC_DMA_CFG_DECSEN (0x1 << 1) /* RW */
  424. #define MSDC_DMA_CFG_LOCKDISABLE (0x1 << 2) /* RW */
  425. #define MSDC_DMA_CFG_AHBEN (0x3 << 8) /* RW */
  426. #define MSDC_DMA_CFG_ACTEN (0x3 << 12) /* RW */
  427. #define MSDC_DMA_CFG_CS12B (0x1 << 16) /* RW */
  428. /* MSDC_PATCH_BIT0 mask */
  429. #define MSDC_PB0_EN_START_BIT_CHK_SUP (0x1 << 0)
  430. #define MSDC_PB0_EN_8BITSUP (0x1 << 1)
  431. #define MSDC_PB0_DIS_RECMDWR (0x1 << 2)
  432. #define MSDC_PB0_RD_DAT_SEL (0x1 << 3)
  433. #define MSDC_PB0_RESV2 (0x3 << 4)
  434. #define MSDC_PB0_DESCUP (0x1 << 6)
  435. #define MSDC_PB0_INT_DAT_LATCH_CK_SEL (0x7 << 7)
  436. #define MSDC_PB0_CKGEN_MSDC_DLY_SEL (0x1F<<10)
  437. #define MSDC_PB0_FIFORD_DIS (0x1 << 15)
  438. #define MSDC_PB0_BLKNUM_SEL (0x1 << 16)
  439. #define MSDC_PB0_SDIO_INTCSEL (0x1 << 17)
  440. #define MSDC_PB0_SDC_BSYDLY (0xf << 18)
  441. #define MSDC_PB0_SDC_WDOD (0xf << 22)
  442. #define MSDC_PB0_CMDIDRTSEL (0x1 << 26)
  443. #define MSDC_PB0_CMDFAILSEL (0x1 << 27)
  444. #define MSDC_PB0_SDIO_INTDLYSEL (0x1 << 28)
  445. #define MSDC_PB0_SPCPUSH (0x1 << 29)
  446. #define MSDC_PB0_DETWR_CRCTMO (0x1 << 30)
  447. #define MSDC_PB0_EN_DRVRSP (0x1UL << 31)
  448. /* MSDC_PATCH_BIT1 mask */
  449. #define MSDC_PB1_WRDAT_CRCS_TA_CNTR (0x7 << 0)
  450. #define MSDC_PB1_CMD_RSP_TA_CNTR (0x7 << 3)
  451. #define MSDC_PB1_GET_BUSY_MA (0x1 << 6)
  452. #define MSDC_PB1_CHECK_BUSY_SEL (0x1 << 7)
  453. #define MSDC_PB1_STOP_DLY_SEL (0xf << 8)
  454. #define MSDC_PB1_BIAS_EN18IO_28NM (0x1 << 12)
  455. #define MSDC_PB1_BIAS_EXT_28NM (0x1 << 13)
  456. #define MSDC_PB1_DDR_CMD_FIX_SEL (0x1 << 14)
  457. #define MSDC_PB1_RESET_GDMA (0x1 << 15)
  458. #define MSDC_PB1_SINGLE_BURST (0x1 << 16)
  459. #define MSDC_PB1_FROCE_STOP (0x1 << 17)
  460. #define MSDC_PB1_STATE_CLR (0x1 << 19)
  461. #define MSDC_PB1_POP_MARK_WATER (0x1 << 20)
  462. #define MSDC_PB1_DCM_EN (0x1 << 21)
  463. #define MSDC_PB1_AXI_WRAP_CKEN (0x1 << 22)
  464. #define MSDC_PB1_CKCLK_GDMA_EN (0x1 << 23)
  465. #define MSDC_PB1_CKSPCEN (0x1 << 24)
  466. #define MSDC_PB1_CKPSCEN (0x1 << 25)
  467. #define MSDC_PB1_CKVOLDETEN (0x1 << 26)
  468. #define MSDC_PB1_CKACMDEN (0x1 << 27)
  469. #define MSDC_PB1_CKSDEN (0x1 << 28)
  470. #define MSDC_PB1_CKWCTLEN (0x1 << 29)
  471. #define MSDC_PB1_CKRCTLEN (0x1 << 30)
  472. #define MSDC_PB1_CKSHBFFEN (0x1UL << 31)
  473. /* MSDC_PATCH_BIT2 mask */
  474. #define MSDC_PB2_ENHANCEGPD (0x1 << 0)
  475. #define MSDC_PB2_SUPPORT64G (0x1 << 1)
  476. #define MSDC_PB2_RESPWAITCNT (0x3 << 2)
  477. #define MSDC_PB2_CFGRDATCNT (0x1f << 4)
  478. #define MSDC_PB2_CFGRDAT (0x1 << 9)
  479. #define MSDC_PB2_INTCRESPSEL (0x1 << 11)
  480. #define MSDC_PB2_CFGRESPCNT (0x7 << 12)
  481. #define MSDC_PB2_CFGRESP (0x1 << 15)
  482. #define MSDC_PB2_RESPSTENSEL (0x7 << 16)
  483. #define MSDC_PB2_DDR50_SEL (0x1 << 19)
  484. #define MSDC_PB2_POPENCNT (0xf << 20)
  485. #define MSDC_PB2_CFG_CRCSTS_SEL (0x1 << 24)
  486. #define MSDC_PB2_CFGCRCSTSEDGE (0x1 << 25)
  487. #define MSDC_PB2_CFGCRCSTSCNT (0x3 << 26)
  488. #define MSDC_PB2_CFGCRCSTS (0x1 << 28)
  489. #define MSDC_PB2_CRCSTSENSEL (0x7UL << 29)
  490. #define MSDC_MASK_ACMD53_CRC_ERR_INTR (0x1<<4)
  491. #define MSDC_ACMD53_FAIL_ONE_SHOT (0X1<<5)
  492. /* MSDC_PAD_TUNE mask */
  493. #define MSDC_PAD_TUNE0_DATWRDLY (0x1F << 0) /* RW */
  494. #define MSDC_PAD_TUNE0_DELAYEN (0x1 << 7) /* RW */
  495. #define MSDC_PAD_TUNE0_DATRRDLY (0x1F << 8) /* RW */
  496. #define MSDC_PAD_TUNE0_DATRRDLYSEL (0x1 << 13) /* RW */
  497. #define MSDC_PAD_TUNE0_RXDLYSEL (0x1 << 15) /* RW */
  498. #define MSDC_PAD_TUNE0_CMDRDLY (0x1F << 16) /* RW */
  499. #define MSDC_PAD_TUNE0_CMDRRDLYSEL (0x1 << 21) /* RW */
  500. #define MSDC_PAD_TUNE0_CMDRRDLY (0x1FUL << 22) /* RW */
  501. #define MSDC_PAD_TUNE0_CLKTXDLY (0x1FUL << 27) /* RW */
  502. /* MSDC_PAD_TUNE1 mask */
  503. #define MSDC_PAD_TUNE1_DATRRDLY2 (0x1F << 8) /* RW */
  504. #define MSDC_PAD_TUNE1_DATRRDLY2SEL (0x1 << 13) /* RW */
  505. #define MSDC_PAD_TUNE1_CMDRDLY2 (0x1F << 16) /* RW */
  506. #define MSDC_PAD_TUNE1_CMDRRDLY2SEL (0x1 << 21) /* RW */
  507. /* MSDC_DAT_RDDLY0/1/2/3 mask */
  508. #define MSDC_DAT_RDDLY0_D3 (0x1F << 0) /* RW */
  509. #define MSDC_DAT_RDDLY0_D2 (0x1F << 8) /* RW */
  510. #define MSDC_DAT_RDDLY0_D1 (0x1F << 16) /* RW */
  511. #define MSDC_DAT_RDDLY0_D0 (0x1FUL << 24) /* RW */
  512. #define MSDC_DAT_RDDLY1_D7 (0x1F << 0) /* RW */
  513. #define MSDC_DAT_RDDLY1_D6 (0x1F << 8) /* RW */
  514. #define MSDC_DAT_RDDLY1_D5 (0x1F << 16) /* RW */
  515. #define MSDC_DAT_RDDLY1_D4 (0x1FUL << 24) /* RW */
  516. #define MSDC_DAT_RDDLY2_D3 (0x1F << 0) /* RW */
  517. #define MSDC_DAT_RDDLY2_D2 (0x1F << 8) /* RW */
  518. #define MSDC_DAT_RDDLY2_D1 (0x1F << 16) /* RW */
  519. #define MSDC_DAT_RDDLY2_D0 (0x1FUL << 24) /* RW */
  520. #define MSDC_DAT_RDDLY3_D7 (0x1F << 0) /* RW */
  521. #define MSDC_DAT_RDDLY3_D6 (0x1F << 8) /* RW */
  522. #define MSDC_DAT_RDDLY3_D5 (0x1F << 16) /* RW */
  523. #define MSDC_DAT_RDDLY3_D4 (0x1FUL << 24) /* RW */
  524. /* MSDC_HW_DBG_SEL mask */
  525. #define MSDC_HW_DBG0_SEL (0xFF << 0)
  526. #define MSDC_HW_DBG1_SEL (0x3F << 8)
  527. #define MSDC_HW_DBG2_SEL (0xFF << 16)
  528. #define MSDC_HW_DBG3_SEL (0x3F << 24)
  529. #define MSDC_HW_DBG_WRAPTYPE_SEL (0x1 << 30)
  530. /* MSDC_EMMC50_PAD_CTL0 mask*/
  531. #define MSDC_EMMC50_PAD_CTL0_DCCSEL (0x1 << 0)
  532. #define MSDC_EMMC50_PAD_CTL0_HLSEL (0x1 << 1)
  533. #define MSDC_EMMC50_PAD_CTL0_DLP0 (0x3 << 2)
  534. #define MSDC_EMMC50_PAD_CTL0_DLN0 (0x3 << 4)
  535. #define MSDC_EMMC50_PAD_CTL0_DLP1 (0x3 << 6)
  536. #define MSDC_EMMC50_PAD_CTL0_DLN1 (0x3 << 8)
  537. /* MSDC_EMMC50_PAD_DS_CTL0 mask */
  538. #define MSDC_EMMC50_PAD_DS_CTL0_SR (0x1 << 0)
  539. #define MSDC_EMMC50_PAD_DS_CTL0_R0 (0x1 << 1)
  540. #define MSDC_EMMC50_PAD_DS_CTL0_R1 (0x1 << 2)
  541. #define MSDC_EMMC50_PAD_DS_CTL0_PUPD (0x1 << 3)
  542. #define MSDC_EMMC50_PAD_DS_CTL0_IES (0x1 << 4)
  543. #define MSDC_EMMC50_PAD_DS_CTL0_SMT (0x1 << 5)
  544. #define MSDC_EMMC50_PAD_DS_CTL0_RDSEL (0x3F << 6)
  545. #define MSDC_EMMC50_PAD_DS_CTL0_TDSEL (0xf << 12)
  546. #define MSDC_EMMC50_PAD_DS_CTL0_DRV (0x7 << 16)
  547. /* EMMC50_PAD_DS_TUNE mask */
  548. #define MSDC_EMMC50_PAD_DS_TUNE_DLYSEL (0x1 << 0)
  549. #define MSDC_EMMC50_PAD_DS_TUNE_DLY2SEL (0x1 << 1)
  550. #define MSDC_EMMC50_PAD_DS_TUNE_DLY1 (0x1F << 2)
  551. #define MSDC_EMMC50_PAD_DS_TUNE_DLY2 (0x1F << 7)
  552. #define MSDC_EMMC50_PAD_DS_TUNE_DLY3 (0x1F << 12)
  553. /* EMMC50_PAD_CMD_TUNE mask */
  554. #define MSDC_EMMC50_PAD_CMD_TUNE_DLY3SEL (0x1 << 0)
  555. #define MSDC_EMMC50_PAD_CMD_TUNE_RXDLY3 (0x1F << 1)
  556. #define MSDC_EMMC50_PAD_CMD_TUNE_TXDLY (0x1F << 6)
  557. /* EMMC50_PAD_DAT01_TUNE mask */
  558. #define MSDC_EMMC50_PAD_DAT0_RXDLY3SEL (0x1 << 0)
  559. #define MSDC_EMMC50_PAD_DAT0_RXDLY3 (0x1F << 1)
  560. #define MSDC_EMMC50_PAD_DAT0_TXDLY (0x1F << 6)
  561. #define MSDC_EMMC50_PAD_DAT1_RXDLY3SEL (0x1 << 16)
  562. #define MSDC_EMMC50_PAD_DAT1_RXDLY3 (0x1F << 17)
  563. #define MSDC_EMMC50_PAD_DAT1_TXDLY (0x1F << 22)
  564. /* EMMC50_PAD_DAT23_TUNE mask */
  565. #define MSDC_EMMC50_PAD_DAT2_RXDLY3SEL (0x1 << 0)
  566. #define MSDC_EMMC50_PAD_DAT2_RXDLY3 (0x1F << 1)
  567. #define MSDC_EMMC50_PAD_DAT2_TXDLY (0x1F << 6)
  568. #define MSDC_EMMC50_PAD_DAT3_RXDLY3SEL (0x1 << 16)
  569. #define MSDC_EMMC50_PAD_DAT3_RXDLY3 (0x1F << 17)
  570. #define MSDC_EMMC50_PAD_DAT3_TXDLY (0x1F << 22)
  571. /* EMMC50_PAD_DAT45_TUNE mask */
  572. #define MSDC_EMMC50_PAD_DAT4_RXDLY3SEL (0x1 << 0)
  573. #define MSDC_EMMC50_PAD_DAT4_RXDLY3 (0x1F << 1)
  574. #define MSDC_EMMC50_PAD_DAT4_TXDLY (0x1F << 6)
  575. #define MSDC_EMMC50_PAD_DAT5_RXDLY3SEL (0x1 << 16)
  576. #define MSDC_EMMC50_PAD_DAT5_RXDLY3 (0x1F << 17)
  577. #define MSDC_EMMC50_PAD_DAT5_TXDLY (0x1F << 22)
  578. /* EMMC50_PAD_DAT67_TUNE mask */
  579. #define MSDC_EMMC50_PAD_DAT6_RXDLY3SEL (0x1 << 0)
  580. #define MSDC_EMMC50_PAD_DAT6_RXDLY3 (0x1F << 1)
  581. #define MSDC_EMMC50_PAD_DAT6_TXDLY (0x1F << 6)
  582. #define MSDC_EMMC50_PAD_DAT7_RXDLY3SEL (0x1 << 16)
  583. #define MSDC_EMMC50_PAD_DAT7_RXDLY3 (0x1F << 17)
  584. #define MSDC_EMMC50_PAD_DAT7_TXDLY (0x1F << 22)
  585. /* EMMC51_CFG0 mask */
  586. #define MSDC_EMMC51_CFG_CMDQEN (0x1 << 0)
  587. #define MSDC_EMMC51_CFG_NUM (0x3F << 1)
  588. #define MSDC_EMMC51_CFG_RSPTYPE (0x7 << 7)
  589. #define MSDC_EMMC51_CFG_DTYPE (0x3 << 10)
  590. #define MSDC_EMMC51_CFG_RDATCNT (0x3FF << 12)
  591. #define MSDC_EMMC51_CFG_WDATCNT (0x3FF << 22)
  592. /* EMMC50_CFG0 mask */
  593. #define MSDC_EMMC50_CFG_PADCMD_LATCHCK (0x1 << 0)
  594. #define MSDC_EMMC50_CFG_CRC_STS_CNT (0x3 << 1)
  595. #define MSDC_EMMC50_CFG_CRC_STS_EDGE (0x1 << 3)
  596. #define MSDC_EMMC50_CFG_CRC_STS_SEL (0x1 << 4)
  597. #define MSDC_EMMC50_CFG_END_BIT_CHK_CNT (0xf << 5)
  598. #define MSDC_EMMC50_CFG_CMD_RESP_SEL (0x1 << 9)
  599. #define MSDC_EMMC50_CFG_CMD_EDGE_SEL (0x1 << 10)
  600. #define MSDC_EMMC50_CFG_ENDBIT_CNT (0x3FF << 11)
  601. #define MSDC_EMMC50_CFG_READ_DAT_CNT (0x7 << 21)
  602. #define MSDC_EMMC50_CFG_EMMC50_MON_SEL (0x1 << 24)
  603. #define MSDC_EMMC50_CFG_TXSKEW_SEL (0x1 << 29)
  604. /* EMMC50_CFG1 mask */
  605. #define MSDC_EMMC50_CFG1_CKSWITCH_CNT (0x7 << 8)
  606. #define MSDC_EMMC50_CFG1_RDDAT_STOP (0x1 << 11)
  607. #define MSDC_EMMC50_CFG1_WAITCLK_CNT (0xF << 12)
  608. #define MSDC_EMMC50_CFG1_DBG_SEL (0xFF << 16)
  609. #define MSDC_EMMC50_CFG1_PSHCNT (0x7 << 24)
  610. #define MSDC_EMMC50_CFG1_PSHPSSEL (0x1 << 27)
  611. #define MSDC_EMMC50_CFG1_DSCFG (0x1 << 28)
  612. #define MSDC_EMMC50_CFG1_SPARE1 (0x7UL << 29)
  613. /* EMMC50_CFG2_mask */
  614. /*#define MSDC_EMMC50_CFG2_AXI_GPD_UP (0x1 << 0)*/
  615. #define MSDC_EMMC50_CFG2_AXI_IOMMU_WR_EMI (0x1 << 1)
  616. #define MSDC_EMMC50_CFG2_AXI_SHARE_EN_WR_EMI (0x1 << 2)
  617. #define MSDC_EMMC50_CFG2_AXI_IOMMU_RD_EMI (0x1 << 7)
  618. #define MSDC_EMMC50_CFG2_AXI_SHARE_EN_RD_EMI (0x1 << 8)
  619. #define MSDC_EMMC50_CFG2_AXI_BOUND_128B (0x1 << 13)
  620. #define MSDC_EMMC50_CFG2_AXI_BOUND_256B (0x1 << 14)
  621. #define MSDC_EMMC50_CFG2_AXI_BOUND_512B (0x1 << 15)
  622. #define MSDC_EMMC50_CFG2_AXI_BOUND_1K (0x1 << 16)
  623. #define MSDC_EMMC50_CFG2_AXI_BOUND_2K (0x1 << 17)
  624. #define MSDC_EMMC50_CFG2_AXI_BOUND_4K (0x1 << 18)
  625. #define MSDC_EMMC50_CFG2_AXI_RD_OUTS_NUM (0x1F << 19)
  626. #define MSDC_EMMC50_CFG2_AXI_SET_LEN (0xf << 24)
  627. #define MSDC_EMMC50_CFG2_AXI_RESP_ERR_TYPE (0x3 << 28)
  628. #define MSDC_EMMC50_CFG2_AXI_BUSY (0x1 << 30)
  629. /* EMMC50_CFG3_mask */
  630. #define MSDC_EMMC50_CFG3_OUTS_WR (0x1F << 0)
  631. #define MSDC_EMMC50_CFG3_ULTRA_SET_WR (0x3F << 5)
  632. #define MSDC_EMMC50_CFG3_PREULTRA_SET_WR (0x3F << 11)
  633. #define MSDC_EMMC50_CFG3_ULTRA_SET_RD (0x3F << 17)
  634. #define MSDC_EMMC50_CFG3_PREULTRA_SET_RD (0x3F << 23)
  635. /* EMMC50_CFG4_mask */
  636. #define MSDC_EMMC50_CFG4_IMPR_ULTRA_SET_WR (0xFF << 0)
  637. #define MSDC_EMMC50_CFG4_IMPR_ULTRA_SET_RD (0xFF << 8)
  638. #define MSDC_EMMC50_CFG4_ULTRA_EN (0x3 << 16)
  639. #define MSDC_EMMC50_CFG4_AXI_WRAP_DBG_SEL (0x1F << 18)
  640. /* SDC_FIFO_CFG mask */
  641. #define SDC_FIFO_CFG_EMMC50_BLOCK_LENGTH (0x1FF << 0)
  642. #define SDC_FIFO_CFG_WR_PTR_MARGIN (0xFF << 16)
  643. #define SDC_FIFO_CFG_WR_VALID_SEL (0x1 << 24)
  644. #define SDC_FIFO_CFG_RD_VALID_SEL (0x1 << 25)
  645. #define SDC_FIFO_CFG_WR_VALID (0x1 << 26)
  646. #define SDC_FIFO_CFG_RD_VALID (0x1 << 27)
  647. /* SDIO_TUNE_WIND mask*/
  648. #define MSDC_SDIO_TUNE_WIND (0x1F << 0)
  649. /* MSDC_AES_SEL mask*/
  650. #define MSDC_AES_SEL_SEL (0x3F << 0)
  651. #define MSDC_AES_SEL_EN (0xF << 8)
  652. /* MTKCQ_CFG0 mask*/
  653. #define MTKCQ_CFG0_ACMD13_BLK_CNT (0xFFFF << 0)
  654. /* MTKCQ_CFG1 mask*/
  655. #define MTKCQ_CFG1_ACMD13_IDLE_TIME (0xFFFF << 0)
  656. /* MTKCQ_CFG2 mask*/
  657. #define MTKCQ_CFG2_CQ_EN (0x1 << 0)
  658. #define MTKCQ_CFG2_CQ_BUSY (0x1 << 1)
  659. #define MTKCQ_CFG2_CMD13_FLAG (0x1 << 4)
  660. /* MTKCQ_ERR_ST mask*/
  661. #define MTKCQ_ERR_ST_CMD44_RESP_CRCERR (0x1 << 0) /* RO */
  662. #define MTKCQ_ERR_ST_CMD44_RESP_TO (0x1 << 1) /* RO */
  663. #define MTKCQ_ERR_ST_CMD45_RESP_CRCERR (0x1 << 4) /* RO */
  664. #define MTKCQ_ERR_ST_CMD45_RESP_TO (0x1 << 5) /* RO */
  665. #define MTKCQ_ERR_ST_CMD13_RESP_CRCERR (0x1 << 8) /* RO */
  666. #define MTKCQ_ERR_ST_CMD13_RESP_TO (0x1 << 9) /* RO */
  667. #define MTKCQ_ERR_ST_OTHER_CMD_RESP_CRCERR (0x1 << 12) /* RO */
  668. #define MTKCQ_ERR_ST_OTHER_CMD_RESP_TO (0x1 << 13) /* RO */
  669. #define MTKCQ_ERR_ST_RESP_ERR_ST (0x1 << 16) /* RO */
  670. #define MTKCQ_ERR_ST_CQ_R1_RESP_ERR (0x1 << 17) /* RO */
  671. /* MTKCQ_CMD45_READY mask*/
  672. #define MTKCQ_CMD45_READY_ST (0xFFFFFFFF << 0) /* RW */
  673. /* MTKCQ_TASK_READY_ST mask*/
  674. #define MTKCQ_TASK_READY_ST_MA (0xFFFFFFFF << 0) /* RO */
  675. /* MTKCQ_TASK_DONE_ST mask*/
  676. #define MTKCQ_TASK_DONE_ST_CMD13_UPDATE_ST (0x1 << 0) /* RO */
  677. #define MTKCQ_TASK_DONE_ST_CMD45_DONE_ST (0x1 << 1) /* RO */
  678. #define MTKCQ_TASK_DONE_ST_OTHER_CMD_DONE_ST (0x1 << 2) /* RO */
  679. #define MTKCQ_TASK_DONE_ST_CMD_DONE_ST (0x1 << 3) /* RO */
  680. #define MTKCQ_TASK_DONE_ST_CMD13_DONE_ST (0x1 << 4) /* RO */
  681. #define MTKCQ_TASK_DONE_ST_CQ_SWCMD_MISS (0x1 << 5) /* RO */
  682. #define MTKCQ_TASK_DONE_ST_CMD45_DONE_ST_MASK (0x1 << 6) /* RW */
  683. /* MTKCQ_ERR_ST_CLR mask*/
  684. #define MTKCQ_ERR_ST_CLR_CMD44_RESP_CRCERR_CLR (0x1 << 0) /* W1 */
  685. #define MTKCQ_ERR_ST_CLR_CMD44_RESP_TO_CLR (0x1 << 1) /* W1 */
  686. #define MTKCQ_ERR_ST_CLR_CMD45_RESP_CRCERR_CLR (0x1 << 4) /* W1 */
  687. #define MTKCQ_ERR_ST_CLR_CMD45_RESP_TO_CLR (0x1 << 5) /* W1 */
  688. #define MTKCQ_ERR_ST_CLR_CMD13_RESP_CRCERR_CLR (0x1 << 8) /* W1 */
  689. #define MTKCQ_ERR_ST_CLR_CMD13_RESP_TO_CLR (0x1 << 9) /* W1 */
  690. #define MTKCQ_ERR_ST_CLR_OTHER_CMD_RESP_CRCERR_CLR (0x1 << 12) /* W1 */
  691. #define MTKCQ_ERR_ST_CLR_CQ_R1_RESP_ERR_CLR (0x1 << 17) /* W1 */
  692. /* MTKCQ_CMD_DONE_CLR mask*/
  693. #define MTKCQ_CMD_DONE_CLR_CMD13_UPDATE_ST_CLR (0x1 << 0) /* W1 */
  694. #define MTKCQ_CMD_DONE_CLR_CMD45_DONE_ST_CLR (0x1 << 1) /* W1 */
  695. #define MTKCQ_CMD_DONE_CLR_OTHER_CMD_DONE_ST_CLR (0x1 << 2) /* W1 */
  696. #define MTKCQ_CMD_DONE_CLR_CMD13_DONE_ST_CLR (0x1 << 4) /* W1 */
  697. /* MTKCQ_SW_CTL_CQ mask*/
  698. #define MTKCQ_SW_CTL_CQ_SW_RESTART_CQ (0x1 << 0) /* RW */
  699. #define MTKCQ_SW_CTL_CQ_GO_IDLE (0x1 << 4) /* RW */
  700. #define MTKCQ_SW_CTL_CQ_GO_ACTIVE (0x1 << 5) /* A0 */
  701. /* MTKCQ_CMD44_RESP mask*/
  702. #define MTKCQ_CMD44_RESP_MASK (0xFFFFFFFF << 0) /* RO */
  703. /* MTKCQ_CMD45_RESP mask*/
  704. #define MTKCQ_CMD45_RESP_MASK (0xFFFFFFFF << 0) /* RO */
  705. /* MTKCQ_CMD13_RCA mask*/
  706. #define MTKCQ_CMD13_RCA_MASK (0xFFFF << 0) /* RW */
  707. /* EMMC51_CQCB_CFG3 mask*/
  708. #define EMMC51_CQCB_CFG3_MSDC_CQCB_CLR (0x1 << 0) /* A0 */
  709. #define EMMC51_CQCB_CFG3_CQCB_FIFO_FULL (0x1 << 4) /* RU */
  710. /* EMMC51_CQCB_CMD44 mask*/
  711. #define EMMC51_CQCB_CMD44_MASK (0xFFFFFFFF << 0) /* RW */
  712. /* EMMC51_CQCB_CMD45 mask*/
  713. #define EMMC51_CQCB_CMD45_MASK (0xFFFFFFFF << 0) /* RW */
  714. /* EMMC51_CQCB_TIDMAP mask*/
  715. #define EMMC51_CQCB_TIDMAP_TASKIDMAP (0xFFFFFFFF << 0) /* RW */
  716. /* EMMC51_CQCB_TIDMAPCLR mask*/
  717. #define EMMC51_CQCB_TIDMAPCLR_MASK (0xFFFFFFFF << 0) /* WO */
  718. /* EMMC51_CQCB_CURCMD mask*/
  719. #define EMMC51_CQCB_CURCMD_ID (0x3F << 0) /* RW */
  720. #if defined(FEATURE_MULTI_HOST)
  721. #include "msdc_reg_mh.h"
  722. #endif
  723. /*
  724. *MSDC TOP REG
  725. */
  726. #define REG_ADDR_TOP(x) ((volatile u32*)(host->base_top + OFFSET_##x))
  727. /* TOP REGISTER */
  728. #define OFFSET_EMMC_TOP_CONTROL (0x00)
  729. #define OFFSET_EMMC_TOP_CMD (0x04)
  730. #define OFFSET_TOP_EMMC50_PAD_CTL0 (0x08)
  731. #define OFFSET_TOP_EMMC50_PAD_DS_TUNE (0x0c)
  732. #define OFFSET_TOP_EMMC50_PAD_DAT0_TUNE (0x10)
  733. #define OFFSET_TOP_EMMC50_PAD_DAT1_TUNE (0x14)
  734. #define OFFSET_TOP_EMMC50_PAD_DAT2_TUNE (0x18)
  735. #define OFFSET_TOP_EMMC50_PAD_DAT3_TUNE (0x1c)
  736. #define OFFSET_TOP_EMMC50_PAD_DAT4_TUNE (0x20)
  737. #define OFFSET_TOP_EMMC50_PAD_DAT5_TUNE (0x24)
  738. #define OFFSET_TOP_EMMC50_PAD_DAT6_TUNE (0x28)
  739. #define OFFSET_TOP_EMMC50_PAD_DAT7_TUNE (0x2c)
  740. #define EMMC_TOP_CONTROL REG_ADDR_TOP(EMMC_TOP_CONTROL)
  741. #define EMMC_TOP_CMD REG_ADDR_TOP(EMMC_TOP_CMD)
  742. #define TOP_EMMC50_PAD_CTL0 REG_ADDR_TOP(TOP_EMMC50_PAD_CTL0)
  743. #define TOP_EMMC50_PAD_DS_TUNE REG_ADDR_TOP(TOP_EMMC50_PAD_DS_TUNE)
  744. #define TOP_EMMC50_PAD_DAT0_TUNE REG_ADDR_TOP(TOP_EMMC50_PAD_DAT0_TUNE)
  745. #define TOP_EMMC50_PAD_DAT1_TUNE REG_ADDR_TOP(TOP_EMMC50_PAD_DAT1_TUNE)
  746. #define TOP_EMMC50_PAD_DAT2_TUNE REG_ADDR_TOP(TOP_EMMC50_PAD_DAT2_TUNE)
  747. #define TOP_EMMC50_PAD_DAT3_TUNE REG_ADDR_TOP(TOP_EMMC50_PAD_DAT3_TUNE)
  748. #define TOP_EMMC50_PAD_DAT4_TUNE REG_ADDR_TOP(TOP_EMMC50_PAD_DAT4_TUNE)
  749. #define TOP_EMMC50_PAD_DAT5_TUNE REG_ADDR_TOP(TOP_EMMC50_PAD_DAT5_TUNE)
  750. #define TOP_EMMC50_PAD_DAT6_TUNE REG_ADDR_TOP(TOP_EMMC50_PAD_DAT6_TUNE)
  751. #define TOP_EMMC50_PAD_DAT7_TUNE REG_ADDR_TOP(TOP_EMMC50_PAD_DAT7_TUNE)
  752. /* EMMC_TOP_CONTROL mask */
  753. #define PAD_RXDLY_SEL (0x1 << 0) /* RW */
  754. #define DELAY_EN (0x1 << 1) /* RW */
  755. #define PAD_DAT_RD_RXDLY2 (0x1F << 2) /* RW */
  756. #define PAD_DAT_RD_RXDLY (0x1F << 7) /* RW */
  757. #define PAD_DAT_RD_RXDLY2_SEL (0x1 << 12) /* RW */
  758. #define PAD_DAT_RD_RXDLY_SEL (0x1 << 13) /* RW */
  759. #define DATA_K_VALUE_SEL (0x1 << 14) /* RW */
  760. #define SDC_RX_ENH_EN (0x1 << 15) /* RW */
  761. /* EMMC_TOP_CMD mask */
  762. #define PAD_CMD_RXDLY2 (0x1F << 0) /* RW */
  763. #define PAD_CMD_RXDLY (0x1F << 5) /* RW */
  764. #define PAD_CMD_RD_RXDLY2_SEL (0x1 << 10) /* RW */
  765. #define PAD_CMD_RD_RXDLY_SEL (0x1 << 11) /* RW */
  766. #define PAD_CMD_TX_DLY (0x1F << 12) /* RW */
  767. /* TOP_EMMC50_PAD_CTL0 mask */
  768. #define HL_SEL (0x1 << 0) /* RW */
  769. #define DCC_SEL (0x1 << 1) /* RW */
  770. #define DLN1 (0x3 << 2) /* RW */
  771. #define DLN0 (0x3 << 4) /* RW */
  772. #define DLP1 (0x3 << 6) /* RW */
  773. #define DLP0 (0x3 << 8) /* RW */
  774. #define PAD_CLK_TXDLY (0x1F << 10) /* RW */
  775. /* TOP_EMMC50_PAD_DS_TUNE mask */
  776. #define PAD_DS_DLY3 (0x1F << 0) /* RW */
  777. #define PAD_DS_DLY2 (0x1F << 5) /* RW */
  778. #define PAD_DS_DLY1 (0x1F << 10) /* RW */
  779. #define PAD_DS_DLY2_SEL (0x1 << 15) /* RW */
  780. #define PAD_DS_DLY_SEL (0x1 << 16) /* RW */
  781. /* TOP_EMMC50_PAD_DAT0_TUNE mask */
  782. #define DAT0_RD_DLY2 (0x1F << 0) /* RW */
  783. #define DAT0_RD_DLY1 (0x1F << 5) /* RW */
  784. #define PAD_DAT0_TX_DLY (0x1F << 10) /* RW */
  785. /* TOP_EMMC50_PAD_DAT1_TUNE mask */
  786. #define DAT1_RD_DLY2 (0x1F << 0) /* RW */
  787. #define DAT1_RD_DLY1 (0x1F << 5) /* RW */
  788. #define PAD_DAT1_TX_DLY (0x1F << 10) /* RW */
  789. /* TOP_EMMC50_PAD_DAT2_TUNE mask */
  790. #define DAT2_RD_DLY2 (0x1F << 0) /* RW */
  791. #define DAT2_RD_DLY1 (0x1F << 5) /* RW */
  792. #define PAD_DAT2_TX_DLY (0x1F << 10) /* RW */
  793. /* TOP_EMMC50_PAD_DAT3_TUNE mask */
  794. #define DAT3_RD_DLY2 (0x1F << 0) /* RW */
  795. #define DAT3_RD_DLY1 (0x1F << 5) /* RW */
  796. #define PAD_DAT3_TX_DLY (0x1F << 10) /* RW */
  797. /* TOP_EMMC50_PAD_DAT4_TUNE mask */
  798. #define DAT4_RD_DLY2 (0x1F << 0) /* RW */
  799. #define DAT4_RD_DLY1 (0x1F << 5) /* RW */
  800. #define PAD_DAT4_TX_DLY (0x1F << 10) /* RW */
  801. /* TOP_EMMC50_PAD_DAT5_TUNE mask */
  802. #define DAT5_RD_DLY2 (0x1F << 0) /* RW */
  803. #define DAT5_RD_DLY1 (0x1F << 5) /* RW */
  804. #define PAD_DAT5_TX_DLY (0x1F << 10) /* RW */
  805. /* TOP_EMMC50_PAD_DAT6_TUNE mask */
  806. #define DAT6_RD_DLY2 (0x1F << 0) /* RW */
  807. #define DAT6_RD_DLY1 (0x1F << 5) /* RW */
  808. #define PAD_DAT6_TX_DLY (0x1F << 10) /* RW */
  809. /* TOP_EMMC50_PAD_DAT7_TUNE mask */
  810. #define DAT7_RD_DLY2 (0x1F << 0) /* RW */
  811. #define DAT7_RD_DLY1 (0x1F << 5) /* RW */
  812. #define PAD_DAT7_TX_DLY (0x1F << 10) /* RW */
  813. #endif /* end of _MSDC_REG_H_ */