soc: renesas: rcar-rst: Allow WDT reset on R-Car V3U
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Wed, 19 Apr 2023 20:15:11 +0000 (22:15 +0200)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Mon, 15 May 2023 08:32:12 +0000 (10:32 +0200)
V3U firmware misses to enable WDT resets. Because there won't be any
updates to the firmware anymore, enable that in Linux.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/20230419201511.31648-1-wsa+renesas@sang-engineering.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
drivers/soc/renesas/rcar-rst.c

index e1c7e91f5a86e6c6810710e9ce30d5611de97184..98fd97da6cd4330dcd1673a2f7d775937e80e174 100644 (file)
@@ -12,6 +12,7 @@
 
 #define WDTRSTCR_RESET         0xA55A0002
 #define WDTRSTCR               0x0054
+#define GEN4_WDTRSTCR          0x0010
 
 #define CR7BAR                 0x0070
 #define CR7BAREN               BIT(4)
@@ -27,6 +28,12 @@ static int rcar_rst_enable_wdt_reset(void __iomem *base)
        return 0;
 }
 
+static int rcar_rst_v3u_enable_wdt_reset(void __iomem *base)
+{
+       iowrite32(WDTRSTCR_RESET, base + GEN4_WDTRSTCR);
+       return 0;
+}
+
 /*
  * Most of the R-Car Gen3 SoCs have an ARM Realtime Core.
  * Firmware boot address has to be set in CR7BAR before
@@ -66,6 +73,12 @@ static const struct rst_config rcar_rst_gen3 __initconst = {
        .set_rproc_boot_addr = rcar_rst_set_gen3_rproc_boot_addr,
 };
 
+/* V3U firmware doesn't enable WDT reset and there won't be updates anymore */
+static const struct rst_config rcar_rst_v3u __initconst = {
+       .modemr = 0x00,         /* MODEMR0 and it has CPG related bits */
+       .configure = rcar_rst_v3u_enable_wdt_reset,
+};
+
 static const struct rst_config rcar_rst_gen4 __initconst = {
        .modemr = 0x00,         /* MODEMR0 and it has CPG related bits */
 };
@@ -101,7 +114,7 @@ static const struct of_device_id rcar_rst_matches[] __initconst = {
        { .compatible = "renesas,r8a77990-rst", .data = &rcar_rst_gen3 },
        { .compatible = "renesas,r8a77995-rst", .data = &rcar_rst_gen3 },
        /* R-Car Gen4 */
-       { .compatible = "renesas,r8a779a0-rst", .data = &rcar_rst_gen4 },
+       { .compatible = "renesas,r8a779a0-rst", .data = &rcar_rst_v3u },
        { .compatible = "renesas,r8a779f0-rst", .data = &rcar_rst_gen4 },
        { .compatible = "renesas,r8a779g0-rst", .data = &rcar_rst_gen4 },
        { /* sentinel */ }