mirror of
https://git.codelinaro.org/clo/qsdk/oss/boot/u-boot-2016.git
synced 2026-03-11 19:48:59 +01:00
arm/PSCI: Fixed the backward compatiblity issue
Appended the compatible strings of old version PSCI to the latest version supported. And there are some psci functions' property must be added to DT only for psci version 0.1, including cpu_on, cpu_off, cpu_suspend, migrate. Note, ARMv8 Secure Firmware Framework doesn't support PSCI ver 0.1. Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com> Reviewed-by: York Sun <york.sun@nxp.com>
This commit is contained in:
parent
388aabc85d
commit
2c77416544
2 changed files with 38 additions and 26 deletions
|
|
@ -18,6 +18,9 @@
|
|||
#ifndef __ARM_PSCI_H__
|
||||
#define __ARM_PSCI_H__
|
||||
|
||||
#define ARM_PSCI_VER_1_0 (0x00010000)
|
||||
#define ARM_PSCI_VER_0_2 (0x00000002)
|
||||
|
||||
/* PSCI 0.1 interface */
|
||||
#define ARM_PSCI_FN_BASE 0x95c1ba5e
|
||||
#define ARM_PSCI_FN(n) (ARM_PSCI_FN_BASE + (n))
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ int fdt_psci(void *fdt)
|
|||
#if defined(CONFIG_ARMV8_PSCI) || defined(CONFIG_ARMV7_PSCI)
|
||||
int nodeoff;
|
||||
unsigned int psci_ver = 0;
|
||||
char *psci_compt;
|
||||
int tmp;
|
||||
|
||||
nodeoff = fdt_path_offset(fdt, "/cpus");
|
||||
|
|
@ -68,39 +67,49 @@ init_psci_node:
|
|||
psci_ver = sec_firmware_support_psci_version();
|
||||
#endif
|
||||
switch (psci_ver) {
|
||||
case 0x00010000:
|
||||
psci_compt = "arm,psci-1.0";
|
||||
break;
|
||||
case 0x00000002:
|
||||
psci_compt = "arm,psci-0.2";
|
||||
break;
|
||||
case ARM_PSCI_VER_1_0:
|
||||
tmp = fdt_setprop_string(fdt, nodeoff,
|
||||
"compatible", "arm,psci-1.0");
|
||||
if (tmp)
|
||||
return tmp;
|
||||
case ARM_PSCI_VER_0_2:
|
||||
tmp = fdt_appendprop_string(fdt, nodeoff,
|
||||
"compatible", "arm,psci-0.2");
|
||||
if (tmp)
|
||||
return tmp;
|
||||
default:
|
||||
psci_compt = "arm,psci";
|
||||
/*
|
||||
* The Secure firmware framework isn't able to support PSCI version 0.1.
|
||||
*/
|
||||
#ifndef CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
|
||||
tmp = fdt_appendprop_string(fdt, nodeoff,
|
||||
"compatible", "arm,psci");
|
||||
if (tmp)
|
||||
return tmp;
|
||||
tmp = fdt_setprop_u32(fdt, nodeoff, "cpu_suspend",
|
||||
ARM_PSCI_FN_CPU_SUSPEND);
|
||||
if (tmp)
|
||||
return tmp;
|
||||
tmp = fdt_setprop_u32(fdt, nodeoff, "cpu_off",
|
||||
ARM_PSCI_FN_CPU_OFF);
|
||||
if (tmp)
|
||||
return tmp;
|
||||
tmp = fdt_setprop_u32(fdt, nodeoff, "cpu_on",
|
||||
ARM_PSCI_FN_CPU_ON);
|
||||
if (tmp)
|
||||
return tmp;
|
||||
tmp = fdt_setprop_u32(fdt, nodeoff, "migrate",
|
||||
ARM_PSCI_FN_MIGRATE);
|
||||
if (tmp)
|
||||
return tmp;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
tmp = fdt_setprop_string(fdt, nodeoff, "compatible", psci_compt);
|
||||
if (tmp)
|
||||
return tmp;
|
||||
tmp = fdt_setprop_string(fdt, nodeoff, "method", "smc");
|
||||
if (tmp)
|
||||
return tmp;
|
||||
|
||||
#ifdef CONFIG_ARMV7_PSCI
|
||||
tmp = fdt_setprop_u32(fdt, nodeoff, "cpu_suspend",
|
||||
ARM_PSCI_FN_CPU_SUSPEND);
|
||||
if (tmp)
|
||||
return tmp;
|
||||
tmp = fdt_setprop_u32(fdt, nodeoff, "cpu_off", ARM_PSCI_FN_CPU_OFF);
|
||||
if (tmp)
|
||||
return tmp;
|
||||
tmp = fdt_setprop_u32(fdt, nodeoff, "cpu_on", ARM_PSCI_FN_CPU_ON);
|
||||
if (tmp)
|
||||
return tmp;
|
||||
tmp = fdt_setprop_u32(fdt, nodeoff, "migrate", ARM_PSCI_FN_MIGRATE);
|
||||
if (tmp)
|
||||
return tmp;
|
||||
#endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue