[linux-yocto] [PATCH 3/5] drivers/edac: Added compile time option.
Daniel Dragomir
daniel.dragomir at windriver.com
Tue May 14 06:23:57 PDT 2019
From: Marek Majtyka <marekx.majtyka at intel.com>
Added new compile time option in order to disable reporting of
correctable errors via interrupt (which means disabling them completely
for CMEM and SYSMEM).
Signed-off-by: Marek Majtyka <marekx.majtyka at intel.com>
---
drivers/edac/Kconfig | 18 +++++++-
drivers/edac/axxia_edac-cmc_56xx.c | 91 +++++++++++++++++++++++++++-----------
drivers/edac/axxia_edac-mc_56xx.c | 25 ++++++++++-
3 files changed, 104 insertions(+), 30 deletions(-)
diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig
index 5588930..daf63f7 100644
--- a/drivers/edac/Kconfig
+++ b/drivers/edac/Kconfig
@@ -420,9 +420,17 @@ config DEBUG_EDAC_AXXIA_SYSMEM
Support for configuration of SYSMEM edac tracing functionality.
It works for both 5600 and 6700 board families.
+config EDAC_AXXIA_SYSMEM_SKIP_CORRECTABLE
+ depends on ARCH_AXXIA
+ bool "AXXIA EDAC SYSMEM correctable error disabled."
+ help
+ Support for deactivation of processing of SYSMEM correctable errors
+ (single and multiple ECC).
+ It works for both 5600 and 6700 board families.
+
config EDAC_AXXIA_CMEM_5600
depends on ARCH_AXXIA
- bool "AXXIA EDAC CMem Controller for 5600"
+ bool "AXXIA EDAC CMEM Controller for 5600"
help
Support for Configuration Memory Denali controller error
detection on the AXXIA AXM56xx devices. This enables
@@ -447,6 +455,14 @@ config DEBUG_EDAC_AXXIA_CMEM
Enables error injection functionality for CMEM over procfs
interface (/proc/driver/).
+config EDAC_AXXIA_CMEM_SKIP_CORRECTABLE
+ depends on ARCH_AXXIA
+ bool "AXXIA EDAC CMEM correctable error disabled."
+ help
+ Support for deactivation of processing of CMEM correctable errors
+ (single and multiple ECC).
+ It works for both 5600 and 6700 board families.
+
config EDAC_AXXIA_L3_5500
tristate "AXXIA EDAC L3 Controller for 5500"
help
diff --git a/drivers/edac/axxia_edac-cmc_56xx.c b/drivers/edac/axxia_edac-cmc_56xx.c
index f29e6926..0e231cb 100644
--- a/drivers/edac/axxia_edac-cmc_56xx.c
+++ b/drivers/edac/axxia_edac-cmc_56xx.c
@@ -104,33 +104,60 @@
INT_BIT_8 |\
INT_BIT_31))
-#define CM_INT_MASK_BASE (~(\
- INT_BIT_1 |\
- INT_BIT_2 |\
- INT_BIT_3 |\
- INT_BIT_4 |\
- INT_BIT_5 |\
- INT_BIT_6 |\
- INT_BIT_7 |\
- INT_BIT_11 |\
- INT_BIT_21 |\
- INT_BIT_23 |\
- INT_BIT_31))
-
-#define CM_INT_MASK_FULL (~(\
- INT_BIT_1 |\
- INT_BIT_2 |\
- INT_BIT_3 |\
- INT_BIT_4 |\
- INT_BIT_5 |\
- INT_BIT_6 |\
- INT_BIT_7 |\
- INT_BIT_11 |\
- INT_BIT_21 |\
- INT_BIT_23 |\
- INT_BIT_25 |\
- INT_BIT_30 |\
- INT_BIT_31))
+#if defined(CONFIG_EDAC_AXXIA_CMEM_SKIP_CORRECTABLE)
+ #define CM_INT_MASK_BASE (~(\
+ INT_BIT_1 |\
+ INT_BIT_2 |\
+ INT_BIT_5 |\
+ INT_BIT_6 |\
+ INT_BIT_7 |\
+ INT_BIT_11 |\
+ INT_BIT_21 |\
+ INT_BIT_23 |\
+ INT_BIT_31))
+
+ #define CM_INT_MASK_FULL (~(\
+ INT_BIT_1 |\
+ INT_BIT_2 |\
+ INT_BIT_5 |\
+ INT_BIT_6 |\
+ INT_BIT_7 |\
+ INT_BIT_11 |\
+ INT_BIT_21 |\
+ INT_BIT_23 |\
+ INT_BIT_25 |\
+ INT_BIT_30 |\
+ INT_BIT_31))
+#else
+
+ #define CM_INT_MASK_BASE (~(\
+ INT_BIT_1 |\
+ INT_BIT_2 |\
+ INT_BIT_3 |\
+ INT_BIT_4 |\
+ INT_BIT_5 |\
+ INT_BIT_6 |\
+ INT_BIT_7 |\
+ INT_BIT_11 |\
+ INT_BIT_21 |\
+ INT_BIT_23 |\
+ INT_BIT_31))
+
+ #define CM_INT_MASK_FULL (~(\
+ INT_BIT_1 |\
+ INT_BIT_2 |\
+ INT_BIT_3 |\
+ INT_BIT_4 |\
+ INT_BIT_5 |\
+ INT_BIT_6 |\
+ INT_BIT_7 |\
+ INT_BIT_11 |\
+ INT_BIT_21 |\
+ INT_BIT_23 |\
+ INT_BIT_25 |\
+ INT_BIT_30 |\
+ INT_BIT_31))
+#endif
#define CM_INT_MASK_ALL (0x7fffffff)
#define ALIVE_NOTIFICATION_PERIOD (90*1000)
@@ -426,8 +453,10 @@ enum init_return_codes {ERR_STAGE_8 = -8,
enum events {
EV_ILLEGAL = 0,
EV_MULT_ILLEGAL,
+#ifndef CONFIG_EDAC_AXXIA_CMEM_SKIP_CORRECTABLE
EV_CORR_ECC,
EV_MULT_CORR_ECC,
+#endif
EV_UNCORR_ECC,
EV_MULT_UNCORR_ECC,
EV_PORT_ERROR,
@@ -441,8 +470,10 @@ enum events {
static char *block_name[] = {
"illegal",
"mult_illegal",
+#ifndef CONFIG_EDAC_AXXIA_CMEM_SKIP_CORRECTABLE
"ecc",
"mult_ecc",
+#endif
"uncorr_ecc",
"mult_uncorr_ecc",
"port_error",
@@ -470,8 +501,10 @@ static char *block_name[] = {
static const u32 event_mask[NR_EVENTS] = {
[EV_ILLEGAL] = INT_BIT_1,
[EV_MULT_ILLEGAL] = INT_BIT_2,
+#ifndef CONFIG_EDAC_AXXIA_CMEM_SKIP_CORRECTABLE
[EV_CORR_ECC] = INT_BIT_3,
[EV_MULT_CORR_ECC] = INT_BIT_4,
+#endif
[EV_UNCORR_ECC] = INT_BIT_5,
[EV_MULT_UNCORR_ECC] = INT_BIT_6,
[EV_PORT_ERROR] = INT_BIT_7,
@@ -487,8 +520,10 @@ static const struct event_logging {
} event_logging[NR_EVENTS] = {
[EV_ILLEGAL] = {0, KERN_ERR, "Illegal access"},
[EV_MULT_ILLEGAL] = {0, KERN_ERR, "Illegal access"},
+#ifndef CONFIG_EDAC_AXXIA_CMEM_SKIP_CORRECTABLE
[EV_CORR_ECC] = {0, KERN_NOTICE, "Correctable ECC error"},
[EV_MULT_CORR_ECC] = {0, KERN_NOTICE, "Correctable ECC error"},
+#endif
[EV_UNCORR_ECC] = {1, KERN_CRIT, "Uncorrectable ECC error"},
[EV_MULT_UNCORR_ECC] = {1, KERN_CRIT, "Uncorrectable ECC error"},
[EV_PORT_ERROR] = {0, KERN_CRIT, "Port error"},
@@ -1169,8 +1204,10 @@ static void intel_cm_events_error_check(struct edac_device_ctl_info *edac_dev)
0, i, counter,
edac_dev->ctl_name);
break;
+#ifndef CONFIG_EDAC_AXXIA_CMEM_SKIP_CORRECTABLE
case EV_CORR_ECC:
case EV_MULT_CORR_ECC:
+#endif
case EV_PORT_ERROR:
case EV_WRAP_ERROR:
case EV_PARITY_ERROR:
diff --git a/drivers/edac/axxia_edac-mc_56xx.c b/drivers/edac/axxia_edac-mc_56xx.c
index 9502e58..b59b2f5 100644
--- a/drivers/edac/axxia_edac-mc_56xx.c
+++ b/drivers/edac/axxia_edac-mc_56xx.c
@@ -106,8 +106,18 @@
#define INT_BIT_22 (0x00400000)
#define INT_BIT_26 (0x04000000)
-
-#define SM_INT_MASK_LOW (~(\
+#ifdef CONFIG_EDAC_AXXIA_SYSMEM_SKIP_CORRECTABLE
+ #define SM_INT_MASK_LOW (~(\
+ INT_BIT_1 |\
+ INT_BIT_2 |\
+ INT_BIT_5 |\
+ INT_BIT_6 |\
+ INT_BIT_7 |\
+ INT_BIT_12 |\
+ INT_BIT_22 |\
+ INT_BIT_26))
+#else
+ #define SM_INT_MASK_LOW (~(\
INT_BIT_1 |\
INT_BIT_2 |\
INT_BIT_3 |\
@@ -118,6 +128,7 @@
INT_BIT_12 |\
INT_BIT_22 |\
INT_BIT_26))
+#endif
#define SM_INT_MASK_ALL_LOW (0xffffffff)
#define SM_INT_MASK_HIGH (INT_BIT_0)
@@ -411,8 +422,10 @@ struct __packed mpr_dump {
enum events {
EV_ILLEGAL = 0,
EV_MULT_ILLEGAL,
+#ifndef CONFIG_EDAC_AXXIA_SYSMEM_SKIP_CORRECTABLE
EV_CORR_ECC,
EV_MULT_CORR_ECC,
+#endif
EV_UNCORR_ECC,
EV_MULT_UNCORR_ECC,
EV_PORT_ERROR,
@@ -425,8 +438,10 @@ enum events {
static char *block_name[] = {
"illegal",
"mult_illegal",
+#ifndef CONFIG_EDAC_AXXIA_SYSMEM_SKIP_CORRECTABLE
"ecc",
"mult_ecc",
+#endif
"uncorr_ecc",
"mult_uncorr_ecc",
"port_error",
@@ -586,8 +601,10 @@ static char *block_name[] = {
static const u32 event_mask[NR_EVENTS] = {
[EV_ILLEGAL] = INT_BIT_1,
[EV_MULT_ILLEGAL] = INT_BIT_2,
+#ifndef CONFIG_EDAC_AXXIA_SYSMEM_SKIP_CORRECTABLE
[EV_CORR_ECC] = INT_BIT_3,
[EV_MULT_CORR_ECC] = INT_BIT_4,
+#endif
[EV_UNCORR_ECC] = INT_BIT_5,
[EV_MULT_UNCORR_ECC] = INT_BIT_6,
[EV_PORT_ERROR] = INT_BIT_7,
@@ -602,8 +619,10 @@ static const struct event_logging {
} event_logging[NR_EVENTS] = {
[EV_ILLEGAL] = {0, KERN_ERR, "Illegal access"},
[EV_MULT_ILLEGAL] = {0, KERN_ERR, "Illegal access"},
+#ifndef CONFIG_EDAC_AXXIA_SYSMEM_SKIP_CORRECTABLE
[EV_CORR_ECC] = {0, KERN_NOTICE, "Correctable ECC error"},
[EV_MULT_CORR_ECC] = {0, KERN_NOTICE, "Correctable ECC error"},
+#endif
[EV_UNCORR_ECC] = {1, KERN_CRIT, "Uncorrectable ECC error"},
[EV_MULT_UNCORR_ECC] = {1, KERN_CRIT, "Uncorrectable ECC error"},
[EV_PORT_ERROR] = {0, KERN_CRIT, "Port error"},
@@ -1230,8 +1249,10 @@ static void intel_sm_events_error_check(struct edac_device_ctl_info *edac_dev)
0, i, counter,
edac_dev->ctl_name);
break;
+#ifndef CONFIG_EDAC_AXXIA_SYSMEM_SKIP_CORRECTABLE
case EV_CORR_ECC:
case EV_MULT_CORR_ECC:
+#endif
case EV_PORT_ERROR:
case EV_WRAP_ERROR:
case EV_PARITY_ERROR:
--
2.7.4
More information about the linux-yocto
mailing list