[PATCH V10 2/4] dt-bindings: clock: document Amlogic S4 SoC peripherals clock controller

Jerome Brunet jbrunet at baylibre.com
Wed Aug 23 02:14:57 PDT 2023


On Wed 23 Aug 2023 at 16:32, Yu Tu <yu.tu at amlogic.com> wrote:

> On 2023/8/23 16:01, Jerome Brunet wrote:
>> [ EXTERNAL EMAIL ]
>> On Tue 22 Aug 2023 at 16:27, Yu Tu <yu.tu at amlogic.com> wrote:
>> 
>>> Add the S4 peripherals clock controller dt-bindings in the S4 SoC
>>> family.
>>>
>>> Signed-off-by: Yu Tu <yu.tu at amlogic.com>
>>> ---
>>>   .../clock/amlogic,s4-peripherals-clkc.yaml    |  96 +++++++
>>>   .../clock/amlogic,s4-peripherals-clkc.h       | 236 ++++++++++++++++++
>>>   2 files changed, 332 insertions(+)
>>>   create mode 100644 Documentation/devicetree/bindings/clock/amlogic,s4-peripherals-clkc.yaml
>>>   create mode 100644 include/dt-bindings/clock/amlogic,s4-peripherals-clkc.h
>>>
>>> diff --git a/Documentation/devicetree/bindings/clock/amlogic,s4-peripherals-clkc.yaml b/Documentation/devicetree/bindings/clock/amlogic,s4-peripherals-clkc.yaml
>>> new file mode 100644
>>> index 000000000000..e166563e7b14
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/clock/amlogic,s4-peripherals-clkc.yaml
>>> @@ -0,0 +1,96 @@
>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>>> +# Copyright (C) 2022-2023 Amlogic, Inc. All rights reserved
>>> +%YAML 1.2
>>> +---
>>> +$id: http://devicetree.org/schemas/clock/amlogic,s4-peripherals-clkc.yaml#
>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>> +
>>> +title: Amlogic S4 Peripherals Clock Controller
>>> +
>>> +maintainers:
>>> +  - Yu Tu <yu.tu at amlogic.com>
>>> +
>>> +properties:
>>> +  compatible:
>>> +    const: amlogic,s4-peripherals-clkc
>>> +
>>> +  reg:
>>> +    maxItems: 1
>>> +
>>> +  clocks:
>>> +    items:
>>> +      - description: input fixed pll div2
>>> +      - description: input fixed pll div2p5
>>> +      - description: input fixed pll div3
>>> +      - description: input fixed pll div4
>>> +      - description: input fixed pll div5
>>> +      - description: input fixed pll div7
>>> +      - description: input hifi pll
>>> +      - description: input gp0 pll
>>> +      - description: input mpll0
>>> +      - description: input mpll1
>>> +      - description: input mpll2
>>> +      - description: input mpll3
>>> +      - description: input hdmi pll
>>> +      - description: input oscillator (usually at 24MHz)
>>> +      - description: input external 32kHz reference (optional)
>> The bindings described here does not make this last clock optional, but
>> requires it. This is going to be a problem since most platforms won't
>> have this clock.
>
> Hi Jerome,
> 	Do you mean that we can delete the description of "external 32kHz",
> 	because we hardly use it?

Absolutely not.
Optional ressources need description too.

>
>> You are missing minItems.
>> Same below
>
> I will add it in next version.
>

I'm saying that because you did not provide minItems here, it gets
implicitly set to the number of clocks you have declared, making the
external 32k a required clock, not an optional one.

You need to set minItems so the clocks is actually optional.
Try removing the 32k in your example below and check how it goes with
'make dt_binding_check'

