1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /*
3  * Copyright (c) 2020-2021 Rockchip Electronics Co., Ltd.
4  */
5 
6 /** @addtogroup RK_HAL_Driver
7  *  @{
8  */
9 
10 /** @addtogroup CACHE
11  *  @{
12  */
13 
14 #ifndef _HAL_CACHE_H_
15 #define _HAL_CACHE_H_
16 
17 #include "hal_def.h"
18 #include "hal_debug.h"
19 
20 /***************************** MACRO Definition ******************************/
21 /** @defgroup CACHE_Exported_Definition_Group1 Basic Definition
22  *  @{
23  */
24 
25 /***************************** Structure Definition **************************/
26 
27 /**
28  *  performance measurement count for icache & dcache
29  *
30  */
31 struct CACHE_PMU_CNT {
32     uint32_t rdNum; /**< PMU read number counter */
33     uint32_t wrNum; /**< PMU write number counter */
34     uint32_t sramRdHit; /**< PMU SRAM hit counter */
35     uint32_t hbRdHit; /**< PMU hot buffer hit */
36     uint32_t stbRdHit; /**< PMU store buffer hit */
37     uint32_t rdHit; /**< PMU read hit counter */
38     uint32_t wrHit; /**< PMU write hit counter */
39     uint32_t rdMissPenalty; /**< PMU read miss penalty counter */
40     uint32_t wrMissPenalty; /**< PMU write miss penalty counter */
41     uint32_t rdLat; /**< PMU read latency */
42     uint32_t wrLat; /**< PMU write latency */
43 };
44 
45 /** @} */
46 /********************* Public Function Definition ****************************/
47 /** @defgroup CACHE_Exported_Functions_Group5 Other Functions
48  *  @attention these APIs allow direct use in the HAL layer
49  *  @{
50  */
51 
52 uint32_t HAL_CpuAddrToDmaAddr(uint32_t cpuAddr);
53 HAL_Status HAL_ICACHE_Enable(void);
54 HAL_Status HAL_ICACHE_Disable(void);
55 HAL_Status HAL_ICACHE_Invalidate(void);
56 HAL_Status HAL_ICACHE_InvalidateByRange(uint32_t address, uint32_t sizeByte);
57 HAL_Status HAL_ICACHE_EnablePMU(void);
58 HAL_Status HAL_ICACHE_DisablePMU(void);
59 HAL_Status HAL_ICACHE_GetPMU(struct CACHE_PMU_CNT *stat);
60 HAL_Status HAL_ICACHE_EnableInt(void);
61 HAL_Status HAL_ICACHE_DisableInt(void);
62 HAL_Check HAL_ICACHE_GetInt(void);
63 uint32_t HAL_ICACHE_GetErrAddr(void);
64 HAL_Status HAL_ICACHE_ClearInt(void);
65 HAL_Status HAL_DCACHE_Enable(void);
66 HAL_Status HAL_DCACHE_Disable(void);
67 HAL_Status HAL_DCACHE_Invalidate(void);
68 HAL_Status HAL_DCACHE_InvalidateByRange(uint32_t address, uint32_t sizeByte);
69 HAL_Status HAL_DCACHE_CleanByRange(uint32_t address, uint32_t sizeByte);
70 HAL_Status HAL_DCACHE_CleanInvalidateByRange(uint32_t address, uint32_t sizeByte);
71 HAL_Status HAL_DCACHE_CleanInvalidate(void);
72 HAL_Status HAL_DCACHE_EnablePMU(void);
73 HAL_Status HAL_DCACHE_DisablePMU(void);
74 HAL_Status HAL_DCACHE_GetPMU(struct CACHE_PMU_CNT *stat);
75 HAL_Status HAL_DCACHE_EnableInt(void);
76 HAL_Status HAL_DCACHE_DisableInt(void);
77 HAL_Check HAL_DCACHE_GetInt(void);
78 HAL_Status HAL_DCACHE_ClearInt(void);
79 uint32_t HAL_DCACHE_GetErrAddr(void);
80 
81 /** @} */
82 
83 #endif
84 
85 /** @} */
86 
87 /** @} */
88