RE: [PATCH v2 1/4] dt-bindings: clock: add Exynos Auto v920 SoC CMU bindings
From: Alim Akhtar
Date: Mon Jul 08 2024 - 06:30:33 EST
Hello Sunyeal
> -----Original Message-----
> From: Sunyeal Hong <sunyeal.hong@xxxxxxxxxxx>
> Sent: Monday, July 8, 2024 4:43 AM
> To: Krzysztof Kozlowski <krzk@xxxxxxxxxx>; Sylwester Nawrocki
> <s.nawrocki@xxxxxxxxxxx>; Chanwoo Choi <cw00.choi@xxxxxxxxxxx>;
> Alim Akhtar <alim.akhtar@xxxxxxxxxxx>; Michael Turquette
> <mturquette@xxxxxxxxxxxx>; Stephen Boyd <sboyd@xxxxxxxxxx>; Rob
> Herring <robh@xxxxxxxxxx>; Conor Dooley <conor+dt@xxxxxxxxxx>
> Cc: linux-samsung-soc@xxxxxxxxxxxxxxx; linux-clk@xxxxxxxxxxxxxxx;
> devicetree@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; Sunyeal Hong <sunyeal.hong@xxxxxxxxxxx>
> Subject: [PATCH v2 1/4] dt-bindings: clock: add Exynos Auto v920 SoC CMU
> bindings
>
> Add dt-schema for Exynos Auto v920 SoC clock controller.
Prefer to have Exynos Auto -> ExynosAuto to match with the naming convention and the UM.
> Add device tree clock binding definitions for below CMU blocks.
>
> - CMU_TOP
> - CMU_PERIC0
>
> Signed-off-by: Sunyeal Hong <sunyeal.hong@xxxxxxxxxxx>
> ---
> .../clock/samsung,exynosautov920-clock.yaml | 115 +++++++++++
> .../clock/samsung,exynosautov920.h | 191 ++++++++++++++++++
> 2 files changed, 306 insertions(+)
> create mode 100644
> Documentation/devicetree/bindings/clock/samsung,exynosautov920-
> clock.yaml
> create mode 100644 include/dt-bindings/clock/samsung,exynosautov920.h
>
> diff --git
> a/Documentation/devicetree/bindings/clock/samsung,exynosautov920-
> clock.yaml
> b/Documentation/devicetree/bindings/clock/samsung,exynosautov920-
> clock.yaml
> new file mode 100644
> index 000000000000..ade74d6e90c0
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/clock/samsung,exynosautov920-
> clo
> +++ ck.yaml
> @@ -0,0 +1,115 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2
> +---
> +$id:
> +http://devicetree.org/schemas/clock/samsung,exynosautov920-
> clock.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Samsung Exynos Auto v920 SoC clock controller
> +
> +maintainers:
> + - Sunyeal Hong <sunyeal.hong@xxxxxxxxxxx>
> + - Chanwoo Choi <cw00.choi@xxxxxxxxxxx>
> + - Krzysztof Kozlowski <krzk@xxxxxxxxxx>
> + - Sylwester Nawrocki <s.nawrocki@xxxxxxxxxxx>
> +
> +description: |
> + Exynos Auto v920 clock controller is comprised of several CMU units,
> +generating
> + clocks for different domains. Those CMU units are modeled as separate
> +device
> + tree nodes, and might depend on each other. Root clocks in that clock
> +tree are
> + two external clocks:: OSCCLK/XTCXO (38.4 MHz) and RTCCLK/XrtcXTI
> (32768 Hz).
> + The external OSCCLK must be defined as fixed-rate clock in dts.
> +
> + CMU_TOP is a top-level CMU, where all base clocks are prepared using
> + PLLs and dividers; all other clocks of function blocks (other CMUs)
> + are usually derived from CMU_TOP.
> +
> + Each clock is assigned an identifier and client nodes can use this
> + identifier to specify the clock which they consume. All clocks
> + available for usage in clock consumer nodes are defined as
> + preprocessor macros in 'include/dt-
> bindings/clock/samsung,exynosautov920.h' header.
> +
> +properties:
> + compatible:
> + enum:
> + - samsung,exynosautov920-cmu-top
> + - samsung,exynosautov920-cmu-peric0
> +
> + clocks:
> + minItems: 1
> + maxItems: 3
> +
> + clock-names:
> + minItems: 1
> + maxItems: 3
> +
> + "#clock-cells":
> + const: 1
> +
> + reg:
> + maxItems: 1
> +
> +allOf:
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: samsung,exynosautov920-cmu-top
> +
> + then:
> + properties:
> + clocks:
> + items:
> + - description: External reference clock (38.4 MHz)
> +
> + clock-names:
> + items:
> + - const: oscclk
> +
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: samsung,exynosautov920-cmu-peric0
> +
> + then:
> + properties:
> + clocks:
> + items:
> + - description: External reference clock (38.4 MHz)
> + - description: CMU_PERIC0 NOC clock (from CMU_TOP)
> + - description: CMU_PERIC0 IP clock (from CMU_TOP)
> +
> + clock-names:
> + items:
> + - const: oscclk
> + - const: noc
> + - const: ip
These are too generic name, please add peric0_noc and peric0_ip, and this is to match with the UM.
I am sure in future you would like to add other IPs like USI, I2C etc for the peric0 block
> +
> +required:
> + - compatible
> + - "#clock-cells"
> + - clocks
> + - clock-names
> + - reg
> +
> +additionalProperties: false
> +
> +examples:
> + # Clock controller node for CMU_PERIC0
> + - |
> + #include <dt-bindings/clock/samsung,exynosautov920.h>
> +
> + cmu_peric0: clock-controller@10800000 {
> + compatible = "samsung,exynosautov920-cmu-peric0";
> + reg = <0x10800000 0x8000>;
> + #clock-cells = <1>;
> +
> + clocks = <&xtcxo>,
> + <&cmu_top DOUT_CLKCMU_PERIC0_NOC>,
> + <&cmu_top DOUT_CLKCMU_PERIC0_IP>;
> + clock-names = "oscclk",
> + "noc",
> + "ip";
> + };
> +
> +...
> diff --git a/include/dt-bindings/clock/samsung,exynosautov920.h
> b/include/dt-bindings/clock/samsung,exynosautov920.h
> new file mode 100644
> index 000000000000..9daa617c3636
> --- /dev/null
> +++ b/include/dt-bindings/clock/samsung,exynosautov920.h
> @@ -0,0 +1,191 @@
> +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
> +/*
> + * Copyright (c) 2024 Samsung Electronics Co., Ltd.
> + * Author: Sunyeal Hong <sunyeal.hong@xxxxxxxxxxx>
> + *
> + * Device Tree binding constants for Exynos Auto V920 clock controller.
> + */
> +
> +#ifndef _DT_BINDINGS_CLOCK_EXYNOSAUTOV920_H
> +#define _DT_BINDINGS_CLOCK_EXYNOSAUTOV920_H
> +
> +/* CMU_TOP */
> +#define FOUT_SHARED0_PLL 1
> +#define FOUT_SHARED1_PLL 2
> +#define FOUT_SHARED2_PLL 3
> +#define FOUT_SHARED3_PLL 4
> +#define FOUT_SHARED4_PLL 5
> +#define FOUT_SHARED5_PLL 6
> +#define FOUT_MMC_PLL 7
> +
> +/* MUX in CMU_TOP */
> +#define MOUT_SHARED0_PLL 101
> +#define MOUT_SHARED1_PLL 102
> +#define MOUT_SHARED2_PLL 103
> +#define MOUT_SHARED3_PLL 104
> +#define MOUT_SHARED4_PLL 105
> +#define MOUT_SHARED5_PLL 106
> +#define MOUT_MMC_PLL 107
> +#define MOUT_CLKCMU_CMU_BOOST 108
> +#define MOUT_CLKCMU_CMU_CMUREF 109
> +#define MOUT_CLKCMU_ACC_NOC 110
> +#define MOUT_CLKCMU_ACC_ORB 111
> +#define MOUT_CLKCMU_APM_NOC 112
> +#define MOUT_CLKCMU_AUD_CPU 113
> +#define MOUT_CLKCMU_AUD_NOC 114
> +#define MOUT_CLKCMU_CPUCL0_SWITCH 115
> +#define MOUT_CLKCMU_CPUCL0_CLUSTER 116
> +#define MOUT_CLKCMU_CPUCL0_DBG 117
> +#define MOUT_CLKCMU_CPUCL1_SWITCH 118
> +#define MOUT_CLKCMU_CPUCL1_CLUSTER 119
> +#define MOUT_CLKCMU_CPUCL2_SWITCH 120
> +#define MOUT_CLKCMU_CPUCL2_CLUSTER 121
> +#define MOUT_CLKCMU_DNC_NOC 122
> +#define MOUT_CLKCMU_DPTX_NOC 123
> +#define MOUT_CLKCMU_DPTX_DPGTC 124
> +#define MOUT_CLKCMU_DPTX_DPOSC 125
> +#define MOUT_CLKCMU_DPUB_NOC 126
> +#define MOUT_CLKCMU_DPUB_DSIM 127
> +#define MOUT_CLKCMU_DPUF0_NOC 128
> +#define MOUT_CLKCMU_DPUF1_NOC 129
> +#define MOUT_CLKCMU_DPUF2_NOC 130
> +#define MOUT_CLKCMU_DSP_NOC 131
> +#define MOUT_CLKCMU_G3D_SWITCH 132
> +#define MOUT_CLKCMU_G3D_NOCP 133
> +#define MOUT_CLKCMU_GNPU_NOC 134
> +#define MOUT_CLKCMU_HSI0_NOC 135
> +#define MOUT_CLKCMU_HSI1_NOC 136
> +#define MOUT_CLKCMU_HSI1_USBDRD 137
> +#define MOUT_CLKCMU_HSI1_MMC_CARD 138
> +#define MOUT_CLKCMU_HSI2_NOC 139
> +#define MOUT_CLKCMU_HSI2_NOC_UFS 140
> +#define MOUT_CLKCMU_HSI2_UFS_EMBD 141
> +#define MOUT_CLKCMU_HSI2_ETHERNET 142
> +#define MOUT_CLKCMU_ISP_NOC 143
> +#define MOUT_CLKCMU_M2M_NOC 144
> +#define MOUT_CLKCMU_M2M_JPEG 145
> +#define MOUT_CLKCMU_MFC_MFC 146
> +#define MOUT_CLKCMU_MFC_WFD 147
> +#define MOUT_CLKCMU_MFD_NOC 148
> +#define MOUT_CLKCMU_MIF_SWITCH 149
> +#define MOUT_CLKCMU_MIF_NOCP 150
> +#define MOUT_CLKCMU_MISC_NOC 151
> +#define MOUT_CLKCMU_NOCL0_NOC 152
> +#define MOUT_CLKCMU_NOCL1_NOC 153
> +#define MOUT_CLKCMU_NOCL2_NOC 154
> +#define MOUT_CLKCMU_PERIC0_NOC 155
> +#define MOUT_CLKCMU_PERIC0_IP 156
> +#define MOUT_CLKCMU_PERIC1_NOC 157
> +#define MOUT_CLKCMU_PERIC1_IP 158
> +#define MOUT_CLKCMU_SDMA_NOC 159
> +#define MOUT_CLKCMU_SNW_NOC 160
> +#define MOUT_CLKCMU_SSP_NOC 161
> +#define MOUT_CLKCMU_TAA_NOC 162
> +
> +/* DIV in CMU_TOP */
> +#define DOUT_SHARED0_DIV1 201
> +#define DOUT_SHARED0_DIV2 202
> +#define DOUT_SHARED0_DIV3 203
> +#define DOUT_SHARED0_DIV4 204
> +#define DOUT_SHARED1_DIV1 205
> +#define DOUT_SHARED1_DIV2 206
> +#define DOUT_SHARED1_DIV3 207
> +#define DOUT_SHARED1_DIV4 208
> +#define DOUT_SHARED2_DIV1 209
> +#define DOUT_SHARED2_DIV2 210
> +#define DOUT_SHARED2_DIV3 211
> +#define DOUT_SHARED2_DIV4 212
> +#define DOUT_SHARED3_DIV1 213
> +#define DOUT_SHARED3_DIV2 214
> +#define DOUT_SHARED3_DIV3 215
> +#define DOUT_SHARED3_DIV4 216
> +#define DOUT_SHARED4_DIV1 217
> +#define DOUT_SHARED4_DIV2 218
> +#define DOUT_SHARED4_DIV3 219
> +#define DOUT_SHARED4_DIV4 220
> +#define DOUT_SHARED5_DIV1 221
> +#define DOUT_SHARED5_DIV2 222
> +#define DOUT_SHARED5_DIV3 223
> +#define DOUT_SHARED5_DIV4 224
> +#define DOUT_CLKCMU_CMU_BOOST 225
> +#define DOUT_CLKCMU_ACC_NOC 226
> +#define DOUT_CLKCMU_ACC_ORB 227
> +#define DOUT_CLKCMU_APM_NOC 228
> +#define DOUT_CLKCMU_AUD_CPU 229
> +#define DOUT_CLKCMU_AUD_NOC 230
> +#define DOUT_CLKCMU_CPUCL0_SWITCH 231
> +#define DOUT_CLKCMU_CPUCL0_CLUSTER 232
> +#define DOUT_CLKCMU_CPUCL0_DBG 233
> +#define DOUT_CLKCMU_CPUCL1_SWITCH 234
> +#define DOUT_CLKCMU_CPUCL1_CLUSTER 235
> +#define DOUT_CLKCMU_CPUCL2_SWITCH 236
> +#define DOUT_CLKCMU_CPUCL2_CLUSTER 237
> +#define DOUT_CLKCMU_DNC_NOC 238
> +#define DOUT_CLKCMU_DPTX_NOC 239
> +#define DOUT_CLKCMU_DPTX_DPGTC 240
> +#define DOUT_CLKCMU_DPTX_DPOSC 241
> +#define DOUT_CLKCMU_DPUB_NOC 242
> +#define DOUT_CLKCMU_DPUB_DSIM 243
> +#define DOUT_CLKCMU_DPUF0_NOC 244
> +#define DOUT_CLKCMU_DPUF1_NOC 245
> +#define DOUT_CLKCMU_DPUF2_NOC 246
> +#define DOUT_CLKCMU_DSP_NOC 247
> +#define DOUT_CLKCMU_G3D_SWITCH 248
> +#define DOUT_CLKCMU_G3D_NOCP 249
> +#define DOUT_CLKCMU_GNPU_NOC 250
> +#define DOUT_CLKCMU_HSI0_NOC 251
> +#define DOUT_CLKCMU_HSI1_NOC 252
> +#define DOUT_CLKCMU_HSI1_USBDRD 253
> +#define DOUT_CLKCMU_HSI1_MMC_CARD 254
> +#define DOUT_CLKCMU_HSI2_NOC 255
> +#define DOUT_CLKCMU_HSI2_NOC_UFS 256
> +#define DOUT_CLKCMU_HSI2_UFS_EMBD 257
> +#define DOUT_CLKCMU_HSI2_ETHERNET 258
> +#define DOUT_CLKCMU_ISP_NOC 259
> +#define DOUT_CLKCMU_M2M_NOC 260
> +#define DOUT_CLKCMU_M2M_JPEG 261
> +#define DOUT_CLKCMU_MFC_MFC 262
> +#define DOUT_CLKCMU_MFC_WFD 263
> +#define DOUT_CLKCMU_MFD_NOC 264
> +#define DOUT_CLKCMU_MIF_NOCP 265
> +#define DOUT_CLKCMU_MISC_NOC 266
> +#define DOUT_CLKCMU_NOCL0_NOC 267
> +#define DOUT_CLKCMU_NOCL1_NOC 268
> +#define DOUT_CLKCMU_NOCL2_NOC 269
> +#define DOUT_CLKCMU_PERIC0_NOC 270
> +#define DOUT_CLKCMU_PERIC0_IP 271
> +#define DOUT_CLKCMU_PERIC1_NOC 272
> +#define DOUT_CLKCMU_PERIC1_IP 273
> +#define DOUT_CLKCMU_SDMA_NOC 274
> +#define DOUT_CLKCMU_SNW_NOC 275
> +#define DOUT_CLKCMU_SSP_NOC 276
> +#define DOUT_CLKCMU_TAA_NOC 277
> +
> +/* CMU_PERIC0 */
> +#define CLK_MOUT_PERIC0_IP_USER 1
> +#define CLK_MOUT_PERIC0_NOC_USER 2
> +#define CLK_MOUT_PERIC0_USI00_USI 3
> +#define CLK_MOUT_PERIC0_USI01_USI 4
> +#define CLK_MOUT_PERIC0_USI02_USI 5
> +#define CLK_MOUT_PERIC0_USI03_USI 6
> +#define CLK_MOUT_PERIC0_USI04_USI 7
> +#define CLK_MOUT_PERIC0_USI05_USI 8
> +#define CLK_MOUT_PERIC0_USI06_USI 9
> +#define CLK_MOUT_PERIC0_USI07_USI 10
> +#define CLK_MOUT_PERIC0_USI08_USI 11
> +#define CLK_MOUT_PERIC0_USI_I2C 12
> +#define CLK_MOUT_PERIC0_I3C 13
> +
> +#define CLK_DOUT_PERIC0_USI00_USI 14
> +#define CLK_DOUT_PERIC0_USI01_USI 15
> +#define CLK_DOUT_PERIC0_USI02_USI 16
> +#define CLK_DOUT_PERIC0_USI03_USI 17
> +#define CLK_DOUT_PERIC0_USI04_USI 18
> +#define CLK_DOUT_PERIC0_USI05_USI 19
> +#define CLK_DOUT_PERIC0_USI06_USI 20
> +#define CLK_DOUT_PERIC0_USI07_USI 21
> +#define CLK_DOUT_PERIC0_USI08_USI 22
> +#define CLK_DOUT_PERIC0_USI_I2C 23
> +#define CLK_DOUT_PERIC0_I3C 24
> +
> +#endif /* _DT_BINDINGS_CLOCK_EXYNOSAUTOV920_H */
> --
> 2.45.2