This is taken from Linux kernel 5.17, and contains just bare minimum
functionality: CPU, UART and system timer.

Additional functionality (from newer kernel versions) will be added
later. Note that the Linux side is under active development.

Signed-off-by: Ralph Siemsen <ralph.siem...@linaro.org>
---
The following changes were made, compared with Linux 5.17:

1) Add node for system controller registers.
   Declare it as syscon to provide a regmap interface.

2) In the clock controller node (renesas,r9a06g032-sysctrl),
   replace regs with regmap.

3) Add syscon-reset node, making use of the syscon regmap.

4) Add syscon phandle to ddrctrl. Used for checking h/w version.

5) Simplify the compatible string for all the UARTS, as per
   doc/device-tree-bindings/serial/snps-dw-apb-uart.txt

I could not find a way to avoid 1) and 2). Putting "syscon" in the
compatible string for the clock controller leads to a catch-22,
where the driver fails to initialize, and then boot hangs.

(no changes since v3)

Changes in v3:
- add syscon phandle to ddrctl
- simplify UART compatible strings

 arch/arm/dts/r9a06g032.dtsi                   | 226 ++++++++++++++++++
 include/dt-bindings/clock/r9a06g032-sysctrl.h | 148 ++++++++++++
 2 files changed, 374 insertions(+)
 create mode 100644 arch/arm/dts/r9a06g032.dtsi
 create mode 100644 include/dt-bindings/clock/r9a06g032-sysctrl.h

