NMSIS-Core  Version 1.6.0
NMSIS-Core support for Nuclei processor-based devices
core_feature_ecc.h
1 /*
2  * Copyright (c) 2019 Nuclei Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Licensed under the Apache License, Version 2.0 (the License); you may
7  * not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  */
16 #ifndef __CORE_FEATURE_ECC_H__
17 #define __CORE_FEATURE_ECC_H__
18 
22 /*
23  * ECC Feature Configuration Macro:
24  *
25  * 1. __ECC_PRESENT: Define whether Error Correction Code (ECC) feature is present or not
26  * * 0: Not present
27  * * 1: Present
28  * 2. __ICACHE_PRESENT: Define whether I-Cache Unit is present or not.
29  * * 0: Not present
30  * * 1: Present
31  * 3. __DCACHE_PRESENT: Define whether D-Cache Unit is present or not.
32  * * 0: Not present
33  * * 1: Present
34  * 4. __CCM_PRESENT: Define whether Nuclei Cache Control and Maintenance(CCM) Unit is present or not.
35  * * 0: Not present
36  * * 1: Present
37  *
38  */
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 #include "core_feature_base.h"
44 
45 #if defined(__ECC_PRESENT) && (__ECC_PRESENT == 1)
46 
74 {
75  CSR_MCFGINFO_Type mcfginfo;
76  mcfginfo.d = __RV_CSR_READ(CSR_MCFG_INFO);
77  return mcfginfo.b.ecc;
78 }
79 
87 {
88  CSR_MCFGINFO_Type mcfginfo;
89  CSR_MICFGINFO_Type micfginfo;
90  mcfginfo.d = __RV_CSR_READ(CSR_MCFG_INFO);
91  micfginfo.d = __RV_CSR_READ(CSR_MICFG_INFO);
92  return mcfginfo.b.icache && micfginfo.b.ecc;
93 }
94 
102 {
103  CSR_MCFGINFO_Type mcfginfo;
104  CSR_MDCFGINFO_Type mdcfginfo;
105  mcfginfo.d = __RV_CSR_READ(CSR_MCFG_INFO);
106  mdcfginfo.d = __RV_CSR_READ(CSR_MDCFG_INFO);
107  return mcfginfo.b.dcache && mdcfginfo.b.ecc;
108 }
109 
117 {
118  CSR_MTLBCFGINFO_Type mtlbcfginfo;
119  mtlbcfginfo.d = __RV_CSR_READ(CSR_MTLBCFG_INFO);
120  return mtlbcfginfo.b.ecc;
121 }
122 
130 {
131  CSR_MCFGINFO_Type mcfginfo;
132  CSR_MICFGINFO_Type micfginfo;
133  mcfginfo.d = __RV_CSR_READ(CSR_MCFG_INFO);
134  micfginfo.d = __RV_CSR_READ(CSR_MICFG_INFO);
135  return mcfginfo.b.ilm && micfginfo.b.lm_ecc;
136 }
137 
145 {
146  CSR_MCFGINFO_Type mcfginfo;
147  CSR_MDCFGINFO_Type mdcfginfo;
148  mcfginfo.d = __RV_CSR_READ(CSR_MCFG_INFO);
149  mdcfginfo.d = __RV_CSR_READ(CSR_MDCFG_INFO);
150  return mcfginfo.b.dlm && mdcfginfo.b.lm_ecc;
151 }
152 
160 {
161  CSR_MECC_CODE_Type mecc_code;
162  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
163  return mecc_code.b.ecc_inj_mode;
164 }
165 
173 {
175 }
176 
184 {
186 }
187 
195 {
197 }
198 
206 {
208 }
209 
217 {
219 }
220 
228 {
230 }
231 
239 {
241 }
242 
250 {
252 }
253 
261 {
263 }
264 
272 {
274 }
275 
283 {
285 }
286 
294 {
296 }
297 
298 #if defined(__CCM_PRESENT) && (__CCM_PRESENT == 1)
299 #if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1)
300 
308 __STATIC_FORCEINLINE void ECC_ICacheTRamErrInject(uint32_t ecc_code, void *addr)
309 {
310  /* Write ecc_code into mecc_code csr also clear all error status */
311  __RV_CSR_WRITE(CSR_MECC_CODE, ecc_code);
312  MInvalICacheLine((unsigned long)addr);
313  __RWMB();
315  MLockICacheLine((unsigned long)addr);
317  __RWMB();
318 }
319 
328 __STATIC_FORCEINLINE void ECC_ICacheDRamErrInject(uint32_t ecc_code, void *addr)
329 {
330  /* Write ecc_code into mecc_code csr also clear all error status */
331  __RV_CSR_WRITE(CSR_MECC_CODE, ecc_code);
332  MInvalICacheLine((unsigned long)addr);
333  __RWMB();
335  MLockICacheLine((unsigned long)addr);
337  __RWMB();
338 }
339 
347 {
348  /* Re-lock cache to restore the correct ecc code */
349  MInvalICacheLine((unsigned long)addr);
350  MLockICacheLine((unsigned long)addr);
351 }
352 #endif /* #if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1) */
353 
354 #if defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1)
355 
363 __STATIC_FORCEINLINE void ECC_DCacheTRamErrInject(uint32_t ecc_code, void *addr)
364 {
365  /* Write ecc_code into mecc_code csr also clear all error status */
366  __RV_CSR_WRITE(CSR_MECC_CODE, ecc_code);
368  MFlushInvalDCacheLine((unsigned long)addr);
369  __RWMB();
371  __LW(addr);
372  __RWMB();
374  __RWMB();
376 }
377 
386 __STATIC_FORCEINLINE void ECC_DCacheDRamErrInject(uint32_t ecc_code, void *addr)
387 {
388  /* Write ecc_code into mecc_code csr also clear all error status */
389  __RV_CSR_WRITE(CSR_MECC_CODE, ecc_code);
391  MFlushInvalDCacheLine((unsigned long)addr);
392  __RWMB();
394  __LW(addr);
395  __RWMB();
397  __RWMB();
399 }
400 
408 {
410  MFlushInvalDCacheLine((unsigned long)addr);
411  MLockDCacheLine((unsigned long)addr);
413 }
414 #endif /* #if defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1) */
415 #endif /* #if defined(__CCM_PRESENT) && (__CCM_PRESENT == 1) */
416 
423 {
425 }
426 
433 {
435 }
436 
443 {
445 }
446 
453 {
455 }
456 
463 {
465 }
466 
473 {
475 }
476 
483 {
485 }
486 
493 {
495 }
496 
504 __STATIC_FORCEINLINE void ECC_ILMErrInject(uint32_t ecc_code, void *addr)
505 {
506  /* Write ecc_code into mecc_code csr also clear all error status */
507  __RV_CSR_WRITE(CSR_MECC_CODE, ecc_code);
509  uint32_t val = __LW(addr);
510  __RWMB(); // make sure setting the ECC_INJ_EN bit before any other memory access
512  __SW(addr, val);
513  __RWMB(); // make sure the error injection is finished
515  __RWMB(); // make sure clearing the ECC_INJ_EN bit before any other memory access
517 }
518 
526 {
528  __RWMB();
529  __SW(addr, __LW(addr));
530  __RWMB();
532 }
533 
540 {
542 }
543 
550 {
552 }
553 
560 {
562 }
563 
570 {
572 }
573 
580 {
582 }
583 
590 {
592 }
593 
600 {
602 }
603 
610 {
612 }
613 
621 __STATIC_FORCEINLINE void ECC_DLMErrInject(uint32_t ecc_code, void *addr)
622 {
623  /* Write ecc_code into mecc_code csr also clear all error status */
624  __RV_CSR_WRITE(CSR_MECC_CODE, ecc_code);
626  uint32_t val = __LW(addr);
627  __RWMB(); // make sure setting the ECC_INJ_EN bit before any other memory access
629  __SW(addr, val);
630  __RWMB(); // make sure the error injection is finished
632  __RWMB(); // make sure clearing the ECC_INJ_EN bit before any other memory access
634 }
635 
643 {
645  __RWMB();
646  __SW(addr, __LW(addr));
647  __RWMB();
649 }
650 
651 #define ECC_ERROR_RAMID_MASK_ICACHE 1U
652 #define ECC_ERROR_RAMID_MASK_DCACHE 2U
653 #define ECC_ERROR_RAMID_MASK_TLB 4U
654 #define ECC_ERROR_RAMID_MASK_ILM 8U
655 #define ECC_ERROR_RAMID_MASK_DLM 16U
656 
664 {
665  CSR_MECC_CODE_Type mecc_code;
666  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
667  return mecc_code.b.sramid;
668 }
669 
677 {
678  CSR_MECC_CODE_Type mecc_code;
679  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
680  return mecc_code.b.sramid & ECC_ERROR_RAMID_MASK_ICACHE;
681 }
682 
690 {
691  CSR_MECC_CODE_Type mecc_code;
692  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
693  return mecc_code.b.sramid & ECC_ERROR_RAMID_MASK_DCACHE;
694 }
695 
703 {
704  CSR_MECC_CODE_Type mecc_code;
705  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
706  return mecc_code.b.sramid & ECC_ERROR_RAMID_MASK_TLB;
707 }
708 
716 {
717  CSR_MECC_CODE_Type mecc_code;
718  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
719  return mecc_code.b.sramid & ECC_ERROR_RAMID_MASK_ILM;
720 }
721 
729 {
730  CSR_MECC_CODE_Type mecc_code;
731  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
732  return mecc_code.b.sramid & ECC_ERROR_RAMID_MASK_DLM;
733 }
734 
742 {
744 }
745 
753 {
755 }
756 
764 {
766 }
767 
775 {
777 }
778 
786 {
788 }
789 
797 {
799 }
800 
808 {
809  CSR_MECC_CODE_Type mecc_code;
810  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
811  return mecc_code.b.ramid;
812 }
813 
821 {
822  CSR_MECC_CODE_Type mecc_code;
823  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
824  return mecc_code.b.ramid & ECC_ERROR_RAMID_MASK_ICACHE;
825 }
826 
834 {
835  CSR_MECC_CODE_Type mecc_code;
836  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
837  return mecc_code.b.ramid & ECC_ERROR_RAMID_MASK_DCACHE;
838 }
839 
847 {
848  CSR_MECC_CODE_Type mecc_code;
849  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
850  return mecc_code.b.ramid & ECC_ERROR_RAMID_MASK_TLB;
851 }
852 
860 {
861  CSR_MECC_CODE_Type mecc_code;
862  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
863  return mecc_code.b.ramid & ECC_ERROR_RAMID_MASK_ILM;
864 }
865 
873 {
874  CSR_MECC_CODE_Type mecc_code;
875  mecc_code.d = __RV_CSR_READ(CSR_MECC_CODE);
876  return mecc_code.b.ramid & ECC_ERROR_RAMID_MASK_DLM;
877 }
878 
886 {
888 }
889 
897 {
899 }
900 
908 {
910 }
911 
919 {
921 }
922 
930 {
932 }
933 
941 {
943 }
944 
954 static uint8_t ECC_GenerateECCCodeU32(uint32_t a)
955 {
956  uint8_t ecc_bits = 0;
957  uint8_t ecc_bit_0 = ((a >> 0) & 1) ^ ((a >> 1) & 1) ^ ((a >> 3) & 1) ^ ((a >> 4) & 1) ^
958  ((a >> 6) & 1) ^ ((a >> 8) & 1) ^ ((a >> 10) & 1) ^ ((a >> 12) & 1) ^
959  ((a >> 14) & 1) ^ ((a >> 17) & 1) ^ ((a >> 19) & 1) ^ ((a >> 20) & 1) ^
960  ((a >> 24) & 1) ^ ((a >> 28) & 1);
961  uint8_t ecc_bit_1 = ((a >> 0) & 1) ^ ((a >> 2) & 1) ^ ((a >> 3) & 1) ^ ((a >> 5) & 1) ^
962  ((a >> 6) & 1) ^ ((a >> 9) & 1) ^ ((a >> 11) & 1) ^ ((a >> 12) & 1) ^
963  ((a >> 15) & 1) ^ ((a >> 20) & 1) ^ ((a >> 22) & 1) ^ ((a >> 25) & 1) ^
964  ((a >> 29) & 1);
965  uint8_t ecc_bit_2 = ((a >> 1) & 1) ^ ((a >> 2) & 1) ^ ((a >> 3) & 1) ^ ((a >> 7) & 1) ^
966  ((a >> 8) & 1) ^ ((a >> 9) & 1) ^ ((a >> 13) & 1) ^ ((a >> 14) & 1) ^
967  ((a >> 15) & 1) ^ ((a >> 18) & 1) ^ ((a >> 21) & 1) ^ ((a >> 22) & 1) ^
968  ((a >> 26) & 1) ^ ((a >> 30) & 1);
969  uint8_t ecc_bit_3 = ((a >> 4) & 1) ^ ((a >> 5) & 1) ^ ((a >> 6) & 1) ^ ((a >> 7) & 1) ^
970  ((a >> 8) & 1) ^ ((a >> 9) & 1) ^ ((a >> 16) & 1) ^ ((a >> 17) & 1) ^
971  ((a >> 18) & 1) ^ ((a >> 23) & 1) ^ ((a >> 24) & 1) ^ ((a >> 25) & 1) ^
972  ((a >> 26) & 1) ^ ((a >> 31) & 1);
973  uint8_t ecc_bit_4 = ((a >> 10) & 1) ^ ((a >> 11) & 1) ^ ((a >> 12) & 1) ^ ((a >> 13) & 1) ^
974  ((a >> 14) & 1) ^ ((a >> 15) & 1) ^ ((a >> 16) & 1) ^ ((a >> 17) & 1) ^
975  ((a >> 18) & 1) ^ ((a >> 27) & 1) ^ ((a >> 28) & 1) ^ ((a >> 29) & 1) ^
976  ((a >> 30) & 1) ^ ((a >> 31) & 1);
977  uint8_t ecc_bit_5 = ((a >> 19) & 1) ^ ((a >> 20) & 1) ^ ((a >> 21) & 1) ^ ((a >> 22) & 1) ^
978  ((a >> 23) & 1) ^ ((a >> 24) & 1) ^ ((a >> 25) & 1) ^ ((a >> 26) & 1) ^
979  ((a >> 27) & 1) ^ ((a >> 28) & 1) ^ ((a >> 29) & 1) ^ ((a >> 30) & 1) ^
980  ((a >> 31) & 1);
981  uint8_t ecc_bit_6 = ((a >> 0) & 1) ^ ((a >> 1) & 1) ^ ((a >> 2) & 1) ^ ((a >> 4) & 1) ^
982  ((a >> 5) & 1) ^ ((a >> 7) & 1) ^ ((a >> 10) & 1) ^ ((a >> 11) & 1) ^
983  ((a >> 13) & 1) ^ ((a >> 16) & 1) ^ ((a >> 19) & 1) ^ ((a >> 21) & 1) ^
984  ((a >> 23) & 1) ^ ((a >> 27) & 1);
985  ecc_bits = (ecc_bit_6 << 6) | (ecc_bit_5 << 5) | (ecc_bit_4 << 4) | (ecc_bit_3 << 3) |
986  (ecc_bit_2 << 2) | (ecc_bit_1 << 1) | ecc_bit_0;
987  return ecc_bits;
988 }
989 
999 static uint8_t ECC_GenerateECCCodeU64(uint64_t a)
1000 {
1001  uint8_t ecc_bits = 0;
1002  uint8_t ecc_bit_0 =
1003  (((a >> 0) & 1) ^ ((a >> 1) & 1) ^ ((a >> 3) & 1) ^ ((a >> 4) & 1) ^ ((a >> 6) & 1) ^
1004  ((a >> 8) & 1) ^ ((a >> 10) & 1) ^ ((a >> 12) & 1) ^ ((a >> 14) & 1) ^ ((a >> 17) & 1) ^
1005  ((a >> 20) & 1) ^ ((a >> 22) & 1) ^ ((a >> 24) & 1) ^ ((a >> 27) & 1) ^ ((a >> 30) & 1) ^
1006  ((a >> 32) & 1) ^ ((a >> 36) & 1) ^ ((a >> 37) & 1) ^ ((a >> 38) & 1) ^ ((a >> 40) & 1) ^
1007  ((a >> 42) & 1) ^ ((a >> 45) & 1) ^ ((a >> 47) & 1) ^ ((a >> 51) & 1) ^ ((a >> 54) & 1) ^
1008  ((a >> 57) & 1));
1009  uint8_t ecc_bit_1 =
1010  (((a >> 0) & 1) ^ ((a >> 2) & 1) ^ ((a >> 3) & 1) ^ ((a >> 5) & 1) ^ ((a >> 6) & 1) ^
1011  ((a >> 9) & 1) ^ ((a >> 11) & 1) ^ ((a >> 12) & 1) ^ ((a >> 15) & 1) ^ ((a >> 18) & 1) ^
1012  ((a >> 21) & 1) ^ ((a >> 22) & 1) ^ ((a >> 25) & 1) ^ ((a >> 28) & 1) ^ ((a >> 30) & 1) ^
1013  ((a >> 33) & 1) ^ ((a >> 37) & 1) ^ ((a >> 39) & 1) ^ ((a >> 40) & 1) ^ ((a >> 43) & 1) ^
1014  ((a >> 46) & 1) ^ ((a >> 47) & 1) ^ ((a >> 49) & 1) ^ ((a >> 52) & 1) ^ ((a >> 58) & 1) ^
1015  ((a >> 63) & 1));
1016  uint8_t ecc_bit_2 =
1017  (((a >> 1) & 1) ^ ((a >> 2) & 1) ^ ((a >> 3) & 1) ^ ((a >> 7) & 1) ^ ((a >> 8) & 1) ^
1018  ((a >> 9) & 1) ^ ((a >> 13) & 1) ^ ((a >> 14) & 1) ^ ((a >> 15) & 1) ^ ((a >> 19) & 1) ^
1019  ((a >> 23) & 1) ^ ((a >> 24) & 1) ^ ((a >> 25) & 1) ^ ((a >> 29) & 1) ^ ((a >> 30) & 1) ^
1020  ((a >> 34) & 1) ^ ((a >> 41) & 1) ^ ((a >> 42) & 1) ^ ((a >> 43) & 1) ^ ((a >> 48) & 1) ^
1021  ((a >> 49) & 1) ^ ((a >> 53) & 1) ^ ((a >> 54) & 1) ^ ((a >> 59) & 1) ^ ((a >> 62) & 1) ^
1022  ((a >> 63) & 1));
1023  uint8_t ecc_bit_3 =
1024  (((a >> 4) & 1) ^ ((a >> 5) & 1) ^ ((a >> 6) & 1) ^ ((a >> 7) & 1) ^ ((a >> 8) & 1) ^
1025  ((a >> 9) & 1) ^ ((a >> 16) & 1) ^ ((a >> 17) & 1) ^ ((a >> 18) & 1) ^ ((a >> 19) & 1) ^
1026  ((a >> 26) & 1) ^ ((a >> 27) & 1) ^ ((a >> 28) & 1) ^ ((a >> 29) & 1) ^ ((a >> 30) & 1) ^
1027  ((a >> 35) & 1) ^ ((a >> 36) & 1) ^ ((a >> 37) & 1) ^ ((a >> 44) & 1) ^ ((a >> 45) & 1) ^
1028  ((a >> 46) & 1) ^ ((a >> 47) & 1) ^ ((a >> 48) & 1) ^ ((a >> 49) & 1) ^ ((a >> 55) & 1) ^
1029  ((a >> 60) & 1));
1030  uint8_t ecc_bit_4 =
1031  (((a >> 10) & 1) ^ ((a >> 11) & 1) ^ ((a >> 12) & 1) ^ ((a >> 13) & 1) ^ ((a >> 14) & 1) ^
1032  ((a >> 15) & 1) ^ ((a >> 16) & 1) ^ ((a >> 17) & 1) ^ ((a >> 18) & 1) ^ ((a >> 19) & 1) ^
1033  ((a >> 31) & 1) ^ ((a >> 32) & 1) ^ ((a >> 33) & 1) ^ ((a >> 34) & 1) ^ ((a >> 35) & 1) ^
1034  ((a >> 36) & 1) ^ ((a >> 37) & 1) ^ ((a >> 50) & 1) ^ ((a >> 51) & 1) ^ ((a >> 52) & 1) ^
1035  ((a >> 53) & 1) ^ ((a >> 54) & 1) ^ ((a >> 55) & 1) ^ ((a >> 61) & 1) ^ ((a >> 62) & 1) ^
1036  ((a >> 63) & 1));
1037  uint8_t ecc_bit_5 =
1038  (((a >> 20) & 1) ^ ((a >> 21) & 1) ^ ((a >> 22) & 1) ^ ((a >> 23) & 1) ^ ((a >> 24) & 1) ^
1039  ((a >> 25) & 1) ^ ((a >> 26) & 1) ^ ((a >> 27) & 1) ^ ((a >> 28) & 1) ^ ((a >> 29) & 1) ^
1040  ((a >> 30) & 1) ^ ((a >> 31) & 1) ^ ((a >> 32) & 1) ^ ((a >> 33) & 1) ^ ((a >> 34) & 1) ^
1041  ((a >> 35) & 1) ^ ((a >> 36) & 1) ^ ((a >> 37) & 1) ^ ((a >> 56) & 1) ^ ((a >> 57) & 1) ^
1042  ((a >> 58) & 1) ^ ((a >> 59) & 1) ^ ((a >> 60) & 1) ^ ((a >> 61) & 1) ^ ((a >> 62) & 1) ^
1043  ((a >> 63) & 1));
1044  uint8_t ecc_bit_6 =
1045  (((a >> 38) & 1) ^ ((a >> 39) & 1) ^ ((a >> 40) & 1) ^ ((a >> 41) & 1) ^ ((a >> 42) & 1) ^
1046  ((a >> 43) & 1) ^ ((a >> 44) & 1) ^ ((a >> 45) & 1) ^ ((a >> 46) & 1) ^ ((a >> 47) & 1) ^
1047  ((a >> 48) & 1) ^ ((a >> 49) & 1) ^ ((a >> 50) & 1) ^ ((a >> 51) & 1) ^ ((a >> 52) & 1) ^
1048  ((a >> 53) & 1) ^ ((a >> 54) & 1) ^ ((a >> 55) & 1) ^ ((a >> 56) & 1) ^ ((a >> 57) & 1) ^
1049  ((a >> 58) & 1) ^ ((a >> 59) & 1) ^ ((a >> 60) & 1) ^ ((a >> 61) & 1) ^ ((a >> 62) & 1) ^
1050  ((a >> 63) & 1));
1051  uint8_t ecc_bit_7 =
1052  (((a >> 0) & 1) ^ ((a >> 1) & 1) ^ ((a >> 2) & 1) ^ ((a >> 4) & 1) ^ ((a >> 5) & 1) ^
1053  ((a >> 7) & 1) ^ ((a >> 10) & 1) ^ ((a >> 11) & 1) ^ ((a >> 13) & 1) ^ ((a >> 16) & 1) ^
1054  ((a >> 20) & 1) ^ ((a >> 21) & 1) ^ ((a >> 23) & 1) ^ ((a >> 26) & 1) ^ ((a >> 31) & 1) ^
1055  ((a >> 36) & 1) ^ ((a >> 38) & 1) ^ ((a >> 39) & 1) ^ ((a >> 41) & 1) ^ ((a >> 44) & 1) ^
1056  ((a >> 47) & 1) ^ ((a >> 49) & 1) ^ ((a >> 50) & 1) ^ ((a >> 54) & 1) ^ ((a >> 56) & 1) ^
1057  ((a >> 62) & 1));
1058  ecc_bits = (ecc_bit_7 << 7) | (ecc_bit_6 << 6) | (ecc_bit_5 << 5) | (ecc_bit_4 << 4) |
1059  (ecc_bit_3 << 3) | (ecc_bit_2 << 2) | (ecc_bit_1 << 1) | ecc_bit_0;
1060  return ecc_bits;
1061 }
1062 
1063 #endif /* defined(__ECC_PRESENT) && (__ECC_PRESENT == 1) */
1064  /* End of Doxygen Group NMSIS_Core_ECC_Functions */
1066 #ifdef __cplusplus
1067 }
1068 #endif
1069 #endif /* __CORE_FEATURE_ECC_H__ */
ECC_ClearICacheDoubleBitError
__STATIC_FORCEINLINE void ECC_ClearICacheDoubleBitError(void)
Clear I-Cache double-bit error.
Definition: core_feature_ecc.h:896
ECC_IsDLMDoubleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsDLMDoubleBitErrorOccured(void)
Check if DLM double-bit error has occurred.
Definition: core_feature_ecc.h:872
CSR_MDCFGINFO_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:465
ECC_IsDCacheSingleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsDCacheSingleBitErrorOccured(void)
Check if D-Cache single-bit error has occurred.
Definition: core_feature_ecc.h:689
ECC_IsILMDoubleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsILMDoubleBitErrorOccured(void)
Check if ILM double-bit error has occurred.
Definition: core_feature_ecc.h:859
ECC_DisableILM
__STATIC_FORCEINLINE void ECC_DisableILM(void)
Disable ILM.
Definition: core_feature_ecc.h:432
ECC_ERROR_RAMID_MASK_DCACHE
#define ECC_ERROR_RAMID_MASK_DCACHE
Definition: core_feature_ecc.h:652
ECC_ClearTLBSingleBitError
__STATIC_FORCEINLINE void ECC_ClearTLBSingleBitError(void)
Clear TLB single-bit error.
Definition: core_feature_ecc.h:774
CSR_MICFGINFO_Type::ecc
rv_csr_t ecc
bit: 10 I-Cache ECC support
Definition: core_feature_base.h:438
ECC_IsTLBSingleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsTLBSingleBitErrorOccured(void)
Check if TLB single-bit error has occurred.
Definition: core_feature_ecc.h:702
ECC_DisableDCacheECCExcp
__STATIC_FORCEINLINE void ECC_DisableDCacheECCExcp(void)
Disable ECC exception for D-Cache.
Definition: core_feature_ecc.h:271
MDLM_CTL_DLM_ECC_EN
#define MDLM_CTL_DLM_ECC_EN
Definition: riscv_encoding.h:256
MECC_CODE_SRAMID_DLM
#define MECC_CODE_SRAMID_DLM
Definition: riscv_encoding.h:378
CSR_MECCCODE_Type::sramid
rv_csr_t sramid
bit: 24..28 The ID of RAM that has 1bit ECC error, software can clear these bits
Definition: core_feature_base.h:559
MCACHE_CTL_IC_DRAM_ECC_INJ_EN
#define MCACHE_CTL_IC_DRAM_ECC_INJ_EN
Definition: riscv_encoding.h:296
ECC_DCacheDRamErrInject
__STATIC_FORCEINLINE void ECC_DCacheDRamErrInject(uint32_t ecc_code, void *addr)
Inject error into D-Cache Data RAM.
Definition: core_feature_ecc.h:386
ECC_DLMErrRestore
__STATIC_FORCEINLINE void ECC_DLMErrRestore(void *addr)
Restore DLM error at specified address.
Definition: core_feature_ecc.h:642
ECC_EnableDLMECC
__STATIC_FORCEINLINE void ECC_EnableDLMECC(void)
Enable ECC for DLM.
Definition: core_feature_ecc.h:559
MCACHE_CTL_DC_ECC_EXCP_EN
#define MCACHE_CTL_DC_ECC_EXCP_EN
Definition: riscv_encoding.h:303
MILM_CTL_ILM_ECC_CHK_EN
#define MILM_CTL_ILM_ECC_CHK_EN
Definition: riscv_encoding.h:244
ECC_DisableICacheECCExcp
__STATIC_FORCEINLINE void ECC_DisableICacheECCExcp(void)
Disable ECC exception for I-Cache.
Definition: core_feature_ecc.h:205
CSR_MCFGINFO_Type::b
struct CSR_MCFGINFO_Type::@14 b
Structure used for bit access.
CSR_MCFGINFO_Type::dcache
rv_csr_t dcache
bit: 10 DCache present
Definition: core_feature_base.h:408
ECC_ICacheTRamErrInject
__STATIC_FORCEINLINE void ECC_ICacheTRamErrInject(uint32_t ecc_code, void *addr)
Inject error into I-Cache Tag RAM.
Definition: core_feature_ecc.h:308
__RV_CSR_CLEAR
#define __RV_CSR_CLEAR(csr, val)
CSR operation Macro for csrc instruction.
Definition: core_feature_base.h:799
MInvalICacheLine
__STATIC_INLINE void MInvalICacheLine(unsigned long addr)
Invalidate one I-Cache line specified by address in M-Mode.
Definition: core_feature_cache.h:651
ECC_EnableDLMECCCheck
__STATIC_FORCEINLINE void ECC_EnableDLMECCCheck(void)
Enable ECC checking for DLM.
Definition: core_feature_ecc.h:599
ECC_EnableILMECCExcp
__STATIC_FORCEINLINE void ECC_EnableILMECCExcp(void)
Enable ECC exception for ILM.
Definition: core_feature_ecc.h:462
ECC_ClearAllDoubleBitError
__STATIC_FORCEINLINE void ECC_ClearAllDoubleBitError(void)
Clear all double-bit errors.
Definition: core_feature_ecc.h:885
ECC_EnableICacheECCCheck
__STATIC_FORCEINLINE void ECC_EnableICacheECCCheck(void)
Enable ECC checking for I-Cache.
Definition: core_feature_ecc.h:216
ECC_IsDLMSupportECC
__STATIC_FORCEINLINE int32_t ECC_IsDLMSupportECC(void)
Check if DLM supports ECC.
Definition: core_feature_ecc.h:144
CSR_MECCCODE_Type
Union type to access MECC_CODE CSR register.
Definition: core_feature_base.h:553
ECC_EnableILMECC
__STATIC_FORCEINLINE void ECC_EnableILMECC(void)
Enable ECC for ILM.
Definition: core_feature_ecc.h:442
CSR_MICFGINFO_Type
Union type to access MICFG_INFO CSR register.
Definition: core_feature_base.h:433
ECC_IsGlobalSupportECC
__STATIC_FORCEINLINE int32_t ECC_IsGlobalSupportECC(void)
Check if the core globally supports ECC.
Definition: core_feature_ecc.h:73
ECC_IsILMSingleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsILMSingleBitErrorOccured(void)
Check if ILM single-bit error has occurred.
Definition: core_feature_ecc.h:715
MFlushInvalDCacheLine
__STATIC_INLINE void MFlushInvalDCacheLine(unsigned long addr)
Flush and invalidate one D-Cache line specified by address in M-Mode.
Definition: core_feature_cache.h:1699
CSR_MDCFGINFO_Type::ecc
rv_csr_t ecc
bit: 10 D-Cache ECC support
Definition: core_feature_base.h:459
ECC_ClearAllSingleBitError
__STATIC_FORCEINLINE void ECC_ClearAllSingleBitError(void)
Clear all single-bit errors.
Definition: core_feature_ecc.h:741
ECC_IsXorErrorInjectMode
__STATIC_FORCEINLINE int32_t ECC_IsXorErrorInjectMode(void)
Check if XOR error injection mode is supported.
Definition: core_feature_ecc.h:159
CSR_MCFGINFO_Type
Union type to access MCFG_INFO CSR register.
Definition: core_feature_base.h:396
MECC_CODE_RAMID_DC
#define MECC_CODE_RAMID_DC
Definition: riscv_encoding.h:370
ECC_ICacheDRamErrInject
__STATIC_FORCEINLINE void ECC_ICacheDRamErrInject(uint32_t ecc_code, void *addr)
Inject error into I-Cache Data RAM.
Definition: core_feature_ecc.h:328
ECC_ClearILMDoubleBitError
__STATIC_FORCEINLINE void ECC_ClearILMDoubleBitError(void)
Clear ILM double-bit error.
Definition: core_feature_ecc.h:929
CSR_MTLBCFGINFO_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:501
MILM_CTL_ILM_ECC_EXCP_EN
#define MILM_CTL_ILM_ECC_EXCP_EN
Definition: riscv_encoding.h:247
MECC_CODE_RAMID_IC
#define MECC_CODE_RAMID_IC
Definition: riscv_encoding.h:369
MECC_CODE_SRAMID_TLB
#define MECC_CODE_SRAMID_TLB
Definition: riscv_encoding.h:376
ECC_DCacheErrRestore
__STATIC_FORCEINLINE void ECC_DCacheErrRestore(void *addr)
Restore D-Cache error at specified address.
Definition: core_feature_ecc.h:407
ECC_EnableDCacheECC
__STATIC_FORCEINLINE void ECC_EnableDCacheECC(void)
Enable ECC for D-Cache.
Definition: core_feature_ecc.h:238
ECC_DisableICacheECCCheck
__STATIC_FORCEINLINE void ECC_DisableICacheECCCheck(void)
Disable ECC checking for I-Cache.
Definition: core_feature_ecc.h:227
CSR_MDCFGINFO_Type
Union type to access MDCFG_INFO CSR register.
Definition: core_feature_base.h:454
MECC_CODE_SRAMID_ILM
#define MECC_CODE_SRAMID_ILM
Definition: riscv_encoding.h:377
CSR_MICFGINFO_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:446
CSR_MCFG_INFO
#define CSR_MCFG_INFO
Definition: riscv_encoding.h:1111
MDLM_CTL_DLM_ECC_INJ_EN
#define MDLM_CTL_DLM_ECC_INJ_EN
Definition: riscv_encoding.h:254
CSR_MECCCODE_Type::ecc_inj_mode
rv_csr_t ecc_inj_mode
bit: 31 ECC injection mode
Definition: core_feature_base.h:561
__RV_CSR_WRITE
#define __RV_CSR_WRITE(csr, val)
CSR operation Macro for csrw instruction.
Definition: core_feature_base.h:725
MLockDCacheLine
__STATIC_INLINE unsigned long MLockDCacheLine(unsigned long addr)
Lock one D-Cache line specified by address in M-Mode.
Definition: core_feature_cache.h:2012
CSR_MCFGINFO_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:425
MILM_CTL_ILM_ECC_INJ_EN
#define MILM_CTL_ILM_ECC_INJ_EN
Definition: riscv_encoding.h:246
ECC_IsAnySingleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsAnySingleBitErrorOccured(void)
Check if any single-bit error has occurred.
Definition: core_feature_ecc.h:663
ECC_ClearILMSingleBitError
__STATIC_FORCEINLINE void ECC_ClearILMSingleBitError(void)
Clear ILM single-bit error.
Definition: core_feature_ecc.h:785
__LW
__STATIC_FORCEINLINE uint32_t __LW(volatile void *addr)
Load 32bit value from address (32 bit)
Definition: core_feature_base.h:2236
ECC_ClearDLMSingleBitError
__STATIC_FORCEINLINE void ECC_ClearDLMSingleBitError(void)
Clear DLM single-bit error.
Definition: core_feature_ecc.h:796
ECC_DisableILMECCCheck
__STATIC_FORCEINLINE void ECC_DisableILMECCCheck(void)
Disable ECC checking for ILM.
Definition: core_feature_ecc.h:492
MDLM_CTL_DLM_ECC_EXCP_EN
#define MDLM_CTL_DLM_ECC_EXCP_EN
Definition: riscv_encoding.h:255
CSR_MDCFGINFO_Type::lm_ecc
rv_csr_t lm_ecc
bit: 21 DLM ECC present
Definition: core_feature_base.h:462
ECC_ILMErrInject
__STATIC_FORCEINLINE void ECC_ILMErrInject(uint32_t ecc_code, void *addr)
Inject error into ILM.
Definition: core_feature_ecc.h:504
ECC_ClearTLBDoubleBitError
__STATIC_FORCEINLINE void ECC_ClearTLBDoubleBitError(void)
Clear TLB double-bit error.
Definition: core_feature_ecc.h:918
ECC_DisableICacheECC
__STATIC_FORCEINLINE void ECC_DisableICacheECC(void)
Disable ECC for I-Cache.
Definition: core_feature_ecc.h:183
ECC_EnableDLM
__STATIC_FORCEINLINE void ECC_EnableDLM(void)
Enable DLM.
Definition: core_feature_ecc.h:539
MCACHE_CTL_IC_ECC_EXCP_EN
#define MCACHE_CTL_IC_ECC_EXCP_EN
Definition: riscv_encoding.h:292
CSR_MTLBCFGINFO_Type::b
struct CSR_MTLBCFGINFO_Type::@17 b
Structure used for bit access.
ECC_DLMErrInject
__STATIC_FORCEINLINE void ECC_DLMErrInject(uint32_t ecc_code, void *addr)
Inject error into DLM.
Definition: core_feature_ecc.h:621
CSR_MCFGINFO_Type::icache
rv_csr_t icache
bit: 9 ICache present
Definition: core_feature_base.h:407
ECC_ERROR_RAMID_MASK_TLB
#define ECC_ERROR_RAMID_MASK_TLB
Definition: core_feature_ecc.h:653
CSR_MCFGINFO_Type::ilm
rv_csr_t ilm
bit: 7 ILM present
Definition: core_feature_base.h:405
ECC_EnableDLMECCExcp
__STATIC_FORCEINLINE void ECC_EnableDLMECCExcp(void)
Enable ECC exception for DLM.
Definition: core_feature_ecc.h:579
CSR_MDLM_CTL
#define CSR_MDLM_CTL
Definition: riscv_encoding.h:1015
ECC_ERROR_RAMID_MASK_ICACHE
#define ECC_ERROR_RAMID_MASK_ICACHE
Definition: core_feature_ecc.h:651
MDLM_CTL_DLM_ECC_CHK_EN
#define MDLM_CTL_DLM_ECC_CHK_EN
Definition: riscv_encoding.h:252
CSR_MICFGINFO_Type::lm_ecc
rv_csr_t lm_ecc
bit: 22 ILM ECC support
Definition: core_feature_base.h:442
CSR_MTLBCFGINFO_Type
Union type to access MTLBCFG_INFO CSR register.
Definition: core_feature_base.h:477
CSR_MECCCODE_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:566
ECC_EnableILM
__STATIC_FORCEINLINE void ECC_EnableILM(void)
Enable ILM.
Definition: core_feature_ecc.h:422
MILM_CTL_ILM_EN
#define MILM_CTL_ILM_EN
Definition: riscv_encoding.h:249
ECC_EnableDCacheECCCheck
__STATIC_FORCEINLINE void ECC_EnableDCacheECCCheck(void)
Enable ECC checking for D-Cache.
Definition: core_feature_ecc.h:282
ECC_IsILMSupportECC
__STATIC_FORCEINLINE int32_t ECC_IsILMSupportECC(void)
Check if ILM supports ECC.
Definition: core_feature_ecc.h:129
ECC_IsICacheSingleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsICacheSingleBitErrorOccured(void)
Check if I-Cache single-bit error has occurred.
Definition: core_feature_ecc.h:676
__STATIC_FORCEINLINE
#define __STATIC_FORCEINLINE
Define a static function that should be always inlined by the compiler.
Definition: nmsis_gcc.h:70
CSR_MCACHE_CTL
#define CSR_MCACHE_CTL
Definition: riscv_encoding.h:1020
MLockICacheLine
__STATIC_INLINE unsigned long MLockICacheLine(unsigned long addr)
Lock one I-Cache line specified by address in M-Mode.
Definition: core_feature_cache.h:917
MCACHE_CTL_DC_ECC_EN
#define MCACHE_CTL_DC_ECC_EN
Definition: riscv_encoding.h:302
CSR_MICFGINFO_Type::b
struct CSR_MICFGINFO_Type::@15 b
Structure used for bit access.
CSR_MICFG_INFO
#define CSR_MICFG_INFO
Definition: riscv_encoding.h:1109
__RV_CSR_READ
#define __RV_CSR_READ(csr)
CSR operation Macro for csrr instruction.
Definition: core_feature_base.h:707
ECC_IsICacheSupportECC
__STATIC_FORCEINLINE int32_t ECC_IsICacheSupportECC(void)
Check if I-Cache supports ECC.
Definition: core_feature_ecc.h:86
CSR_MTLBCFG_INFO
#define CSR_MTLBCFG_INFO
Definition: riscv_encoding.h:1112
ECC_IsICacheDoubleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsICacheDoubleBitErrorOccured(void)
Check if I-Cache double-bit error has occurred.
Definition: core_feature_ecc.h:820
ECC_GenerateECCCodeU32
static uint8_t ECC_GenerateECCCodeU32(uint32_t a)
Generate ECC code for a 32-bit value.
Definition: core_feature_ecc.h:954
ECC_IsDCacheSupportECC
__STATIC_FORCEINLINE int32_t ECC_IsDCacheSupportECC(void)
Check if D-Cache supports ECC.
Definition: core_feature_ecc.h:101
MECC_CODE_RAMID_DLM
#define MECC_CODE_RAMID_DLM
Definition: riscv_encoding.h:373
ECC_ClearDLMDoubleBitError
__STATIC_FORCEINLINE void ECC_ClearDLMDoubleBitError(void)
Clear DLM double-bit error.
Definition: core_feature_ecc.h:940
ECC_IsDCacheDoubleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsDCacheDoubleBitErrorOccured(void)
Check if D-Cache double-bit error has occurred.
Definition: core_feature_ecc.h:833
MCACHE_CTL_IC_TRAM_ECC_INJ_EN
#define MCACHE_CTL_IC_TRAM_ECC_INJ_EN
Definition: riscv_encoding.h:293
ECC_DisableDCacheECCCheck
__STATIC_FORCEINLINE void ECC_DisableDCacheECCCheck(void)
Disable ECC checking for D-Cache.
Definition: core_feature_ecc.h:293
ECC_EnableICacheECCExcp
__STATIC_FORCEINLINE void ECC_EnableICacheECCExcp(void)
Enable ECC exception for I-Cache.
Definition: core_feature_ecc.h:194
ECC_DisableDLMECC
__STATIC_FORCEINLINE void ECC_DisableDLMECC(void)
Disable ECC for DLM.
Definition: core_feature_ecc.h:569
ECC_ERROR_RAMID_MASK_DLM
#define ECC_ERROR_RAMID_MASK_DLM
Definition: core_feature_ecc.h:655
CSR_MTLBCFGINFO_Type::ecc
rv_csr_t ecc
bit: 10 Main TLB supports ECC or not
Definition: core_feature_base.h:482
ECC_DisableILMECCExcp
__STATIC_FORCEINLINE void ECC_DisableILMECCExcp(void)
Disable ECC exception for ILM.
Definition: core_feature_ecc.h:472
ECC_DisableDCacheECC
__STATIC_FORCEINLINE void ECC_DisableDCacheECC(void)
Disable ECC for D-Cache.
Definition: core_feature_ecc.h:249
ECC_EnableILMECCCheck
__STATIC_FORCEINLINE void ECC_EnableILMECCCheck(void)
Enable ECC checking for ILM.
Definition: core_feature_ecc.h:482
__RV_CSR_SET
#define __RV_CSR_SET(csr, val)
CSR operation Macro for csrs instruction.
Definition: core_feature_base.h:762
MECC_CODE_SRAMID_DC
#define MECC_CODE_SRAMID_DC
Definition: riscv_encoding.h:375
CSR_MDCFGINFO_Type::b
struct CSR_MDCFGINFO_Type::@16 b
Structure used for bit access.
CSR_MECCCODE_Type::b
struct CSR_MECCCODE_Type::@22 b
Structure used for bit access.
ECC_IsDLMSingleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsDLMSingleBitErrorOccured(void)
Check if DLM single-bit error has occurred.
Definition: core_feature_ecc.h:728
MECC_CODE_RAMID_ILM
#define MECC_CODE_RAMID_ILM
Definition: riscv_encoding.h:372
ECC_DCacheTRamErrInject
__STATIC_FORCEINLINE void ECC_DCacheTRamErrInject(uint32_t ecc_code, void *addr)
Inject error into D-Cache Tag RAM.
Definition: core_feature_ecc.h:363
MECC_CODE_SRAMID_IC
#define MECC_CODE_SRAMID_IC
Definition: riscv_encoding.h:374
ECC_ClearICacheSingleBitError
__STATIC_FORCEINLINE void ECC_ClearICacheSingleBitError(void)
Clear I-Cache single-bit error.
Definition: core_feature_ecc.h:752
MECC_CODE_SRAMID
#define MECC_CODE_SRAMID
Definition: riscv_encoding.h:368
ECC_IsAnyDoubleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsAnyDoubleBitErrorOccured(void)
Check if any double-bit error has occurred.
Definition: core_feature_ecc.h:807
ECC_EnableDCacheECCExcp
__STATIC_FORCEINLINE void ECC_EnableDCacheECCExcp(void)
Enable ECC exception for D-Cache.
Definition: core_feature_ecc.h:260
ECC_GenerateECCCodeU64
static uint8_t ECC_GenerateECCCodeU64(uint64_t a)
Generate ECC code for a 64-bit value.
Definition: core_feature_ecc.h:999
MECC_CODE_RAMID
#define MECC_CODE_RAMID
Definition: riscv_encoding.h:367
MILM_CTL_ILM_ECC_EN
#define MILM_CTL_ILM_ECC_EN
Definition: riscv_encoding.h:248
ECC_DisableDLM
__STATIC_FORCEINLINE void ECC_DisableDLM(void)
Disable DLM.
Definition: core_feature_ecc.h:549
ECC_DisableILMECC
__STATIC_FORCEINLINE void ECC_DisableILMECC(void)
Disable ECC for ILM.
Definition: core_feature_ecc.h:452
ECC_EnableICacheECC
__STATIC_FORCEINLINE void ECC_EnableICacheECC(void)
Enable ECC for I-Cache.
Definition: core_feature_ecc.h:172
ECC_IsTLBSupportECC
__STATIC_FORCEINLINE int32_t ECC_IsTLBSupportECC(void)
Check if TLB supports ECC.
Definition: core_feature_ecc.h:116
ECC_IsTLBDoubleBitErrorOccured
__STATIC_FORCEINLINE int32_t ECC_IsTLBDoubleBitErrorOccured(void)
Check if TLB double-bit error has occurred.
Definition: core_feature_ecc.h:846
MCACHE_CTL_DC_DRAM_ECC_INJ_EN
#define MCACHE_CTL_DC_DRAM_ECC_INJ_EN
Definition: riscv_encoding.h:307
CSR_MDCFG_INFO
#define CSR_MDCFG_INFO
Definition: riscv_encoding.h:1110
MCACHE_CTL_DC_ECC_CHK_EN
#define MCACHE_CTL_DC_ECC_CHK_EN
Definition: riscv_encoding.h:308
MCACHE_CTL_IC_ECC_EN
#define MCACHE_CTL_IC_ECC_EN
Definition: riscv_encoding.h:291
MECC_CODE_RAMID_TLB
#define MECC_CODE_RAMID_TLB
Definition: riscv_encoding.h:371
CSR_MCFGINFO_Type::dlm
rv_csr_t dlm
bit: 8 DLM present
Definition: core_feature_base.h:406
__SW
__STATIC_FORCEINLINE void __SW(volatile void *addr, uint32_t val)
Write 32bit value to address (32 bit)
Definition: core_feature_base.h:2288
ECC_DisableDLMECCCheck
__STATIC_FORCEINLINE void ECC_DisableDLMECCCheck(void)
Disable ECC checking for DLM.
Definition: core_feature_ecc.h:609
ECC_ICacheErrRestore
__STATIC_FORCEINLINE void ECC_ICacheErrRestore(void *addr)
Restore I-Cache error at specified address.
Definition: core_feature_ecc.h:346
CSR_MECCCODE_Type::ramid
rv_csr_t ramid
bit: 16..20 The ID of RAM that has 2bit ECC error, software can clear these bits
Definition: core_feature_base.h:557
__RWMB
#define __RWMB()
Read & Write Memory barrier.
Definition: core_feature_base.h:850
CSR_MCFGINFO_Type::ecc
rv_csr_t ecc
bit: 1 ECC present
Definition: core_feature_base.h:399
ECC_ERROR_RAMID_MASK_ILM
#define ECC_ERROR_RAMID_MASK_ILM
Definition: core_feature_ecc.h:654
ECC_ClearDCacheDoubleBitError
__STATIC_FORCEINLINE void ECC_ClearDCacheDoubleBitError(void)
Clear D-Cache double-bit error.
Definition: core_feature_ecc.h:907
MCACHE_CTL_DC_TRAM_ECC_INJ_EN
#define MCACHE_CTL_DC_TRAM_ECC_INJ_EN
Definition: riscv_encoding.h:304
MDLM_CTL_DLM_EN
#define MDLM_CTL_DLM_EN
Definition: riscv_encoding.h:257
ECC_ClearDCacheSingleBitError
__STATIC_FORCEINLINE void ECC_ClearDCacheSingleBitError(void)
Clear D-Cache single-bit error.
Definition: core_feature_ecc.h:763
CSR_MECC_CODE
#define CSR_MECC_CODE
Definition: riscv_encoding.h:1016
CSR_MILM_CTL
#define CSR_MILM_CTL
Definition: riscv_encoding.h:1014
ECC_DisableDLMECCExcp
__STATIC_FORCEINLINE void ECC_DisableDLMECCExcp(void)
Disable ECC exception for DLM.
Definition: core_feature_ecc.h:589
ECC_ILMErrRestore
__STATIC_FORCEINLINE void ECC_ILMErrRestore(void *addr)
Restore ILM error at specified address.
Definition: core_feature_ecc.h:525
MCACHE_CTL_IC_ECC_CHK_EN
#define MCACHE_CTL_IC_ECC_CHK_EN
Definition: riscv_encoding.h:299