[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