summaryrefslogtreecommitdiffstats
path: root/drivers/soc
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2018-03-27 09:45:03 -0400
committerArnd Bergmann <arnd@arndb.de>2018-03-27 09:45:03 -0400
commit59162c936692ff064c12676e708c8ef82a82436d (patch)
tree1e3c4f07e77fe8144cd396febfc2def122fc02b7 /drivers/soc
parent8650b9feb0d8e7e9cc79ca118e1bb606188de899 (diff)
parent01d675f159e0f0792947fb823cf2425da4d747ad (diff)
Merge tag 'renesas-soc-for-v4.17' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/soc
Pull "Renesas ARM Based SoC Updates for v4.17" from Simon Horman: 01d675f159e0 ARM: shmobile: rcar-gen2: Add watchdog support 58adf1ba0d22 ARM: shmobile: Add watchdog support * SoC - Identify R-Car V3H (r8a77980) and M3N (r8a77965) - Enable R-Car Gen2 regulator quirk for Stout board with H3 (r8a7790) SoC Marek Vaust says "Regulator setup is suboptimal on H2 Stout too. The Stout newly has two DA9210 regulators, so the quirk is extended to handle another DA9210 at i2c address 0x70." - Add watchdog support This is the SoC portion of the following solution. It is not yet enabled in DT as it is not functional without clock dependencies in place. Fabrizio Castro says "this series has been around for some time as RFC, and it has collected useful comments from the community along the way. The solution proposed by this patch set works for most R-Car Gen2 and RZ/G1 devices, but not all of them. We now know that for some R-Car Gen2 early revisions there is no proper software fix. Anyway, no product has been built around early revisions, but development boards mounting early revisions (basically prototypes) are still out there. As a result, this series isn't enabling the internal watchdog on R-Car Gen2 boards, developers may enable it in board specific device trees if needed. This series has been tested by me on the iwg20d, iwg22d, Lager, Alt, and Koelsch boards. The problem =========== To deal with SMP on R-Car Gen2 and RZ/G1, we install a reset vector to ICRAM1 and we program the [S]BAR registers so that when we turn ON the non-boot CPUs they are redirected to the reset vector installed by Linux in ICRAM1, and eventually they continue the execution to RAM, where the SMP bring-up code will take care of the rest. The content of the [S]BAR registers survives a watchdog triggered reset, and as such after the watchdog fires the boot core will try and execute the SMP bring-up code instead of jumping to the bootrom code. The fix ======= The main strategy for the solution is to let the reset vector decide if it needs to jump to shmobile_boot_fn or to the bootrom code. In a watchdog triggered reset scenario, since the [S]BAR registers keep their values, the boot CPU will jump into the newly designed reset vector, the assembly routine will eventually test WOVF (a bit in register RWTCSRA that indicates if the watchdog counter has overflown, the value of this bit gets retained in this scenario), and jump to the bootrom code which will in turn load up the bootloader, etc. When bringing up SMP or using CPU hotplug, the reset vector will jump to shmobile_boot_fn instead." * R-Car Rst - Add support for R-Car V3H (r8a77980) and V3H (r8a77980) * R-Car SYSC - Mark rcar_sysc_matches[] __initconst Geert Uytterhoeven says "This frees another 1764 bytes (arm32/shmobile_defconfig) or 1000 bytes (arm64/renesas_defconfig) of memory after kernel init." - Fix power area parents Sergei Shtylyov says "According to the figure 9.2(b) of the R-Car Series, 3rd Generation User’s Manual: Hardware Rev. 0.80 the A2IRn and A2SCn power areas in R8A77970 have the A3IR area as a parent, thus the SYSC driver has those parents wrong.." - Add support for R-Car V3H (r8a77980) and V3H (r8a77980) * tag 'renesas-soc-for-v4.17' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/horms/renesas: ARM: shmobile: rcar-gen2: Add watchdog support ARM: shmobile: Add watchdog support ARM: shmobile: rcar-gen2: Fix error check in regulator quirk soc: renesas: rcar-rst: Add support for R-Car M3-N ARM: shmobile: stout: enable R-Car Gen2 regulator quirk soc: renesas: rcar-sysc: Add R-Car M3-N support soc: renesas: Identify R-Car M3-N soc: renesas: rcar-sysc: add R8A77980 support dt-bindings: power: add R8A77980 SYSC power domain definitions soc: renesas: r8a77970-sysc: fix power area parents soc: renesas: rcar-rst: Enable watchdog as reset trigger for Gen2 soc: renesas: rcar-rst: add R8A77980 support soc: renesas: identify R-Car V3H soc: renesas: rcar-sysc: Mark rcar_sysc_matches[] __initconst
Diffstat (limited to 'drivers/soc')
-rw-r--r--drivers/soc/renesas/Kconfig14
-rw-r--r--drivers/soc/renesas/Makefile2
-rw-r--r--drivers/soc/renesas/r8a77965-sysc.c37
-rw-r--r--drivers/soc/renesas/r8a77970-sysc.c12
-rw-r--r--drivers/soc/renesas/r8a77980-sysc.c52
-rw-r--r--drivers/soc/renesas/rcar-rst.c37
-rw-r--r--drivers/soc/renesas/rcar-sysc.c8
-rw-r--r--drivers/soc/renesas/rcar-sysc.h2
-rw-r--r--drivers/soc/renesas/renesas-soc.c16
9 files changed, 165 insertions, 15 deletions
diff --git a/drivers/soc/renesas/Kconfig b/drivers/soc/renesas/Kconfig
index 09550b1da56d..3bbe6114a420 100644
--- a/drivers/soc/renesas/Kconfig
+++ b/drivers/soc/renesas/Kconfig
@@ -3,8 +3,8 @@ config SOC_RENESAS
3 default y if ARCH_RENESAS 3 default y if ARCH_RENESAS
4 select SOC_BUS 4 select SOC_BUS
5 select RST_RCAR if ARCH_RCAR_GEN1 || ARCH_RCAR_GEN2 || \ 5 select RST_RCAR if ARCH_RCAR_GEN1 || ARCH_RCAR_GEN2 || \
6 ARCH_R8A7795 || ARCH_R8A7796 || ARCH_R8A77970 || \ 6 ARCH_R8A7795 || ARCH_R8A7796 || ARCH_R8A77965 || \
7 ARCH_R8A77995 7 ARCH_R8A77970 || ARCH_R8A77980 || ARCH_R8A77995
8 select SYSC_R8A7743 if ARCH_R8A7743 8 select SYSC_R8A7743 if ARCH_R8A7743
9 select SYSC_R8A7745 if ARCH_R8A7745 9 select SYSC_R8A7745 if ARCH_R8A7745
10 select SYSC_R8A7779 if ARCH_R8A7779 10 select SYSC_R8A7779 if ARCH_R8A7779
@@ -14,7 +14,9 @@ config SOC_RENESAS
14 select SYSC_R8A7794 if ARCH_R8A7794 14 select SYSC_R8A7794 if ARCH_R8A7794
15 select SYSC_R8A7795 if ARCH_R8A7795 15 select SYSC_R8A7795 if ARCH_R8A7795
16 select SYSC_R8A7796 if ARCH_R8A7796 16 select SYSC_R8A7796 if ARCH_R8A7796
17 select SYSC_R8A77965 if ARCH_R8A77965
17 select SYSC_R8A77970 if ARCH_R8A77970 18 select SYSC_R8A77970 if ARCH_R8A77970
19 select SYSC_R8A77980 if ARCH_R8A77980
18 select SYSC_R8A77995 if ARCH_R8A77995 20 select SYSC_R8A77995 if ARCH_R8A77995
19 21
20if SOC_RENESAS 22if SOC_RENESAS
@@ -56,10 +58,18 @@ config SYSC_R8A7796
56 bool "R-Car M3-W System Controller support" if COMPILE_TEST 58 bool "R-Car M3-W System Controller support" if COMPILE_TEST
57 select SYSC_RCAR 59 select SYSC_RCAR
58 60
61config SYSC_R8A77965
62 bool "R-Car M3-N System Controller support" if COMPILE_TEST
63 select SYSC_RCAR
64
59config SYSC_R8A77970 65config SYSC_R8A77970
60 bool "R-Car V3M System Controller support" if COMPILE_TEST 66 bool "R-Car V3M System Controller support" if COMPILE_TEST
61 select SYSC_RCAR 67 select SYSC_RCAR
62 68
69config SYSC_R8A77980
70 bool "R-Car V3H System Controller support" if COMPILE_TEST
71 select SYSC_RCAR
72
63config SYSC_R8A77995 73config SYSC_R8A77995
64 bool "R-Car D3 System Controller support" if COMPILE_TEST 74 bool "R-Car D3 System Controller support" if COMPILE_TEST
65 select SYSC_RCAR 75 select SYSC_RCAR
diff --git a/drivers/soc/renesas/Makefile b/drivers/soc/renesas/Makefile
index 845d62a08ce1..ccb5ec57a262 100644
--- a/drivers/soc/renesas/Makefile
+++ b/drivers/soc/renesas/Makefile
@@ -12,7 +12,9 @@ obj-$(CONFIG_SYSC_R8A7792) += r8a7792-sysc.o
12obj-$(CONFIG_SYSC_R8A7794) += r8a7794-sysc.o 12obj-$(CONFIG_SYSC_R8A7794) += r8a7794-sysc.o
13obj-$(CONFIG_SYSC_R8A7795) += r8a7795-sysc.o 13obj-$(CONFIG_SYSC_R8A7795) += r8a7795-sysc.o
14obj-$(CONFIG_SYSC_R8A7796) += r8a7796-sysc.o 14obj-$(CONFIG_SYSC_R8A7796) += r8a7796-sysc.o
15obj-$(CONFIG_SYSC_R8A77965) += r8a77965-sysc.o
15obj-$(CONFIG_SYSC_R8A77970) += r8a77970-sysc.o 16obj-$(CONFIG_SYSC_R8A77970) += r8a77970-sysc.o
17obj-$(CONFIG_SYSC_R8A77980) += r8a77980-sysc.o
16obj-$(CONFIG_SYSC_R8A77995) += r8a77995-sysc.o 18obj-$(CONFIG_SYSC_R8A77995) += r8a77995-sysc.o
17 19
18# Family 20# Family
diff --git a/drivers/soc/renesas/r8a77965-sysc.c b/drivers/soc/renesas/r8a77965-sysc.c
new file mode 100644
index 000000000000..d7f7928e3c07
--- /dev/null
+++ b/drivers/soc/renesas/r8a77965-sysc.c
@@ -0,0 +1,37 @@
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Renesas R-Car M3-N System Controller
4 * Copyright (C) 2018 Jacopo Mondi <jacopo+renesas@jmondi.org>
5 *
6 * Based on Renesas R-Car M3-W System Controller
7 * Copyright (C) 2016 Glider bvba
8 */
9
10#include <linux/bug.h>
11#include <linux/kernel.h>
12
13#include <dt-bindings/power/r8a77965-sysc.h>
14
15#include "rcar-sysc.h"
16
17static const struct rcar_sysc_area r8a77965_areas[] __initconst = {
18 { "always-on", 0, 0, R8A77965_PD_ALWAYS_ON, -1, PD_ALWAYS_ON },
19 { "ca57-scu", 0x1c0, 0, R8A77965_PD_CA57_SCU, R8A77965_PD_ALWAYS_ON,
20 PD_SCU },
21 { "ca57-cpu0", 0x80, 0, R8A77965_PD_CA57_CPU0, R8A77965_PD_CA57_SCU,
22 PD_CPU_NOCR },
23 { "ca57-cpu1", 0x80, 1, R8A77965_PD_CA57_CPU1, R8A77965_PD_CA57_SCU,
24 PD_CPU_NOCR },
25 { "cr7", 0x240, 0, R8A77965_PD_CR7, R8A77965_PD_ALWAYS_ON },
26 { "a3vc", 0x380, 0, R8A77965_PD_A3VC, R8A77965_PD_ALWAYS_ON },
27 { "a3vp", 0x340, 0, R8A77965_PD_A3VP, R8A77965_PD_ALWAYS_ON },
28 { "a2vc1", 0x3c0, 1, R8A77965_PD_A2VC1, R8A77965_PD_A3VC },
29 { "3dg-a", 0x100, 0, R8A77965_PD_3DG_A, R8A77965_PD_ALWAYS_ON },
30 { "3dg-b", 0x100, 1, R8A77965_PD_3DG_B, R8A77965_PD_3DG_A },
31 { "a3ir", 0x180, 0, R8A77965_PD_A3IR, R8A77965_PD_ALWAYS_ON },
32};
33
34const struct rcar_sysc_info r8a77965_sysc_info __initconst = {
35 .areas = r8a77965_areas,
36 .num_areas = ARRAY_SIZE(r8a77965_areas),
37};
diff --git a/drivers/soc/renesas/r8a77970-sysc.c b/drivers/soc/renesas/r8a77970-sysc.c
index 8c614164718e..caf894f193ed 100644
--- a/drivers/soc/renesas/r8a77970-sysc.c
+++ b/drivers/soc/renesas/r8a77970-sysc.c
@@ -25,12 +25,12 @@ static const struct rcar_sysc_area r8a77970_areas[] __initconst = {
25 PD_CPU_NOCR }, 25 PD_CPU_NOCR },
26 { "cr7", 0x240, 0, R8A77970_PD_CR7, R8A77970_PD_ALWAYS_ON }, 26 { "cr7", 0x240, 0, R8A77970_PD_CR7, R8A77970_PD_ALWAYS_ON },
27 { "a3ir", 0x180, 0, R8A77970_PD_A3IR, R8A77970_PD_ALWAYS_ON }, 27 { "a3ir", 0x180, 0, R8A77970_PD_A3IR, R8A77970_PD_ALWAYS_ON },
28 { "a2ir0", 0x400, 0, R8A77970_PD_A2IR0, R8A77970_PD_ALWAYS_ON }, 28 { "a2ir0", 0x400, 0, R8A77970_PD_A2IR0, R8A77970_PD_A3IR },
29 { "a2ir1", 0x400, 1, R8A77970_PD_A2IR1, R8A77970_PD_A2IR0 }, 29 { "a2ir1", 0x400, 1, R8A77970_PD_A2IR1, R8A77970_PD_A3IR },
30 { "a2ir2", 0x400, 2, R8A77970_PD_A2IR2, R8A77970_PD_A2IR0 }, 30 { "a2ir2", 0x400, 2, R8A77970_PD_A2IR2, R8A77970_PD_A3IR },
31 { "a2ir3", 0x400, 3, R8A77970_PD_A2IR3, R8A77970_PD_A2IR0 }, 31 { "a2ir3", 0x400, 3, R8A77970_PD_A2IR3, R8A77970_PD_A3IR },
32 { "a2sc0", 0x400, 4, R8A77970_PD_A2SC0, R8A77970_PD_ALWAYS_ON }, 32 { "a2sc0", 0x400, 4, R8A77970_PD_A2SC0, R8A77970_PD_A3IR },
33 { "a2sc1", 0x400, 5, R8A77970_PD_A2SC1, R8A77970_PD_A2SC0 }, 33 { "a2sc1", 0x400, 5, R8A77970_PD_A2SC1, R8A77970_PD_A3IR },
34}; 34};
35 35
36const struct rcar_sysc_info r8a77970_sysc_info __initconst = { 36const struct rcar_sysc_info r8a77970_sysc_info __initconst = {
diff --git a/drivers/soc/renesas/r8a77980-sysc.c b/drivers/soc/renesas/r8a77980-sysc.c
new file mode 100644
index 000000000000..9265fb525ef3
--- /dev/null
+++ b/drivers/soc/renesas/r8a77980-sysc.c
@@ -0,0 +1,52 @@
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Renesas R-Car V3H System Controller
4 *
5 * Copyright (C) 2018 Renesas Electronics Corp.
6 * Copyright (C) 2018 Cogent Embedded, Inc.
7 */
8
9#include <linux/bug.h>
10#include <linux/kernel.h>
11
12#include <dt-bindings/power/r8a77980-sysc.h>
13
14#include "rcar-sysc.h"
15
16static const struct rcar_sysc_area r8a77980_areas[] __initconst = {
17 { "always-on", 0, 0, R8A77980_PD_ALWAYS_ON, -1, PD_ALWAYS_ON },
18 { "ca53-scu", 0x140, 0, R8A77980_PD_CA53_SCU, R8A77980_PD_ALWAYS_ON,
19 PD_SCU },
20 { "ca53-cpu0", 0x200, 0, R8A77980_PD_CA53_CPU0, R8A77980_PD_CA53_SCU,
21 PD_CPU_NOCR },
22 { "ca53-cpu1", 0x200, 1, R8A77980_PD_CA53_CPU1, R8A77980_PD_CA53_SCU,
23 PD_CPU_NOCR },
24 { "ca53-cpu2", 0x200, 2, R8A77980_PD_CA53_CPU2, R8A77980_PD_CA53_SCU,
25 PD_CPU_NOCR },
26 { "ca53-cpu3", 0x200, 3, R8A77980_PD_CA53_CPU3, R8A77980_PD_CA53_SCU,
27 PD_CPU_NOCR },
28 { "cr7", 0x240, 0, R8A77980_PD_CR7, R8A77980_PD_ALWAYS_ON },
29 { "a3ir", 0x180, 0, R8A77980_PD_A3IR, R8A77980_PD_ALWAYS_ON },
30 { "a2ir0", 0x400, 0, R8A77980_PD_A2IR0, R8A77980_PD_A3IR },
31 { "a2ir1", 0x400, 1, R8A77980_PD_A2IR1, R8A77980_PD_A3IR },
32 { "a2ir2", 0x400, 2, R8A77980_PD_A2IR2, R8A77980_PD_A3IR },
33 { "a2ir3", 0x400, 3, R8A77980_PD_A2IR3, R8A77980_PD_A3IR },
34 { "a2ir4", 0x400, 4, R8A77980_PD_A2IR4, R8A77980_PD_A3IR },
35 { "a2ir5", 0x400, 5, R8A77980_PD_A2IR5, R8A77980_PD_A3IR },
36 { "a2sc0", 0x400, 6, R8A77980_PD_A2SC0, R8A77980_PD_A3IR },
37 { "a2sc1", 0x400, 7, R8A77980_PD_A2SC1, R8A77980_PD_A3IR },
38 { "a2sc2", 0x400, 8, R8A77980_PD_A2SC2, R8A77980_PD_A3IR },
39 { "a2sc3", 0x400, 9, R8A77980_PD_A2SC3, R8A77980_PD_A3IR },
40 { "a2sc4", 0x400, 10, R8A77980_PD_A2SC4, R8A77980_PD_A3IR },
41 { "a2pd0", 0x400, 11, R8A77980_PD_A2PD0, R8A77980_PD_A3IR },
42 { "a2pd1", 0x400, 12, R8A77980_PD_A2PD1, R8A77980_PD_A3IR },
43 { "a2cn", 0x400, 13, R8A77980_PD_A2CN, R8A77980_PD_A3IR },
44 { "a3vip", 0x2c0, 0, R8A77980_PD_A3VIP, R8A77980_PD_ALWAYS_ON },
45 { "a3vip1", 0x300, 0, R8A77980_PD_A3VIP1, R8A77980_PD_A3VIP },
46 { "a3vip2", 0x280, 0, R8A77980_PD_A3VIP2, R8A77980_PD_A3VIP },
47};
48
49const struct rcar_sysc_info r8a77980_sysc_info __initconst = {
50 .areas = r8a77980_areas,
51 .num_areas = ARRAY_SIZE(r8a77980_areas),
52};
diff --git a/drivers/soc/renesas/rcar-rst.c b/drivers/soc/renesas/rcar-rst.c
index 3316b028f231..8e9cb7996ab0 100644
--- a/drivers/soc/renesas/rcar-rst.c
+++ b/drivers/soc/renesas/rcar-rst.c
@@ -13,8 +13,18 @@
13#include <linux/of_address.h> 13#include <linux/of_address.h>
14#include <linux/soc/renesas/rcar-rst.h> 14#include <linux/soc/renesas/rcar-rst.h>
15 15
16#define WDTRSTCR_RESET 0xA55A0002
17#define WDTRSTCR 0x0054
18
19static int rcar_rst_enable_wdt_reset(void __iomem *base)
20{
21 iowrite32(WDTRSTCR_RESET, base + WDTRSTCR);
22 return 0;
23}
24
16struct rst_config { 25struct rst_config {
17 unsigned int modemr; /* Mode Monitoring Register Offset */ 26 unsigned int modemr; /* Mode Monitoring Register Offset */
27 int (*configure)(void *base); /* Platform specific configuration */
18}; 28};
19 29
20static const struct rst_config rcar_rst_gen1 __initconst = { 30static const struct rst_config rcar_rst_gen1 __initconst = {
@@ -23,6 +33,11 @@ static const struct rst_config rcar_rst_gen1 __initconst = {
23 33
24static const struct rst_config rcar_rst_gen2 __initconst = { 34static const struct rst_config rcar_rst_gen2 __initconst = {
25 .modemr = 0x60, 35 .modemr = 0x60,
36 .configure = rcar_rst_enable_wdt_reset,
37};
38
39static const struct rst_config rcar_rst_gen3 __initconst = {
40 .modemr = 0x60,
26}; 41};
27 42
28static const struct of_device_id rcar_rst_matches[] __initconst = { 43static const struct of_device_id rcar_rst_matches[] __initconst = {
@@ -38,11 +53,13 @@ static const struct of_device_id rcar_rst_matches[] __initconst = {
38 { .compatible = "renesas,r8a7792-rst", .data = &rcar_rst_gen2 }, 53 { .compatible = "renesas,r8a7792-rst", .data = &rcar_rst_gen2 },
39 { .compatible = "renesas,r8a7793-rst", .data = &rcar_rst_gen2 }, 54 { .compatible = "renesas,r8a7793-rst", .data = &rcar_rst_gen2 },
40 { .compatible = "renesas,r8a7794-rst", .data = &rcar_rst_gen2 }, 55 { .compatible = "renesas,r8a7794-rst", .data = &rcar_rst_gen2 },
41 /* R-Car Gen3 is handled like R-Car Gen2 */ 56 /* R-Car Gen3 */
42 { .compatible = "renesas,r8a7795-rst", .data = &rcar_rst_gen2 }, 57 { .compatible = "renesas,r8a7795-rst", .data = &rcar_rst_gen3 },
43 { .compatible = "renesas,r8a7796-rst", .data = &rcar_rst_gen2 }, 58 { .compatible = "renesas,r8a7796-rst", .data = &rcar_rst_gen3 },
44 { .compatible = "renesas,r8a77970-rst", .data = &rcar_rst_gen2 }, 59 { .compatible = "renesas,r8a77965-rst", .data = &rcar_rst_gen3 },
45 { .compatible = "renesas,r8a77995-rst", .data = &rcar_rst_gen2 }, 60 { .compatible = "renesas,r8a77970-rst", .data = &rcar_rst_gen3 },
61 { .compatible = "renesas,r8a77980-rst", .data = &rcar_rst_gen3 },
62 { .compatible = "renesas,r8a77995-rst", .data = &rcar_rst_gen3 },
46 { /* sentinel */ } 63 { /* sentinel */ }
47}; 64};
48 65
@@ -71,6 +88,14 @@ static int __init rcar_rst_init(void)
71 rcar_rst_base = base; 88 rcar_rst_base = base;
72 cfg = match->data; 89 cfg = match->data;
73 saved_mode = ioread32(base + cfg->modemr); 90 saved_mode = ioread32(base + cfg->modemr);
91 if (cfg->configure) {
92 error = cfg->configure(base);
93 if (error) {
94 pr_warn("%pOF: Cannot run SoC specific configuration\n",
95 np);
96 goto out_put;
97 }
98 }
74 99
75 pr_debug("%pOF: MODE = 0x%08x\n", np, saved_mode); 100 pr_debug("%pOF: MODE = 0x%08x\n", np, saved_mode);
76 101
diff --git a/drivers/soc/renesas/rcar-sysc.c b/drivers/soc/renesas/rcar-sysc.c
index 52c25a5e2646..faf20e719361 100644
--- a/drivers/soc/renesas/rcar-sysc.c
+++ b/drivers/soc/renesas/rcar-sysc.c
@@ -254,7 +254,7 @@ finalize:
254 pm_genpd_init(genpd, gov, false); 254 pm_genpd_init(genpd, gov, false);
255} 255}
256 256
257static const struct of_device_id rcar_sysc_matches[] = { 257static const struct of_device_id rcar_sysc_matches[] __initconst = {
258#ifdef CONFIG_SYSC_R8A7743 258#ifdef CONFIG_SYSC_R8A7743
259 { .compatible = "renesas,r8a7743-sysc", .data = &r8a7743_sysc_info }, 259 { .compatible = "renesas,r8a7743-sysc", .data = &r8a7743_sysc_info },
260#endif 260#endif
@@ -284,9 +284,15 @@ static const struct of_device_id rcar_sysc_matches[] = {
284#ifdef CONFIG_SYSC_R8A7796 284#ifdef CONFIG_SYSC_R8A7796
285 { .compatible = "renesas,r8a7796-sysc", .data = &r8a7796_sysc_info }, 285 { .compatible = "renesas,r8a7796-sysc", .data = &r8a7796_sysc_info },
286#endif 286#endif
287#ifdef CONFIG_SYSC_R8A77965
288 { .compatible = "renesas,r8a77965-sysc", .data = &r8a77965_sysc_info },
289#endif
287#ifdef CONFIG_SYSC_R8A77970 290#ifdef CONFIG_SYSC_R8A77970
288 { .compatible = "renesas,r8a77970-sysc", .data = &r8a77970_sysc_info }, 291 { .compatible = "renesas,r8a77970-sysc", .data = &r8a77970_sysc_info },
289#endif 292#endif
293#ifdef CONFIG_SYSC_R8A77980
294 { .compatible = "renesas,r8a77980-sysc", .data = &r8a77980_sysc_info },
295#endif
290#ifdef CONFIG_SYSC_R8A77995 296#ifdef CONFIG_SYSC_R8A77995
291 { .compatible = "renesas,r8a77995-sysc", .data = &r8a77995_sysc_info }, 297 { .compatible = "renesas,r8a77995-sysc", .data = &r8a77995_sysc_info },
292#endif 298#endif
diff --git a/drivers/soc/renesas/rcar-sysc.h b/drivers/soc/renesas/rcar-sysc.h
index 9d9daf9eb91b..dcdc9ec8eba7 100644
--- a/drivers/soc/renesas/rcar-sysc.h
+++ b/drivers/soc/renesas/rcar-sysc.h
@@ -58,7 +58,9 @@ extern const struct rcar_sysc_info r8a7792_sysc_info;
58extern const struct rcar_sysc_info r8a7794_sysc_info; 58extern const struct rcar_sysc_info r8a7794_sysc_info;
59extern const struct rcar_sysc_info r8a7795_sysc_info; 59extern const struct rcar_sysc_info r8a7795_sysc_info;
60extern const struct rcar_sysc_info r8a7796_sysc_info; 60extern const struct rcar_sysc_info r8a7796_sysc_info;
61extern const struct rcar_sysc_info r8a77965_sysc_info;
61extern const struct rcar_sysc_info r8a77970_sysc_info; 62extern const struct rcar_sysc_info r8a77970_sysc_info;
63extern const struct rcar_sysc_info r8a77980_sysc_info;
62extern const struct rcar_sysc_info r8a77995_sysc_info; 64extern const struct rcar_sysc_info r8a77995_sysc_info;
63 65
64 66
diff --git a/drivers/soc/renesas/renesas-soc.c b/drivers/soc/renesas/renesas-soc.c
index 926b7fd6db2d..ea71c413c926 100644
--- a/drivers/soc/renesas/renesas-soc.c
+++ b/drivers/soc/renesas/renesas-soc.c
@@ -144,11 +144,21 @@ static const struct renesas_soc soc_rcar_m3_w __initconst __maybe_unused = {
144 .id = 0x52, 144 .id = 0x52,
145}; 145};
146 146
147static const struct renesas_soc soc_rcar_m3_n __initconst __maybe_unused = {
148 .family = &fam_rcar_gen3,
149 .id = 0x55,
150};
151
147static const struct renesas_soc soc_rcar_v3m __initconst __maybe_unused = { 152static const struct renesas_soc soc_rcar_v3m __initconst __maybe_unused = {
148 .family = &fam_rcar_gen3, 153 .family = &fam_rcar_gen3,
149 .id = 0x54, 154 .id = 0x54,
150}; 155};
151 156
157static const struct renesas_soc soc_rcar_v3h __initconst __maybe_unused = {
158 .family = &fam_rcar_gen3,
159 .id = 0x56,
160};
161
152static const struct renesas_soc soc_rcar_d3 __initconst __maybe_unused = { 162static const struct renesas_soc soc_rcar_d3 __initconst __maybe_unused = {
153 .family = &fam_rcar_gen3, 163 .family = &fam_rcar_gen3,
154 .id = 0x58, 164 .id = 0x58,
@@ -209,9 +219,15 @@ static const struct of_device_id renesas_socs[] __initconst = {
209#ifdef CONFIG_ARCH_R8A7796 219#ifdef CONFIG_ARCH_R8A7796
210 { .compatible = "renesas,r8a7796", .data = &soc_rcar_m3_w }, 220 { .compatible = "renesas,r8a7796", .data = &soc_rcar_m3_w },
211#endif 221#endif
222#ifdef CONFIG_ARCH_R8A77965
223 { .compatible = "renesas,r8a77965", .data = &soc_rcar_m3_n },
224#endif
212#ifdef CONFIG_ARCH_R8A77970 225#ifdef CONFIG_ARCH_R8A77970
213 { .compatible = "renesas,r8a77970", .data = &soc_rcar_v3m }, 226 { .compatible = "renesas,r8a77970", .data = &soc_rcar_v3m },
214#endif 227#endif
228#ifdef CONFIG_ARCH_R8A77980
229 { .compatible = "renesas,r8a77980", .data = &soc_rcar_v3h },
230#endif
215#ifdef CONFIG_ARCH_R8A77995 231#ifdef CONFIG_ARCH_R8A77995
216 { .compatible = "renesas,r8a77995", .data = &soc_rcar_d3 }, 232 { .compatible = "renesas,r8a77995", .data = &soc_rcar_d3 },
217#endif 233#endif