lkml.org 
[lkml]   [2023]   [May]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 2/2] EDAC/altera: Check previous DDR DBE during driver probe
    Date
    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
    \
     
     \ /
      Last update: 2023-05-03 12:20    [W:2.270 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site