* [PATCH 2/2] EDAC/altera: Check previous DDR DBE during driver probe
@ 2023-05-03 3:06 niravkumar.l.rabara
0 siblings, 0 replies; 2+ 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] 2+ messages in thread* [PATCH 0/2] EDAC/altera: Check previous DDR DBE during driver probe
@ 2023-05-03 6:09 niravkumar.l.rabara
2023-05-03 6:10 ` [PATCH 2/2] " niravkumar.l.rabara
0 siblings, 1 reply; 2+ 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] 2+ messages in thread
* [PATCH 2/2] EDAC/altera: Check previous DDR DBE during driver probe
2023-05-03 6:09 [PATCH 0/2] " niravkumar.l.rabara
@ 2023-05-03 6:10 ` niravkumar.l.rabara
0 siblings, 0 replies; 2+ messages in thread
From: niravkumar.l.rabara @ 2023-05-03 6:10 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] 2+ messages in thread
end of thread, other threads:[~2023-05-03 6:14 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-03 3:06 [PATCH 2/2] EDAC/altera: Check previous DDR DBE during driver probe niravkumar.l.rabara
-- strict thread matches above, loose matches on Subject: below --
2023-05-03 6:09 [PATCH 0/2] " niravkumar.l.rabara
2023-05-03 6:10 ` [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