GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <cpuamu.h>
|
||||
|
||||
.globl cpuamu_cnt_read
|
||||
.globl cpuamu_cnt_write
|
||||
.globl cpuamu_read_cpuamcntenset_el0
|
||||
.globl cpuamu_read_cpuamcntenclr_el0
|
||||
.globl cpuamu_write_cpuamcntenset_el0
|
||||
.globl cpuamu_write_cpuamcntenclr_el0
|
||||
|
||||
/*
|
||||
* uint64_t cpuamu_cnt_read(unsigned int idx);
|
||||
*
|
||||
* Given `idx`, read the corresponding AMU counter
|
||||
* and return it in `x0`.
|
||||
*/
|
||||
func cpuamu_cnt_read
|
||||
adr x1, 1f
|
||||
add x1, x1, x0, lsl #3 /* each mrs/ret sequence is 8 bytes */
|
||||
#if ENABLE_BTI
|
||||
add x1, x1, x0, lsl #2 /* + "bti j" instruction */
|
||||
#endif
|
||||
br x1
|
||||
|
||||
1: read CPUAMEVCNTR0_EL0
|
||||
read CPUAMEVCNTR1_EL0
|
||||
read CPUAMEVCNTR2_EL0
|
||||
read CPUAMEVCNTR3_EL0
|
||||
read CPUAMEVCNTR4_EL0
|
||||
endfunc cpuamu_cnt_read
|
||||
|
||||
/*
|
||||
* void cpuamu_cnt_write(unsigned int idx, uint64_t val);
|
||||
*
|
||||
* Given `idx`, write `val` to the corresponding AMU counter.
|
||||
*/
|
||||
func cpuamu_cnt_write
|
||||
adr x2, 1f
|
||||
add x2, x2, x0, lsl #3 /* each msr/ret sequence is 8 bytes */
|
||||
#if ENABLE_BTI
|
||||
add x2, x2, x0, lsl #2 /* + "bti j" instruction */
|
||||
#endif
|
||||
br x2
|
||||
|
||||
1: write CPUAMEVCNTR0_EL0
|
||||
write CPUAMEVCNTR1_EL0
|
||||
write CPUAMEVCNTR2_EL0
|
||||
write CPUAMEVCNTR3_EL0
|
||||
write CPUAMEVCNTR4_EL0
|
||||
endfunc cpuamu_cnt_write
|
||||
|
||||
/*
|
||||
* unsigned int cpuamu_read_cpuamcntenset_el0(void);
|
||||
*
|
||||
* Read the `CPUAMCNTENSET_EL0` CPU register and return
|
||||
* it in `x0`.
|
||||
*/
|
||||
func cpuamu_read_cpuamcntenset_el0
|
||||
mrs x0, CPUAMCNTENSET_EL0
|
||||
ret
|
||||
endfunc cpuamu_read_cpuamcntenset_el0
|
||||
|
||||
/*
|
||||
* unsigned int cpuamu_read_cpuamcntenclr_el0(void);
|
||||
*
|
||||
* Read the `CPUAMCNTENCLR_EL0` CPU register and return
|
||||
* it in `x0`.
|
||||
*/
|
||||
func cpuamu_read_cpuamcntenclr_el0
|
||||
mrs x0, CPUAMCNTENCLR_EL0
|
||||
ret
|
||||
endfunc cpuamu_read_cpuamcntenclr_el0
|
||||
|
||||
/*
|
||||
* void cpuamu_write_cpuamcntenset_el0(unsigned int mask);
|
||||
*
|
||||
* Write `mask` to the `CPUAMCNTENSET_EL0` CPU register.
|
||||
*/
|
||||
func cpuamu_write_cpuamcntenset_el0
|
||||
msr CPUAMCNTENSET_EL0, x0
|
||||
ret
|
||||
endfunc cpuamu_write_cpuamcntenset_el0
|
||||
|
||||
/*
|
||||
* void cpuamu_write_cpuamcntenclr_el0(unsigned int mask);
|
||||
*
|
||||
* Write `mask` to the `CPUAMCNTENCLR_EL0` CPU register.
|
||||
*/
|
||||
func cpuamu_write_cpuamcntenclr_el0
|
||||
msr CPUAMCNTENCLR_EL0, x0
|
||||
ret
|
||||
endfunc cpuamu_write_cpuamcntenclr_el0
|
||||
Reference in New Issue
Block a user