blob: c444d48c64b4f2d7125d8d9b972bea8414367f8e [file] [log] [blame]
Sieu Mun Tangdbcc2cf2022-03-07 12:13:04 +08001// SPDX-License-Identifier: BSD-3-Clause
2/*
Jit Loon Lim86f6fb32023-05-17 12:26:11 +08003 * Copyright (c) 2020-2023, ARM Limited and Contributors. All rights reserved.
Sieu Mun Tangdbcc2cf2022-03-07 12:13:04 +08004 */
5
6#include <assert.h>
7#include <common/debug.h>
8#include <common/runtime_svc.h>
9#include <lib/mmio.h>
10#include <tools_share/uuid.h>
11
12#include "socfpga_fcs.h"
13#include "socfpga_mailbox.h"
Jit Loon Lim86f6fb32023-05-17 12:26:11 +080014#include "socfpga_plat_def.h"
Sieu Mun Tangdbcc2cf2022-03-07 12:13:04 +080015#include "socfpga_reset_manager.h"
16#include "socfpga_sip_svc.h"
17#include "socfpga_system_manager.h"
18
Jit Loon Lim86f6fb32023-05-17 12:26:11 +080019
Sieu Mun Tangdbcc2cf2022-03-07 12:13:04 +080020uint32_t intel_ecc_dbe_notification(uint64_t dbe_value)
21{
22 dbe_value &= WARM_RESET_WFI_FLAG;
23
24 /* Trap CPUs in WFI if warm reset flag is set */
25 if (dbe_value > 0) {
26 while (1) {
27 wfi();
28 }
29 }
30
31 return INTEL_SIP_SMC_STATUS_OK;
32}
33
34bool cold_reset_for_ecc_dbe(void)
35{
36 uint32_t dbe_int_status;
37
38 dbe_int_status = mmio_read_32(SOCFPGA_SYSMGR(BOOT_SCRATCH_COLD_8));
39
40 /* Trigger cold reset only for error in critical memory (DDR/OCRAM) */
41 dbe_int_status &= SYSMGR_ECC_DBE_COLD_RST_MASK;
42
43 if (dbe_int_status > 0) {
44 return true;
45 }
46
47 return false;
48}