github.com/f-secure-foundry/tamago@v0.0.0-20220307101044-d73fcdd7f11b/arm/cache.go (about)

     1  // ARM processor support
     2  // https://github.com/f-secure-foundry/tamago
     3  //
     4  // Copyright (c) F-Secure Corporation
     5  // https://foundry.f-secure.com
     6  //
     7  // Use of this source code is governed by the license
     8  // that can be found in the LICENSE file.
     9  
    10  package arm
    11  
    12  // ARM cache register constants
    13  const (
    14  	ACTLR_SMP = 6
    15  )
    16  
    17  // defined in cache.s
    18  func read_actlr() uint32
    19  func write_actlr(aux uint32)
    20  func cache_enable()
    21  func cache_disable()
    22  func cache_flush_data()
    23  func cache_flush_instruction()
    24  
    25  // EnableSMP sets the SMP bit in Cortex-A7 Auxiliary Control Register, to
    26  // enable coherent requests to the processor. This must be ensured before
    27  // caches and MMU are enabled or any cache and TLB maintenance operations are
    28  // performed (p115, Cortex™-A7 MPCore® Technical Reference Manual r0p5).
    29  func (cpu *CPU) EnableSMP() {
    30  	aux := read_actlr()
    31  	aux |= 1 << ACTLR_SMP
    32  	write_actlr(aux)
    33  }
    34  
    35  // EnableCache activates the ARM instruction and data caches.
    36  func (cpu *CPU) EnableCache() {
    37  	cache_enable()
    38  }
    39  
    40  // DisableCache disables the ARM instruction and data caches.
    41  func (cpu *CPU) DisableCache() {
    42  	cache_disable()
    43  }
    44  
    45  // FlushDataCache flushes the ARM data cache.
    46  func (cpu *CPU) FlushDataCache() {
    47  	cache_flush_data()
    48  }
    49  
    50  // FlushInstructionCache flushes the ARM instruction cache.
    51  func (cpu *CPU) FlushInstructionCache() {
    52  	cache_flush_instruction()
    53  }