diff --git a/arch/arm/dts/r9a06g032.dtsi b/arch/arm/dts/r9a06g032.dtsi
new file mode 100644
index 0000000000..e0ddffb074
--- /dev/null
+++ b/arch/arm/dts/r9a06g032.dtsi
@@ -0,0 +1,226 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Base Device Tree Source for the Renesas RZ/N1D (R9A06G032)
+ *
+ * Copyright (C) 2018 Renesas Electronics Europe Limited
+ *
+ */
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/r9a06g032-sysctrl.h>
+
+/ {
+       compatible = "renesas,r9a06g032";
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a7";
+                       reg = <0>;
+                       clocks = <&sysctrl R9A06G032_CLK_A7MP>;
+               };
+
+               cpu@1 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a7";
+                       reg = <1>;
+                       clocks = <&sysctrl R9A06G032_CLK_A7MP>;
+                       enable-method = "renesas,r9a06g032-smp";
+                       cpu-release-addr = <0 0x4000c204>;
+               };
+       };
+
+       ext_jtag_clk: extjtagclk {
+               #clock-cells = <0>;
+               compatible = "fixed-clock";
+               clock-frequency = <0>;
+       };
+
+       ext_mclk: extmclk {
+               #clock-cells = <0>;
+               compatible = "fixed-clock";
+               clock-frequency = <40000000>;
+       };
+
+       ext_rgmii_ref: extrgmiiref {
+               #clock-cells = <0>;
+               compatible = "fixed-clock";
+               clock-frequency = <0>;
+       };
+
+       ext_rtc_clk: extrtcclk {
+               #clock-cells = <0>;
+               compatible = "fixed-clock";
+               clock-frequency = <0>;
+       };
+
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               interrupt-parent = <&gic>;
+               ranges;
+
+               plat_regs: system-controller@4000c000 {
+                       compatible = "syscon";
+                       reg = <0x4000c000 0x1000>;
+                       u-boot,dm-pre-reloc;
+               };
+
+               sysctrl: clock {
+                       compatible = "renesas,r9a06g032-sysctrl";
+                       #clock-cells = <1>;
+                       regmap = <&plat_regs>;
+                       u-boot,dm-pre-reloc;
+
+                       clocks = <&ext_mclk>, <&ext_rtc_clk>,
+                                       <&ext_jtag_clk>, <&ext_rgmii_ref>;
+                       clock-names = "mclk", "rtc", "jtag", "rgmii_ref_ext";
+               };
+
+               ddrctrl: memory-controller@4000d000 {
+                       compatible = "cadence,ddr-ctrl";
+                       reg = <0x4000d000 0x1000>, <0x4000e000 0x100>;
+                       reg-names = "ddrc", "phy";
+                       interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&sysctrl R9A06G032_CLK_DDRC>, <&sysctrl 
R9A06G032_HCLK_DDRC>;
+                       clock-names = "clk_ddrc", "hclk_ddrc";
+                       syscon = <&plat_regs>;
+                       status = "disabled";
+               };
+
+               uart0: serial@40060000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x40060000 0x400>;
+                       interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&sysctrl R9A06G032_CLK_UART0>, <&sysctrl 
R9A06G032_HCLK_UART0>;
+                       clock-names = "baudclk", "apb_pclk";
+                       status = "disabled";
+               };
+
+               uart1: serial@40061000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x40061000 0x400>;
+                       interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&sysctrl R9A06G032_CLK_UART1>, <&sysctrl 
R9A06G032_HCLK_UART1>;
+                       clock-names = "baudclk", "apb_pclk";
+                       status = "disabled";
+               };
+
+               uart2: serial@40062000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x40062000 0x400>;
+                       interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&sysctrl R9A06G032_CLK_UART2>, <&sysctrl 
R9A06G032_HCLK_UART2>;
+                       clock-names = "baudclk", "apb_pclk";
+                       status = "disabled";
+               };
+
+               uart3: serial@50000000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x50000000 0x400>;
+                       interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&sysctrl R9A06G032_CLK_UART3>, <&sysctrl 
R9A06G032_HCLK_UART3>;
+                       clock-names = "baudclk", "apb_pclk";
+                       status = "disabled";
+               };
+
+               uart4: serial@50001000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x50001000 0x400>;
+                       interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&sysctrl R9A06G032_CLK_UART4>, <&sysctrl 
R9A06G032_HCLK_UART4>;
+                       clock-names = "baudclk", "apb_pclk";
+                       status = "disabled";
+               };
+
+               uart5: serial@50002000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x50002000 0x400>;
+                       interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&sysctrl R9A06G032_CLK_UART5>, <&sysctrl 
R9A06G032_HCLK_UART5>;
+                       clock-names = "baudclk", "apb_pclk";
+                       status = "disabled";
+               };
+
+               uart6: serial@50003000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x50003000 0x400>;
+                       interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&sysctrl R9A06G032_CLK_UART6>, <&sysctrl 
R9A06G032_HCLK_UART6>;
+                       clock-names = "baudclk", "apb_pclk";
+                       status = "disabled";
+               };
+
+               uart7: serial@50004000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x50004000 0x400>;
+                       interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&sysctrl R9A06G032_CLK_UART7>, <&sysctrl 
R9A06G032_HCLK_UART7>;
+                       clock-names = "baudclk", "apb_pclk";
+                       status = "disabled";
+               };
+
+               pinctrl: pinctrl@40067000 {
+                       compatible = "renesas,r9a06g032-pinctrl", 
"renesas,rzn1-pinctrl";
+                       reg = <0x40067000 0x1000>, <0x51000000 0x480>;
+                       clocks = <&sysctrl R9A06G032_HCLK_PINCONFIG>;
+                       clock-names = "bus";
+                       status = "disabled";
+               };
+
+               gic: interrupt-controller@44101000 {
+                       compatible = "arm,gic-400", "arm,cortex-a7-gic";
+                       interrupt-controller;
+                       #interrupt-cells = <3>;
+                       reg = <0x44101000 0x1000>, /* Distributer */
+                             <0x44102000 0x2000>, /* CPU interface */
+                             <0x44104000 0x2000>, /* Virt interface control */
+                             <0x44106000 0x2000>; /* Virt CPU interface */
+                       interrupts =
+                               <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(2) | 
IRQ_TYPE_LEVEL_HIGH)>;
+               };
+       };
+
+       timer {
+               compatible = "arm,cortex-a7-timer",
+                            "arm,armv7-timer";
+               interrupt-parent = <&gic>;
+               arm,cpu-registers-not-fw-configured;
+               always-on;
+               interrupts =
+                       <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | 
IRQ_TYPE_LEVEL_LOW)>,
+                       <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | 
IRQ_TYPE_LEVEL_LOW)>,
+                       <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | 
IRQ_TYPE_LEVEL_LOW)>,
+                       <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | 
IRQ_TYPE_LEVEL_LOW)>;
+       };
+
+       reboot {
+               compatible = "syscon-reboot";
+               regmap = <&plat_regs>;
+               offset = <0x198>;       /* sysctrl.RSTEN */
+               mask = <0x40>;          /* bit 6 = SWRST_REQ */
+               value = <0x40>;
+       };
+};
diff --git a/include/dt-bindings/clock/r9a06g032-sysctrl.h 
b/include/dt-bindings/clock/r9a06g032-sysctrl.h
new file mode 100644
index 0000000000..90c0f3dc1b
--- /dev/null
+++ b/include/dt-bindings/clock/r9a06g032-sysctrl.h
@@ -0,0 +1,148 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * R9A06G032 sysctrl IDs
+ *
+ * Copyright (C) 2018 Renesas Electronics Europe Limited
+ *
+ * Michel Pollet <michel.pol...@bp.renesas.com>, <buser...@gmail.com>
+ */
+
+#ifndef __DT_BINDINGS_R9A06G032_SYSCTRL_H__
+#define __DT_BINDINGS_R9A06G032_SYSCTRL_H__
+
+#define R9A06G032_CLK_PLL_USB          1
+#define R9A06G032_CLK_48               1       /* AKA CLK_PLL_USB */
+#define R9A06G032_MSEBIS_CLK           3       /* AKA CLKOUT_D16 */
+#define R9A06G032_MSEBIM_CLK           3       /* AKA CLKOUT_D16 */
+#define R9A06G032_CLK_DDRPHY_PLLCLK    5       /* AKA CLKOUT_D1OR2 */
+#define R9A06G032_CLK50                        6       /* AKA CLKOUT_D20 */
+#define R9A06G032_CLK25                        7       /* AKA CLKOUT_D40 */
+#define R9A06G032_CLK125               9       /* AKA CLKOUT_D8 */
+#define R9A06G032_CLK_P5_PG1           17      /* AKA DIV_P5_PG */
+#define R9A06G032_CLK_REF_SYNC         21      /* AKA DIV_REF_SYNC */
+#define R9A06G032_CLK_25_PG4           26
+#define R9A06G032_CLK_25_PG5           27
+#define R9A06G032_CLK_25_PG6           28
+#define R9A06G032_CLK_25_PG7           29
+#define R9A06G032_CLK_25_PG8           30
+#define R9A06G032_CLK_ADC              31
+#define R9A06G032_CLK_ECAT100          32
+#define R9A06G032_CLK_HSR100           33
+#define R9A06G032_CLK_I2C0             34
+#define R9A06G032_CLK_I2C1             35
+#define R9A06G032_CLK_MII_REF          36
+#define R9A06G032_CLK_NAND             37
+#define R9A06G032_CLK_NOUSBP2_PG6      38
+#define R9A06G032_CLK_P1_PG2           39
+#define R9A06G032_CLK_P1_PG3           40
+#define R9A06G032_CLK_P1_PG4           41
+#define R9A06G032_CLK_P4_PG3           42
+#define R9A06G032_CLK_P4_PG4           43
+#define R9A06G032_CLK_P6_PG1           44
+#define R9A06G032_CLK_P6_PG2           45
+#define R9A06G032_CLK_P6_PG3           46
+#define R9A06G032_CLK_P6_PG4           47
+#define R9A06G032_CLK_PCI_USB          48
+#define R9A06G032_CLK_QSPI0            49
+#define R9A06G032_CLK_QSPI1            50
+#define R9A06G032_CLK_RGMII_REF                51
+#define R9A06G032_CLK_RMII_REF         52
+#define R9A06G032_CLK_SDIO0            53
+#define R9A06G032_CLK_SDIO1            54
+#define R9A06G032_CLK_SERCOS100                55
+#define R9A06G032_CLK_SLCD             56
+#define R9A06G032_CLK_SPI0             57
+#define R9A06G032_CLK_SPI1             58
+#define R9A06G032_CLK_SPI2             59
+#define R9A06G032_CLK_SPI3             60
+#define R9A06G032_CLK_SPI4             61
+#define R9A06G032_CLK_SPI5             62
+#define R9A06G032_CLK_SWITCH           63
+#define R9A06G032_HCLK_ECAT125         65
+#define R9A06G032_HCLK_PINCONFIG       66
+#define R9A06G032_HCLK_SERCOS          67
+#define R9A06G032_HCLK_SGPIO2          68
+#define R9A06G032_HCLK_SGPIO3          69
+#define R9A06G032_HCLK_SGPIO4          70
+#define R9A06G032_HCLK_TIMER0          71
+#define R9A06G032_HCLK_TIMER1          72
+#define R9A06G032_HCLK_USBF            73
+#define R9A06G032_HCLK_USBH            74
+#define R9A06G032_HCLK_USBPM           75
+#define R9A06G032_CLK_48_PG_F          76
+#define R9A06G032_CLK_48_PG4           77
+#define R9A06G032_CLK_DDRPHY_PCLK      81      /* AKA CLK_REF_SYNC_D4 */
+#define R9A06G032_CLK_FW               81      /* AKA CLK_REF_SYNC_D4 */
+#define R9A06G032_CLK_CRYPTO           81      /* AKA CLK_REF_SYNC_D4 */
+#define R9A06G032_CLK_A7MP             84      /* AKA DIV_CA7 */
+#define R9A06G032_HCLK_CAN0            85
+#define R9A06G032_HCLK_CAN1            86
+#define R9A06G032_HCLK_DELTASIGMA      87
+#define R9A06G032_HCLK_PWMPTO          88
+#define R9A06G032_HCLK_RSV             89
+#define R9A06G032_HCLK_SGPIO0          90
+#define R9A06G032_HCLK_SGPIO1          91
+#define R9A06G032_RTOS_MDC             92
+#define R9A06G032_CLK_CM3              93
+#define R9A06G032_CLK_DDRC             94
+#define R9A06G032_CLK_ECAT25           95
+#define R9A06G032_CLK_HSR50            96
+#define R9A06G032_CLK_HW_RTOS          97
+#define R9A06G032_CLK_SERCOS50         98
+#define R9A06G032_HCLK_ADC             99
+#define R9A06G032_HCLK_CM3             100
+#define R9A06G032_HCLK_CRYPTO_EIP150   101
+#define R9A06G032_HCLK_CRYPTO_EIP93    102
+#define R9A06G032_HCLK_DDRC            103
+#define R9A06G032_HCLK_DMA0            104
+#define R9A06G032_HCLK_DMA1            105
+#define R9A06G032_HCLK_GMAC0           106
+#define R9A06G032_HCLK_GMAC1           107
+#define R9A06G032_HCLK_GPIO0           108
+#define R9A06G032_HCLK_GPIO1           109
+#define R9A06G032_HCLK_GPIO2           110
+#define R9A06G032_HCLK_HSR             111
+#define R9A06G032_HCLK_I2C0            112
+#define R9A06G032_HCLK_I2C1            113
+#define R9A06G032_HCLK_LCD             114
+#define R9A06G032_HCLK_MSEBI_M         115
+#define R9A06G032_HCLK_MSEBI_S         116
+#define R9A06G032_HCLK_NAND            117
+#define R9A06G032_HCLK_PG_I            118
+#define R9A06G032_HCLK_PG19            119
+#define R9A06G032_HCLK_PG20            120
+#define R9A06G032_HCLK_PG3             121
+#define R9A06G032_HCLK_PG4             122
+#define R9A06G032_HCLK_QSPI0           123
+#define R9A06G032_HCLK_QSPI1           124
+#define R9A06G032_HCLK_ROM             125
+#define R9A06G032_HCLK_RTC             126
+#define R9A06G032_HCLK_SDIO0           127
+#define R9A06G032_HCLK_SDIO1           128
+#define R9A06G032_HCLK_SEMAP           129
+#define R9A06G032_HCLK_SPI0            130
+#define R9A06G032_HCLK_SPI1            131
+#define R9A06G032_HCLK_SPI2            132
+#define R9A06G032_HCLK_SPI3            133
+#define R9A06G032_HCLK_SPI4            134
+#define R9A06G032_HCLK_SPI5            135
+#define R9A06G032_HCLK_SWITCH          136
+#define R9A06G032_HCLK_SWITCH_RG       137
+#define R9A06G032_HCLK_UART0           138
+#define R9A06G032_HCLK_UART1           139
+#define R9A06G032_HCLK_UART2           140
+#define R9A06G032_HCLK_UART3           141
+#define R9A06G032_HCLK_UART4           142
+#define R9A06G032_HCLK_UART5           143
+#define R9A06G032_HCLK_UART6           144
+#define R9A06G032_HCLK_UART7           145
+#define R9A06G032_CLK_UART0            146
+#define R9A06G032_CLK_UART1            147
+#define R9A06G032_CLK_UART2            148
+#define R9A06G032_CLK_UART3            149
+#define R9A06G032_CLK_UART4            150
+#define R9A06G032_CLK_UART5            151
+#define R9A06G032_CLK_UART6            152
+#define R9A06G032_CLK_UART7            153
+
+#endif /* __DT_BINDINGS_R9A06G032_SYSCTRL_H__ */
-- 
2.25.1

Reply via email to