influenceAnalysisOfCableAging.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. /* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. * You should have received a copy of the GNU General Public License
  13. * along with this program; if not, write to the Free Software
  14. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  15. * 02110-1301, USA.
  16. */
  17. #ifndef __ARCH_ARM_MACH_MSM_IOMMU_HW_8XXX_H
  18. #define __ARCH_ARM_MACH_MSM_IOMMU_HW_8XXX_H
  19. #define CTX_SHIFT 12
  20. #define GET_GLOBAL_REG(reg, base) (readl((base) + (reg)))
  21. #define GET_CTX_REG(reg, base, ctx) \
  22. (readl((base) + (reg) + ((ctx) << CTX_SHIFT)))
  23. #define SET_GLOBAL_REG(reg, base, val) writel((val), ((base) + (reg)))
  24. #define SET_CTX_REG(reg, base, ctx, val) \
  25. writel((val), ((base) + (reg) + ((ctx) << CTX_SHIFT)))
  26. /* Wrappers for numbered registers */
  27. #define SET_GLOBAL_REG_N(b, n, r, v) SET_GLOBAL_REG(b, ((r) + (n << 2)), (v))
  28. #define GET_GLOBAL_REG_N(b, n, r) GET_GLOBAL_REG(b, ((r) + (n << 2)))
  29. /* Field wrappers */
  30. #define GET_GLOBAL_FIELD(b, r, F) GET_FIELD(((b) + (r)), F##_MASK, F##_SHIFT)
  31. #define GET_CONTEXT_FIELD(b, c, r, F) \
  32. GET_FIELD(((b) + (r) + ((c) << CTX_SHIFT)), F##_MASK, F##_SHIFT)
  33. #define SET_GLOBAL_FIELD(b, r, F, v) \
  34. SET_FIELD(((b) + (r)), F##_MASK, F##_SHIFT, (v))
  35. #define SET_CONTEXT_FIELD(b, c, r, F, v) \
  36. SET_FIELD(((b) + (r) + ((c) << CTX_SHIFT)), F##_MASK, F##_SHIFT, (v))
  37. #define GET_FIELD(addr, mask, shift) ((readl(addr) >> (shift)) & (mask))
  38. #define SET_FIELD(addr, mask, shift, v) \
  39. do { \
  40. int t = readl(addr); \
  41. writel((t & ~((mask) << (shift))) + (((v) & (mask)) << (shift)), addr);\
  42. } while (0)
  43. #define NUM_FL_PTE 4096
  44. #define NUM_SL_PTE 256
  45. #define NUM_TEX_CLASS 8
  46. /* First-level page table bits */
  47. #define FL_BASE_MASK 0xFFFFFC00
  48. #define FL_TYPE_TABLE (1 << 0)
  49. #define FL_TYPE_SECT (2 << 0)
  50. #define FL_SUPERSECTION (1 << 18)
  51. #define FL_AP_WRITE (1 << 10)
  52. #define FL_AP_READ (1 << 11)
  53. #define FL_SHARED (1 << 16)
  54. #define FL_BUFFERABLE (1 << 2)
  55. #define FL_CACHEABLE (1 << 3)
  56. #define FL_TEX0 (1 << 12)
  57. #define FL_OFFSET(va) (((va) & 0xFFF00000) >> 20)
  58. #define FL_NG (1 << 17)
  59. /* Second-level page table bits */
  60. #define SL_BASE_MASK_LARGE 0xFFFF0000
  61. #define SL_BASE_MASK_SMALL 0xFFFFF000
  62. #define SL_TYPE_LARGE (1 << 0)
  63. #define SL_TYPE_SMALL (2 << 0)
  64. #define SL_AP0 (1 << 4)
  65. #define SL_AP1 (2 << 4)
  66. #define SL_SHARED (1 << 10)
  67. #define SL_BUFFERABLE (1 << 2)
  68. #define SL_CACHEABLE (1 << 3)
  69. #define SL_TEX0 (1 << 6)
  70. #define SL_OFFSET(va) (((va) & 0xFF000) >> 12)
  71. #define SL_NG (1 << 11)
  72. /* Memory type and cache policy attributes */
  73. #define MT_SO 0
  74. #define MT_DEV 1
  75. #define MT_NORMAL 2
  76. #define CP_NONCACHED 0
  77. #define CP_WB_WA 1
  78. #define CP_WT 2
  79. #define CP_WB_NWA 3
  80. /* Global register setters / getters */
  81. #define SET_M2VCBR_N(b, N, v) SET_GLOBAL_REG_N(M2VCBR_N, N, (b), (v))
  82. #define SET_CBACR_N(b, N, v) SET_GLOBAL_REG_N(CBACR_N, N, (b), (v))
  83. #define SET_TLBRSW(b, v) SET_GLOBAL_REG(TLBRSW, (b), (v))
  84. #define SET_TLBTR0(b, v) SET_GLOBAL_REG(TLBTR0, (b), (v))
  85. #define SET_TLBTR1(b, v) SET_GLOBAL_REG(TLBTR1, (b), (v))
  86. #define SET_TLBTR2(b, v) SET_GLOBAL_REG(TLBTR2, (b), (v))
  87. #define SET_TESTBUSCR(b, v) SET_GLOBAL_REG(TESTBUSCR, (b), (v))
  88. #define SET_GLOBAL_TLBIALL(b, v) SET_GLOBAL_REG(GLOBAL_TLBIALL, (b), (v))
  89. #define SET_TLBIVMID(b, v) SET_GLOBAL_REG(TLBIVMID, (b), (v))
  90. #define SET_CR(b, v) SET_GLOBAL_REG(CR, (b), (v))
  91. #define SET_EAR(b, v) SET_GLOBAL_REG(EAR, (b), (v))
  92. #define SET_ESR(b, v) SET_GLOBAL_REG(ESR, (b), (v))
  93. #define SET_ESRRESTORE(b, v) SET_GLOBAL_REG(ESRRESTORE, (b), (v))
  94. #define SET_ESYNR0(b, v) SET_GLOBAL_REG(ESYNR0, (b), (v))
  95. #define SET_ESYNR1(b, v) SET_GLOBAL_REG(ESYNR1, (b), (v))
  96. #define SET_RPU_ACR(b, v) SET_GLOBAL_REG(RPU_ACR, (b), (v))
  97. #define GET_M2VCBR_N(b, N) GET_GLOBAL_REG_N(M2VCBR_N, N, (b))
  98. #define GET_CBACR_N(b, N) GET_GLOBAL_REG_N(CBACR_N, N, (b))
  99. #define GET_TLBTR0(b) GET_GLOBAL_REG(TLBTR0, (b))
  100. #define GET_TLBTR1(b) GET_GLOBAL_REG(TLBTR1, (b))
  101. #define GET_TLBTR2(b) GET_GLOBAL_REG(TLBTR2, (b))
  102. #define GET_TESTBUSCR(b) GET_GLOBAL_REG(TESTBUSCR, (b))
  103. #define GET_GLOBAL_TLBIALL(b) GET_GLOBAL_REG(GLOBAL_TLBIALL, (b))
  104. #define GET_TLBIVMID(b) GET_GLOBAL_REG(TLBIVMID, (b))
  105. #define GET_CR(b) GET_GLOBAL_REG(CR, (b))
  106. #define GET_EAR(b) GET_GLOBAL_REG(EAR, (b))
  107. #define GET_ESR(b) GET_GLOBAL_REG(ESR, (b))
  108. #define GET_ESRRESTORE(b) GET_GLOBAL_REG(ESRRESTORE, (b))
  109. #define GET_ESYNR0(b) GET_GLOBAL_REG(ESYNR0, (b))
  110. #define GET_ESYNR1(b) GET_GLOBAL_REG(ESYNR1, (b))
  111. #define GET_REV(b) GET_GLOBAL_REG(REV, (b))
  112. #define GET_IDR(b) GET_GLOBAL_REG(IDR, (b))
  113. #define GET_RPU_ACR(b) GET_GLOBAL_REG(RPU_ACR, (b))
  114. /* Context register setters/getters */
  115. #define SET_SCTLR(b, c, v) SET_CTX_REG(SCTLR, (b), (c), (v))
  116. #define SET_ACTLR(b, c, v) SET_CTX_REG(ACTLR, (b), (c), (v))
  117. #define SET_CONTEXTIDR(b, c, v) SET_CTX_REG(CONTEXTIDR, (b), (c), (v))
  118. #define SET_TTBR0(b, c, v) SET_CTX_REG(TTBR0, (b), (c), (v))
  119. #define SET_TTBR1(b, c, v) SET_CTX_REG(TTBR1, (b), (c), (v))
  120. #define SET_TTBCR(b, c, v) SET_CTX_REG(TTBCR, (b), (c), (v))
  121. #define SET_PAR(b, c, v) SET_CTX_REG(PAR, (b), (c), (v))
  122. #define SET_FSR(b, c, v) SET_CTX_REG(FSR, (b), (c), (v))
  123. #define SET_FSRRESTORE(b, c, v) SET_CTX_REG(FSRRESTORE, (b), (c), (v))
  124. #define SET_FAR(b, c, v) SET_CTX_REG(FAR, (b), (c), (v))
  125. #define SET_FSYNR0(b, c, v) SET_CTX_REG(FSYNR0, (b), (c), (v))
  126. #define SET_FSYNR1(b, c, v) SET_CTX_REG(FSYNR1, (b), (c), (v))
  127. #define SET_PRRR(b, c, v) SET_CTX_REG(PRRR, (b), (c), (v))
  128. #define SET_NMRR(b, c, v) SET_CTX_REG(NMRR, (b), (c), (v))
  129. #define SET_TLBLKCR(b, c, v) SET_CTX_REG(TLBLCKR, (b), (c), (v))
  130. #define SET_V2PSR(b, c, v) SET_CTX_REG(V2PSR, (b), (c), (v))
  131. #define SET_TLBFLPTER(b, c, v) SET_CTX_REG(TLBFLPTER, (b), (c), (v))
  132. #define SET_TLBSLPTER(b, c, v) SET_CTX_REG(TLBSLPTER, (b), (c), (v))
  133. #define SET_BFBCR(b, c, v) SET_CTX_REG(BFBCR, (b), (c), (v))
  134. #define SET_CTX_TLBIALL(b, c, v) SET_CTX_REG(CTX_TLBIALL, (b), (c), (v))
  135. #define SET_TLBIASID(b, c, v) SET_CTX_REG(TLBIASID, (b), (c), (v))
  136. #define SET_TLBIVA(b, c, v) SET_CTX_REG(TLBIVA, (b), (c), (v))
  137. #define SET_TLBIVAA(b, c, v) SET_CTX_REG(TLBIVAA, (b), (c), (v))
  138. #define SET_V2PPR(b, c, v) SET_CTX_REG(V2PPR, (b), (c), (v))
  139. #define SET_V2PPW(b, c, v) SET_CTX_REG(V2PPW, (b), (c), (v))
  140. #define SET_V2PUR(b, c, v) SET_CTX_REG(V2PUR, (b), (c), (v))
  141. #define SET_V2PUW(b, c, v) SET_CTX_REG(V2PUW, (b), (c), (v))
  142. #define SET_RESUME(b, c, v) SET_CTX_REG(RESUME, (b), (c), (v))
  143. #define GET_SCTLR(b, c) GET_CTX_REG(SCTLR, (b), (c))
  144. #define GET_ACTLR(b, c) GET_CTX_REG(ACTLR, (b), (c))
  145. #define GET_CONTEXTIDR(b, c) GET_CTX_REG(CONTEXTIDR, (b), (c))
  146. #define GET_TTBR0(b, c) GET_CTX_REG(TTBR0, (b), (c))
  147. #define GET_TTBR1(b, c) GET_CTX_REG(TTBR1, (b), (c))
  148. #define GET_TTBCR(b, c) GET_CTX_REG(TTBCR, (b), (c))
  149. #define GET_PAR(b, c) GET_CTX_REG(PAR, (b), (c))
  150. #define GET_FSR(b, c) GET_CTX_REG(FSR, (b), (c))
  151. #define GET_FSRRESTORE(b, c) GET_CTX_REG(FSRRESTORE, (b), (c))
  152. #define GET_FAR(b, c) GET_CTX_REG(FAR, (b), (c))
  153. #define GET_FSYNR0(b, c) GET_CTX_REG(FSYNR0, (b), (c))
  154. #define GET_FSYNR1(b, c) GET_CTX_REG(FSYNR1, (b), (c))
  155. #define GET_PRRR(b, c) GET_CTX_REG(PRRR, (b), (c))
  156. #define GET_NMRR(b, c) GET_CTX_REG(NMRR, (b), (c))
  157. #define GET_TLBLCKR(b, c) GET_CTX_REG(TLBLCKR, (b), (c))
  158. #define GET_V2PSR(b, c) GET_CTX_REG(V2PSR, (b), (c))
  159. #define GET_TLBFLPTER(b, c) GET_CTX_REG(TLBFLPTER, (b), (c))
  160. #define GET_TLBSLPTER(b, c) GET_CTX_REG(TLBSLPTER, (b), (c))
  161. #define GET_BFBCR(b, c) GET_CTX_REG(BFBCR, (b), (c))
  162. #define GET_CTX_TLBIALL(b, c) GET_CTX_REG(CTX_TLBIALL, (b), (c))
  163. #define GET_TLBIASID(b, c) GET_CTX_REG(TLBIASID, (b), (c))
  164. #define GET_TLBIVA(b, c) GET_CTX_REG(TLBIVA, (b), (c))
  165. #define GET_TLBIVAA(b, c) GET_CTX_REG(TLBIVAA, (b), (c))
  166. #define GET_V2PPR(b, c) GET_CTX_REG(V2PPR, (b), (c))
  167. #define GET_V2PPW(b, c) GET_CTX_REG(V2PPW, (b), (c))
  168. #define GET_V2PUR(b, c) GET_CTX_REG(V2PUR, (b), (c))
  169. #define GET_V2PUW(b, c) GET_CTX_REG(V2PUW, (b), (c))
  170. #define GET_RESUME(b, c) GET_CTX_REG(RESUME, (b), (c))
  171. /* Global field setters / getters */
  172. /* Global Field Setters: */
  173. /* CBACR_N */
  174. #define SET_RWVMID(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(CBACR_N), RWVMID, v)
  175. #define SET_RWE(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(CBACR_N), RWE, v)
  176. #define SET_RWGE(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(CBACR_N), RWGE, v)
  177. #define SET_CBVMID(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(CBACR_N), CBVMID, v)
  178. #define SET_IRPTNDX(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(CBACR_N), IRPTNDX, v)
  179. /* M2VCBR_N */
  180. #define SET_VMID(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), VMID, v)
  181. #define SET_CBNDX(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), CBNDX, v)
  182. #define SET_BYPASSD(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BYPASSD, v)
  183. #define SET_BPRCOSH(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPRCOSH, v)
  184. #define SET_BPRCISH(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPRCISH, v)
  185. #define SET_BPRCNSH(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPRCNSH, v)
  186. #define SET_BPSHCFG(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPSHCFG, v)
  187. #define SET_NSCFG(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), NSCFG, v)
  188. #define SET_BPMTCFG(b, n, v) SET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPMTCFG, v)
  189. #define SET_BPMEMTYPE(b, n, v) \
  190. SET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPMEMTYPE, v)
  191. /* CR */
  192. #define SET_RPUE(b, v) SET_GLOBAL_FIELD(b, CR, RPUE, v)
  193. #define SET_RPUERE(b, v) SET_GLOBAL_FIELD(b, CR, RPUERE, v)
  194. #define SET_RPUEIE(b, v) SET_GLOBAL_FIELD(b, CR, RPUEIE, v)
  195. #define SET_DCDEE(b, v) SET_GLOBAL_FIELD(b, CR, DCDEE, v)
  196. #define SET_CLIENTPD(b, v) SET_GLOBAL_FIELD(b, CR, CLIENTPD, v)
  197. #define SET_STALLD(b, v) SET_GLOBAL_FIELD(b, CR, STALLD, v)
  198. #define SET_TLBLKCRWE(b, v) SET_GLOBAL_FIELD(b, CR, TLBLKCRWE, v)
  199. #define SET_CR_TLBIALLCFG(b, v) SET_GLOBAL_FIELD(b, CR, CR_TLBIALLCFG, v)
  200. #define SET_TLBIVMIDCFG(b, v) SET_GLOBAL_FIELD(b, CR, TLBIVMIDCFG, v)
  201. #define SET_CR_HUME(b, v) SET_GLOBAL_FIELD(b, CR, CR_HUME, v)
  202. /* ESR */
  203. #define SET_CFG(b, v) SET_GLOBAL_FIELD(b, ESR, CFG, v)
  204. #define SET_BYPASS(b, v) SET_GLOBAL_FIELD(b, ESR, BYPASS, v)
  205. #define SET_ESR_MULTI(b, v) SET_GLOBAL_FIELD(b, ESR, ESR_MULTI, v)
  206. /* ESYNR0 */
  207. #define SET_ESYNR0_AMID(b, v) SET_GLOBAL_FIELD(b, ESYNR0, ESYNR0_AMID, v)
  208. #define SET_ESYNR0_APID(b, v) SET_GLOBAL_FIELD(b, ESYNR0, ESYNR0_APID, v)
  209. #define SET_ESYNR0_ABID(b, v) SET_GLOBAL_FIELD(b, ESYNR0, ESYNR0_ABID, v)
  210. #define SET_ESYNR0_AVMID(b, v) SET_GLOBAL_FIELD(b, ESYNR0, ESYNR0_AVMID, v)
  211. #define SET_ESYNR0_ATID(b, v) SET_GLOBAL_FIELD(b, ESYNR0, ESYNR0_ATID, v)
  212. /* ESYNR1 */
  213. #define SET_ESYNR1_AMEMTYPE(b, v) \
  214. SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AMEMTYPE, v)
  215. #define SET_ESYNR1_ASHARED(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_ASHARED, v)
  216. #define SET_ESYNR1_AINNERSHARED(b, v) \
  217. SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AINNERSHARED, v)
  218. #define SET_ESYNR1_APRIV(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_APRIV, v)
  219. #define SET_ESYNR1_APROTNS(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_APROTNS, v)
  220. #define SET_ESYNR1_AINST(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AINST, v)
  221. #define SET_ESYNR1_AWRITE(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AWRITE, v)
  222. #define SET_ESYNR1_ABURST(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_ABURST, v)
  223. #define SET_ESYNR1_ALEN(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_ALEN, v)
  224. #define SET_ESYNR1_ASIZE(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_ASIZE, v)
  225. #define SET_ESYNR1_ALOCK(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_ALOCK, v)
  226. #define SET_ESYNR1_AOOO(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AOOO, v)
  227. #define SET_ESYNR1_AFULL(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AFULL, v)
  228. #define SET_ESYNR1_AC(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AC, v)
  229. #define SET_ESYNR1_DCD(b, v) SET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_DCD, v)
  230. /* TESTBUSCR */
  231. #define SET_TBE(b, v) SET_GLOBAL_FIELD(b, TESTBUSCR, TBE, v)
  232. #define SET_SPDMBE(b, v) SET_GLOBAL_FIELD(b, TESTBUSCR, SPDMBE, v)
  233. #define SET_WGSEL(b, v) SET_GLOBAL_FIELD(b, TESTBUSCR, WGSEL, v)
  234. #define SET_TBLSEL(b, v) SET_GLOBAL_FIELD(b, TESTBUSCR, TBLSEL, v)
  235. #define SET_TBHSEL(b, v) SET_GLOBAL_FIELD(b, TESTBUSCR, TBHSEL, v)
  236. #define SET_SPDM0SEL(b, v) SET_GLOBAL_FIELD(b, TESTBUSCR, SPDM0SEL, v)
  237. #define SET_SPDM1SEL(b, v) SET_GLOBAL_FIELD(b, TESTBUSCR, SPDM1SEL, v)
  238. #define SET_SPDM2SEL(b, v) SET_GLOBAL_FIELD(b, TESTBUSCR, SPDM2SEL, v)
  239. #define SET_SPDM3SEL(b, v) SET_GLOBAL_FIELD(b, TESTBUSCR, SPDM3SEL, v)
  240. /* TLBIVMID */
  241. #define SET_TLBIVMID_VMID(b, v) SET_GLOBAL_FIELD(b, TLBIVMID, TLBIVMID_VMID, v)
  242. /* TLBRSW */
  243. #define SET_TLBRSW_INDEX(b, v) SET_GLOBAL_FIELD(b, TLBRSW, TLBRSW_INDEX, v)
  244. #define SET_TLBBFBS(b, v) SET_GLOBAL_FIELD(b, TLBRSW, TLBBFBS, v)
  245. /* TLBTR0 */
  246. #define SET_PR(b, v) SET_GLOBAL_FIELD(b, TLBTR0, PR, v)
  247. #define SET_PW(b, v) SET_GLOBAL_FIELD(b, TLBTR0, PW, v)
  248. #define SET_UR(b, v) SET_GLOBAL_FIELD(b, TLBTR0, UR, v)
  249. #define SET_UW(b, v) SET_GLOBAL_FIELD(b, TLBTR0, UW, v)
  250. #define SET_XN(b, v) SET_GLOBAL_FIELD(b, TLBTR0, XN, v)
  251. #define SET_NSDESC(b, v) SET_GLOBAL_FIELD(b, TLBTR0, NSDESC, v)
  252. #define SET_ISH(b, v) SET_GLOBAL_FIELD(b, TLBTR0, ISH, v)
  253. #define SET_SH(b, v) SET_GLOBAL_FIELD(b, TLBTR0, SH, v)
  254. #define SET_MT(b, v) SET_GLOBAL_FIELD(b, TLBTR0, MT, v)
  255. #define SET_DPSIZR(b, v) SET_GLOBAL_FIELD(b, TLBTR0, DPSIZR, v)
  256. #define SET_DPSIZC(b, v) SET_GLOBAL_FIELD(b, TLBTR0, DPSIZC, v)
  257. /* TLBTR1 */
  258. #define SET_TLBTR1_VMID(b, v) SET_GLOBAL_FIELD(b, TLBTR1, TLBTR1_VMID, v)
  259. #define SET_TLBTR1_PA(b, v) SET_GLOBAL_FIELD(b, TLBTR1, TLBTR1_PA, v)
  260. /* TLBTR2 */
  261. #define SET_TLBTR2_ASID(b, v) SET_GLOBAL_FIELD(b, TLBTR2, TLBTR2_ASID, v)
  262. #define SET_TLBTR2_V(b, v) SET_GLOBAL_FIELD(b, TLBTR2, TLBTR2_V, v)
  263. #define SET_TLBTR2_NSTID(b, v) SET_GLOBAL_FIELD(b, TLBTR2, TLBTR2_NSTID, v)
  264. #define SET_TLBTR2_NV(b, v) SET_GLOBAL_FIELD(b, TLBTR2, TLBTR2_NV, v)
  265. #define SET_TLBTR2_VA(b, v) SET_GLOBAL_FIELD(b, TLBTR2, TLBTR2_VA, v)
  266. /* Global Field Getters */
  267. /* CBACR_N */
  268. #define GET_RWVMID(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(CBACR_N), RWVMID)
  269. #define GET_RWE(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(CBACR_N), RWE)
  270. #define GET_RWGE(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(CBACR_N), RWGE)
  271. #define GET_CBVMID(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(CBACR_N), CBVMID)
  272. #define GET_IRPTNDX(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(CBACR_N), IRPTNDX)
  273. /* M2VCBR_N */
  274. #define GET_VMID(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), VMID)
  275. #define GET_CBNDX(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), CBNDX)
  276. #define GET_BYPASSD(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BYPASSD)
  277. #define GET_BPRCOSH(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPRCOSH)
  278. #define GET_BPRCISH(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPRCISH)
  279. #define GET_BPRCNSH(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPRCNSH)
  280. #define GET_BPSHCFG(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPSHCFG)
  281. #define GET_NSCFG(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), NSCFG)
  282. #define GET_BPMTCFG(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPMTCFG)
  283. #define GET_BPMEMTYPE(b, n) GET_GLOBAL_FIELD(b, (n<<2)|(M2VCBR_N), BPMEMTYPE)
  284. /* CR */
  285. #define GET_RPUE(b) GET_GLOBAL_FIELD(b, CR, RPUE)
  286. #define GET_RPUERE(b) GET_GLOBAL_FIELD(b, CR, RPUERE)
  287. #define GET_RPUEIE(b) GET_GLOBAL_FIELD(b, CR, RPUEIE)
  288. #define GET_DCDEE(b) GET_GLOBAL_FIELD(b, CR, DCDEE)
  289. #define GET_CLIENTPD(b) GET_GLOBAL_FIELD(b, CR, CLIENTPD)
  290. #define GET_STALLD(b) GET_GLOBAL_FIELD(b, CR, STALLD)
  291. #define GET_TLBLKCRWE(b) GET_GLOBAL_FIELD(b, CR, TLBLKCRWE)
  292. #define GET_CR_TLBIALLCFG(b) GET_GLOBAL_FIELD(b, CR, CR_TLBIALLCFG)
  293. #define GET_TLBIVMIDCFG(b) GET_GLOBAL_FIELD(b, CR, TLBIVMIDCFG)
  294. #define GET_CR_HUME(b) GET_GLOBAL_FIELD(b, CR, CR_HUME)
  295. /* ESR */
  296. #define GET_CFG(b) GET_GLOBAL_FIELD(b, ESR, CFG)
  297. #define GET_BYPASS(b) GET_GLOBAL_FIELD(b, ESR, BYPASS)
  298. #define GET_ESR_MULTI(b) GET_GLOBAL_FIELD(b, ESR, ESR_MULTI)
  299. /* ESYNR0 */
  300. #define GET_ESYNR0_AMID(b) GET_GLOBAL_FIELD(b, ESYNR0, ESYNR0_AMID)
  301. #define GET_ESYNR0_APID(b) GET_GLOBAL_FIELD(b, ESYNR0, ESYNR0_APID)
  302. #define GET_ESYNR0_ABID(b) GET_GLOBAL_FIELD(b, ESYNR0, ESYNR0_ABID)
  303. #define GET_ESYNR0_AVMID(b) GET_GLOBAL_FIELD(b, ESYNR0, ESYNR0_AVMID)
  304. #define GET_ESYNR0_ATID(b) GET_GLOBAL_FIELD(b, ESYNR0, ESYNR0_ATID)
  305. /* ESYNR1 */
  306. #define GET_ESYNR1_AMEMTYPE(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AMEMTYPE)
  307. #define GET_ESYNR1_ASHARED(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_ASHARED)
  308. #define GET_ESYNR1_AINNERSHARED(b) \
  309. GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AINNERSHARED)
  310. #define GET_ESYNR1_APRIV(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_APRIV)
  311. #define GET_ESYNR1_APROTNS(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_APROTNS)
  312. #define GET_ESYNR1_AINST(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AINST)
  313. #define GET_ESYNR1_AWRITE(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AWRITE)
  314. #define GET_ESYNR1_ABURST(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_ABURST)
  315. #define GET_ESYNR1_ALEN(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_ALEN)
  316. #define GET_ESYNR1_ASIZE(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_ASIZE)
  317. #define GET_ESYNR1_ALOCK(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_ALOCK)
  318. #define GET_ESYNR1_AOOO(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AOOO)
  319. #define GET_ESYNR1_AFULL(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AFULL)
  320. #define GET_ESYNR1_AC(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_AC)
  321. #define GET_ESYNR1_DCD(b) GET_GLOBAL_FIELD(b, ESYNR1, ESYNR1_DCD)
  322. /* IDR */
  323. #define GET_NM2VCBMT(b) GET_GLOBAL_FIELD(b, IDR, NM2VCBMT)
  324. #define GET_HTW(b) GET_GLOBAL_FIELD(b, IDR, HTW)
  325. #define GET_HUM(b) GET_GLOBAL_FIELD(b, IDR, HUM)
  326. #define GET_TLBSIZE(b) GET_GLOBAL_FIELD(b, IDR, TLBSIZE)
  327. #define GET_NCB(b) GET_GLOBAL_FIELD(b, IDR, NCB)
  328. #define GET_NIRPT(b) GET_GLOBAL_FIELD(b, IDR, NIRPT)
  329. /* REV */
  330. #define GET_MAJOR(b) GET_GLOBAL_FIELD(b, REV, MAJOR)
  331. #define GET_MINOR(b) GET_GLOBAL_FIELD(b, REV, MINOR)
  332. /* TESTBUSCR */
  333. #define GET_TBE(b) GET_GLOBAL_FIELD(b, TESTBUSCR, TBE)
  334. #define GET_SPDMBE(b) GET_GLOBAL_FIELD(b, TESTBUSCR, SPDMBE)
  335. #define GET_WGSEL(b) GET_GLOBAL_FIELD(b, TESTBUSCR, WGSEL)
  336. #define GET_TBLSEL(b) GET_GLOBAL_FIELD(b, TESTBUSCR, TBLSEL)
  337. #define GET_TBHSEL(b) GET_GLOBAL_FIELD(b, TESTBUSCR, TBHSEL)
  338. #define GET_SPDM0SEL(b) GET_GLOBAL_FIELD(b, TESTBUSCR, SPDM0SEL)
  339. #define GET_SPDM1SEL(b) GET_GLOBAL_FIELD(b, TESTBUSCR, SPDM1SEL)
  340. #define GET_SPDM2SEL(b) GET_GLOBAL_FIELD(b, TESTBUSCR, SPDM2SEL)
  341. #define GET_SPDM3SEL(b) GET_GLOBAL_FIELD(b, TESTBUSCR, SPDM3SEL)
  342. /* TLBIVMID */
  343. #define GET_TLBIVMID_VMID(b) GET_GLOBAL_FIELD(b, TLBIVMID, TLBIVMID_VMID)
  344. /* TLBTR0 */
  345. #define GET_PR(b) GET_GLOBAL_FIELD(b, TLBTR0, PR)
  346. #define GET_PW(b) GET_GLOBAL_FIELD(b, TLBTR0, PW)
  347. #define GET_UR(b) GET_GLOBAL_FIELD(b, TLBTR0, UR)
  348. #define GET_UW(b) GET_GLOBAL_FIELD(b, TLBTR0, UW)
  349. #define GET_XN(b) GET_GLOBAL_FIELD(b, TLBTR0, XN)
  350. #define GET_NSDESC(b) GET_GLOBAL_FIELD(b, TLBTR0, NSDESC)
  351. #define GET_ISH(b) GET_GLOBAL_FIELD(b, TLBTR0, ISH)
  352. #define GET_SH(b) GET_GLOBAL_FIELD(b, TLBTR0, SH)
  353. #define GET_MT(b) GET_GLOBAL_FIELD(b, TLBTR0, MT)
  354. #define GET_DPSIZR(b) GET_GLOBAL_FIELD(b, TLBTR0, DPSIZR)
  355. #define GET_DPSIZC(b) GET_GLOBAL_FIELD(b, TLBTR0, DPSIZC)
  356. /* TLBTR1 */
  357. #define GET_TLBTR1_VMID(b) GET_GLOBAL_FIELD(b, TLBTR1, TLBTR1_VMID)
  358. #define GET_TLBTR1_PA(b) GET_GLOBAL_FIELD(b, TLBTR1, TLBTR1_PA)
  359. /* TLBTR2 */
  360. #define GET_TLBTR2_ASID(b) GET_GLOBAL_FIELD(b, TLBTR2, TLBTR2_ASID)
  361. #define GET_TLBTR2_V(b) GET_GLOBAL_FIELD(b, TLBTR2, TLBTR2_V)
  362. #define GET_TLBTR2_NSTID(b) GET_GLOBAL_FIELD(b, TLBTR2, TLBTR2_NSTID)
  363. #define GET_TLBTR2_NV(b) GET_GLOBAL_FIELD(b, TLBTR2, TLBTR2_NV)
  364. #define GET_TLBTR2_VA(b) GET_GLOBAL_FIELD(b, TLBTR2, TLBTR2_VA)
  365. /* Context Register setters / getters */
  366. /* Context Register setters */
  367. /* ACTLR */
  368. #define SET_CFERE(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, CFERE, v)
  369. #define SET_CFEIE(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, CFEIE, v)
  370. #define SET_PTSHCFG(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, PTSHCFG, v)
  371. #define SET_RCOSH(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, RCOSH, v)
  372. #define SET_RCISH(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, RCISH, v)
  373. #define SET_RCNSH(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, RCNSH, v)
  374. #define SET_PRIVCFG(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, PRIVCFG, v)
  375. #define SET_DNA(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, DNA, v)
  376. #define SET_DNLV2PA(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, DNLV2PA, v)
  377. #define SET_TLBMCFG(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, TLBMCFG, v)
  378. #define SET_CFCFG(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, CFCFG, v)
  379. #define SET_TIPCF(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, TIPCF, v)
  380. #define SET_V2PCFG(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, V2PCFG, v)
  381. #define SET_HUME(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, HUME, v)
  382. #define SET_PTMTCFG(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, PTMTCFG, v)
  383. #define SET_PTMEMTYPE(b, c, v) SET_CONTEXT_FIELD(b, c, ACTLR, PTMEMTYPE, v)
  384. /* BFBCR */
  385. #define SET_BFBDFE(b, c, v) SET_CONTEXT_FIELD(b, c, BFBCR, BFBDFE, v)
  386. #define SET_BFBSFE(b, c, v) SET_CONTEXT_FIELD(b, c, BFBCR, BFBSFE, v)
  387. #define SET_SFVS(b, c, v) SET_CONTEXT_FIELD(b, c, BFBCR, SFVS, v)
  388. #define SET_FLVIC(b, c, v) SET_CONTEXT_FIELD(b, c, BFBCR, FLVIC, v)
  389. #define SET_SLVIC(b, c, v) SET_CONTEXT_FIELD(b, c, BFBCR, SLVIC, v)
  390. /* CONTEXTIDR */
  391. #define SET_CONTEXTIDR_ASID(b, c, v) \
  392. SET_CONTEXT_FIELD(b, c, CONTEXTIDR, CONTEXTIDR_ASID, v)
  393. #define SET_CONTEXTIDR_PROCID(b, c, v) \
  394. SET_CONTEXT_FIELD(b, c, CONTEXTIDR, PROCID, v)
  395. /* FSR */
  396. #define SET_TF(b, c, v) SET_CONTEXT_FIELD(b, c, FSR, TF, v)
  397. #define SET_AFF(b, c, v) SET_CONTEXT_FIELD(b, c, FSR, AFF, v)
  398. #define SET_APF(b, c, v) SET_CONTEXT_FIELD(b, c, FSR, APF, v)
  399. #define SET_TLBMF(b, c, v) SET_CONTEXT_FIELD(b, c, FSR, TLBMF, v)
  400. #define SET_HTWDEEF(b, c, v) SET_CONTEXT_FIELD(b, c, FSR, HTWDEEF, v)
  401. #define SET_HTWSEEF(b, c, v) SET_CONTEXT_FIELD(b, c, FSR, HTWSEEF, v)
  402. #define SET_MHF(b, c, v) SET_CONTEXT_FIELD(b, c, FSR, MHF, v)
  403. #define SET_SL(b, c, v) SET_CONTEXT_FIELD(b, c, FSR, SL, v)
  404. #define SET_SS(b, c, v) SET_CONTEXT_FIELD(b, c, FSR, SS, v)
  405. #define SET_MULTI(b, c, v) SET_CONTEXT_FIELD(b, c, FSR, MULTI, v)
  406. /* FSYNR0 */
  407. #define SET_AMID(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR0, AMID, v)
  408. #define SET_APID(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR0, APID, v)
  409. #define SET_ABID(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR0, ABID, v)
  410. #define SET_ATID(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR0, ATID, v)
  411. /* FSYNR1 */
  412. #define SET_AMEMTYPE(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR1, AMEMTYPE, v)
  413. #define SET_ASHARED(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR1, ASHARED, v)
  414. #define SET_AINNERSHARED(b, c, v) \
  415. SET_CONTEXT_FIELD(b, c, FSYNR1, AINNERSHARED, v)
  416. #define SET_APRIV(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR1, APRIV, v)
  417. #define SET_APROTNS(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR1, APROTNS, v)
  418. #define SET_AINST(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR1, AINST, v)
  419. #define SET_AWRITE(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR1, AWRITE, v)
  420. #define SET_ABURST(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR1, ABURST, v)
  421. #define SET_ALEN(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR1, ALEN, v)
  422. #define SET_FSYNR1_ASIZE(b, c, v) \
  423. SET_CONTEXT_FIELD(b, c, FSYNR1, FSYNR1_ASIZE, v)
  424. #define SET_ALOCK(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR1, ALOCK, v)
  425. #define SET_AFULL(b, c, v) SET_CONTEXT_FIELD(b, c, FSYNR1, AFULL, v)
  426. /* NMRR */
  427. #define SET_ICPC0(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, ICPC0, v)
  428. #define SET_ICPC1(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, ICPC1, v)
  429. #define SET_ICPC2(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, ICPC2, v)
  430. #define SET_ICPC3(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, ICPC3, v)
  431. #define SET_ICPC4(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, ICPC4, v)
  432. #define SET_ICPC5(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, ICPC5, v)
  433. #define SET_ICPC6(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, ICPC6, v)
  434. #define SET_ICPC7(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, ICPC7, v)
  435. #define SET_OCPC0(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, OCPC0, v)
  436. #define SET_OCPC1(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, OCPC1, v)
  437. #define SET_OCPC2(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, OCPC2, v)
  438. #define SET_OCPC3(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, OCPC3, v)
  439. #define SET_OCPC4(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, OCPC4, v)
  440. #define SET_OCPC5(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, OCPC5, v)
  441. #define SET_OCPC6(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, OCPC6, v)
  442. #define SET_OCPC7(b, c, v) SET_CONTEXT_FIELD(b, c, NMRR, OCPC7, v)
  443. /* PAR */
  444. #define SET_FAULT(b, c, v) SET_CONTEXT_FIELD(b, c, PAR, FAULT, v)
  445. #define SET_FAULT_TF(b, c, v) SET_CONTEXT_FIELD(b, c, PAR, FAULT_TF, v)
  446. #define SET_FAULT_AFF(b, c, v) SET_CONTEXT_FIELD(b, c, PAR, FAULT_AFF, v)
  447. #define SET_FAULT_APF(b, c, v) SET_CONTEXT_FIELD(b, c, PAR, FAULT_APF, v)
  448. #define SET_FAULT_TLBMF(b, c, v) SET_CONTEXT_FIELD(b, c, PAR, FAULT_TLBMF, v)
  449. #define SET_FAULT_HTWDEEF(b, c, v) \
  450. SET_CONTEXT_FIELD(b, c, PAR, FAULT_HTWDEEF, v)
  451. #define SET_FAULT_HTWSEEF(b, c, v) \
  452. SET_CONTEXT_FIELD(b, c, PAR, FAULT_HTWSEEF, v)
  453. #define SET_FAULT_MHF(b, c, v) SET_CONTEXT_FIELD(b, c, PAR, FAULT_MHF, v)