>> 
>>> +
>>> +  clock-names:
>>> +    items:
>>> +      - const: fclk_div2
>>> +      - const: fclk_div2p5
>>> +      - const: fclk_div3
>>> +      - const: fclk_div4
>>> +      - const: fclk_div5
>>> +      - const: fclk_div7
>>> +      - const: hifi_pll
>>> +      - const: gp0_pll
>>> +      - const: mpll0
>>> +      - const: mpll1
>>> +      - const: mpll2
>>> +      - const: mpll3
>>> +      - const: hdmi_pll
>>> +      - const: xtal
>>> +      - const: ext_32k
>>> +
>>> +  "#clock-cells":
>>> +    const: 1
>>> +
>>> +required:
>>> +  - compatible
>>> +  - reg
>>> +  - clocks
>>> +  - clock-names
>>> +  - "#clock-cells"
>>> +
>>> +additionalProperties: false
>>> +
>>> +examples:
>>> +  - |
>>> +    #include <dt-bindings/clock/amlogic,s4-peripherals-clkc.h>
>>> +
>>> +    clkc_periphs: clock-controller at fe000000 {
>>> +      compatible = "amlogic,s4-peripherals-clkc";
>>> +      reg = <0xfe000000 0x49c>;
>>> +      clocks = <&clkc_pll 3>,
>>> +              <&clkc_pll 13>,
>>> +              <&clkc_pll 5>,
>>> +              <&clkc_pll 7>,
>>> +              <&clkc_pll 9>,
>>> +              <&clkc_pll 11>,
>>> +              <&clkc_pll 17>,
>>> +              <&clkc_pll 15>,
>>> +              <&clkc_pll 25>,
>>> +              <&clkc_pll 27>,
>>> +              <&clkc_pll 29>,
>>> +              <&clkc_pll 31>,
>>> +              <&clkc_pll 20>,
>>> +              <&xtal>,
>>> +              <&ext_32k>;
>>> +      clock-names = "fclk_div2", "fclk_div2p5", "fclk_div3", "fclk_div4",
>>> +                    "fclk_div5", "fclk_div7", "hifi_pll", "gp0_pll",
>>> +                    "mpll0", "mpll1", "mpll2", "mpll3", "hdmi_pll", "xtal",
>>> +                    "ext_32k";
>>> +      #clock-cells = <1>;
>>> +    };
>>> +...
>>> diff --git a/include/dt-bindings/clock/amlogic,s4-peripherals-clkc.h b/include/dt-bindings/clock/amlogic,s4-peripherals-clkc.h
>>> new file mode 100644
>>> index 000000000000..861a331963ac
>>> --- /dev/null
>>> +++ b/include/dt-bindings/clock/amlogic,s4-peripherals-clkc.h
>>> @@ -0,0 +1,236 @@
>>> +/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
>>> +/*
>>> + * Copyright (c) 2022-2023 Amlogic, Inc. All rights reserved.
>>> + * Author: Yu Tu <yu.tu at amlogic.com>
>>> + */
>>> +
>>> +#ifndef _DT_BINDINGS_CLOCK_AMLOGIC_S4_PERIPHERALS_CLKC_H
>>> +#define _DT_BINDINGS_CLOCK_AMLOGIC_S4_PERIPHERALS_CLKC_H
>>> +
>>> +#define CLKID_RTC_32K_CLKIN          0
>>> +#define CLKID_RTC_32K_DIV            1
>>> +#define CLKID_RTC_32K_SEL            2
>>> +#define CLKID_RTC_32K_XATL           3
>>> +#define CLKID_RTC                    4
>>> +#define CLKID_SYS_CLK_B_SEL          5
>>> +#define CLKID_SYS_CLK_B_DIV          6
>>> +#define CLKID_SYS_CLK_B                      7
>>> +#define CLKID_SYS_CLK_A_SEL          8
>>> +#define CLKID_SYS_CLK_A_DIV          9
>>> +#define CLKID_SYS_CLK_A                      10
>>> +#define CLKID_SYS                    11
>>> +#define CLKID_CECA_32K_CLKIN         12
>>> +#define CLKID_CECA_32K_DIV           13
>>> +#define CLKID_CECA_32K_SEL_PRE               14
>>> +#define CLKID_CECA_32K_SEL           15
>>> +#define CLKID_CECA_32K_CLKOUT                16
>>> +#define CLKID_CECB_32K_CLKIN         17
>>> +#define CLKID_CECB_32K_DIV           18
>>> +#define CLKID_CECB_32K_SEL_PRE               19
>>> +#define CLKID_CECB_32K_SEL           20
>>> +#define CLKID_CECB_32K_CLKOUT                21
>>> +#define CLKID_SC_CLK_SEL             22
>>> +#define CLKID_SC_CLK_DIV             23
>>> +#define CLKID_SC                     24
>>> +#define CLKID_12_24M                 25
>>> +#define CLKID_12M_CLK_DIV            26
>>> +#define CLKID_12_24M_CLK_SEL         27
>>> +#define CLKID_VID_PLL_DIV            28
>>> +#define CLKID_VID_PLL_SEL            29
>>> +#define CLKID_VID_PLL                        30
>>> +#define CLKID_VCLK_SEL                       31
>>> +#define CLKID_VCLK2_SEL                      32
>>> +#define CLKID_VCLK_INPUT             33
>>> +#define CLKID_VCLK2_INPUT            34
>>> +#define CLKID_VCLK_DIV                       35
>>> +#define CLKID_VCLK2_DIV                      36
>>> +#define CLKID_VCLK                   37
>>> +#define CLKID_VCLK2                  38
>>> +#define CLKID_VCLK_DIV1                      39
>>> +#define CLKID_VCLK_DIV2_EN           40
>>> +#define CLKID_VCLK_DIV4_EN           41
>>> +#define CLKID_VCLK_DIV6_EN           42
>>> +#define CLKID_VCLK_DIV12_EN          43
>>> +#define CLKID_VCLK2_DIV1             44
>>> +#define CLKID_VCLK2_DIV2_EN          45
>>> +#define CLKID_VCLK2_DIV4_EN          46
>>> +#define CLKID_VCLK2_DIV6_EN          47
>>> +#define CLKID_VCLK2_DIV12_EN         48
>>> +#define CLKID_VCLK_DIV2                      49
>>> +#define CLKID_VCLK_DIV4                      50
>>> +#define CLKID_VCLK_DIV6                      51
>>> +#define CLKID_VCLK_DIV12             52
>>> +#define CLKID_VCLK2_DIV2             53
>>> +#define CLKID_VCLK2_DIV4             54
>>> +#define CLKID_VCLK2_DIV6             55
>>> +#define CLKID_VCLK2_DIV12            56
>>> +#define CLKID_CTS_ENCI_SEL           57
>>> +#define CLKID_CTS_ENCP_SEL           58
>>> +#define CLKID_CTS_VDAC_SEL           59
>>> +#define CLKID_HDMI_TX_SEL            60
>>> +#define CLKID_CTS_ENCI                       61
>>> +#define CLKID_CTS_ENCP                       62
>>> +#define CLKID_CTS_VDAC                       63
>>> +#define CLKID_HDMI_TX                        64
>>> +#define CLKID_HDMI_SEL                       65
>>> +#define CLKID_HDMI_DIV                       66
>>> +#define CLKID_HDMI                   67
>>> +#define CLKID_TS_CLK_DIV             68
>>> +#define CLKID_TS                     69
>>> +#define CLKID_MALI_0_SEL             70
>>> +#define CLKID_MALI_0_DIV             71
>>> +#define CLKID_MALI_0                 72
>>> +#define CLKID_MALI_1_SEL             73
>>> +#define CLKID_MALI_1_DIV             74
>>> +#define CLKID_MALI_1                 75
>>> +#define CLKID_MALI_SEL                       76
>>> +#define CLKID_VDEC_P0_SEL            77
>>> +#define CLKID_VDEC_P0_DIV            78
>>> +#define CLKID_VDEC_P0                        79
>>> +#define CLKID_VDEC_P1_SEL            80
>>> +#define CLKID_VDEC_P1_DIV            81
>>> +#define CLKID_VDEC_P1                        82
>>> +#define CLKID_VDEC_SEL                       83
>>> +#define CLKID_HEVCF_P0_SEL           84
>>> +#define CLKID_HEVCF_P0_DIV           85
>>> +#define CLKID_HEVCF_P0                       86
>>> +#define CLKID_HEVCF_P1_SEL           87
>>> +#define CLKID_HEVCF_P1_DIV           88
>>> +#define CLKID_HEVCF_P1                       89
>>> +#define CLKID_HEVCF_SEL                      90
>>> +#define CLKID_VPU_0_SEL                      91
>>> +#define CLKID_VPU_0_DIV                      92
>>> +#define CLKID_VPU_0                  93
>>> +#define CLKID_VPU_1_SEL                      94
>>> +#define CLKID_VPU_1_DIV                      95
>>> +#define CLKID_VPU_1                  96
>>> +#define CLKID_VPU                    97
>>> +#define CLKID_VPU_CLKB_TMP_SEL               98
>>> +#define CLKID_VPU_CLKB_TMP_DIV               99
>>> +#define CLKID_VPU_CLKB_TMP           100
>>> +#define CLKID_VPU_CLKB_DIV           101
>>> +#define CLKID_VPU_CLKB                       102
>>> +#define CLKID_VPU_CLKC_P0_SEL                103
>>> +#define CLKID_VPU_CLKC_P0_DIV                104
>>> +#define CLKID_VPU_CLKC_P0            105
>>> +#define CLKID_VPU_CLKC_P1_SEL                106
>>> +#define CLKID_VPU_CLKC_P1_DIV                107
>>> +#define CLKID_VPU_CLKC_P1            108
>>> +#define CLKID_VPU_CLKC_SEL           109
>>> +#define CLKID_VAPB_0_SEL             110
>>> +#define CLKID_VAPB_0_DIV             111
>>> +#define CLKID_VAPB_0                 112
>>> +#define CLKID_VAPB_1_SEL             113
>>> +#define CLKID_VAPB_1_DIV             114
>>> +#define CLKID_VAPB_1                 115
>>> +#define CLKID_VAPB                   116
>>> +#define CLKID_GE2D                   117
>>> +#define CLKID_VDIN_MEAS_SEL          118
>>> +#define CLKID_VDIN_MEAS_DIV          119
>>> +#define CLKID_VDIN_MEAS                      120
>>> +#define CLKID_SD_EMMC_C_CLK_SEL              121
>>> +#define CLKID_SD_EMMC_C_CLK_DIV              122
>>> +#define CLKID_SD_EMMC_C                      123
>>> +#define CLKID_SD_EMMC_A_CLK_SEL              124
>>> +#define CLKID_SD_EMMC_A_CLK_DIV              125
>>> +#define CLKID_SD_EMMC_A                      126
>>> +#define CLKID_SD_EMMC_B_CLK_SEL              127
>>> +#define CLKID_SD_EMMC_B_CLK_DIV              128
>>> +#define CLKID_SD_EMMC_B                      129
>>> +#define CLKID_SPICC0_SEL             130
>>> +#define CLKID_SPICC0_DIV             131
>>> +#define CLKID_SPICC0_EN                      132
>>> +#define CLKID_PWM_A_SEL                      133
>>> +#define CLKID_PWM_A_DIV                      134
>>> +#define CLKID_PWM_A                  135
>>> +#define CLKID_PWM_B_SEL                      136
>>> +#define CLKID_PWM_B_DIV                      137
>>> +#define CLKID_PWM_B                  138
>>> +#define CLKID_PWM_C_SEL                      139
>>> +#define CLKID_PWM_C_DIV                      140
>>> +#define CLKID_PWM_C                  141
>>> +#define CLKID_PWM_D_SEL                      142
>>> +#define CLKID_PWM_D_DIV                      143
>>> +#define CLKID_PWM_D                  144
>>> +#define CLKID_PWM_E_SEL                      145
>>> +#define CLKID_PWM_E_DIV                      146
>>> +#define CLKID_PWM_E                  147
>>> +#define CLKID_PWM_F_SEL                      148
>>> +#define CLKID_PWM_F_DIV                      149
>>> +#define CLKID_PWM_F                  150
>>> +#define CLKID_PWM_G_SEL                      151
>>> +#define CLKID_PWM_G_DIV                      152
>>> +#define CLKID_PWM_G                  153
>>> +#define CLKID_PWM_H_SEL                      154
>>> +#define CLKID_PWM_H_DIV                      155
>>> +#define CLKID_PWM_H                  156
>>> +#define CLKID_PWM_I_SEL                      157
>>> +#define CLKID_PWM_I_DIV                      158
>>> +#define CLKID_PWM_I                  159
>>> +#define CLKID_PWM_J_SEL                      160
>>> +#define CLKID_PWM_J_DIV                      161
>>> +#define CLKID_PWM_J                  162
>>> +#define CLKID_SARADC_SEL             163
>>> +#define CLKID_SARADC_DIV             164
>>> +#define CLKID_SARADC                 165
>>> +#define CLKID_GEN_SEL                        166
>>> +#define CLKID_GEN_DIV                        167
>>> +#define CLKID_GEN                    168
>>> +#define CLKID_DDR                    169
>>> +#define CLKID_DOS                    170
>>> +#define CLKID_ETHPHY                 171
>>> +#define CLKID_MALI                   172
>>> +#define CLKID_AOCPU                  173
>>> +#define CLKID_AUCPU                  174
>>> +#define CLKID_CEC                    175
>>> +#define CLKID_SDEMMC_A                       176
>>> +#define CLKID_SDEMMC_B                       177
>>> +#define CLKID_NAND                   178
>>> +#define CLKID_SMARTCARD                      179
>>> +#define CLKID_ACODEC                 180
>>> +#define CLKID_SPIFC                  181
>>> +#define CLKID_MSR                    182
>>> +#define CLKID_IR_CTRL                        183
>>> +#define CLKID_AUDIO                  184
>>> +#define CLKID_ETH                    185
>>> +#define CLKID_UART_A                 186
>>> +#define CLKID_UART_B                 187
>>> +#define CLKID_UART_C                 188
>>> +#define CLKID_UART_D                 189
>>> +#define CLKID_UART_E                 190
>>> +#define CLKID_AIFIFO                 191
>>> +#define CLKID_TS_DDR                 192
>>> +#define CLKID_TS_PLL                 193
>>> +#define CLKID_G2D                    194
>>> +#define CLKID_SPICC0                 195
>>> +#define CLKID_SPICC1                 196
>>> +#define CLKID_USB                    197
>>> +#define CLKID_I2C_M_A                        198
>>> +#define CLKID_I2C_M_B                        199
>>> +#define CLKID_I2C_M_C                        200
>>> +#define CLKID_I2C_M_D                        201
>>> +#define CLKID_I2C_M_E                        202
>>> +#define CLKID_HDMITX_APB             203
>>> +#define CLKID_I2C_S_A                        204
>>> +#define CLKID_USB1_TO_DDR            205
>>> +#define CLKID_HDCP22                 206
>>> +#define CLKID_MMC_APB                        207
>>> +#define CLKID_RSA                    208
>>> +#define CLKID_CPU_DEBUG                      209
>>> +#define CLKID_VPU_INTR                       210
>>> +#define CLKID_DEMOD                  211
>>> +#define CLKID_SAR_ADC                        212
>>> +#define CLKID_GIC                    213
>>> +#define CLKID_PWM_AB                 214
>>> +#define CLKID_PWM_CD                 215
>>> +#define CLKID_PWM_EF                 216
>>> +#define CLKID_PWM_GH                 217
>>> +#define CLKID_PWM_IJ                 218
>>> +#define CLKID_HDCP22_ESMCLK_SEL              219
>>> +#define CLKID_HDCP22_ESMCLK_DIV              220
>>> +#define CLKID_HDCP22_ESMCLK          221
>>> +#define CLKID_HDCP22_SKPCLK_SEL              222
>>> +#define CLKID_HDCP22_SKPCLK_DIV              223
>>> +#define CLKID_HDCP22_SKPCLK          224
>>> +
>>> +#endif /* _DT_BINDINGS_CLOCK_AMLOGIC_S4_PERIPHERALS_CLKC_H */
>> 




More information about the linux-arm-kernel mailing list