HPM SDK
HPMicro Software Development Kit
hpm_csr_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 #ifndef HPM_CSR_DRV_H
8 #define HPM_CSR_DRV_H
9 
10 #include "hpm_csr_regs.h"
11 #include "riscv/riscv_core.h"
12 
13 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
31 static inline void hpm_csr_enable_access_to_csr_cycle(void)
32 {
33  uint32_t mcounter_en = read_csr(CSR_MCOUNTEREN);
35 }
36 
42 static inline void hpm_csr_disable_access_to_csr_cycle(void)
43 {
44  uint32_t mcounter_en = read_csr(CSR_MCOUNTEREN);
46 }
47 
56 static inline uint64_t hpm_csr_get_core_cycle(void)
57 {
58  uint64_t result;
59  uint32_t resultl_first = read_csr(CSR_CYCLE);
60  uint32_t resulth = read_csr(CSR_CYCLEH);
61  uint32_t resultl_second = read_csr(CSR_CYCLE);
62  if (resultl_first < resultl_second) {
63  result = ((uint64_t)resulth << 32) | resultl_first; /* if CYCLE didn't roll over, return the value directly */
64  } else {
65  resulth = read_csr(CSR_CYCLEH);
66  result = ((uint64_t)resulth << 32) | resultl_second; /* if CYCLE rolled over, need to get the CYCLEH again */
67  }
68  return result;
69  }
70 
77 static inline uint64_t hpm_csr_get_core_mcycle(void)
78 {
79  uint64_t result;
80  uint32_t resultl_first = read_csr(CSR_MCYCLE);
81  uint32_t resulth = read_csr(CSR_MCYCLEH);
82  uint32_t resultl_second = read_csr(CSR_MCYCLE);
83  if (resultl_first < resultl_second) {
84  result = ((uint64_t)resulth << 32) | resultl_first; /* if MCYCLE didn't roll over, return the value directly */
85  } else {
86  resulth = read_csr(CSR_MCYCLEH);
87  result = ((uint64_t)resulth << 32) | resultl_second; /* if MCYCLE rolled over, need to get the MCYCLEH again */
88  }
89  return result;
90  }
91 
92 
93 #ifdef __cplusplus
94 }
95 #endif
96 
102 #endif /* HPM_CSR_DRV_H */
#define CSR_MCOUNTEREN
Definition: hpm_csr_regs.h:25
#define CSR_MCYCLE
Definition: hpm_csr_regs.h:72
#define CSR_CYCLE
Definition: hpm_csr_regs.h:84
#define CSR_MCYCLEH
Definition: hpm_csr_regs.h:78
#define CSR_MCOUNTEREN_CY_MASK
Definition: hpm_csr_regs.h:876
#define CSR_CYCLEH
Definition: hpm_csr_regs.h:85
static uint64_t hpm_csr_get_core_mcycle(void)
Get the core mcycle value.
Definition: hpm_csr_drv.h:77
static void hpm_csr_disable_access_to_csr_cycle(void)
Disable access to CSR_CYCLE and CSR_MCYCLEH.
Definition: hpm_csr_drv.h:42
static void hpm_csr_enable_access_to_csr_cycle(void)
Enable access to CSR_CYCLE and CSR_MCYCLEH.
Definition: hpm_csr_drv.h:31
static uint64_t hpm_csr_get_core_cycle(void)
Get the core cycle value.
Definition: hpm_csr_drv.h:56
write_csr((0x7CC), cmd)
#define read_csr(csr_num)
read value of specific csr
Definition: riscv_core.h:75