aboutsummaryrefslogtreecommitdiffstats
path: root/roms/u-boot/arch/arm/mach-uniphier/reset.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/u-boot/arch/arm/mach-uniphier/reset.c')
-rw-r--r--roms/u-boot/arch/arm/mach-uniphier/reset.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/roms/u-boot/arch/arm/mach-uniphier/reset.c b/roms/u-boot/arch/arm/mach-uniphier/reset.c
new file mode 100644
index 000000000..dddb48ec4
--- /dev/null
+++ b/roms/u-boot/arch/arm/mach-uniphier/reset.c
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2012-2014 Panasonic Corporation
+ * Copyright (C) 2015-2016 Socionext Inc.
+ * Author: Masahiro Yamada <yamada.masahiro@socionext.com>
+ */
+
+#include <cpu_func.h>
+#include <linux/io.h>
+#include <asm/secure.h>
+
+#include "sc-regs.h"
+
+/* 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(void)
+{
+ u32 tmp;
+
+ writel(5, sc_base + SC_IRQTIMSET); /* default value */
+
+ tmp = readl(sc_base + SC_SLFRSTSEL);
+ tmp &= ~0x3; /* mask [1:0] */
+ tmp |= 0x0; /* XRST reboot */
+ writel(tmp, sc_base + SC_SLFRSTSEL);
+
+ tmp = readl(sc_base + SC_SLFRSTCTL);
+ tmp |= 0x1;
+ writel(tmp, sc_base + SC_SLFRSTCTL);
+}