1*91f16700Schasinglulu // SPDX-License-Identifier: BSD-3-Clause 2*91f16700Schasinglulu /* 3*91f16700Schasinglulu * Copyright (c) 2020-2023, ARM Limited and Contributors. All rights reserved. 4*91f16700Schasinglulu */ 5*91f16700Schasinglulu 6*91f16700Schasinglulu #include <assert.h> 7*91f16700Schasinglulu #include <common/debug.h> 8*91f16700Schasinglulu #include <common/runtime_svc.h> 9*91f16700Schasinglulu #include <lib/mmio.h> 10*91f16700Schasinglulu #include <tools_share/uuid.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu #include "socfpga_fcs.h" 13*91f16700Schasinglulu #include "socfpga_mailbox.h" 14*91f16700Schasinglulu #include "socfpga_plat_def.h" 15*91f16700Schasinglulu #include "socfpga_reset_manager.h" 16*91f16700Schasinglulu #include "socfpga_sip_svc.h" 17*91f16700Schasinglulu #include "socfpga_system_manager.h" 18*91f16700Schasinglulu 19*91f16700Schasinglulu 20*91f16700Schasinglulu uint32_t intel_ecc_dbe_notification(uint64_t dbe_value) 21*91f16700Schasinglulu { 22*91f16700Schasinglulu dbe_value &= WARM_RESET_WFI_FLAG; 23*91f16700Schasinglulu 24*91f16700Schasinglulu /* Trap CPUs in WFI if warm reset flag is set */ 25*91f16700Schasinglulu if (dbe_value > 0) { 26*91f16700Schasinglulu while (1) { 27*91f16700Schasinglulu wfi(); 28*91f16700Schasinglulu } 29*91f16700Schasinglulu } 30*91f16700Schasinglulu 31*91f16700Schasinglulu return INTEL_SIP_SMC_STATUS_OK; 32*91f16700Schasinglulu } 33*91f16700Schasinglulu 34*91f16700Schasinglulu bool cold_reset_for_ecc_dbe(void) 35*91f16700Schasinglulu { 36*91f16700Schasinglulu uint32_t dbe_int_status; 37*91f16700Schasinglulu 38*91f16700Schasinglulu dbe_int_status = mmio_read_32(SOCFPGA_SYSMGR(BOOT_SCRATCH_COLD_8)); 39*91f16700Schasinglulu 40*91f16700Schasinglulu /* Trigger cold reset only for error in critical memory (DDR/OCRAM) */ 41*91f16700Schasinglulu dbe_int_status &= SYSMGR_ECC_DBE_COLD_RST_MASK; 42*91f16700Schasinglulu 43*91f16700Schasinglulu if (dbe_int_status > 0) { 44*91f16700Schasinglulu return true; 45*91f16700Schasinglulu } 46*91f16700Schasinglulu 47*91f16700Schasinglulu return false; 48*91f16700Schasinglulu } 49