linux-edac.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] EDAC/altera: Check previous DDR DBE during driver probe
@ 2023-05-03  6:09 niravkumar.l.rabara
  2023-05-03  6:09 ` [PATCH 1/2] firmware: stratix10-svc: Add command to get SEU error info niravkumar.l.rabara
                   ` (4 more replies)
  0 siblings, 5 replies; 16+ messages in thread
From: niravkumar.l.rabara @ 2023-05-03  6:09 UTC (permalink / raw)
  To: Dinh Nguyen, Borislav Petkov, Tony Luck, James Morse,
	Mauro Carvalho Chehab, Robert Richter, linux-edac
  Cc: linux-kernel, Niravkumar L Rabara

From: Niravkumar L Rabara <niravkumar.l.rabara@intel.com>

Starting from SoCFPGA Agilex7, new SDM mailbox command is introduced
to read Single Event Update Error information, SEU detects both
corrected and uncorrected error.

If the previous HPS reboot caused by the DDR double bit error, bit-31 is
set high of boot scratch register 8. EDAC driver probe will check this
bit status and sends the SMC command to Arm Trusted Firmware.
Firmware will send mailbox command to SDM to get the SEU error
information and pass it to EDAC driver, driver will print error count,
sector address and error data for previous DDR DBE.

Niravkumar L Rabara (2):
  firmware: stratix10-svc: Add command to get SEU error info
  EDAC/altera: Check previous DDR DBE during driver probe

 drivers/edac/altera_edac.c                   | 29 ++++++++++++++++----
 include/linux/firmware/intel/stratix10-smc.h | 20 ++++++++++++++
 2 files changed, 44 insertions(+), 5 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread
* [PATCH 2/2] EDAC/altera: Check previous DDR DBE during driver probe
@ 2023-05-03  3:06 niravkumar.l.rabara
  0 siblings, 0 replies; 16+ messages in thread
From: niravkumar.l.rabara @ 2023-05-03  3:06 UTC (permalink / raw)
  To: Dinh Nguyen, Borislav Petkov, Tony Luck, James Morse,
	Mauro Carvalho Chehab, Robert Richter, linux-edac
  Cc: linux-kernel, Niravkumar L Rabara

From: Niravkumar L Rabara <niravkumar.l.rabara@intel.com>

Add DDR DBE check during driver probe to notify user if previous
reboot cause by DDR DBE and print DBE error related information.

Signed-off-by: Niravkumar L Rabara <niravkumar.l.rabara@intel.com>
---
 drivers/edac/altera_edac.c | 29 ++++++++++++++++++++++++-----
 1 file changed, 24 insertions(+), 5 deletions(-)

diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c
index 8b31cd54bdb6..398a49a3eb89 100644
--- a/drivers/edac/altera_edac.c
+++ b/drivers/edac/altera_edac.c
@@ -2159,6 +2159,7 @@ static int altr_edac_a10_probe(struct platform_device *pdev)
 #ifdef CONFIG_64BIT
 	{
 		int dberror, err_addr;
+		struct arm_smccc_res result;
 
 		edac->panic_notifier.notifier_call = s10_edac_dberr_handler;
 		atomic_notifier_chain_register(&panic_notifier_list,
@@ -2168,11 +2169,28 @@ static int altr_edac_a10_probe(struct platform_device *pdev)
 		regmap_read(edac->ecc_mgr_map, S10_SYSMGR_UE_VAL_OFST,
 			    &dberror);
 		if (dberror) {
-			regmap_read(edac->ecc_mgr_map, S10_SYSMGR_UE_ADDR_OFST,
-				    &err_addr);
-			edac_printk(KERN_ERR, EDAC_DEVICE,
-				    "Previous Boot UE detected[0x%X] @ 0x%X\n",
-				    dberror, err_addr);
+			/* Bit-31 is set if previous DDR UE happened */
+			if (dberror & (1 << 31)) {
+				/* Read previous DDR UE info */
+				arm_smccc_smc(INTEL_SIP_SMC_READ_SEU_ERR, 0,
+					0, 0, 0, 0, 0, 0, &result);
+
+				if (!(int)result.a0) {
+					edac_printk(KERN_ERR, EDAC_DEVICE,
+					"Previous DDR UE:Count=0x%X,Address=0x%X,ErrorData=0x%X\n"
+					, (unsigned int)result.a1, (unsigned int)result.a2
+					, (unsigned int)result.a3);
+				} else {
+					edac_printk(KERN_ERR, EDAC_DEVICE,
+						"INTEL_SIP_SMC_SEU_ERR_STATUS failed\n");
+				}
+			} else {
+				regmap_read(edac->ecc_mgr_map, S10_SYSMGR_UE_ADDR_OFST,
+						&err_addr);
+				edac_printk(KERN_ERR, EDAC_DEVICE,
+						"Previous Boot UE detected[0x%X] @ 0x%X\n",
+						dberror, err_addr);
+			}
 			/* Reset the sticky registers */
 			regmap_write(edac->ecc_mgr_map,
 				     S10_SYSMGR_UE_VAL_OFST, 0);
@@ -2180,6 +2198,7 @@ static int altr_edac_a10_probe(struct platform_device *pdev)
 				     S10_SYSMGR_UE_ADDR_OFST, 0);
 		}
 	}
+
 #else
 	edac->db_irq = platform_get_irq(pdev, 1);
 	if (edac->db_irq < 0)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2023-06-15 18:49 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-03  6:09 [PATCH 0/2] EDAC/altera: Check previous DDR DBE during driver probe niravkumar.l.rabara
2023-05-03  6:09 ` [PATCH 1/2] firmware: stratix10-svc: Add command to get SEU error info niravkumar.l.rabara
2023-05-03  6:10 ` [PATCH 2/2] EDAC/altera: Check previous DDR DBE during driver probe niravkumar.l.rabara
2023-05-03 10:18 ` [PATCH v2 0/2]EDAC/altera: " niravkumar.l.rabara
2023-05-03 10:18   ` [PATCH v2 1/2] firmware: stratix10-svc: Add command to get SEU error info niravkumar.l.rabara
2023-05-05 12:23     ` Dinh Nguyen
2023-05-03 10:18   ` [PATCH v2 2/2] EDAC/altera: Check previous DDR DBE during driver probe niravkumar.l.rabara
2023-05-05 12:25     ` Dinh Nguyen
2023-05-11  4:12 ` [PATCH v3 0/2] " niravkumar.l.rabara
2023-05-11  4:12   ` [PATCH v3 1/2] firmware: stratix10-svc: Add command to get SEU error info niravkumar.l.rabara
2023-05-11  4:12   ` [PATCH v3 2/2] EDAC/altera: Check previous DDR DBE during driver probe niravkumar.l.rabara
2023-05-23 12:23     ` dinh.linux
2023-06-15  2:25 ` [PATCH v4 0/1] " niravkumar.l.rabara
2023-06-15  2:25   ` [PATCH v4 1/1] " niravkumar.l.rabara
2023-06-15 18:49     ` Dinh Nguyen
  -- strict thread matches above, loose matches on Subject: below --
2023-05-03  3:06 [PATCH 2/2] " niravkumar.l.rabara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).