/* * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include .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