File tree Expand file tree Collapse file tree 1 file changed +15
-6
lines changed Expand file tree Collapse file tree 1 file changed +15
-6
lines changed Original file line number Diff line number Diff line change @@ -785,13 +785,22 @@ static u64 ecclog_read_and_clear(struct igen6_imc *imc)
785
785
{
786
786
u64 ecclog = readq (imc -> window + ECC_ERROR_LOG_OFFSET );
787
787
788
- if (ecclog & (ECC_ERROR_LOG_CE | ECC_ERROR_LOG_UE )) {
789
- /* Clear CE/UE bits by writing 1s */
790
- writeq (ecclog , imc -> window + ECC_ERROR_LOG_OFFSET );
791
- return ecclog ;
792
- }
788
+ /*
789
+ * Quirk: The ECC_ERROR_LOG register of certain SoCs may contain
790
+ * the invalid value ~0. This will result in a flood of invalid
791
+ * error reports in polling mode. Skip it.
792
+ */
793
+ if (ecclog == ~0 )
794
+ return 0 ;
793
795
794
- return 0 ;
796
+ /* Neither a CE nor a UE. Skip it.*/
797
+ if (!(ecclog & (ECC_ERROR_LOG_CE | ECC_ERROR_LOG_UE )))
798
+ return 0 ;
799
+
800
+ /* Clear CE/UE bits by writing 1s */
801
+ writeq (ecclog , imc -> window + ECC_ERROR_LOG_OFFSET );
802
+
803
+ return ecclog ;
795
804
}
796
805
797
806
static void errsts_clear (struct igen6_imc * imc )
You can’t perform that action at this time.
0 commit comments