diff mbox series

[1/2] arm: mach-rmobile: Move cpu_reset to rzg2-reset.c

Message ID 20210827205718.536008-1-aford173@gmail.com
State Deferred
Delegated to: Tom Rini
Headers show
Series [1/2] arm: mach-rmobile: Move cpu_reset to rzg2-reset.c | expand

Commit Message

Adam Ford Aug. 27, 2021, 8:57 p.m. UTC
Various RZ/G2[MNH] boards have copies of cpu_reset which
creates duplicate code, so move this to a common file shared
among all users of the RZG2 and declare it weak so it can be
overwritten if necessary.

Signed-off-by: Adam Ford <aford173@gmail.com>

Comments

Marek Vasut Aug. 29, 2021, 4:22 p.m. UTC | #1
On 8/27/21 10:57 PM, Adam Ford wrote:
> Various RZ/G2[MNH] boards have copies of cpu_reset which
> creates duplicate code, so move this to a common file shared
> among all users of the RZG2 and declare it weak so it can be
> overwritten if necessary.

RCar3 has the same reset code too, so this could be unified further. 
However, I wonder, can't you simply call the PSCI reset ? There is a 
PSCI reset driver in drivers/reset/ too I think.
Adam Ford Aug. 30, 2021, 5:52 p.m. UTC | #2
On Sun, Aug 29, 2021 at 12:53 PM Marek Vasut <marex@denx.de> wrote:
>
> On 8/27/21 10:57 PM, Adam Ford wrote:
> > Various RZ/G2[MNH] boards have copies of cpu_reset which
> > creates duplicate code, so move this to a common file shared
> > among all users of the RZG2 and declare it weak so it can be
> > overwritten if necessary.
>
> RCar3 has the same reset code too, so this could be unified further.
> However, I wonder, can't you simply call the PSCI reset ? There is a
> PSCI reset driver in drivers/reset/ too I think.

Thanks for the suggestion.  I removed the custom cpu_reset code from
the board file, and enabled sysreset and the psci, and that appeared
to still reset when needed.

I'll send a different patch shortly.

adam
Marek Vasut Aug. 30, 2021, 5:58 p.m. UTC | #3
On 8/30/21 7:52 PM, Adam Ford wrote:
> On Sun, Aug 29, 2021 at 12:53 PM Marek Vasut <marex@denx.de> wrote:
>>
>> On 8/27/21 10:57 PM, Adam Ford wrote:
>>> Various RZ/G2[MNH] boards have copies of cpu_reset which
>>> creates duplicate code, so move this to a common file shared
>>> among all users of the RZG2 and declare it weak so it can be
>>> overwritten if necessary.
>>
>> RCar3 has the same reset code too, so this could be unified further.
>> However, I wonder, can't you simply call the PSCI reset ? There is a
>> PSCI reset driver in drivers/reset/ too I think.
> 
> Thanks for the suggestion.  I removed the custom cpu_reset code from
> the board file, and enabled sysreset and the psci, and that appeared
> to still reset when needed.
> 
> I'll send a different patch shortly.

Thanks!
diff mbox series

Patch

diff --git a/arch/arm/mach-rmobile/Makefile b/arch/arm/mach-rmobile/Makefile
index 195bbeb5c8..2bd173ec3a 100644
--- a/arch/arm/mach-rmobile/Makefile
+++ b/arch/arm/mach-rmobile/Makefile
@@ -13,7 +13,7 @@  obj-$(CONFIG_SH73A0) += lowlevel_init.o cpu_info-sh73a0.o pfc-sh73a0.o
 obj-$(CONFIG_R8A7740) += lowlevel_init.o cpu_info-r8a7740.o pfc-r8a7740.o
 obj-$(CONFIG_RCAR_GEN2) += lowlevel_init_ca15.o cpu_info-rcar.o
 obj-$(CONFIG_RCAR_GEN3) += lowlevel_init_gen3.o cpu_info-rcar.o memmap-gen3.o
-obj-$(CONFIG_RZ_G2) += cpu_info-rzg.o
+obj-$(CONFIG_RZ_G2) += cpu_info-rzg.o rzg2-reset.o
 
 ifneq ($(CONFIG_R8A779A0),)
 obj-$(CONFIG_ARMV8_PSCI) += psci-r8a779a0.o
diff --git a/arch/arm/mach-rmobile/rzg2-reset.c b/arch/arm/mach-rmobile/rzg2-reset.c
new file mode 100644
index 0000000000..8c3608f34a
--- /dev/null
+++ b/arch/arm/mach-rmobile/rzg2-reset.c
@@ -0,0 +1,26 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2021 Renesas Electronics Corporation
+ */
+
+#include <asm/io.h>
+
+#define RST_BASE	0xE6160000
+#define RST_CA57RESCNT	(RST_BASE + 0x40)
+#define RST_CA53RESCNT	(RST_BASE + 0x44)
+#define RST_CA57_CODE	0xA5A5000F
+#define RST_CA53_CODE	0x5A5A000F
+
+__weak void reset_cpu(void)
+{
+	unsigned long midr, cputype;
+
+	asm volatile("mrs %0, midr_el1" : "=r" (midr));
+	cputype = (midr >> 4) & 0xfff;
+
+	if (cputype == 0xd03)
+		writel(RST_CA53_CODE, RST_CA53RESCNT);
+	else
+		writel(RST_CA57_CODE, RST_CA57RESCNT);
+}
+