1/* 2 * Copyright (c) 2014, STMicroelectronics International N.V. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, 12 * this list of conditions and the following disclaimer in the documentation 13 * and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28 /* Please keep them sorted based on the CRn register */ 29 30 .macro read_ctr reg 31 mrc p15, 0, \reg, c0, c0, 1 32 .endm 33 34 .macro read_mpidr reg 35 mrc p15, 0, \reg, c0, c0, 5 36 .endm 37 38 .macro read_sctlr reg 39 mrc p15, 0, \reg, c1, c0, 0 40 .endm 41 42 .macro write_sctlr reg 43 mcr p15, 0, \reg, c1, c0, 0 44 .endm 45 46 .macro write_actlr reg 47 mcr p15, 0, \reg, c1, c0, 1 48 .endm 49 50 .macro read_actlr reg 51 mrc p15, 0, \reg, c1, c0, 1 52 .endm 53 54 .macro write_cpacr reg 55 mcr p15, 0, \reg, c1, c0, 2 56 .endm 57 58 .macro read_cpacr reg 59 mrc p15, 0, \reg, c1, c0, 2 60 .endm 61 62 .macro read_scr reg 63 mrc p15, 0, \reg, c1, c1, 0 64 .endm 65 66 .macro write_scr reg 67 mcr p15, 0, \reg, c1, c1, 0 68 .endm 69 70 .macro write_nsacr reg 71 mcr p15, 0, \reg, c1, c1, 2 72 .endm 73 74 .macro read_nsacr reg 75 mrc p15, 0, \reg, c1, c1, 2 76 .endm 77 78 .macro write_ttbr0 reg 79 mcr p15, 0, \reg, c2, c0, 0 80 .endm 81 82 .macro read_ttbr0 reg 83 mrc p15, 0, \reg, c2, c0, 0 84 .endm 85 86 .macro write_ttbr1 reg 87 mcr p15, 0, \reg, c2, c0, 1 88 .endm 89 90 .macro read_ttbr1 reg 91 mrc p15, 0, \reg, c2, c0, 1 92 .endm 93 94 .macro write_ttbcr reg 95 mcr p15, 0, \reg, c2, c0, 2 96 .endm 97 98 .macro read_ttbcr reg 99 mrc p15, 0, \reg, c2, c0, 2 100 .endm 101 102 103 .macro write_dacr reg 104 mcr p15, 0, \reg, c3, c0, 0 105 .endm 106 107 .macro read_dacr reg 108 mrc p15, 0, \reg, c3, c0, 0 109 .endm 110 111 .macro read_dfsr reg 112 mrc p15, 0, \reg, c5, c0, 0 113 .endm 114 115 .macro write_icialluis 116 /* 117 * Invalidate all instruction caches to PoU, Inner Shareable 118 * (register ignored) 119 */ 120 mcr p15, 0, r0, c7, c1, 0 121 .endm 122 123 .macro write_bpiallis 124 /* 125 * Invalidate entire branch predictor array, Inner Shareable 126 * (register ignored) 127 */ 128 mcr p15, 0, r0, c7, c1, 6 129 .endm 130 131 .macro write_iciallu 132 /* Invalidate all instruction caches to PoU (register ignored) */ 133 mcr p15, 0, r0, c7, c5, 0 134 .endm 135 136 .macro write_icimvau reg 137 /* Instruction cache invalidate by MVA */ 138 mcr p15, 0, \reg, c7, c5, 1 139 .endm 140 141 .macro write_bpiall 142 /* Invalidate entire branch predictor array (register ignored) */ 143 mcr p15, 0, r0, c7, c5, 6 144 .endm 145 146 .macro write_dcimvac reg 147 /* Data cache invalidate by MVA */ 148 mcr p15, 0, \reg, c7, c6, 1 149 .endm 150 151 .macro write_dcisw reg 152 /* Data cache invalidate by set/way */ 153 mcr p15, 0, \reg, c7, c6, 2 154 .endm 155 156 .macro write_dccmvac reg 157 /* Data cache clean by MVA */ 158 mcr p15, 0, \reg, c7, c10, 1 159 .endm 160 161 .macro write_dccsw reg 162 /* Data cache clean by set/way */ 163 mcr p15, 0, \reg, c7, c10, 2 164 .endm 165 166 .macro write_dccimvac reg 167 /* Data cache invalidate by MVA */ 168 mcr p15, 0, \reg, c7, c14, 1 169 .endm 170 171 .macro write_dccisw reg 172 /* Data cache clean and invalidate by set/way */ 173 mcr p15, 0, \reg, c7, c14, 2 174 .endm 175 176 .macro write_tlbiall 177 /* Invalidate entire unified TLB (register ignored) */ 178 mcr p15, 0, r0, c8, c7, 0 179 .endm 180 181 .macro write_tlbiallis 182 /* Invalidate entire unified TLB Inner Sharable (register ignored) */ 183 mcr p15, 0, r0, c8, c3, 0 184 .endm 185 186 .macro write_tlbiasidis reg 187 /* Invalidate unified TLB by ASID Inner Sharable */ 188 mcr p15, 0, \reg, c8, c3, 2 189 .endm 190 191 .macro write_prrr reg 192 mcr p15, 0, \reg, c10, c2, 0 193 .endm 194 195 .macro read_prrr reg 196 mrc p15, 0, \reg, c10, c2, 0 197 .endm 198 199 .macro write_nmrr reg 200 mcr p15, 0, \reg, c10, c2, 1 201 .endm 202 203 .macro read_nmrr reg 204 mrc p15, 0, \reg, c10, c2, 1 205 .endm 206 207 .macro read_vbar reg 208 mrc p15, 0, \reg, c12, c0, 0 209 .endm 210 211 .macro write_vbar reg 212 mcr p15, 0, \reg, c12, c0, 0 213 .endm 214 215 .macro write_mvbar reg 216 mcr p15, 0, \reg, c12, c0, 1 217 .endm 218 219 .macro read_mvbar reg 220 mrc p15, 0, \reg, c12, c0, 1 221 .endm 222 223 .macro write_fcseidr reg 224 mcr p15, 0, \reg, c13, c0, 0 225 .endm 226 227 .macro read_fcseidr reg 228 mrc p15, 0, \reg, c13, c0, 0 229 .endm 230 231 .macro write_contextidr reg 232 mcr p15, 0, \reg, c13, c0, 1 233 .endm 234 235 .macro read_contextidr reg 236 mrc p15, 0, \reg, c13, c0, 1 237 .endm 238 239 .macro write_tpidruro reg 240 mcr p15, 0, \reg, c13, c0, 3 241 .endm 242 243 .macro read_tpidruro reg 244 mrc p15, 0, \reg, c13, c0, 3 245 .endm 246 247 .macro read_clidr reg 248 /* Cache Level ID Register */ 249 mrc p15, 1, \reg, c0, c0, 1 250 .endm 251 252 .macro read_ccsidr reg 253 /* Cache Size ID Registers */ 254 mrc p15, 1, \reg, c0, c0, 0 255 .endm 256 257 .macro write_csselr reg 258 /* Cache Size Selection Register */ 259 mcr p15, 2, \reg, c0, c0, 0 260 .endm 261 262 .macro mov_imm reg, val 263 .if ((\val) & 0xffff0000) == 0 264 mov \reg, #(\val) 265 .else 266 movw \reg, #((\val) & 0xffff) 267 movt \reg, #((\val) >> 16) 268 .endif 269 .endm 270 271