1 /*
2  * Copyright (c) 2024 Renesas Electronics Corporation
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_RENESAS_RZG_CLOCK_H_
8 #define ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_RENESAS_RZG_CLOCK_H_
9 
10 /** RZ clock configuration values */
11 #define RZ_IP_MASK         0xFF000000UL
12 #define RZ_IP_SHIFT        24UL
13 #define RZ_IP_CH_MASK      0xFF0000UL
14 #define RZ_IP_CH_SHIFT     16UL
15 #define RZ_CLOCK_MASK      0xFF00UL
16 #define RZ_CLOCK_SHIFT     8UL
17 #define RZ_CLOCK_DIV_MASK  0xFFUL
18 #define RZ_CLOCK_DIV_SHIFT 0UL
19 
20 #define RZ_IP_GTM   0UL /* General Timer */
21 #define RZ_IP_GPT   1UL /* General PWM Timer */
22 #define RZ_IP_SCIF  2UL /* Serial Communications Interface with FIFO */
23 #define RZ_IP_RIIC  3UL /* I2C Bus Interface */
24 #define RZ_IP_RSPI  4UL /* Renesas Serial Peripheral Interface */
25 #define RZ_IP_MHU   5UL /* Message Handling Unit */
26 #define RZ_IP_DMAC  6UL /* Direct Memory Access Controller */
27 #define RZ_IP_CANFD 7UL /* CANFD Interface (RS-CANFD) */
28 #define RZ_IP_ADC   8UL /* A/D Converter */
29 
30 #define RZ_CLOCK_ICLK    0UL  /* Cortex-A55 Clock */
31 #define RZ_CLOCK_I2CLK   1UL  /* Cortex-M33 Clock */
32 #define RZ_CLOCK_I3CLK   2UL  /* Cortex-M33 FPU Clock */
33 #define RZ_CLOCK_S0CLK   3UL  /* DDR-PHY Clock */
34 #define RZ_CLOCK_OC0CLK  4UL  /* OCTA0 Clock */
35 #define RZ_CLOCK_OC1CLK  5UL  /* OCTA1 Clock */
36 #define RZ_CLOCK_SPI0CLK 6UL  /* SPI0 Clock */
37 #define RZ_CLOCK_SPI1CLK 7UL  /* SPI1 Clock */
38 #define RZ_CLOCK_SD0CLK  8UL  /* SDH0 Clock */
39 #define RZ_CLOCK_SD1CLK  9UL  /* SDH1 Clock */
40 #define RZ_CLOCK_SD2CLK  10UL /* SDH2 Clock */
41 #define RZ_CLOCK_M0CLK   11UL /* VCP LCDC Clock */
42 #define RZ_CLOCK_HPCLK   12UL /* Ethernet Clock */
43 #define RZ_CLOCK_TSUCLK  13UL /* TSU Clock */
44 #define RZ_CLOCK_ZTCLK   14UL /* JAUTH Clock */
45 #define RZ_CLOCK_P0CLK   15UL /* APB-BUS Clock */
46 #define RZ_CLOCK_P1CLK   16UL /* AXI-BUS Clock */
47 #define RZ_CLOCK_P2CLK   17UL /* P2CLK */
48 #define RZ_CLOCK_P3CLK   18UL /* P3CLK */
49 #define RZ_CLOCK_P4CLK   19UL /* P4CLK */
50 #define RZ_CLOCK_P5CLK   20UL /* P5CLK */
51 #define RZ_CLOCK_ATCLK   21UL /* ATCLK */
52 #define RZ_CLOCK_OSCCLK  22UL /* OSC Clock */
53 #define RZ_CLOCK_OSCCLK2 23UL /* OSC2 Clock */
54 
55 #define RZ_CLOCK(IP, ch, clk, div)                                                                 \
56 	((RZ_IP_##IP << RZ_IP_SHIFT) | ((ch) << RZ_IP_CH_SHIFT) | ((clk) << RZ_CLOCK_SHIFT) |      \
57 	 ((div) << RZ_CLOCK_DIV_SHIFT))
58 
59 /**
60  * Pack clock configurations in a 32-bit value
61  * as expected for the Device Tree `clocks` property on Renesas RZ/G.
62  *
63  * @param ch Peripheral channel/unit
64  */
65 
66 /* SCIF */
67 #define RZ_CLOCK_SCIF(ch) RZ_CLOCK(SCIF, ch, RZ_CLOCK_P0CLK, 1)
68 
69 /* GPT */
70 #define RZ_CLOCK_GPT(ch) RZ_CLOCK(GPT, ch, RZ_CLOCK_P0CLK, 1)
71 
72 /* MHU */
73 #define RZ_CLOCK_MHU(ch) RZ_CLOCK(MHU, ch, RZ_CLOCK_P1CLK, 2)
74 
75 /* ADC */
76 #define RZ_CLOCK_ADC(ch) RZ_CLOCK(ADC, ch, RZ_CLOCK_TSUCLK, 1)
77 
78 /* RIIC */
79 #define RZ_CLOCK_RIIC(ch) RZ_CLOCK(RIIC, ch, RZ_CLOCK_P0CLK, 1)
80 
81 /* GTM */
82 #define RZ_CLOCK_GTM(ch) RZ_CLOCK(GTM, ch, RZ_CLOCK_P0CLK, 1)
83 
84 /* CAN */
85 #define RZ_CLOCK_CANFD(ch) RZ_CLOCK(CANFD, ch, RZ_CLOCK_P4CLK, 2)
86 
87 /* RSPI */
88 #define RZ_CLOCK_RSPI(ch) RZ_CLOCK(RSPI, ch, RZ_CLOCK_P0CLK, 1)
89 
90 /* DMAC */
91 #define RZ_CLOCK_DMAC(ch) RZ_CLOCK(DMAC, ch, RZ_CLOCK_P3CLK, 1)
92 
93 #endif /* ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_RENESAS_RZG_CLOCK_H_ */
94