1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright 2016 NXP Semiconductor, Inc. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include <common.h> 8*4882a593Smuzhiyun #include <asm/psci.h> 9*4882a593Smuzhiyun #include <asm/system.h> 10*4882a593Smuzhiyun #include <asm/armv8/sec_firmware.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifdef CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT psci_update_dt(void * fdt)13*4882a593Smuzhiyunint psci_update_dt(void *fdt) 14*4882a593Smuzhiyun { 15*4882a593Smuzhiyun /* 16*4882a593Smuzhiyun * If the PSCI in SEC Firmware didn't work, avoid to update the 17*4882a593Smuzhiyun * device node of PSCI. But still return 0 instead of an error 18*4882a593Smuzhiyun * number to support detecting PSCI dynamically and then switching 19*4882a593Smuzhiyun * the SMP boot method between PSCI and spin-table. 20*4882a593Smuzhiyun */ 21*4882a593Smuzhiyun if (sec_firmware_support_psci_version() == PSCI_INVALID_VER) 22*4882a593Smuzhiyun return 0; 23*4882a593Smuzhiyun fdt_psci(fdt); 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #if defined(CONFIG_ARMV8_PSCI) && !defined(CONFIG_ARMV8_SECURE_BASE) 26*4882a593Smuzhiyun /* secure code lives in RAM, keep it alive */ 27*4882a593Smuzhiyun fdt_add_mem_rsv(fdt, (unsigned long)__secure_start, 28*4882a593Smuzhiyun __secure_end - __secure_start); 29*4882a593Smuzhiyun #endif 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun return 0; 32*4882a593Smuzhiyun } 33*4882a593Smuzhiyun #endif 34