summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2016-08-25 21:03:41 +0900
committerMasahiro Yamada <yamada.masahiro@socionext.com>2016-08-28 13:09:19 +0900
commit928f3248b3e81a9fdaa818cf3aa02e5daef7015d (patch)
treeeab07df3764574cf8761867762c640bae53914c9
parent4a89a24e26670921614a83098e5c0692de2be86e (diff)
downloadu-boot-imx-928f3248b3e81a9fdaa818cf3aa02e5daef7015d.zip
u-boot-imx-928f3248b3e81a9fdaa818cf3aa02e5daef7015d.tar.gz
u-boot-imx-928f3248b3e81a9fdaa818cf3aa02e5daef7015d.tar.bz2
ARM: uniphier: support system reset functionality for PSCI
This supports the system reset via PSCI for ARMv7 SoCs. Because the system reset is not supported on PSCI 0.1, let's define CONFIG_ARMV7_PSCI_1_0. (it is supported since PSCI 0.2, but there is no CONFIG to enable it in U-Boot for now.) Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
-rw-r--r--arch/arm/mach-uniphier/arm32/psci.c5
-rw-r--r--arch/arm/mach-uniphier/reset.c14
-rw-r--r--include/configs/uniphier.h1
3 files changed, 18 insertions, 2 deletions
diff --git a/arch/arm/mach-uniphier/arm32/psci.c b/arch/arm/mach-uniphier/arm32/psci.c
index 633a3e0..e668265 100644
--- a/arch/arm/mach-uniphier/arm32/psci.c
+++ b/arch/arm/mach-uniphier/arm32/psci.c
@@ -151,3 +151,8 @@ int __secure psci_cpu_on(u32 function_id, u32 cpuid, u32 entry_point)
return PSCI_RET_SUCCESS;
}
+
+void __secure psci_system_reset(u32 function_id)
+{
+ reset_cpu(0);
+}
diff --git a/arch/arm/mach-uniphier/reset.c b/arch/arm/mach-uniphier/reset.c
index b5825bc..43e27d1 100644
--- a/arch/arm/mach-uniphier/reset.c
+++ b/arch/arm/mach-uniphier/reset.c
@@ -1,15 +1,25 @@
/*
- * Copyright (C) 2012-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
+ * Copyright (C) 2012-2014 Panasonic Corporation
+ * Copyright (C) 2015-2016 Socionext Inc.
+ * Author: Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <linux/io.h>
+#include <asm/secure.h>
#include "sc-regs.h"
-void reset_cpu(unsigned long ignored)
+/* If PSCI is enabled, this is used for SYSTEM_RESET function */
+#ifdef CONFIG_ARMV7_PSCI
+#define __SECURE __secure
+#else
+#define __SECURE
+#endif
+
+void __SECURE reset_cpu(unsigned long ignored)
{
u32 tmp;
diff --git a/include/configs/uniphier.h b/include/configs/uniphier.h
index 0f5b20f..184704b 100644
--- a/include/configs/uniphier.h
+++ b/include/configs/uniphier.h
@@ -12,6 +12,7 @@
#define __CONFIG_UNIPHIER_COMMON_H__
#define CONFIG_ARMV7_PSCI
+#define CONFIG_ARMV7_PSCI_1_0
#define CONFIG_ARMV7_PSCI_NR_CPUS 4
#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10