16 #ifndef __CORE_FEATURE_ECC_H__
17 #define __CORE_FEATURE_ECC_H__
43 #include "core_feature_base.h"
45 #if defined(__ECC_PRESENT) && (__ECC_PRESENT == 1)
77 return mcfginfo.
b.
ecc;
124 return mcfginfo.
b.
plic && mtlbcfginfo.
b.
ecc;
302 #if defined(__CCM_PRESENT) && (__CCM_PRESENT == 1)
303 #if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1)
358 #if defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1)
511 uint32_t val =
__LW(addr);
628 uint32_t val =
__LW(addr);
653 #define ECC_ERROR_RAMID_MASK_ICACHE 1U
654 #define ECC_ERROR_RAMID_MASK_DCACHE 2U
655 #define ECC_ERROR_RAMID_MASK_TLB 4U
656 #define ECC_ERROR_RAMID_MASK_ILM 8U
657 #define ECC_ERROR_RAMID_MASK_DLM 16U
958 uint8_t ecc_bits = 0;
959 uint8_t ecc_bit_0 = ((a >> 0) & 1) ^ ((a >> 1) & 1) ^ ((a >> 3) & 1) ^ ((a >> 4) & 1) ^
960 ((a >> 6) & 1) ^ ((a >> 8) & 1) ^ ((a >> 10) & 1) ^ ((a >> 12) & 1) ^
961 ((a >> 14) & 1) ^ ((a >> 17) & 1) ^ ((a >> 19) & 1) ^ ((a >> 20) & 1) ^
962 ((a >> 24) & 1) ^ ((a >> 28) & 1);
963 uint8_t ecc_bit_1 = ((a >> 0) & 1) ^ ((a >> 2) & 1) ^ ((a >> 3) & 1) ^ ((a >> 5) & 1) ^
964 ((a >> 6) & 1) ^ ((a >> 9) & 1) ^ ((a >> 11) & 1) ^ ((a >> 12) & 1) ^
965 ((a >> 15) & 1) ^ ((a >> 20) & 1) ^ ((a >> 22) & 1) ^ ((a >> 25) & 1) ^
967 uint8_t ecc_bit_2 = ((a >> 1) & 1) ^ ((a >> 2) & 1) ^ ((a >> 3) & 1) ^ ((a >> 7) & 1) ^
968 ((a >> 8) & 1) ^ ((a >> 9) & 1) ^ ((a >> 13) & 1) ^ ((a >> 14) & 1) ^
969 ((a >> 15) & 1) ^ ((a >> 18) & 1) ^ ((a >> 21) & 1) ^ ((a >> 22) & 1) ^
970 ((a >> 26) & 1) ^ ((a >> 30) & 1);
971 uint8_t ecc_bit_3 = ((a >> 4) & 1) ^ ((a >> 5) & 1) ^ ((a >> 6) & 1) ^ ((a >> 7) & 1) ^
972 ((a >> 8) & 1) ^ ((a >> 9) & 1) ^ ((a >> 16) & 1) ^ ((a >> 17) & 1) ^
973 ((a >> 18) & 1) ^ ((a >> 23) & 1) ^ ((a >> 24) & 1) ^ ((a >> 25) & 1) ^
974 ((a >> 26) & 1) ^ ((a >> 31) & 1);
975 uint8_t ecc_bit_4 = ((a >> 10) & 1) ^ ((a >> 11) & 1) ^ ((a >> 12) & 1) ^ ((a >> 13) & 1) ^
976 ((a >> 14) & 1) ^ ((a >> 15) & 1) ^ ((a >> 16) & 1) ^ ((a >> 17) & 1) ^
977 ((a >> 18) & 1) ^ ((a >> 27) & 1) ^ ((a >> 28) & 1) ^ ((a >> 29) & 1) ^
978 ((a >> 30) & 1) ^ ((a >> 31) & 1);
979 uint8_t ecc_bit_5 = ((a >> 19) & 1) ^ ((a >> 20) & 1) ^ ((a >> 21) & 1) ^ ((a >> 22) & 1) ^
980 ((a >> 23) & 1) ^ ((a >> 24) & 1) ^ ((a >> 25) & 1) ^ ((a >> 26) & 1) ^
981 ((a >> 27) & 1) ^ ((a >> 28) & 1) ^ ((a >> 29) & 1) ^ ((a >> 30) & 1) ^
983 uint8_t ecc_bit_6 = ((a >> 0) & 1) ^ ((a >> 1) & 1) ^ ((a >> 2) & 1) ^ ((a >> 4) & 1) ^
984 ((a >> 5) & 1) ^ ((a >> 7) & 1) ^ ((a >> 10) & 1) ^ ((a >> 11) & 1) ^
985 ((a >> 13) & 1) ^ ((a >> 16) & 1) ^ ((a >> 19) & 1) ^ ((a >> 21) & 1) ^
986 ((a >> 23) & 1) ^ ((a >> 27) & 1);
987 ecc_bits = (ecc_bit_6 << 6) | (ecc_bit_5 << 5) | (ecc_bit_4 << 4) | (ecc_bit_3 << 3) |
988 (ecc_bit_2 << 2) | (ecc_bit_1 << 1) | ecc_bit_0;
1003 uint8_t ecc_bits = 0;
1005 (((a >> 0) & 1) ^ ((a >> 1) & 1) ^ ((a >> 3) & 1) ^ ((a >> 4) & 1) ^ ((a >> 6) & 1) ^
1006 ((a >> 8) & 1) ^ ((a >> 10) & 1) ^ ((a >> 12) & 1) ^ ((a >> 14) & 1) ^ ((a >> 17) & 1) ^
1007 ((a >> 20) & 1) ^ ((a >> 22) & 1) ^ ((a >> 24) & 1) ^ ((a >> 27) & 1) ^ ((a >> 30) & 1) ^
1008 ((a >> 32) & 1) ^ ((a >> 36) & 1) ^ ((a >> 37) & 1) ^ ((a >> 38) & 1) ^ ((a >> 40) & 1) ^
1009 ((a >> 42) & 1) ^ ((a >> 45) & 1) ^ ((a >> 47) & 1) ^ ((a >> 51) & 1) ^ ((a >> 54) & 1) ^
1012 (((a >> 0) & 1) ^ ((a >> 2) & 1) ^ ((a >> 3) & 1) ^ ((a >> 5) & 1) ^ ((a >> 6) & 1) ^
1013 ((a >> 9) & 1) ^ ((a >> 11) & 1) ^ ((a >> 12) & 1) ^ ((a >> 15) & 1) ^ ((a >> 18) & 1) ^
1014 ((a >> 21) & 1) ^ ((a >> 22) & 1) ^ ((a >> 25) & 1) ^ ((a >> 28) & 1) ^ ((a >> 30) & 1) ^
1015 ((a >> 33) & 1) ^ ((a >> 37) & 1) ^ ((a >> 39) & 1) ^ ((a >> 40) & 1) ^ ((a >> 43) & 1) ^
1016 ((a >> 46) & 1) ^ ((a >> 47) & 1) ^ ((a >> 49) & 1) ^ ((a >> 52) & 1) ^ ((a >> 58) & 1) ^
1019 (((a >> 1) & 1) ^ ((a >> 2) & 1) ^ ((a >> 3) & 1) ^ ((a >> 7) & 1) ^ ((a >> 8) & 1) ^
1020 ((a >> 9) & 1) ^ ((a >> 13) & 1) ^ ((a >> 14) & 1) ^ ((a >> 15) & 1) ^ ((a >> 19) & 1) ^
1021 ((a >> 23) & 1) ^ ((a >> 24) & 1) ^ ((a >> 25) & 1) ^ ((a >> 29) & 1) ^ ((a >> 30) & 1) ^
1022 ((a >> 34) & 1) ^ ((a >> 41) & 1) ^ ((a >> 42) & 1) ^ ((a >> 43) & 1) ^ ((a >> 48) & 1) ^
1023 ((a >> 49) & 1) ^ ((a >> 53) & 1) ^ ((a >> 54) & 1) ^ ((a >> 59) & 1) ^ ((a >> 62) & 1) ^
1026 (((a >> 4) & 1) ^ ((a >> 5) & 1) ^ ((a >> 6) & 1) ^ ((a >> 7) & 1) ^ ((a >> 8) & 1) ^
1027 ((a >> 9) & 1) ^ ((a >> 16) & 1) ^ ((a >> 17) & 1) ^ ((a >> 18) & 1) ^ ((a >> 19) & 1) ^
1028 ((a >> 26) & 1) ^ ((a >> 27) & 1) ^ ((a >> 28) & 1) ^ ((a >> 29) & 1) ^ ((a >> 30) & 1) ^
1029 ((a >> 35) & 1) ^ ((a >> 36) & 1) ^ ((a >> 37) & 1) ^ ((a >> 44) & 1) ^ ((a >> 45) & 1) ^
1030 ((a >> 46) & 1) ^ ((a >> 47) & 1) ^ ((a >> 48) & 1) ^ ((a >> 49) & 1) ^ ((a >> 55) & 1) ^
1033 (((a >> 10) & 1) ^ ((a >> 11) & 1) ^ ((a >> 12) & 1) ^ ((a >> 13) & 1) ^ ((a >> 14) & 1) ^
1034 ((a >> 15) & 1) ^ ((a >> 16) & 1) ^ ((a >> 17) & 1) ^ ((a >> 18) & 1) ^ ((a >> 19) & 1) ^
1035 ((a >> 31) & 1) ^ ((a >> 32) & 1) ^ ((a >> 33) & 1) ^ ((a >> 34) & 1) ^ ((a >> 35) & 1) ^
1036 ((a >> 36) & 1) ^ ((a >> 37) & 1) ^ ((a >> 50) & 1) ^ ((a >> 51) & 1) ^ ((a >> 52) & 1) ^
1037 ((a >> 53) & 1) ^ ((a >> 54) & 1) ^ ((a >> 55) & 1) ^ ((a >> 61) & 1) ^ ((a >> 62) & 1) ^
1040 (((a >> 20) & 1) ^ ((a >> 21) & 1) ^ ((a >> 22) & 1) ^ ((a >> 23) & 1) ^ ((a >> 24) & 1) ^
1041 ((a >> 25) & 1) ^ ((a >> 26) & 1) ^ ((a >> 27) & 1) ^ ((a >> 28) & 1) ^ ((a >> 29) & 1) ^
1042 ((a >> 30) & 1) ^ ((a >> 31) & 1) ^ ((a >> 32) & 1) ^ ((a >> 33) & 1) ^ ((a >> 34) & 1) ^
1043 ((a >> 35) & 1) ^ ((a >> 36) & 1) ^ ((a >> 37) & 1) ^ ((a >> 56) & 1) ^ ((a >> 57) & 1) ^
1044 ((a >> 58) & 1) ^ ((a >> 59) & 1) ^ ((a >> 60) & 1) ^ ((a >> 61) & 1) ^ ((a >> 62) & 1) ^
1047 (((a >> 38) & 1) ^ ((a >> 39) & 1) ^ ((a >> 40) & 1) ^ ((a >> 41) & 1) ^ ((a >> 42) & 1) ^
1048 ((a >> 43) & 1) ^ ((a >> 44) & 1) ^ ((a >> 45) & 1) ^ ((a >> 46) & 1) ^ ((a >> 47) & 1) ^
1049 ((a >> 48) & 1) ^ ((a >> 49) & 1) ^ ((a >> 50) & 1) ^ ((a >> 51) & 1) ^ ((a >> 52) & 1) ^
1050 ((a >> 53) & 1) ^ ((a >> 54) & 1) ^ ((a >> 55) & 1) ^ ((a >> 56) & 1) ^ ((a >> 57) & 1) ^
1051 ((a >> 58) & 1) ^ ((a >> 59) & 1) ^ ((a >> 60) & 1) ^ ((a >> 61) & 1) ^ ((a >> 62) & 1) ^
1054 (((a >> 0) & 1) ^ ((a >> 1) & 1) ^ ((a >> 2) & 1) ^ ((a >> 4) & 1) ^ ((a >> 5) & 1) ^
1055 ((a >> 7) & 1) ^ ((a >> 10) & 1) ^ ((a >> 11) & 1) ^ ((a >> 13) & 1) ^ ((a >> 16) & 1) ^
1056 ((a >> 20) & 1) ^ ((a >> 21) & 1) ^ ((a >> 23) & 1) ^ ((a >> 26) & 1) ^ ((a >> 31) & 1) ^
1057 ((a >> 36) & 1) ^ ((a >> 38) & 1) ^ ((a >> 39) & 1) ^ ((a >> 41) & 1) ^ ((a >> 44) & 1) ^
1058 ((a >> 47) & 1) ^ ((a >> 49) & 1) ^ ((a >> 50) & 1) ^ ((a >> 54) & 1) ^ ((a >> 56) & 1) ^
1060 ecc_bits = (ecc_bit_7 << 7) | (ecc_bit_6 << 6) | (ecc_bit_5 << 5) | (ecc_bit_4 << 4) |
1061 (ecc_bit_3 << 3) | (ecc_bit_2 << 2) | (ecc_bit_1 << 1) | ecc_bit_0;
__STATIC_FORCEINLINE void __SW(volatile void *addr, uint32_t val)
Write 32bit value to address (32 bit)
__STATIC_FORCEINLINE uint32_t __LW(volatile void *addr)
Load 32bit value from address (32 bit)
#define MILM_CTL_ILM_ECC_EN
#define MCACHE_CTL_DC_ECC_CHK_EN
#define MDLM_CTL_DLM_ECC_CHK_EN
#define MECC_CODE_SRAMID_TLB
#define MECC_CODE_RAMID_TLB
#define MECC_CODE_RAMID_DLM
#define MECC_CODE_SRAMID_ILM
#define MCACHE_CTL_DC_ECC_EN
#define MILM_CTL_ILM_ECC_EXCP_EN
#define MECC_CODE_RAMID_DC
#define MCACHE_CTL_IC_DRAM_ECC_INJ_EN
#define MILM_CTL_ILM_ECC_CHK_EN
#define MECC_CODE_SRAMID_IC
#define MECC_CODE_RAMID_ILM
#define MCACHE_CTL_IC_ECC_EXCP_EN
#define MCACHE_CTL_IC_ECC_CHK_EN
#define MCACHE_CTL_DC_TRAM_ECC_INJ_EN
#define MECC_CODE_SRAMID_DC
#define MCACHE_CTL_DC_ECC_EXCP_EN
#define MECC_CODE_RAMID_IC
#define MDLM_CTL_DLM_ECC_INJ_EN
#define MCACHE_CTL_DC_DRAM_ECC_INJ_EN
#define MCACHE_CTL_IC_ECC_EN
#define MECC_CODE_SRAMID_DLM
#define MDLM_CTL_DLM_ECC_EXCP_EN
#define MILM_CTL_ILM_ECC_INJ_EN
#define MDLM_CTL_DLM_ECC_EN
#define MCACHE_CTL_IC_TRAM_ECC_INJ_EN
#define __RV_CSR_CLEAR(csr, val)
CSR operation Macro for csrc instruction.
#define __RV_CSR_READ(csr)
CSR operation Macro for csrr instruction.
#define __RWMB()
Read & Write Memory barrier.
#define __RV_CSR_WRITE(csr, val)
CSR operation Macro for csrw instruction.
#define __RV_CSR_SET(csr, val)
CSR operation Macro for csrs instruction.
#define __STATIC_FORCEINLINE
Define a static function that should be always inlined by the compiler.
__STATIC_INLINE void MFlushInvalDCacheLine(unsigned long addr)
Flush and invalidate one D-Cache line specified by address in M-Mode.
__STATIC_INLINE unsigned long MLockDCacheLine(unsigned long addr)
Lock one D-Cache line specified by address in M-Mode.
__STATIC_FORCEINLINE void ECC_EnableDCacheECCCheck(void)
Enable ECC checking for D-Cache.
__STATIC_FORCEINLINE void ECC_DisableILM(void)
Disable ILM.
static uint8_t ECC_GenerateECCCodeU64(uint64_t a)
Generate ECC code for a 64-bit value.
__STATIC_FORCEINLINE int32_t ECC_IsICacheSupportECC(void)
Check if I-Cache supports ECC.
__STATIC_FORCEINLINE void ECC_ICacheDRamErrInject(uint32_t ecc_code, void *addr)
Inject error into I-Cache Data RAM.
__STATIC_FORCEINLINE void ECC_DCacheDRamErrInject(uint32_t ecc_code, void *addr)
Inject error into D-Cache Data RAM.
__STATIC_FORCEINLINE void ECC_ICacheErrRestore(void *addr)
Restore I-Cache error at specified address.
__STATIC_FORCEINLINE int32_t ECC_IsICacheDoubleBitErrorOccured(void)
Check if I-Cache double-bit error has occurred.
__STATIC_FORCEINLINE void ECC_EnableICacheECCCheck(void)
Enable ECC checking for I-Cache.
__STATIC_FORCEINLINE void ECC_DisableILMECCExcp(void)
Disable ECC exception for ILM.
__STATIC_FORCEINLINE void ECC_DisableDLMECCCheck(void)
Disable ECC checking for DLM.
__STATIC_FORCEINLINE void ECC_ClearAllDoubleBitError(void)
Clear all double-bit errors.
__STATIC_FORCEINLINE void ECC_DisableILMECC(void)
Disable ECC for ILM.
static uint8_t ECC_GenerateECCCodeU32(uint32_t a)
Generate ECC code for a 32-bit value.
__STATIC_FORCEINLINE int32_t ECC_IsILMDoubleBitErrorOccured(void)
Check if ILM double-bit error has occurred.
__STATIC_FORCEINLINE void ECC_ClearDLMDoubleBitError(void)
Clear DLM double-bit error.
__STATIC_FORCEINLINE void ECC_DisableICacheECC(void)
Disable ECC for I-Cache.
__STATIC_FORCEINLINE void ECC_DisableDLM(void)
Disable DLM.
__STATIC_FORCEINLINE void ECC_DisableILMECCCheck(void)
Disable ECC checking for ILM.
__STATIC_FORCEINLINE void ECC_DisableDCacheECCCheck(void)
Disable ECC checking for D-Cache.
__STATIC_FORCEINLINE void ECC_ClearDCacheSingleBitError(void)
Clear D-Cache single-bit error.
__STATIC_FORCEINLINE void ECC_EnableDLMECCExcp(void)
Enable ECC exception for DLM.
__STATIC_FORCEINLINE void ECC_ClearILMDoubleBitError(void)
Clear ILM double-bit error.
__STATIC_FORCEINLINE int32_t ECC_IsDCacheSupportECC(void)
Check if D-Cache supports ECC.
__STATIC_FORCEINLINE void ECC_ILMErrRestore(void *addr)
Restore ILM error at specified address.
__STATIC_FORCEINLINE int32_t ECC_IsDLMSupportECC(void)
Check if DLM supports ECC.
__STATIC_FORCEINLINE int32_t ECC_IsDCacheSingleBitErrorOccured(void)
Check if D-Cache single-bit error has occurred.
#define ECC_ERROR_RAMID_MASK_ILM
__STATIC_FORCEINLINE void ECC_ClearICacheDoubleBitError(void)
Clear I-Cache double-bit error.
__STATIC_FORCEINLINE void ECC_EnableDCacheECCExcp(void)
Enable ECC exception for D-Cache.
__STATIC_FORCEINLINE int32_t ECC_IsGlobalSupportECC(void)
Check if the core globally supports ECC.
__STATIC_FORCEINLINE void ECC_EnableILMECCExcp(void)
Enable ECC exception for ILM.
__STATIC_FORCEINLINE void ECC_EnableILMECCCheck(void)
Enable ECC checking for ILM.
__STATIC_FORCEINLINE int32_t ECC_IsAnyDoubleBitErrorOccured(void)
Check if any double-bit error has occurred.
__STATIC_FORCEINLINE void ECC_DisableDCacheECC(void)
Disable ECC for D-Cache.
__STATIC_FORCEINLINE void ECC_EnableDCacheECC(void)
Enable ECC for D-Cache.
__STATIC_FORCEINLINE void ECC_DCacheTRamErrInject(uint32_t ecc_code, void *addr)
Inject error into D-Cache Tag RAM.
__STATIC_FORCEINLINE void ECC_ClearICacheSingleBitError(void)
Clear I-Cache single-bit error.
__STATIC_FORCEINLINE void ECC_EnableDLMECCCheck(void)
Enable ECC checking for DLM.
__STATIC_FORCEINLINE void ECC_DisableDCacheECCExcp(void)
Disable ECC exception for D-Cache.
__STATIC_FORCEINLINE void ECC_ClearTLBDoubleBitError(void)
Clear TLB double-bit error.
__STATIC_FORCEINLINE void ECC_DisableICacheECCCheck(void)
Disable ECC checking for I-Cache.
__STATIC_FORCEINLINE int32_t ECC_IsTLBSupportECC(void)
Check if TLB supports ECC.
__STATIC_FORCEINLINE void ECC_ClearAllSingleBitError(void)
Clear all single-bit errors.
__STATIC_FORCEINLINE void ECC_ClearTLBSingleBitError(void)
Clear TLB single-bit error.
__STATIC_FORCEINLINE int32_t ECC_IsILMSingleBitErrorOccured(void)
Check if ILM single-bit error has occurred.
__STATIC_FORCEINLINE void ECC_DisableICacheECCExcp(void)
Disable ECC exception for I-Cache.
__STATIC_FORCEINLINE int32_t ECC_IsTLBSingleBitErrorOccured(void)
Check if TLB single-bit error has occurred.
__STATIC_FORCEINLINE void ECC_EnableDLMECC(void)
Enable ECC for DLM.
__STATIC_FORCEINLINE void ECC_ClearILMSingleBitError(void)
Clear ILM single-bit error.
__STATIC_FORCEINLINE int32_t ECC_IsXorErrorInjectMode(void)
Check if XOR error injection mode is supported.
__STATIC_FORCEINLINE void ECC_DisableDLMECCExcp(void)
Disable ECC exception for DLM.
__STATIC_FORCEINLINE int32_t ECC_IsDLMSingleBitErrorOccured(void)
Check if DLM single-bit error has occurred.
__STATIC_FORCEINLINE void ECC_EnableICacheECCExcp(void)
Enable ECC exception for I-Cache.
__STATIC_FORCEINLINE void ECC_ClearDLMSingleBitError(void)
Clear DLM single-bit error.
__STATIC_FORCEINLINE void ECC_EnableDLM(void)
Enable DLM.
__STATIC_FORCEINLINE void ECC_DLMErrInject(uint32_t ecc_code, void *addr)
Inject error into DLM.
__STATIC_FORCEINLINE void ECC_ClearDCacheDoubleBitError(void)
Clear D-Cache double-bit error.
__STATIC_FORCEINLINE void ECC_DLMErrRestore(void *addr)
Restore DLM error at specified address.
__STATIC_FORCEINLINE int32_t ECC_IsAnySingleBitErrorOccured(void)
Check if any single-bit error has occurred.
__STATIC_FORCEINLINE int32_t ECC_IsICacheSingleBitErrorOccured(void)
Check if I-Cache single-bit error has occurred.
__STATIC_FORCEINLINE int32_t ECC_IsDLMDoubleBitErrorOccured(void)
Check if DLM double-bit error has occurred.
__STATIC_FORCEINLINE void ECC_EnableILM(void)
Enable ILM.
#define ECC_ERROR_RAMID_MASK_DLM
__STATIC_FORCEINLINE void ECC_DCacheErrRestore(void *addr)
Restore D-Cache error at specified address.
#define ECC_ERROR_RAMID_MASK_DCACHE
__STATIC_FORCEINLINE void ECC_DisableDLMECC(void)
Disable ECC for DLM.
__STATIC_FORCEINLINE int32_t ECC_IsTLBDoubleBitErrorOccured(void)
Check if TLB double-bit error has occurred.
__STATIC_FORCEINLINE void ECC_EnableICacheECC(void)
Enable ECC for I-Cache.
__STATIC_FORCEINLINE int32_t ECC_IsDCacheDoubleBitErrorOccured(void)
Check if D-Cache double-bit error has occurred.
__STATIC_FORCEINLINE int32_t ECC_IsILMSupportECC(void)
Check if ILM supports ECC.
__STATIC_FORCEINLINE void ECC_ICacheTRamErrInject(uint32_t ecc_code, void *addr)
Inject error into I-Cache Tag RAM.
__STATIC_FORCEINLINE void ECC_EnableILMECC(void)
Enable ECC for ILM.
__STATIC_FORCEINLINE void ECC_ILMErrInject(uint32_t ecc_code, void *addr)
Inject error into ILM.
#define ECC_ERROR_RAMID_MASK_ICACHE
__STATIC_INLINE unsigned long MLockICacheLine(unsigned long addr)
Lock one I-Cache line specified by address in M-Mode.
__STATIC_INLINE void MInvalICacheLine(unsigned long addr)
Invalidate one I-Cache line specified by address in M-Mode.
Union type to access MCFG_INFO CSR register.
rv_csr_t icache
bit: 9 ICache present
struct CSR_MCFGINFO_Type::@14 b
Structure used for bit access.
rv_csr_t d
Type used for csr data access.
rv_csr_t ecc
bit: 1 ECC present
rv_csr_t plic
bit: 3 PLIC present
rv_csr_t ilm
bit: 7 ILM present
rv_csr_t dcache
bit: 10 DCache present
rv_csr_t dlm
bit: 8 DLM present
Union type to access MDCFG_INFO CSR register.
rv_csr_t lm_ecc
bit: 21 DLM ECC present
struct CSR_MDCFGINFO_Type::@16 b
Structure used for bit access.
rv_csr_t d
Type used for csr data access.
rv_csr_t ecc
bit: 10 D-Cache ECC support
Union type to access MECC_CODE CSR register.
rv_csr_t ramid
bit: 16..20 The ID of RAM that has 2bit ECC error, software can clear these bits
rv_csr_t ecc_inj_mode
bit: 31 ECC injection mode
rv_csr_t d
Type used for csr data access.
struct CSR_MECCCODE_Type::@22 b
Structure used for bit access.
rv_csr_t sramid
bit: 24..28 The ID of RAM that has 1bit ECC error, software can clear these bits
Union type to access MICFG_INFO CSR register.
rv_csr_t d
Type used for csr data access.
rv_csr_t lm_ecc
bit: 22 ILM ECC support
rv_csr_t ecc
bit: 10 I-Cache ECC support
struct CSR_MICFGINFO_Type::@15 b
Structure used for bit access.
Union type to access MTLBCFG_INFO CSR register.
rv_csr_t d
Type used for csr data access.
struct CSR_MTLBCFGINFO_Type::@17 b
Structure used for bit access.
rv_csr_t ecc
bit: 10 Main TLB supports ECC or not