8 #ifndef _HPM_L1_CACHE_H
9 #define _HPM_L1_CACHE_H
12 #include "hpm_soc_feature.h"
28 #define HPM_MCACHE_CTL_IC_EN_SHIFT (0UL)
29 #define HPM_MCACHE_CTL_IC_EN_MASK (1UL << HPM_MCACHE_CTL_IC_EN_SHIFT)
30 #define HPM_MCACHE_CTL_IC_EN(x) \
31 (uint32_t)(((x) << HPM_MCACHE_CTL_IC_EN_SHIFT) & HPM_MCACHE_CTL_IC_EN_MASK)
39 #define HPM_MCACHE_CTL_DC_EN_SHIFT (1UL)
40 #define HPM_MCACHE_CTL_DC_EN_MASK (1UL << HPM_MCACHE_CTL_DC_EN_SHIFT)
41 #define HPM_MCACHE_CTL_DC_EN(x) \
42 (uint32_t)(((x) << HPM_MCACHE_CTL_DC_EN_SHIFT) & HPM_MCACHE_CTL_DC_EN_MASK)
52 #define HPM_MCACHE_CTL_IC_ECCEN_SHIFT (2UL)
53 #define HPM_MCACHE_CTL_IC_ECCEN_MASK (0x3UL << HPM_MCACHE_CTL_IC_ECCEN_SHIFT)
54 #define HPM_MCACHE_CTL_IC_ECCEN(x) \
55 (uint32_t)(((x) << HPM_MCACHE_CTL_IC_ECCEN_SHIFT) & HPM_MCACHE_CTL_IC_ECCEN_MASK)
66 #define HPM_MCACHE_CTL_DC_ECCEN_SHIFT (4UL)
67 #define HPM_MCACHE_CTL_DC_ECCEN_MASK (0x3UL << HPM_MCACHE_CTL_DC_ECCEN_SHIFT)
68 #define HPM_MCACHE_CTL_DC_ECCEN(x) \
69 (uint32_t)(((x) << HPM_MCACHE_CTL_DC_ECCEN_SHIFT) & HPM_MCACHE_CTL_DC_ECCEN_MASK)
80 #define HPM_MCACHE_CTL_IC_RWECC_SHIFT (6UL)
81 #define HPM_MCACHE_CTL_IC_RWECC_MASK (0x1UL << HPM_MCACHE_CTL_IC_RWECC_SHIFT)
82 #define HPM_MCACHE_CTL_IC_RWECC(x) \
83 (uint32_t)(((x) << HPM_MCACHE_CTL_IC_RWECC_SHIFT) & HPM_MCACHE_CTL_IC_RWECC_MASK)
95 #define HPM_MCACHE_CTL_DC_RWECC_SHIFT (7UL)
96 #define HPM_MCACHE_CTL_DC_RWECC_MASK (0x1UL << HPM_MCACHE_CTL_DC_RWECC_SHIFT)
97 #define HPM_MCACHE_CTL_DC_RWECC(x) \
98 (uint32_t)(((x) << HPM_MCACHE_CTL_DC_RWECC_SHIFT) & HPM_MCACHE_CTL_DC_RWECC_MASK)
107 #define HPM_MCACHE_CTL_CCTL_SUEN_SHIFT (8UL)
108 #define HPM_MCACHE_CTL_CCTL_SUEN_MASK (0x1UL << HPM_MCACHE_CTL_CCTL_SUEN_SHIFT)
109 #define HPM_MCACHE_CTL_CCTL_SUEN(x) \
110 (uint32_t)(((x) << HPM_MCACHE_CTL_CCTL_SUEN_SHIFT) & HPM_MCACHE_CTL_CCTL_SUEN_MASK)
119 #define HPM_MCACHE_CTL_IPREF_EN_SHIFT (9UL)
120 #define HPM_MCACHE_CTL_IPREF_EN_MASK (0x1UL << HPM_MCACHE_CTL_IPREF_EN_SHIFT)
121 #define HPM_MCACHE_CTL_IPREF_EN(x) \
122 (uint32_t)(((x) << HPM_MCACHE_CTL_IPREF_EN_SHIFT) & HPM_MCACHE_CTL_IPREF_EN_MASK)
131 #define HPM_MCACHE_CTL_DPREF_EN_SHIFT (10UL)
132 #define HPM_MCACHE_CTL_DPREF_EN_MASK (0x1UL << HPM_MCACHE_CTL_DPREF_EN_SHIFT)
133 #define HPM_MCACHE_CTL_DPREF_EN(x) \
134 (uint32_t)(((x) << HPM_MCACHE_CTL_DPREF_EN_SHIFT) & HPM_MCACHE_CTL_DPREF_EN_MASK)
142 #define HPM_MCACHE_CTL_IC_FIRST_WORD_SHIFT (11UL)
143 #define HPM_MCACHE_CTL_IC_FIRST_WORD_MASK (0x1UL << HPM_MCACHE_CTL_IC_FIRST_WORD_SHIFT)
144 #define HPM_MCACHE_CTL_IC_FIRST_WORD(x) \
145 (uint32_t)(((x) << HPM_MCACHE_CTL_IC_FIRST_WORD_SHIFT) & HPM_MCACHE_CTL_IC_FIRST_WORD_MASK)
153 #define HPM_MCACHE_CTL_DC_FIRST_WORD_SHIFT (12UL)
154 #define HPM_MCACHE_CTL_DC_FIRST_WORD_MASK (0x1UL << HPM_MCACHE_CTL_DC_FIRST_WORD_SHIFT)
155 #define HPM_MCACHE_CTL_DC_FIRST_WORD(x) \
156 (uint32_t)(((x) << HPM_MCACHE_CTL_DC_FIRST_WORD_SHIFT) & HPM_MCACHE_CTL_DC_FIRST_WORD_MASK)
170 #define HPM_MCACHE_CTL_DC_WAROUND_SHIFT (13UL)
171 #define HPM_MCACHE_CTL_DC_WAROUND_MASK (0x3UL << HPM_MCACHE_CTL_DC_WAROUND_SHIFT)
172 #define HPM_MCACHE_CTL_DC_WAROUND(x) \
173 (uint32_t)(((x) << HPM_MCACHE_CTL_DC_WAROUND_SHIFT) & HPM_MCACHE_CTL_DC_WAROUND_MASK)
176 #define HPM_L1C_CCTL_CMD_L1D_VA_INVAL (0UL)
177 #define HPM_L1C_CCTL_CMD_L1D_VA_WB (1UL)
178 #define HPM_L1C_CCTL_CMD_L1D_VA_WBINVAL (2UL)
179 #define HPM_L1C_CCTL_CMD_L1D_VA_LOCK (3UL)
180 #define HPM_L1C_CCTL_CMD_L1D_VA_UNLOCK (4UL)
181 #define HPM_L1C_CCTL_CMD_L1D_WBINVAL_ALL (6UL)
182 #define HPM_L1C_CCTL_CMD_L1D_WB_ALL (7UL)
184 #define HPM_L1C_CCTL_CMD_L1I_VA_INVAL (8UL)
185 #define HPM_L1C_CCTL_CMD_L1I_VA_LOCK (11UL)
186 #define HPM_L1C_CCTL_CMD_L1I_VA_UNLOCK (12UL)
188 #define HPM_L1C_CCTL_CMD_L1D_IX_INVAL (16UL)
189 #define HPM_L1C_CCTL_CMD_L1D_IX_WB (17UL)
190 #define HPM_L1C_CCTL_CMD_L1D_IX_WBINVAL (18UL)
192 #define HPM_L1C_CCTL_CMD_L1D_IX_RTAG (19UL)
193 #define HPM_L1C_CCTL_CMD_L1D_IX_RDATA (20UL)
194 #define HPM_L1C_CCTL_CMD_L1D_IX_WTAG (21UL)
195 #define HPM_L1C_CCTL_CMD_L1D_IX_WDATA (22UL)
197 #define HPM_L1C_CCTL_CMD_L1D_INVAL_ALL (23UL)
199 #define HPM_L1C_CCTL_CMD_L1I_IX_INVAL (24UL)
200 #define HPM_L1C_CCTL_CMD_L1I_IX_RTAG (27UL)
201 #define HPM_L1C_CCTL_CMD_L1I_IX_RDATA (28UL)
202 #define HPM_L1C_CCTL_CMD_L1I_IX_WTAG (29UL)
203 #define HPM_L1C_CCTL_CMD_L1I_IX_WDATA (30UL)
205 #define HPM_L1C_CCTL_CMD_SUCCESS (1UL)
206 #define HPM_L1C_CCTL_CMD_FAIL (0UL)
229 #define HPM_MCCTLBEGINADDR_OFFSET_SHIFT (2UL)
230 #define HPM_MCCTLBEGINADDR_OFFSET_MASK ((uint32_t) 0xF << HPM_MCCTLBEGINADDR_OFFSET_SHIFT)
231 #define HPM_MCCTLBEGINADDR_OFFSET(x) \
232 (uint32_t)(((x) << HPM_MCCTLBEGINADDR_OFFSET_SHIFT) & HPM_MCCTLBEGINADDR_OFFSET_MASK)
233 #define HPM_MCCTLBEGINADDR_INDEX_SHIFT (6UL)
234 #define HPM_MCCTLBEGINADDR_INDEX_MASK ((uint32_t) 0x3F << HPM_MCCTLBEGINADDR_INDEX_SHIFT)
235 #define HPM_MCCTLBEGINADDR_INDEX(x) \
236 (uint32_t)(((x) << HPM_MCCTLBEGINADDR_INDEX_SHIFT) & HPM_MCCTLBEGINADDR_INDEX_MASK)
237 #define HPM_MCCTLBEGINADDR_WAY_SHIFT (13UL)
238 #define HPM_MCCTLBEGINADDR_WAY_MASK ((uint32_t) 0x3 << HPM_MCCTLBEGINADDR_WAY_SHIFT)
239 #define HPM_MCCTLBEGINADDR_WAY(x) \
240 (uint32_t)(((x) << HPM_MCCTLBEGINADDR_WAY_SHIFT) & HPM_MCCTLBEGINADDR_WAY_MASK)
260 ATTR_ALWAYS_INLINE
static inline
263 #if defined(HPM_SDK_L1C_NO_REENTRANT) && HPM_SDK_L1C_NO_REENTRANT
264 register uint32_t mcause;
271 #if defined(HPM_SDK_L1C_NO_REENTRANT) && HPM_SDK_L1C_NO_REENTRANT
276 #define HPM_MCCTLDATA_I_TAG_ADDRESS_SHIFT (2UL)
277 #define HPM_MCCTLDATA_I_TAG_ADDRESS_MASK (uint32_t)(0XFFFFF << HPM_MCCTLDATA_I_TAG_ADDRESS_SHIFT)
278 #define HPM_MCCTLDATA_I_TAG_ADDRESS(x) \
279 (uint32_t)(((x) << HPM_MCCTLDATA_I_TAG_ADDRESS_SHIFT) & HPM_MCCTLDATA_I_TAG_ADDRESS_MASK)
281 #define HPM_MCCTLDATA_I_TAG_LOCK_DUP_SHIFT (29UL)
282 #define HPM_MCCTLDATA_I_TAG_LOCK_DUP_MASK (uint32_t)(1 << HPM_MCCTLDATA_I_TAG_LOCK_DUP_SHIFT)
283 #define HPM_MCCTLDATA_I_TAG_LOCK_DUP(x) \
284 (uint32_t)(((x) << HPM_MCCTLDATA_I_TAG_LOCK_DUP_SHIFT) & HPM_MCCTLDATA_I_TAG_LOCK_DUP_MASK)
286 #define HPM_MCCTLDATA_I_TAG_LOCK_SHIFT (30UL)
287 #define HPM_MCCTLDATA_I_TAG_LOCK_MASK (uint32_t)(1 << HPM_MCCTLDATA_I_TAG_LOCK_SHIFT)
288 #define HPM_MCCTLDATA_I_TAG_LOCK(x) \
289 (uint32_t)(((x) << HPM_MCCTLDATA_I_TAG_LOCK_SHIFT) & HPM_MCCTLDATA_I_TAG_LOCK_MASK)
291 #define HPM_MCCTLDATA_I_TAG_VALID_SHIFT (31UL)
292 #define HPM_MCCTLDATA_I_TAG_VALID_MASK (uint32_t)(1 << HPM_MCCTLDATA_I_TAG_VALID_SHIFT)
293 #define HPM_MCCTLDATA_I_TAG_VALID(x) \
294 (uint32_t)(((x) << HPM_MCCTLDATA_I_TAG_VALID_SHIFT) & HPM_MCCTLDATA_I_TAG_VALID_MASK)
296 #define HPM_MCCTLDATA_D_TAG_MESI_SHIFT (0UL)
297 #define HPM_MCCTLDATA_D_TAG_MESI_MASK (uint32_t)(0x3 << HPM_MCCTLDATA_D_TAG_MESI_SHIFT)
298 #define HPM_MCCTLDATA_D_TAG_MESI(x) \
299 (uint32_t)(((x) << HPM_MCCTLDATA_D_TAG_MESI_SHIFT) & HPM_MCCTLDATA_D_TAG_MESI_MASK)
301 #define HPM_MCCTLDATA_D_TAG_LOCK_SHIFT (3UL)
302 #define HPM_MCCTLDATA_D_TAG_LOCK_MASK (uint32_t)(0x1 << HPM_MCCTLDATA_D_TAG_LOCK_SHIFT)
303 #define HPM_MCCTLDATA_D_TAG_LOCK(x) \
304 (uint32_t)(((x) << HPM_MCCTLDATA_D_TAG_LOCK_SHIFT) & HPM_MCCTLDATA_D_TAG_LOCK_MASK)
306 #define HPM_MCCTLDATA_D_TAG_TAG_SHIFT (4UL)
307 #define HPM_MCCTLDATA_D_TAG_TAG_MASK (uint32_t)(0xFFFF << HPM_MCCTLDATA_D_TAG_LOCK_SHIFT)
308 #define HPM_MCCTLDATA_D_TAG_TAG(x) \
309 (uint32_t)(((x) << HPM_MCCTLDATA_D_TAG_TAG_SHIFT) & HPM_MCCTLDATA_D_TAG_TAG_MASK)
331 #define HPM_L1C_CFG_SET_SHIFT (0UL)
332 #define HPM_L1C_CFG_SET_MASK (uint32_t)(0x7 << HPM_L1C_CFG_SET_SHIFT)
333 #define HPM_L1C_CFG_WAY_SHIFT (3UL)
334 #define HPM_L1C_CFG_WAY_MASK (uint32_t)(0x7 << HPM_L1C_CFG_WAY_SHIFT)
335 #define HPM_L1C_CFG_SIZE_SHIFT (6UL)
336 #define HPM_L1C_CFG_SIZE_MASK (uint32_t)(0x7 << HPM_L1C_CFG_SIZE_SHIFT)
337 #define HPM_L1C_CFG_LOCK_SHIFT (9UL)
338 #define HPM_L1C_CFG_LOCK_MASK (uint32_t)(0x1 << HPM_L1C_CFG_LOCK_SHIFT)
339 #define HPM_L1C_CFG_ECC_SHIFT (10UL)
340 #define HPM_L1C_CFG_ECC_MASK (uint32_t)(0x3 << HPM_L1C_CFG_ECC_SHIFT)
341 #define HPM_L1C_CFG_LMB_SHIFT (12UL)
342 #define HPM_L1C_CFG_LMB_MASK (uint32_t)(0x7 << HPM_L1C_CFG_LMB_SHIFT)
343 #define HPM_L1C_CFG_LM_SIZE_SHIFT (15UL)
344 #define HPM_L1C_CFG_LM_SIZE_MASK (uint32_t)(0x1F << HPM_L1C_CFG_LM_SIZE_SHIFT)
345 #define HPM_L1C_CFG_LM_ECC_SHIFT (21UL)
346 #define HPM_L1C_CFG_LM_ECC_MASK (uint32_t)(0x3 << HPM_L1C_CFG_LM_ECC_SHIFT)
347 #define HPM_L1C_CFG_SETH_SHIFT (24UL)
348 #define HPM_L1C_CFG_SETH_MASK (uint32_t)(0x1 << HPM_L1C_CFG_SETH_SHIFT)
#define CSR_MICM_CFG
Definition: hpm_csr_regs.h:121
#define CSR_MCCTLDATA
Definition: hpm_csr_regs.h:106
#define CSR_MCACHE_CTL
Definition: hpm_csr_regs.h:103
#define CSR_MSTATUS
Definition: hpm_csr_regs.h:21
#define CSR_MSTATUS_MIE_MASK
Definition: hpm_csr_regs.h:413
#define CSR_MCCTLCOMMAND
Definition: hpm_csr_regs.h:105
#define CSR_MDCM_CFG
Definition: hpm_csr_regs.h:122
#define CSR_MCCTLBEGINADDR
Definition: hpm_csr_regs.h:104
void l1c_ic_invalidate(uint32_t address, uint32_t size)
Definition: hpm_l1c_drv.c:121
#define HPM_MCACHE_CTL_IC_EN_MASK
Definition: hpm_l1c_drv.h:29
void l1c_ic_enable(void)
Definition: hpm_l1c_drv.c:55
static ATTR_ALWAYS_INLINE bool l1c_ic_is_enabled(void)
Definition: hpm_l1c_drv.h:223
void l1c_ic_disable(void)
Definition: hpm_l1c_drv.c:64
void l1c_dc_flush_all(void)
Definition: hpm_l1c_drv.c:86
static ATTR_ALWAYS_INLINE void l1c_cctl_data(uint32_t data)
Definition: hpm_l1c_drv.h:326
void l1c_dc_enable(void)
Definition: hpm_l1c_drv.c:36
#define HPM_MCACHE_CTL_DC_EN_MASK
Definition: hpm_l1c_drv.h:40
void l1c_ic_fill_lock(uint32_t address, uint32_t size)
Definition: hpm_l1c_drv.c:127
void l1c_dc_disable(void)
Definition: hpm_l1c_drv.c:48
void l1c_dc_disable_writearound(void)
Definition: hpm_l1c_drv.c:144
void l1c_dc_writeback_all(void)
Definition: hpm_l1c_drv.c:81
void l1c_ic_unlock(uint32_t address, uint32_t size)
Definition: hpm_l1c_drv.c:133
static ATTR_ALWAYS_INLINE uint32_t l1c_ic_get_config(void)
Get I-cache configuration.
Definition: hpm_l1c_drv.h:355
static ATTR_ALWAYS_INLINE bool l1c_dc_is_enabled(void)
Definition: hpm_l1c_drv.h:218
static ATTR_ALWAYS_INLINE uint32_t l1c_dc_get_config(void)
Get D-cache configuration.
Definition: hpm_l1c_drv.h:365
void l1c_dc_flush(uint32_t address, uint32_t size)
Definition: hpm_l1c_drv.c:115
void l1c_dc_invalidate_all(void)
Definition: hpm_l1c_drv.c:76
static ATTR_ALWAYS_INLINE uint32_t l1c_get_control(void)
Definition: hpm_l1c_drv.h:213
void l1c_fence_i(void)
Definition: hpm_l1c_drv.c:71
static ATTR_ALWAYS_INLINE uint32_t l1c_cctl_get_data(void)
Definition: hpm_l1c_drv.h:316
void l1c_dc_unlock(uint32_t address, uint32_t size)
Definition: hpm_l1c_drv.c:97
static ATTR_ALWAYS_INLINE uint32_t l1c_cctl_get_address(void)
Definition: hpm_l1c_drv.h:254
void l1c_dc_writeback(uint32_t address, uint32_t size)
Definition: hpm_l1c_drv.c:109
void l1c_dc_fill_lock(uint32_t address, uint32_t size)
Definition: hpm_l1c_drv.c:91
void l1c_dc_invalidate(uint32_t address, uint32_t size)
Definition: hpm_l1c_drv.c:103
void l1c_dc_enable_writearound(void)
Definition: hpm_l1c_drv.c:139
static ATTR_ALWAYS_INLINE void l1c_cctl_address(uint32_t address)
Definition: hpm_l1c_drv.h:243
static ATTR_ALWAYS_INLINE void l1c_cctl_cmd(uint8_t cmd)
Definition: hpm_l1c_drv.h:249
static ATTR_ALWAYS_INLINE void l1c_cctl_address_cmd(uint8_t cmd, uint32_t address)
Definition: hpm_l1c_drv.h:261
static void size
Definition: hpm_math.h:6938
#define write_csr(csr_num, v)
write value to csr
Definition: riscv_core.h:66
#define read_csr(csr_num)
read value of specific csr
Definition: riscv_core.h:75
#define read_clear_csr(csr_num, bit)
read and clear bits in csr
Definition: riscv_core.h:40