1*4882a593Smuzhiyun/* 2*4882a593Smuzhiyun * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun /* Please keep them sorted based on the CRn register */ 8*4882a593Smuzhiyun .macro read_midr reg 9*4882a593Smuzhiyun mrc p15, 0, \reg, c0, c0, 0 10*4882a593Smuzhiyun .endm 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun .macro read_ctr reg 13*4882a593Smuzhiyun mrc p15, 0, \reg, c0, c0, 1 14*4882a593Smuzhiyun .endm 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun .macro read_mpidr reg 17*4882a593Smuzhiyun mrc p15, 0, \reg, c0, c0, 5 18*4882a593Smuzhiyun .endm 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun .macro read_sctlr reg 21*4882a593Smuzhiyun mrc p15, 0, \reg, c1, c0, 0 22*4882a593Smuzhiyun .endm 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun .macro write_sctlr reg 25*4882a593Smuzhiyun mcr p15, 0, \reg, c1, c0, 0 26*4882a593Smuzhiyun .endm 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun .macro write_actlr reg 29*4882a593Smuzhiyun mcr p15, 0, \reg, c1, c0, 1 30*4882a593Smuzhiyun .endm 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun .macro read_actlr reg 33*4882a593Smuzhiyun mrc p15, 0, \reg, c1, c0, 1 34*4882a593Smuzhiyun .endm 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun .macro write_cpacr reg 37*4882a593Smuzhiyun mcr p15, 0, \reg, c1, c0, 2 38*4882a593Smuzhiyun .endm 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun .macro read_cpacr reg 41*4882a593Smuzhiyun mrc p15, 0, \reg, c1, c0, 2 42*4882a593Smuzhiyun .endm 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun .macro read_scr reg 45*4882a593Smuzhiyun mrc p15, 0, \reg, c1, c1, 0 46*4882a593Smuzhiyun .endm 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun .macro write_scr reg 49*4882a593Smuzhiyun mcr p15, 0, \reg, c1, c1, 0 50*4882a593Smuzhiyun .endm 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun .macro write_nsacr reg 53*4882a593Smuzhiyun mcr p15, 0, \reg, c1, c1, 2 54*4882a593Smuzhiyun .endm 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun .macro read_nsacr reg 57*4882a593Smuzhiyun mrc p15, 0, \reg, c1, c1, 2 58*4882a593Smuzhiyun .endm 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun .macro write_ttbr0 reg 61*4882a593Smuzhiyun mcr p15, 0, \reg, c2, c0, 0 62*4882a593Smuzhiyun .endm 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun .macro read_ttbr0 reg 65*4882a593Smuzhiyun mrc p15, 0, \reg, c2, c0, 0 66*4882a593Smuzhiyun .endm 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun .macro write_ttbr1 reg 69*4882a593Smuzhiyun mcr p15, 0, \reg, c2, c0, 1 70*4882a593Smuzhiyun .endm 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun .macro read_ttbr1 reg 73*4882a593Smuzhiyun mrc p15, 0, \reg, c2, c0, 1 74*4882a593Smuzhiyun .endm 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun .macro write_ttbcr reg 77*4882a593Smuzhiyun mcr p15, 0, \reg, c2, c0, 2 78*4882a593Smuzhiyun .endm 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun .macro read_ttbcr reg 81*4882a593Smuzhiyun mrc p15, 0, \reg, c2, c0, 2 82*4882a593Smuzhiyun .endm 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun .macro write_dacr reg 86*4882a593Smuzhiyun mcr p15, 0, \reg, c3, c0, 0 87*4882a593Smuzhiyun .endm 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun .macro read_dacr reg 90*4882a593Smuzhiyun mrc p15, 0, \reg, c3, c0, 0 91*4882a593Smuzhiyun .endm 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun .macro read_dfsr reg 94*4882a593Smuzhiyun mrc p15, 0, \reg, c5, c0, 0 95*4882a593Smuzhiyun .endm 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun .macro write_icialluis 98*4882a593Smuzhiyun /* 99*4882a593Smuzhiyun * Invalidate all instruction caches to PoU, Inner Shareable 100*4882a593Smuzhiyun * (register ignored) 101*4882a593Smuzhiyun */ 102*4882a593Smuzhiyun mcr p15, 0, r0, c7, c1, 0 103*4882a593Smuzhiyun .endm 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun .macro write_bpiallis 106*4882a593Smuzhiyun /* 107*4882a593Smuzhiyun * Invalidate entire branch predictor array, Inner Shareable 108*4882a593Smuzhiyun * (register ignored) 109*4882a593Smuzhiyun */ 110*4882a593Smuzhiyun mcr p15, 0, r0, c7, c1, 6 111*4882a593Smuzhiyun .endm 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun .macro write_iciallu 114*4882a593Smuzhiyun /* Invalidate all instruction caches to PoU (register ignored) */ 115*4882a593Smuzhiyun mcr p15, 0, r0, c7, c5, 0 116*4882a593Smuzhiyun .endm 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun .macro write_icimvau reg 119*4882a593Smuzhiyun /* Instruction cache invalidate by MVA */ 120*4882a593Smuzhiyun mcr p15, 0, \reg, c7, c5, 1 121*4882a593Smuzhiyun .endm 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun .macro write_bpiall 124*4882a593Smuzhiyun /* Invalidate entire branch predictor array (register ignored) */ 125*4882a593Smuzhiyun mcr p15, 0, r0, c7, c5, 6 126*4882a593Smuzhiyun .endm 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun .macro write_dcimvac reg 129*4882a593Smuzhiyun /* Data cache invalidate by MVA */ 130*4882a593Smuzhiyun mcr p15, 0, \reg, c7, c6, 1 131*4882a593Smuzhiyun .endm 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun .macro write_dcisw reg 134*4882a593Smuzhiyun /* Data cache invalidate by set/way */ 135*4882a593Smuzhiyun mcr p15, 0, \reg, c7, c6, 2 136*4882a593Smuzhiyun .endm 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun .macro write_dccmvac reg 139*4882a593Smuzhiyun /* Data cache clean by MVA */ 140*4882a593Smuzhiyun mcr p15, 0, \reg, c7, c10, 1 141*4882a593Smuzhiyun .endm 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun .macro write_dccsw reg 144*4882a593Smuzhiyun /* Data cache clean by set/way */ 145*4882a593Smuzhiyun mcr p15, 0, \reg, c7, c10, 2 146*4882a593Smuzhiyun .endm 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun .macro write_dccimvac reg 149*4882a593Smuzhiyun /* Data cache invalidate by MVA */ 150*4882a593Smuzhiyun mcr p15, 0, \reg, c7, c14, 1 151*4882a593Smuzhiyun .endm 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun .macro write_dccisw reg 154*4882a593Smuzhiyun /* Data cache clean and invalidate by set/way */ 155*4882a593Smuzhiyun mcr p15, 0, \reg, c7, c14, 2 156*4882a593Smuzhiyun .endm 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun .macro write_tlbiall 159*4882a593Smuzhiyun /* Invalidate entire unified TLB (register ignored) */ 160*4882a593Smuzhiyun mcr p15, 0, r0, c8, c7, 0 161*4882a593Smuzhiyun .endm 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun .macro write_tlbiallis 164*4882a593Smuzhiyun /* Invalidate entire unified TLB Inner Sharable (register ignored) */ 165*4882a593Smuzhiyun mcr p15, 0, r0, c8, c3, 0 166*4882a593Smuzhiyun .endm 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun .macro write_tlbiasidis reg 169*4882a593Smuzhiyun /* Invalidate unified TLB by ASID Inner Sharable */ 170*4882a593Smuzhiyun mcr p15, 0, \reg, c8, c3, 2 171*4882a593Smuzhiyun .endm 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun .macro write_tlbimvaais reg 174*4882a593Smuzhiyun /* Invalidate unified TLB by MVA all ASID Inner Sharable */ 175*4882a593Smuzhiyun mcr p15, 0, \reg, c8, c3, 3 176*4882a593Smuzhiyun .endm 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun .macro write_prrr reg 179*4882a593Smuzhiyun mcr p15, 0, \reg, c10, c2, 0 180*4882a593Smuzhiyun .endm 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun .macro read_prrr reg 183*4882a593Smuzhiyun mrc p15, 0, \reg, c10, c2, 0 184*4882a593Smuzhiyun .endm 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun .macro write_nmrr reg 187*4882a593Smuzhiyun mcr p15, 0, \reg, c10, c2, 1 188*4882a593Smuzhiyun .endm 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun .macro read_nmrr reg 191*4882a593Smuzhiyun mrc p15, 0, \reg, c10, c2, 1 192*4882a593Smuzhiyun .endm 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun .macro read_vbar reg 195*4882a593Smuzhiyun mrc p15, 0, \reg, c12, c0, 0 196*4882a593Smuzhiyun .endm 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun .macro write_vbar reg 199*4882a593Smuzhiyun mcr p15, 0, \reg, c12, c0, 0 200*4882a593Smuzhiyun .endm 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun .macro write_mvbar reg 203*4882a593Smuzhiyun mcr p15, 0, \reg, c12, c0, 1 204*4882a593Smuzhiyun .endm 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun .macro read_mvbar reg 207*4882a593Smuzhiyun mrc p15, 0, \reg, c12, c0, 1 208*4882a593Smuzhiyun .endm 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun .macro write_fcseidr reg 211*4882a593Smuzhiyun mcr p15, 0, \reg, c13, c0, 0 212*4882a593Smuzhiyun .endm 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun .macro read_fcseidr reg 215*4882a593Smuzhiyun mrc p15, 0, \reg, c13, c0, 0 216*4882a593Smuzhiyun .endm 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun .macro write_contextidr reg 219*4882a593Smuzhiyun mcr p15, 0, \reg, c13, c0, 1 220*4882a593Smuzhiyun .endm 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun .macro read_contextidr reg 223*4882a593Smuzhiyun mrc p15, 0, \reg, c13, c0, 1 224*4882a593Smuzhiyun .endm 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun .macro write_tpidruro reg 227*4882a593Smuzhiyun mcr p15, 0, \reg, c13, c0, 3 228*4882a593Smuzhiyun .endm 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun .macro read_tpidruro reg 231*4882a593Smuzhiyun mrc p15, 0, \reg, c13, c0, 3 232*4882a593Smuzhiyun .endm 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun .macro read_clidr reg 235*4882a593Smuzhiyun /* Cache Level ID Register */ 236*4882a593Smuzhiyun mrc p15, 1, \reg, c0, c0, 1 237*4882a593Smuzhiyun .endm 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun .macro read_ccsidr reg 240*4882a593Smuzhiyun /* Cache Size ID Registers */ 241*4882a593Smuzhiyun mrc p15, 1, \reg, c0, c0, 0 242*4882a593Smuzhiyun .endm 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun .macro write_csselr reg 245*4882a593Smuzhiyun /* Cache Size Selection Register */ 246*4882a593Smuzhiyun mcr p15, 2, \reg, c0, c0, 0 247*4882a593Smuzhiyun .endm 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun /* Cortex A9: pcr, diag registers */ 250*4882a593Smuzhiyun .macro write_pcr reg 251*4882a593Smuzhiyun mcr p15, 0, \reg, c15, c0, 0 252*4882a593Smuzhiyun .endm 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun .macro read_pcr reg 255*4882a593Smuzhiyun mrc p15, 0, \reg, c15, c0, 0 256*4882a593Smuzhiyun .endm 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun .macro write_diag reg 259*4882a593Smuzhiyun mcr p15, 0, \reg, c15, c0, 1 260*4882a593Smuzhiyun .endm 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun .macro read_diag reg 263*4882a593Smuzhiyun mrc p15, 0, \reg, c15, c0, 1 264*4882a593Smuzhiyun .endm 265