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