From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UPPERCASE_50_75 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 080D7C432BE for ; Tue, 3 Aug 2021 11:55:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D4DB960BD3 for ; Tue, 3 Aug 2021 11:55:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235691AbhHCLzd (ORCPT ); Tue, 3 Aug 2021 07:55:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48280 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234653AbhHCLzb (ORCPT ); Tue, 3 Aug 2021 07:55:31 -0400 Received: from mail-vs1-xe2c.google.com (mail-vs1-xe2c.google.com [IPv6:2607:f8b0:4864:20::e2c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 46DAFC061764 for ; Tue, 3 Aug 2021 04:55:19 -0700 (PDT) Received: by mail-vs1-xe2c.google.com with SMTP id j10so11207603vsl.10 for ; Tue, 03 Aug 2021 04:55:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=kt0k6UPnvHf5Jbf4nvgfvtJ8nPm+labwYp+UnY7/vdg=; b=WUPfSlBIyOUYuS0s2RSANunnwNYxsQslj1mS077dttOQcW/aDjTpFLeolEVtoNNOlg 17GeoGT7R5uYpZyLNDWMB6/Vwu38RsCjtQcsPF3H4z4NYLz9z13ZZ/fWBJhla6wdsDE+ qWVLdIlMHoxTJcKffusISbePy57Jg+AnvBHzmJP/qQoD9t1f/9mYDhdYGnsXsw9nEP+g g/4hjxale/LKGXrFmJlfI5I2nSvtepVzcF6yUQawcwbm3p8WZqvvG6Liuo5Y9DBwvG4G qNM4wTEXFJ7MGxh07s1zfP0NLz/IDbNmAFy89dWXhpofZTiOgh7S0gk2EHjf/OOwvupJ rdjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=kt0k6UPnvHf5Jbf4nvgfvtJ8nPm+labwYp+UnY7/vdg=; b=Dy8ulBFKKtjT+PsguRVtNsqjX+0GQn0CMmdlNHW309eGGHckTN0fmtAI1/V7xJ2O7y d671kw9SjV7dIuy9dPmDRD/sO/RKwH7R4m87cb4DAEf7yqEXOVkDJSo/owy+wRRgOX6J rC+NxYjWntRqFYOw+HfVs0KQNVLdbLZ94iY4dkWLjoJH2Z5oTvRj3ozIZ5MUZCz0HId0 HONaVPbJXaUs1ZHdOUI5+3rzpFiVsO5CAyC5xZWXHzrjUQEkiduko8+hFNlAGHofAeX/ yu7SZaqaHjUtrdAWnXASFrsbr4eaFmt7NtvstcavdVEisP6d19gGWDEDvqmyRh078MkY Ds7g== X-Gm-Message-State: AOAM532wkSUB9SpeJuidjGnIoxLFsqShDFm/UmdQaMIxsGScZIck6fRq xaERmJr/aU1xuo0VWoWzXOEmJbgHhiQPTV8tllDL9Q== X-Google-Smtp-Source: ABdhPJwzj5OkA1ucomAHt8KYnU6dQ1DPHqjmlHl8ZjIrr/ZBvp4T7SVQ19abTbJB7tWxOCluPBYff8+opi8bh35vAhM= X-Received: by 2002:a05:6102:ecb:: with SMTP id m11mr13015294vst.34.1627991718326; Tue, 03 Aug 2021 04:55:18 -0700 (PDT) MIME-Version: 1.0 References: <20210730144922.29111-1-semen.protsenko@linaro.org> <20210730144922.29111-10-semen.protsenko@linaro.org> <042095c4-8404-9292-83d3-531bfdcd7b35@canonical.com> In-Reply-To: <042095c4-8404-9292-83d3-531bfdcd7b35@canonical.com> From: Sam Protsenko Date: Tue, 3 Aug 2021 14:55:06 +0300 Message-ID: Subject: Re: [PATCH 09/12] dt-bindings: clock: Add bindings for Exynos850 clock controller To: Krzysztof Kozlowski Cc: Sylwester Nawrocki , Chanwoo Choi , Linus Walleij , Tomasz Figa , Rob Herring , Stephen Boyd , Michael Turquette , Jiri Slaby , Greg Kroah-Hartman , Charles Keepax , Ryu Euiyoul , Tom Gall , Sumit Semwal , John Stultz , Amit Pundir , devicetree , linux-arm Mailing List , linux-clk , "open list:GPIO SUBSYSTEM" , Linux Kernel Mailing List , Linux Samsung SOC , "open list:SERIAL DRIVERS" Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 30 Jul 2021 at 18:43, Krzysztof Kozlowski wrote: > > On 30/07/2021 16:49, Sam Protsenko wrote: > > Add documentation for Exynos850 clock driver bindings and corresponding > > clock ID constants, which will be used further both in clock driver and > > in device tree files. Constants are grouped per domain basis (CMU) for > > more convenient usage, but those are just unique numbers and have > > nothing to do with register offsets, etc. > > > > Signed-off-by: Sam Protsenko > > --- > > .../bindings/clock/exynos850-clock.yaml | 70 +++++ > > include/dt-bindings/clock/exynos850.h | 267 ++++++++++++++++++ > > 2 files changed, 337 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/clock/exynos850-clock.yaml > > create mode 100644 include/dt-bindings/clock/exynos850.h > > > > diff --git a/Documentation/devicetree/bindings/clock/exynos850-clock.yaml b/Documentation/devicetree/bindings/clock/exynos850-clock.yaml > > new file mode 100644 > > index 000000000000..201c2b79e629 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/clock/exynos850-clock.yaml > > @@ -0,0 +1,70 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/clock/exynos850-clock.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Clock bindings for Samsung Exynos850 clock controller > > What plans do you have for this binding? Is it complete? If yes, there > is no point to have binding for each SoC clock controller and this > should be merged into for example: > Documentation/devicetree/bindings/clock/exynos5420-clock.txt > Yeah, I'll remove the whole patch in v2. It's not really needed here, as clk driver is just a stub for now. I'll send a separate patch series for the clock driver later, including bindings. > First - convert exynos5420-clock.txt into YAML. Then add Exynos850. > > Other files can be also integrated. > > > + > > +maintainers: > > + - Sam Protsenko > > I propose also: > +Sylwester Nawrocki > +Tomasz Figa > +Chanwoo Choi > > > + > > +description: | > > + The Exynos850 clock controller generates and supplies clock to various > > + controllers within the SoC. > > > > Each clock is assigned an identifier and client > > + nodes can use this identifier to specify the clock which they consume. > > Skip the sentence, it's generic clock provider/consumer description. > > > + > > + All available clocks are defined as preprocessor macros in > > + dt-bindings/clock/exynos850.h header and can be used in device tree sources. > > + > > +properties: > > + compatible: > > + const: samsung,exynos850-clock > > + > > + reg: > > + maxItems: 1 > > + > > + '#clock-cells': > > + const: 1 > > + > > +required: > > + - compatible > > + - reg > > + - '#clock-cells' > > + > > +additionalProperties: false > > + > > +examples: > > + # Clock controller node > > + - | > > + clock: clock-controller@0x120e0000 { > > + compatible = "samsung,exynos850-clock"; > > + reg = <0x0 0x120e0000 0x8000>; > > + #clock-cells = <1>; > > + }; > > + > > + # Required external clocks (should be provided in particular board DTS) > > + - | > > + fixed-rate-clocks { > > + oscclk { > > Use a generic node name: > s/oscclk/clock/ > > > + compatible = "samsung,exynos850-oscclk"; > > + clock-frequency = <26000000>; > > + }; > > + }; > > + > > + # UART controller node that consumes the clock generated by the clock > > + # controller > > + - | > > + #include > > + > > + serial_0: uart@13820000 { > > + compatible = "samsung,exynos850-uart"; > > + reg = <0x0 0x13820000 0x100>; > > + interrupts = ; > > + pinctrl-names = "default"; > > + pinctrl-0 = <&uart0_bus>; > > + clocks = <&clock GATE_UART_QCH>, <&clock DOUT_UART>; > > + clock-names = "gate_uart_clk0", "uart"; > > + }; > > + > > +... > > diff --git a/include/dt-bindings/clock/exynos850.h b/include/dt-bindings/clock/exynos850.h > > new file mode 100644 > > index 000000000000..b197db4427fc > > --- /dev/null > > +++ b/include/dt-bindings/clock/exynos850.h > > @@ -0,0 +1,267 @@ > > +/* SPDX-License-Identifier: GPL-2.0-only */ > > +/* > > + * Copyright (C) 2019 Samsung Electronics Co., Ltd. > > + * Copyright (C) 2021 Linaro Ltd. > > + * > > + * Device Tree binding constants for Exynos850 clock controller. > > + */ > > + > > +#ifndef _DT_BINDINGS_CLOCK_EXYNOS_850_H > > +#define _DT_BINDINGS_CLOCK_EXYNOS_850_H > > + > > +#define NONE (0 + 0) > > What type of clock is it? > > > +#define OSCCLK (0 + 1) > > Isn't this CLK_FIN_PLL? > > > + > > +#define CLK_APM_BASE (10) > > +#define UMUX_DLL_USER (CLK_APM_BASE + 0) > > Why having a base? We are not using it in any other bindings. > > > +#define UMUX_CLK_APM_BUS (CLK_APM_BASE + 1) > > +#define GATE_APM_CMU_APM_QCH (CLK_APM_BASE + 2) > > +#define GATE_GREBEINTEGRATION_QCH_GREBE (CLK_APM_BASE + 3) > > +#define GATE_GREBEINTEGRATION_QCH_DBG (CLK_APM_BASE + 4) > > +#define GATE_I3C_APM_PMIC_QCH_S_I3C (CLK_APM_BASE + 5) > > +#define GATE_I3C_APM_PMIC_QCH (CLK_APM_BASE + 6) > > +#define GATE_INTMEM_QCH (CLK_APM_BASE + 7) > > +#define GATE_MAILBOX_APM_AP_QCH (CLK_APM_BASE + 8) > > +#define GATE_MAILBOX_APM_CHUB_QCH (CLK_APM_BASE + 9) > > +#define GATE_MAILBOX_APM_CP_QCH (CLK_APM_BASE + 10) > > +#define GATE_MAILBOX_APM_GNSS_QCH (CLK_APM_BASE + 11) > > +#define GATE_MAILBOX_APM_WLBT_QCH (CLK_APM_BASE + 12) > > +#define GATE_MAILBOX_AP_CHUB_QCH (CLK_APM_BASE + 13) > > +#define GATE_MAILBOX_AP_CP_QCH (CLK_APM_BASE + 14) > > +#define GATE_MAILBOX_AP_CP_S_QCH (CLK_APM_BASE + 15) > > +#define GATE_MAILBOX_AP_GNSS_QCH (CLK_APM_BASE + 16) > > +#define GATE_MAILBOX_AP_WLBT_QCH (CLK_APM_BASE + 17) > > +#define GATE_MAILBOX_CP_CHUB_QCH (CLK_APM_BASE + 18) > > +#define GATE_MAILBOX_CP_GNSS_QCH (CLK_APM_BASE + 19) > > +#define GATE_MAILBOX_CP_WLBT_QCH (CLK_APM_BASE + 20) > > +#define GATE_MAILBOX_GNSS_CHUB_QCH (CLK_APM_BASE + 21) > > +#define GATE_MAILBOX_GNSS_WLBT_QCH (CLK_APM_BASE + 22) > > +#define GATE_MAILBOX_WLBT_ABOX_QCH (CLK_APM_BASE + 23) > > +#define GATE_MAILBOX_WLBT_CHUB_QCH (CLK_APM_BASE + 24) > > +#define GATE_PMU_INTR_GEN_QCH (CLK_APM_BASE + 25) > > +#define GATE_ROM_CRC32_HOST_QCH (CLK_APM_BASE + 26) > > +#define GATE_SPEEDY_APM_QCH (CLK_APM_BASE + 27) > > +#define GATE_WDT_APM_QCH (CLK_APM_BASE + 28) > > + > > +#define CLK_AUD_BASE (50) > > +#define UMUX_CLK_AUD_CPU_HCH (CLK_AUD_BASE + 0) > > +#define GATE_ABOX_QCH_CPU (CLK_AUD_BASE + 1) > > +#define GATE_ABOX_QCH_ACLK (CLK_AUD_BASE + 2) > > +#define GATE_ABOX_QCH_BCLK0 (CLK_AUD_BASE + 3) > > +#define GATE_ABOX_QCH_BCLK1 (CLK_AUD_BASE + 4) > > +#define GATE_ABOX_QCH_FM (CLK_AUD_BASE + 5) > > +#define GATE_ABOX_QCH_BCLK2 (CLK_AUD_BASE + 6) > > +#define GATE_ABOX_QCH_CCLK_ASB (CLK_AUD_BASE + 7) > > +#define GATE_ABOX_QCH_BCLK3 (CLK_AUD_BASE + 8) > > +#define GATE_ABOX_QCH_BCLK4 (CLK_AUD_BASE + 9) > > +#define GATE_ABOX_QCH_BCLK5 (CLK_AUD_BASE + 10) > > +#define GATE_ABOX_QCH_BCLK6 (CLK_AUD_BASE + 11) > > +#define GATE_ABOX_QCH_BCLK_CNT (CLK_AUD_BASE + 12) > > +#define GATE_AUD_CMU_AUD_QCH (CLK_AUD_BASE + 13) > > +#define GATE_GPIO_AUD_QCH (CLK_AUD_BASE + 14) > > +#define GATE_SYSMMU_AUD_QCH_S1 (CLK_AUD_BASE + 15) > > +#define GATE_WDT_AUD_QCH (CLK_AUD_BASE + 16) > > +#define PLL_AUD_OUT (CLK_AUD_BASE + 17) > > +#define DOUT_CLK_AUD_CPU (CLK_AUD_BASE + 18) > > +#define DOUT_CLK_AUD_CPU_ACLK (CLK_AUD_BASE + 19) > > +#define DOUT_CLK_AUD_CPU_PCLKDBG (CLK_AUD_BASE + 20) > > +#define DOUT_CLK_AUD_BUSD (CLK_AUD_BASE + 21) > > +#define DOUT_CLK_AUD_UAIF0 (CLK_AUD_BASE + 23) > > +#define DOUT_CLK_AUD_UAIF1 (CLK_AUD_BASE + 24) > > +#define DOUT_CLK_AUD_FM (CLK_AUD_BASE + 25) > > +#define DOUT_CLK_AUD_BUSP (CLK_AUD_BASE + 26) > > +#define DOUT_CLK_AUD_UAIF2 (CLK_AUD_BASE + 27) > > +#define DOUT_CLK_AUD_CNT (CLK_AUD_BASE + 28) > > +#define DOUT_CLK_AUD_UAIF3 (CLK_AUD_BASE + 29) > > +#define DOUT_CLK_AUD_UAIF4 (CLK_AUD_BASE + 30) > > +#define DOUT_CLK_AUD_UAIF5 (CLK_AUD_BASE + 31) > > +#define DOUT_CLK_AUD_UAIF6 (CLK_AUD_BASE + 32) > > +#define DOUT_CLK_AUD_AUDIF (CLK_AUD_BASE + 33) > > +#define DOUT_CLK_AUD_MCLK (CLK_AUD_BASE + 34) > > +#define UMUX_CLK_AUD_FM (CLK_AUD_BASE + 35) > > + > > +#define CLK_CHUB_BASE (100) > > +#define GATE_BAAW_C_CHUB_QCH (CLK_CHUB_BASE + 0) > > +#define GATE_BAAW_D_CHUB_QCH (CLK_CHUB_BASE + 1) > > +#define GATE_CHUB_CMU_CHUB_QCH (CLK_CHUB_BASE + 2) > > +#define GATE_CM4_CHUB_QCH (CLK_CHUB_BASE + 3) > > +#define GATE_DMIC_AHB0_QCH (CLK_CHUB_BASE + 4) > > +#define GATE_DMIC_IF_QCH_PCLK (CLK_CHUB_BASE + 5) > > +#define GATE_DMIC_IF_QCH_DMIC_CLK (CLK_CHUB_BASE + 6) > > +#define GATE_HWACG_SYS_DMIC0_QCH (CLK_CHUB_BASE + 7) > > +#define GATE_PWM_CHUB_QCH (CLK_CHUB_BASE + 8) > > +#define GATE_SWEEPER_C_CHUB_QCH (CLK_CHUB_BASE + 9) > > +#define GATE_SWEEPER_D_CHUB_QCH (CLK_CHUB_BASE + 10) > > +#define GATE_TIMER_CHUB_QCH (CLK_CHUB_BASE + 11) > > +#define GATE_WDT_CHUB_QCH (CLK_CHUB_BASE + 12) > > +#define GATE_U_DMIC_CLK_SCAN_MUX_QCH (CLK_CHUB_BASE + 13) > > +#define DOUT_CLK_CHUB_BUS (CLK_CHUB_BASE + 14) > > +#define DOUT_CLK_CHUB_DMIC_IF (CLK_CHUB_BASE + 15) > > +#define DOUT_CLK_CHUB_DMIC_IF_DIV2 (CLK_CHUB_BASE + 16) > > +#define DOUT_CLK_CHUB_DMIC (CLK_CHUB_BASE + 17) > > + > > +#define CLK_CMGP_BASE (150) > > +#define UMUX_CLK_CMGP_USI_CMGP0 (CLK_CMGP_BASE + 0) > > +#define UMUX_CLK_CMGP_USI_CMGP1 (CLK_CMGP_BASE + 1) > > +#define GATE_ADC_CMGP_QCH_S0 (CLK_CMGP_BASE + 2) > > +#define GATE_ADC_CMGP_QCH_S1 (CLK_CMGP_BASE + 3) > > +#define GATE_ADC_CMGP_QCH_ADC (CLK_CMGP_BASE + 4) > > +#define GATE_CMGP_CMU_CMGP_QCH (CLK_CMGP_BASE + 5) > > +#define GATE_GPIO_CMGP_QCH (CLK_CMGP_BASE + 6) > > +#define GATE_USI_CMGP0_QCH (CLK_CMGP_BASE + 7) > > +#define GATE_USI_CMGP1_QCH (CLK_CMGP_BASE + 8) > > +#define DOUT_CLK_CMGP_ADC (CLK_CMGP_BASE + 9) > > +#define DOUT_CLK_CMGP_USI_CMGP0 (CLK_CMGP_BASE + 10) > > +#define DOUT_CLK_CMGP_USI_CMGP1 (CLK_CMGP_BASE + 11) > > + > > +#define CLK_TOP_BASE (200) > > You seem to register all clocks under one CMU. Are you sure that this > reflects the HW? It looks quite a big set of clocks for one block... It > does not look scallable. > > > +#define GATE_CMU_TOP_CMUREF_QCH (CLK_TOP_BASE + 0) > > +#define GATE_DFTMUX_CMU_QCH_CLK_CIS0 (CLK_TOP_BASE + 1) > > +#define GATE_DFTMUX_CMU_QCH_CLK_CIS1 (CLK_TOP_BASE + 2) > > +#define GATE_DFTMUX_CMU_QCH_CLK_CIS2 (CLK_TOP_BASE + 3) > > +#define GATE_OTP_QCH (CLK_TOP_BASE + 4) > > +#define GATE_ADM_AHB_SSS_QCH (CLK_TOP_BASE + 5) > > +#define GATE_BAAW_P_CHUB_QCH (CLK_TOP_BASE + 6) > > +#define GATE_BAAW_P_GNSS_QCH (CLK_TOP_BASE + 7) > > +#define GATE_BAAW_P_MODEM_QCH (CLK_TOP_BASE + 8) > > +#define GATE_BAAW_P_WLBT_QCH (CLK_TOP_BASE + 9) > > + > > +#define CLK_CORE_BASE (250) > > +#define GATE_CCI_550_QCH (CLK_CORE_BASE + 0) > > +#define GATE_CORE_CMU_CORE_QCH (CLK_CORE_BASE + 1) > > +#define GATE_GIC_QCH (CLK_CORE_BASE + 2) > > +#define GATE_GPIO_CORE_QCH (CLK_CORE_BASE + 3) > > +#define GATE_MMC_EMBD_QCH (CLK_CORE_BASE + 4) > > +#define GATE_PDMA_CORE_QCH (CLK_CORE_BASE + 5) > > +#define GATE_RTIC_QCH (CLK_CORE_BASE + 6) > > +#define GATE_SPDMA_CORE_QCH (CLK_CORE_BASE + 7) > > +#define GATE_SSS_QCH (CLK_CORE_BASE + 8) > > +#define GATE_TREX_D_CORE_QCH (CLK_CORE_BASE + 9) > > +#define GATE_TREX_P_CORE_QCH (CLK_CORE_BASE + 10) > > +#define GATE_CSSYS_DBG_QCH (CLK_CORE_BASE + 11) > > +#define GATE_SECJTAG_QCH (CLK_CORE_BASE + 12) > > +#define DOUT_CORE_MMC_EMBD (CLK_CORE_BASE + 13) > > + > > +#define CLK_DPU_BASE (300) > > +#define GATE_DPU_QCH_S_DPP (CLK_DPU_BASE + 0) > > +#define GATE_DPU_QCH_S_DMA (CLK_DPU_BASE + 1) > > +#define GATE_DPU_QCH_S_DECON (CLK_DPU_BASE + 2) > > +#define GATE_DPU_CMU_DPU_QCH (CLK_DPU_BASE + 3) > > +#define GATE_SMMU_DPU_QCH (CLK_DPU_BASE + 4) > > +#define DOUT_CLK_DPU_BUSP (CLK_DPU_BASE + 5) > > + > > +#define CLK_G3D_BASE (350) > > +#define GATE_G3D_CMU_G3D_QCH (CLK_G3D_BASE + 0) > > +#define GATE_GPU_QCH (CLK_G3D_BASE + 1) > > +#define DOUT_CLK_G3D_BUSP (CLK_G3D_BASE + 2) > > + > > +#define CLK_HIS_BASE (400) > > +#define GATE_GPIO_HSI_QCH (CLK_HIS_BASE + 0) > > +#define GATE_HSI_CMU_HSI_QCH (CLK_HIS_BASE + 1) > > +#define GATE_MMC_CARD_QCH (CLK_HIS_BASE + 2) > > +#define GATE_USB20DRD_TOP_QCH_LINK (CLK_HIS_BASE + 3) > > +#define GATE_USB20DRD_TOP_QCH_20CTRL (CLK_HIS_BASE + 4) > > +#define GATE_USB20DRD_TOP_QCH_REFCLK (CLK_HIS_BASE + 5) > > +#define GATE_USB20DRD_TOP_QCH_RTC (CLK_HIS_BASE + 6) > > +#define PLL_MMC_OUT (CLK_HIS_BASE + 7) > > +#define HSI_BUS (CLK_HIS_BASE + 8) > > Please prefix HSI/IS/MFCM with something reasonable. Most of other > bindings prefix everything with CLK or ACLK/SCLK/PCLK/PHYCLK/DOUT, but > having GATE/DOUT/MUX is reasonable as well. However here and further you > miss prefixes. > > > +#define HSI_MMC_CARD (CLK_HIS_BASE + 9) > > +#define HSI_USB20DRD (CLK_HIS_BASE + 10) > > + > > +#define CLK_IS_BASE (450) > > +#define GATE_CSIS0_QCH (CLK_IS_BASE + 0) > > +#define GATE_CSIS1_QCH (CLK_IS_BASE + 1) > > +#define GATE_CSIS2_QCH (CLK_IS_BASE + 2) > > +#define GATE_IS_CMU_IS_QCH (CLK_IS_BASE + 3) > > +#define GATE_IS_TOP_QCH_S_00 (CLK_IS_BASE + 4) > > +#define GATE_IS_TOP_QCH_S_02 (CLK_IS_BASE + 5) > > +#define GATE_IS_TOP_QCH_S_03 (CLK_IS_BASE + 6) > > +#define GATE_IS_TOP_QCH_S_04 (CLK_IS_BASE + 7) > > +#define GATE_IS_TOP_QCH_S_05 (CLK_IS_BASE + 8) > > +#define GATE_IS_TOP_QCH_S_06 (CLK_IS_BASE + 9) > > +#define GATE_SYSMMU_IS0_QCH (CLK_IS_BASE + 10) > > +#define GATE_SYSMMU_IS1_QCH (CLK_IS_BASE + 11) > > +#define IS_BUS (CLK_IS_BASE + 12) > > +#define IS_VRA (CLK_IS_BASE + 13) > > +#define IS_ITP (CLK_IS_BASE + 14) > > +#define IS_GDC (CLK_IS_BASE + 15) > > +#define UMUX_CLK_IS_BUS (CLK_IS_BASE + 15) > > +#define UMUX_CLK_IS_ITP (CLK_IS_BASE + 16) > > +#define UMUX_CLK_IS_VRA (CLK_IS_BASE + 17) > > +#define UMUX_CLK_IS_GDC (CLK_IS_BASE + 18) > > +#define GATE_CLK_ITP (CLK_IS_BASE + 19) > > +#define GATE_CLK_VRA (CLK_IS_BASE + 20) > > +#define GATE_CLK_GDC (CLK_IS_BASE + 21) > > +#define CIS_CLK0 (CLK_IS_BASE + 22) > > +#define CIS_CLK1 (CLK_IS_BASE + 23) > > +#define CIS_CLK2 (CLK_IS_BASE + 24) > > + > > +#define CLK_MFCMSCL_BASE (500) > > +#define GATE_JPEG_QCH (CLK_MFCMSCL_BASE + 0) > > +#define GATE_M2M_QCH (CLK_MFCMSCL_BASE + 1) > > +#define GATE_MCSC_QCH (CLK_MFCMSCL_BASE + 2) > > +#define GATE_MFC_QCH (CLK_MFCMSCL_BASE + 3) > > +#define GATE_MFCMSCL_CMU_MFCMSCL_QCH (CLK_MFCMSCL_BASE + 4) > > +#define GATE_SYSMMU_MFCMSCL_QCH (CLK_MFCMSCL_BASE + 5) > > +#define GATE_CMU_MIF_CMUREF_QCH (CLK_MFCMSCL_BASE + 6) > > +#define GATE_DMC_QCH (CLK_MFCMSCL_BASE + 7) > > +#define GATE_MIF_CMU_MIF_QCH (CLK_MFCMSCL_BASE + 8) > > +#define GATE_CMU_MIF1_CMU_REF_QCH (CLK_MFCMSCL_BASE + 9) > > +#define GATE_DMC1_QCH (CLK_MFCMSCL_BASE + 10) > > +#define GATE_MIF1_CMU_MIF1_QCH (CLK_MFCMSCL_BASE + 11) > > +#define GATE_MODEM_CMU_MODEM_QCH (CLK_MFCMSCL_BASE + 12) > > +#define DOUT_CLK_MFCMSCL_BUSP (CLK_MFCMSCL_BASE + 13) > > +#define MFCMSCL_MFC (CLK_MFCMSCL_BASE + 14) > > +#define MFCMSCL_M2M (CLK_MFCMSCL_BASE + 15) > > +#define MFCMSCL_MCSC (CLK_MFCMSCL_BASE + 16) > > +#define MFCMSCL_JPEG (CLK_MFCMSCL_BASE + 17) > > +#define UMUX_CLKCMU_MFCMSCL_MFC (CLK_MFCMSCL_BASE + 18) > > +#define UMUX_CLKCMU_MFCMSCL_M2M (CLK_MFCMSCL_BASE + 19) > > +#define UMUX_CLKCMU_MFCMSCL_MCSC (CLK_MFCMSCL_BASE + 20) > > +#define UMUX_CLKCMU_MFCMSCL_JPEG (CLK_MFCMSCL_BASE + 21) > > + > > +#define CLK_PERI_BASE (550) > > +#define UMUX_CLKCMU_PERI_BUS_USER (CLK_PERI_BASE + 0) > > +#define UMUX_CLKCMU_PERI_UART_USER (CLK_PERI_BASE + 1) > > +#define UMUX_CLKCMU_PERI_HSI2C_USER (CLK_PERI_BASE + 2) > > +#define UMUX_CLKCMU_PERI_SPI_USER (CLK_PERI_BASE + 3) > > +#define GATE_BUSIF_TMU_QCH (CLK_PERI_BASE + 4) > > +#define GATE_GPIO_PERI_QCH (CLK_PERI_BASE + 5) > > +#define GATE_HSI2C_0_QCH (CLK_PERI_BASE + 6) > > +#define GATE_HSI2C_1_QCH (CLK_PERI_BASE + 7) > > +#define GATE_HSI2C_2_QCH (CLK_PERI_BASE + 8) > > +#define GATE_I2C_0_QCH (CLK_PERI_BASE + 9) > > +#define GATE_I2C_1_QCH (CLK_PERI_BASE + 10) > > +#define GATE_I2C_2_QCH (CLK_PERI_BASE + 11) > > +#define GATE_I2C_3_QCH (CLK_PERI_BASE + 12) > > +#define GATE_I2C_4_QCH (CLK_PERI_BASE + 13) > > +#define GATE_I2C_5_QCH (CLK_PERI_BASE + 14) > > +#define GATE_I2C_6_QCH (CLK_PERI_BASE + 15) > > +#define GATE_MCT_QCH (CLK_PERI_BASE + 16) > > +#define GATE_OTP_CON_TOP_QCH (CLK_PERI_BASE + 17) > > +#define GATE_PWM_MOTOR_QCH (CLK_PERI_BASE + 18) > > +#define GATE_SPI_0_QCH (CLK_PERI_BASE + 19) > > +#define GATE_UART_QCH (CLK_PERI_BASE + 20) > > +#define GATE_WDT_0_QCH (CLK_PERI_BASE + 21) > > +#define GATE_WDT_1_QCH (CLK_PERI_BASE + 22) > > +#define DOUT_CLK_PERI_SPI_0 (CLK_PERI_BASE + 23) > > +#define DOUT_CLK_PERI_HSI2C_0 (CLK_PERI_BASE + 24) > > +#define DOUT_CLK_PERI_HSI2C_1 (CLK_PERI_BASE + 25) > > +#define DOUT_CLK_PERI_HSI2C_2 (CLK_PERI_BASE + 26) > > +#define DOUT_I2C_0 (CLK_PERI_BASE + 27) > > +#define DOUT_I2C_1 (CLK_PERI_BASE + 28) > > +#define DOUT_I2C_2 (CLK_PERI_BASE + 29) > > +#define DOUT_I2C_3 (CLK_PERI_BASE + 30) > > +#define DOUT_I2C_4 (CLK_PERI_BASE + 31) > > +#define DOUT_I2C_5 (CLK_PERI_BASE + 32) > > +#define DOUT_I2C_6 (CLK_PERI_BASE + 33) > > +#define DOUT_UART (CLK_PERI_BASE + 34) > > + > > +#define CLK_CLKOUT_BASE (700) > > +#define OSC_NFC (CLK_CLKOUT_BASE + 0) > > +#define OSC_AUD (CLK_CLKOUT_BASE + 1) > > What are these? > > > + > > +/* Must be greater than maximal clock ID */ > > Why? > > > +#define CLK_NR_CLKS (1125 + 1) > > + > > +#endif /* _DT_BINDINGS_CLOCK_EXYNOS_850_H */ > > > > > Best regards, > Krzysztof From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UPPERCASE_50_75 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6F656C4338F for ; Tue, 3 Aug 2021 12:00:44 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 34F8460EFD for ; Tue, 3 Aug 2021 12:00:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 34F8460EFD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6HUqsiK+lE9xC40f/CgX8GfBRqF8Xsxp9wX9Zo5XWIY=; b=QUvrWngeFws/Iw x9yz1bGwCJ6YWBNfluhn3lXr78VCz1zB27j/mhgIuJcX2X6eLM3VL3n+xZpZug+YsN/BQuwbwSnXh ixoYfibL86jIM4dqc2+fpW+i4unja1rb5XXl4sdYEMs4EQ0HfDibCHZ1EGj4ivsZpWq1Vm66cPaEF qHPEyPRp7gqMNEQSA8gp2NHo1ADdY+/FyYWyLdpF3Zzlpr6MQa63V3RNBpZcn7DpuU6XUbLk3sest HGjSGDhG8h09miGj2ztiyPEqOVe5hqthpdtPppZmexVpfpjHp1E8v4O2o+Su1c8Hak8oCs+FM3lyN p1xZfm/9XWDd5rmuSIAQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAt3z-002Rjo-PC; Tue, 03 Aug 2021 11:58:30 +0000 Received: from mail-vs1-xe31.google.com ([2607:f8b0:4864:20::e31]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAt0x-002QZe-Ru for linux-arm-kernel@lists.infradead.org; Tue, 03 Aug 2021 11:55:22 +0000 Received: by mail-vs1-xe31.google.com with SMTP id t2so11194375vsa.11 for ; Tue, 03 Aug 2021 04:55:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=kt0k6UPnvHf5Jbf4nvgfvtJ8nPm+labwYp+UnY7/vdg=; b=WUPfSlBIyOUYuS0s2RSANunnwNYxsQslj1mS077dttOQcW/aDjTpFLeolEVtoNNOlg 17GeoGT7R5uYpZyLNDWMB6/Vwu38RsCjtQcsPF3H4z4NYLz9z13ZZ/fWBJhla6wdsDE+ qWVLdIlMHoxTJcKffusISbePy57Jg+AnvBHzmJP/qQoD9t1f/9mYDhdYGnsXsw9nEP+g g/4hjxale/LKGXrFmJlfI5I2nSvtepVzcF6yUQawcwbm3p8WZqvvG6Liuo5Y9DBwvG4G qNM4wTEXFJ7MGxh07s1zfP0NLz/IDbNmAFy89dWXhpofZTiOgh7S0gk2EHjf/OOwvupJ rdjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=kt0k6UPnvHf5Jbf4nvgfvtJ8nPm+labwYp+UnY7/vdg=; b=aIMSOlFyTglEjBs682bcyz0Wm0fOqjxpOAnuM+RexTqy789TVVoma1RI64FTm1/gYW bEIrX9EiuHUyhRfhnrBvUOQJqHWfMxMUoUnardfYdQaYWrcL0O/55ck4OeRlC6blc84x sbJF9gjvxFSqTJcG0P6wjgVeCQRHxcrMngMWe4GOAoxmLETM8uEt4J1aQVSvlgdgolVv nQlKWvqV7daywqptAZpu4GkO3hig+kLTrsgrlk3Gw6u3TV1nioAWTQXegIBFor8Dg7+l VMui8ECk3Qfu7ehVAz+RB3hRXAbnJt/4K09FaJj9DqgMq3eGcmG1SFe8BWakWPykwaoE OVmw== X-Gm-Message-State: AOAM533y3n6kwbanuwVC7QbDEF1IRplOlNSJWcnbVKOwRaGqKFZc43IG 1C3ROku+L65w6kydNw43xImMQVWioEGDEP3GNXjffw== X-Google-Smtp-Source: ABdhPJwzj5OkA1ucomAHt8KYnU6dQ1DPHqjmlHl8ZjIrr/ZBvp4T7SVQ19abTbJB7tWxOCluPBYff8+opi8bh35vAhM= X-Received: by 2002:a05:6102:ecb:: with SMTP id m11mr13015294vst.34.1627991718326; Tue, 03 Aug 2021 04:55:18 -0700 (PDT) MIME-Version: 1.0 References: <20210730144922.29111-1-semen.protsenko@linaro.org> <20210730144922.29111-10-semen.protsenko@linaro.org> <042095c4-8404-9292-83d3-531bfdcd7b35@canonical.com> In-Reply-To: <042095c4-8404-9292-83d3-531bfdcd7b35@canonical.com> From: Sam Protsenko Date: Tue, 3 Aug 2021 14:55:06 +0300 Message-ID: Subject: Re: [PATCH 09/12] dt-bindings: clock: Add bindings for Exynos850 clock controller To: Krzysztof Kozlowski Cc: Sylwester Nawrocki , Chanwoo Choi , Linus Walleij , Tomasz Figa , Rob Herring , Stephen Boyd , Michael Turquette , Jiri Slaby , Greg Kroah-Hartman , Charles Keepax , Ryu Euiyoul , Tom Gall , Sumit Semwal , John Stultz , Amit Pundir , devicetree , linux-arm Mailing List , linux-clk , "open list:GPIO SUBSYSTEM" , Linux Kernel Mailing List , Linux Samsung SOC , "open list:SERIAL DRIVERS" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210803_045519_970154_0928B5F3 X-CRM114-Status: GOOD ( 37.44 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, 30 Jul 2021 at 18:43, Krzysztof Kozlowski wrote: > > On 30/07/2021 16:49, Sam Protsenko wrote: > > Add documentation for Exynos850 clock driver bindings and corresponding > > clock ID constants, which will be used further both in clock driver and > > in device tree files. Constants are grouped per domain basis (CMU) for > > more convenient usage, but those are just unique numbers and have > > nothing to do with register offsets, etc. > > > > Signed-off-by: Sam Protsenko > > --- > > .../bindings/clock/exynos850-clock.yaml | 70 +++++ > > include/dt-bindings/clock/exynos850.h | 267 ++++++++++++++++++ > > 2 files changed, 337 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/clock/exynos850-clock.yaml > > create mode 100644 include/dt-bindings/clock/exynos850.h > > > > diff --git a/Documentation/devicetree/bindings/clock/exynos850-clock.yaml b/Documentation/devicetree/bindings/clock/exynos850-clock.yaml > > new file mode 100644 > > index 000000000000..201c2b79e629 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/clock/exynos850-clock.yaml > > @@ -0,0 +1,70 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/clock/exynos850-clock.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Clock bindings for Samsung Exynos850 clock controller > > What plans do you have for this binding? Is it complete? If yes, there > is no point to have binding for each SoC clock controller and this > should be merged into for example: > Documentation/devicetree/bindings/clock/exynos5420-clock.txt > Yeah, I'll remove the whole patch in v2. It's not really needed here, as clk driver is just a stub for now. I'll send a separate patch series for the clock driver later, including bindings. > First - convert exynos5420-clock.txt into YAML. Then add Exynos850. > > Other files can be also integrated. > > > + > > +maintainers: > > + - Sam Protsenko > > I propose also: > +Sylwester Nawrocki > +Tomasz Figa > +Chanwoo Choi > > > + > > +description: | > > + The Exynos850 clock controller generates and supplies clock to various > > + controllers within the SoC. > > > > Each clock is assigned an identifier and client > > + nodes can use this identifier to specify the clock which they consume. > > Skip the sentence, it's generic clock provider/consumer description. > > > + > > + All available clocks are defined as preprocessor macros in > > + dt-bindings/clock/exynos850.h header and can be used in device tree sources. > > + > > +properties: > > + compatible: > > + const: samsung,exynos850-clock > > + > > + reg: > > + maxItems: 1 > > + > > + '#clock-cells': > > + const: 1 > > + > > +required: > > + - compatible > > + - reg > > + - '#clock-cells' > > + > > +additionalProperties: false > > + > > +examples: > > + # Clock controller node > > + - | > > + clock: clock-controller@0x120e0000 { > > + compatible = "samsung,exynos850-clock"; > > + reg = <0x0 0x120e0000 0x8000>; > > + #clock-cells = <1>; > > + }; > > + > > + # Required external clocks (should be provided in particular board DTS) > > + - | > > + fixed-rate-clocks { > > + oscclk { > > Use a generic node name: > s/oscclk/clock/ > > > + compatible = "samsung,exynos850-oscclk"; > > + clock-frequency = <26000000>; > > + }; > > + }; > > + > > + # UART controller node that consumes the clock generated by the clock > > + # controller > > + - | > > + #include > > + > > + serial_0: uart@13820000 { > > + compatible = "samsung,exynos850-uart"; > > + reg = <0x0 0x13820000 0x100>; > > + interrupts = ; > > + pinctrl-names = "default"; > > + pinctrl-0 = <&uart0_bus>; > > + clocks = <&clock GATE_UART_QCH>, <&clock DOUT_UART>; > > + clock-names = "gate_uart_clk0", "uart"; > > + }; > > + > > +... > > diff --git a/include/dt-bindings/clock/exynos850.h b/include/dt-bindings/clock/exynos850.h > > new file mode 100644 > > index 000000000000..b197db4427fc > > --- /dev/null > > +++ b/include/dt-bindings/clock/exynos850.h > > @@ -0,0 +1,267 @@ > > +/* SPDX-License-Identifier: GPL-2.0-only */ > > +/* > > + * Copyright (C) 2019 Samsung Electronics Co., Ltd. > > + * Copyright (C) 2021 Linaro Ltd. > > + * > > + * Device Tree binding constants for Exynos850 clock controller. > > + */ > > + > > +#ifndef _DT_BINDINGS_CLOCK_EXYNOS_850_H > > +#define _DT_BINDINGS_CLOCK_EXYNOS_850_H > > + > > +#define NONE (0 + 0) > > What type of clock is it? > > > +#define OSCCLK (0 + 1) > > Isn't this CLK_FIN_PLL? > > > + > > +#define CLK_APM_BASE (10) > > +#define UMUX_DLL_USER (CLK_APM_BASE + 0) > > Why having a base? We are not using it in any other bindings. > > > +#define UMUX_CLK_APM_BUS (CLK_APM_BASE + 1) > > +#define GATE_APM_CMU_APM_QCH (CLK_APM_BASE + 2) > > +#define GATE_GREBEINTEGRATION_QCH_GREBE (CLK_APM_BASE + 3) > > +#define GATE_GREBEINTEGRATION_QCH_DBG (CLK_APM_BASE + 4) > > +#define GATE_I3C_APM_PMIC_QCH_S_I3C (CLK_APM_BASE + 5) > > +#define GATE_I3C_APM_PMIC_QCH (CLK_APM_BASE + 6) > > +#define GATE_INTMEM_QCH (CLK_APM_BASE + 7) > > +#define GATE_MAILBOX_APM_AP_QCH (CLK_APM_BASE + 8) > > +#define GATE_MAILBOX_APM_CHUB_QCH (CLK_APM_BASE + 9) > > +#define GATE_MAILBOX_APM_CP_QCH (CLK_APM_BASE + 10) > > +#define GATE_MAILBOX_APM_GNSS_QCH (CLK_APM_BASE + 11) > > +#define GATE_MAILBOX_APM_WLBT_QCH (CLK_APM_BASE + 12) > > +#define GATE_MAILBOX_AP_CHUB_QCH (CLK_APM_BASE + 13) > > +#define GATE_MAILBOX_AP_CP_QCH (CLK_APM_BASE + 14) > > +#define GATE_MAILBOX_AP_CP_S_QCH (CLK_APM_BASE + 15) > > +#define GATE_MAILBOX_AP_GNSS_QCH (CLK_APM_BASE + 16) > > +#define GATE_MAILBOX_AP_WLBT_QCH (CLK_APM_BASE + 17) > > +#define GATE_MAILBOX_CP_CHUB_QCH (CLK_APM_BASE + 18) > > +#define GATE_MAILBOX_CP_GNSS_QCH (CLK_APM_BASE + 19) > > +#define GATE_MAILBOX_CP_WLBT_QCH (CLK_APM_BASE + 20) > > +#define GATE_MAILBOX_GNSS_CHUB_QCH (CLK_APM_BASE + 21) > > +#define GATE_MAILBOX_GNSS_WLBT_QCH (CLK_APM_BASE + 22) > > +#define GATE_MAILBOX_WLBT_ABOX_QCH (CLK_APM_BASE + 23) > > +#define GATE_MAILBOX_WLBT_CHUB_QCH (CLK_APM_BASE + 24) > > +#define GATE_PMU_INTR_GEN_QCH (CLK_APM_BASE + 25) > > +#define GATE_ROM_CRC32_HOST_QCH (CLK_APM_BASE + 26) > > +#define GATE_SPEEDY_APM_QCH (CLK_APM_BASE + 27) > > +#define GATE_WDT_APM_QCH (CLK_APM_BASE + 28) > > + > > +#define CLK_AUD_BASE (50) > > +#define UMUX_CLK_AUD_CPU_HCH (CLK_AUD_BASE + 0) > > +#define GATE_ABOX_QCH_CPU (CLK_AUD_BASE + 1) > > +#define GATE_ABOX_QCH_ACLK (CLK_AUD_BASE + 2) > > +#define GATE_ABOX_QCH_BCLK0 (CLK_AUD_BASE + 3) > > +#define GATE_ABOX_QCH_BCLK1 (CLK_AUD_BASE + 4) > > +#define GATE_ABOX_QCH_FM (CLK_AUD_BASE + 5) > > +#define GATE_ABOX_QCH_BCLK2 (CLK_AUD_BASE + 6) > > +#define GATE_ABOX_QCH_CCLK_ASB (CLK_AUD_BASE + 7) > > +#define GATE_ABOX_QCH_BCLK3 (CLK_AUD_BASE + 8) > > +#define GATE_ABOX_QCH_BCLK4 (CLK_AUD_BASE + 9) > > +#define GATE_ABOX_QCH_BCLK5 (CLK_AUD_BASE + 10) > > +#define GATE_ABOX_QCH_BCLK6 (CLK_AUD_BASE + 11) > > +#define GATE_ABOX_QCH_BCLK_CNT (CLK_AUD_BASE + 12) > > +#define GATE_AUD_CMU_AUD_QCH (CLK_AUD_BASE + 13) > > +#define GATE_GPIO_AUD_QCH (CLK_AUD_BASE + 14) > > +#define GATE_SYSMMU_AUD_QCH_S1 (CLK_AUD_BASE + 15) > > +#define GATE_WDT_AUD_QCH (CLK_AUD_BASE + 16) > > +#define PLL_AUD_OUT (CLK_AUD_BASE + 17) > > +#define DOUT_CLK_AUD_CPU (CLK_AUD_BASE + 18) > > +#define DOUT_CLK_AUD_CPU_ACLK (CLK_AUD_BASE + 19) > > +#define DOUT_CLK_AUD_CPU_PCLKDBG (CLK_AUD_BASE + 20) > > +#define DOUT_CLK_AUD_BUSD (CLK_AUD_BASE + 21) > > +#define DOUT_CLK_AUD_UAIF0 (CLK_AUD_BASE + 23) > > +#define DOUT_CLK_AUD_UAIF1 (CLK_AUD_BASE + 24) > > +#define DOUT_CLK_AUD_FM (CLK_AUD_BASE + 25) > > +#define DOUT_CLK_AUD_BUSP (CLK_AUD_BASE + 26) > > +#define DOUT_CLK_AUD_UAIF2 (CLK_AUD_BASE + 27) > > +#define DOUT_CLK_AUD_CNT (CLK_AUD_BASE + 28) > > +#define DOUT_CLK_AUD_UAIF3 (CLK_AUD_BASE + 29) > > +#define DOUT_CLK_AUD_UAIF4 (CLK_AUD_BASE + 30) > > +#define DOUT_CLK_AUD_UAIF5 (CLK_AUD_BASE + 31) > > +#define DOUT_CLK_AUD_UAIF6 (CLK_AUD_BASE + 32) > > +#define DOUT_CLK_AUD_AUDIF (CLK_AUD_BASE + 33) > > +#define DOUT_CLK_AUD_MCLK (CLK_AUD_BASE + 34) > > +#define UMUX_CLK_AUD_FM (CLK_AUD_BASE + 35) > > + > > +#define CLK_CHUB_BASE (100) > > +#define GATE_BAAW_C_CHUB_QCH (CLK_CHUB_BASE + 0) > > +#define GATE_BAAW_D_CHUB_QCH (CLK_CHUB_BASE + 1) > > +#define GATE_CHUB_CMU_CHUB_QCH (CLK_CHUB_BASE + 2) > > +#define GATE_CM4_CHUB_QCH (CLK_CHUB_BASE + 3) > > +#define GATE_DMIC_AHB0_QCH (CLK_CHUB_BASE + 4) > > +#define GATE_DMIC_IF_QCH_PCLK (CLK_CHUB_BASE + 5) > > +#define GATE_DMIC_IF_QCH_DMIC_CLK (CLK_CHUB_BASE + 6) > > +#define GATE_HWACG_SYS_DMIC0_QCH (CLK_CHUB_BASE + 7) > > +#define GATE_PWM_CHUB_QCH (CLK_CHUB_BASE + 8) > > +#define GATE_SWEEPER_C_CHUB_QCH (CLK_CHUB_BASE + 9) > > +#define GATE_SWEEPER_D_CHUB_QCH (CLK_CHUB_BASE + 10) > > +#define GATE_TIMER_CHUB_QCH (CLK_CHUB_BASE + 11) > > +#define GATE_WDT_CHUB_QCH (CLK_CHUB_BASE + 12) > > +#define GATE_U_DMIC_CLK_SCAN_MUX_QCH (CLK_CHUB_BASE + 13) > > +#define DOUT_CLK_CHUB_BUS (CLK_CHUB_BASE + 14) > > +#define DOUT_CLK_CHUB_DMIC_IF (CLK_CHUB_BASE + 15) > > +#define DOUT_CLK_CHUB_DMIC_IF_DIV2 (CLK_CHUB_BASE + 16) > > +#define DOUT_CLK_CHUB_DMIC (CLK_CHUB_BASE + 17) > > + > > +#define CLK_CMGP_BASE (150) > > +#define UMUX_CLK_CMGP_USI_CMGP0 (CLK_CMGP_BASE + 0) > > +#define UMUX_CLK_CMGP_USI_CMGP1 (CLK_CMGP_BASE + 1) > > +#define GATE_ADC_CMGP_QCH_S0 (CLK_CMGP_BASE + 2) > > +#define GATE_ADC_CMGP_QCH_S1 (CLK_CMGP_BASE + 3) > > +#define GATE_ADC_CMGP_QCH_ADC (CLK_CMGP_BASE + 4) > > +#define GATE_CMGP_CMU_CMGP_QCH (CLK_CMGP_BASE + 5) > > +#define GATE_GPIO_CMGP_QCH (CLK_CMGP_BASE + 6) > > +#define GATE_USI_CMGP0_QCH (CLK_CMGP_BASE + 7) > > +#define GATE_USI_CMGP1_QCH (CLK_CMGP_BASE + 8) > > +#define DOUT_CLK_CMGP_ADC (CLK_CMGP_BASE + 9) > > +#define DOUT_CLK_CMGP_USI_CMGP0 (CLK_CMGP_BASE + 10) > > +#define DOUT_CLK_CMGP_USI_CMGP1 (CLK_CMGP_BASE + 11) > > + > > +#define CLK_TOP_BASE (200) > > You seem to register all clocks under one CMU. Are you sure that this > reflects the HW? It looks quite a big set of clocks for one block... It > does not look scallable. > > > +#define GATE_CMU_TOP_CMUREF_QCH (CLK_TOP_BASE + 0) > > +#define GATE_DFTMUX_CMU_QCH_CLK_CIS0 (CLK_TOP_BASE + 1) > > +#define GATE_DFTMUX_CMU_QCH_CLK_CIS1 (CLK_TOP_BASE + 2) > > +#define GATE_DFTMUX_CMU_QCH_CLK_CIS2 (CLK_TOP_BASE + 3) > > +#define GATE_OTP_QCH (CLK_TOP_BASE + 4) > > +#define GATE_ADM_AHB_SSS_QCH (CLK_TOP_BASE + 5) > > +#define GATE_BAAW_P_CHUB_QCH (CLK_TOP_BASE + 6) > > +#define GATE_BAAW_P_GNSS_QCH (CLK_TOP_BASE + 7) > > +#define GATE_BAAW_P_MODEM_QCH (CLK_TOP_BASE + 8) > > +#define GATE_BAAW_P_WLBT_QCH (CLK_TOP_BASE + 9) > > + > > +#define CLK_CORE_BASE (250) > > +#define GATE_CCI_550_QCH (CLK_CORE_BASE + 0) > > +#define GATE_CORE_CMU_CORE_QCH (CLK_CORE_BASE + 1) > > +#define GATE_GIC_QCH (CLK_CORE_BASE + 2) > > +#define GATE_GPIO_CORE_QCH (CLK_CORE_BASE + 3) > > +#define GATE_MMC_EMBD_QCH (CLK_CORE_BASE + 4) > > +#define GATE_PDMA_CORE_QCH (CLK_CORE_BASE + 5) > > +#define GATE_RTIC_QCH (CLK_CORE_BASE + 6) > > +#define GATE_SPDMA_CORE_QCH (CLK_CORE_BASE + 7) > > +#define GATE_SSS_QCH (CLK_CORE_BASE + 8) > > +#define GATE_TREX_D_CORE_QCH (CLK_CORE_BASE + 9) > > +#define GATE_TREX_P_CORE_QCH (CLK_CORE_BASE + 10) > > +#define GATE_CSSYS_DBG_QCH (CLK_CORE_BASE + 11) > > +#define GATE_SECJTAG_QCH (CLK_CORE_BASE + 12) > > +#define DOUT_CORE_MMC_EMBD (CLK_CORE_BASE + 13) > > + > > +#define CLK_DPU_BASE (300) > > +#define GATE_DPU_QCH_S_DPP (CLK_DPU_BASE + 0) > > +#define GATE_DPU_QCH_S_DMA (CLK_DPU_BASE + 1) > > +#define GATE_DPU_QCH_S_DECON (CLK_DPU_BASE + 2) > > +#define GATE_DPU_CMU_DPU_QCH (CLK_DPU_BASE + 3) > > +#define GATE_SMMU_DPU_QCH (CLK_DPU_BASE + 4) > > +#define DOUT_CLK_DPU_BUSP (CLK_DPU_BASE + 5) > > + > > +#define CLK_G3D_BASE (350) > > +#define GATE_G3D_CMU_G3D_QCH (CLK_G3D_BASE + 0) > > +#define GATE_GPU_QCH (CLK_G3D_BASE + 1) > > +#define DOUT_CLK_G3D_BUSP (CLK_G3D_BASE + 2) > > + > > +#define CLK_HIS_BASE (400) > > +#define GATE_GPIO_HSI_QCH (CLK_HIS_BASE + 0) > > +#define GATE_HSI_CMU_HSI_QCH (CLK_HIS_BASE + 1) > > +#define GATE_MMC_CARD_QCH (CLK_HIS_BASE + 2) > > +#define GATE_USB20DRD_TOP_QCH_LINK (CLK_HIS_BASE + 3) > > +#define GATE_USB20DRD_TOP_QCH_20CTRL (CLK_HIS_BASE + 4) > > +#define GATE_USB20DRD_TOP_QCH_REFCLK (CLK_HIS_BASE + 5) > > +#define GATE_USB20DRD_TOP_QCH_RTC (CLK_HIS_BASE + 6) > > +#define PLL_MMC_OUT (CLK_HIS_BASE + 7) > > +#define HSI_BUS (CLK_HIS_BASE + 8) > > Please prefix HSI/IS/MFCM with something reasonable. Most of other > bindings prefix everything with CLK or ACLK/SCLK/PCLK/PHYCLK/DOUT, but > having GATE/DOUT/MUX is reasonable as well. However here and further you > miss prefixes. > > > +#define HSI_MMC_CARD (CLK_HIS_BASE + 9) > > +#define HSI_USB20DRD (CLK_HIS_BASE + 10) > > + > > +#define CLK_IS_BASE (450) > > +#define GATE_CSIS0_QCH (CLK_IS_BASE + 0) > > +#define GATE_CSIS1_QCH (CLK_IS_BASE + 1) > > +#define GATE_CSIS2_QCH (CLK_IS_BASE + 2) > > +#define GATE_IS_CMU_IS_QCH (CLK_IS_BASE + 3) > > +#define GATE_IS_TOP_QCH_S_00 (CLK_IS_BASE + 4) > > +#define GATE_IS_TOP_QCH_S_02 (CLK_IS_BASE + 5) > > +#define GATE_IS_TOP_QCH_S_03 (CLK_IS_BASE + 6) > > +#define GATE_IS_TOP_QCH_S_04 (CLK_IS_BASE + 7) > > +#define GATE_IS_TOP_QCH_S_05 (CLK_IS_BASE + 8) > > +#define GATE_IS_TOP_QCH_S_06 (CLK_IS_BASE + 9) > > +#define GATE_SYSMMU_IS0_QCH (CLK_IS_BASE + 10) > > +#define GATE_SYSMMU_IS1_QCH (CLK_IS_BASE + 11) > > +#define IS_BUS (CLK_IS_BASE + 12) > > +#define IS_VRA (CLK_IS_BASE + 13) > > +#define IS_ITP (CLK_IS_BASE + 14) > > +#define IS_GDC (CLK_IS_BASE + 15) > > +#define UMUX_CLK_IS_BUS (CLK_IS_BASE + 15) > > +#define UMUX_CLK_IS_ITP (CLK_IS_BASE + 16) > > +#define UMUX_CLK_IS_VRA (CLK_IS_BASE + 17) > > +#define UMUX_CLK_IS_GDC (CLK_IS_BASE + 18) > > +#define GATE_CLK_ITP (CLK_IS_BASE + 19) > > +#define GATE_CLK_VRA (CLK_IS_BASE + 20) > > +#define GATE_CLK_GDC (CLK_IS_BASE + 21) > > +#define CIS_CLK0 (CLK_IS_BASE + 22) > > +#define CIS_CLK1 (CLK_IS_BASE + 23) > > +#define CIS_CLK2 (CLK_IS_BASE + 24) > > + > > +#define CLK_MFCMSCL_BASE (500) > > +#define GATE_JPEG_QCH (CLK_MFCMSCL_BASE + 0) > > +#define GATE_M2M_QCH (CLK_MFCMSCL_BASE + 1) > > +#define GATE_MCSC_QCH (CLK_MFCMSCL_BASE + 2) > > +#define GATE_MFC_QCH (CLK_MFCMSCL_BASE + 3) > > +#define GATE_MFCMSCL_CMU_MFCMSCL_QCH (CLK_MFCMSCL_BASE + 4) > > +#define GATE_SYSMMU_MFCMSCL_QCH (CLK_MFCMSCL_BASE + 5) > > +#define GATE_CMU_MIF_CMUREF_QCH (CLK_MFCMSCL_BASE + 6) > > +#define GATE_DMC_QCH (CLK_MFCMSCL_BASE + 7) > > +#define GATE_MIF_CMU_MIF_QCH (CLK_MFCMSCL_BASE + 8) > > +#define GATE_CMU_MIF1_CMU_REF_QCH (CLK_MFCMSCL_BASE + 9) > > +#define GATE_DMC1_QCH (CLK_MFCMSCL_BASE + 10) > > +#define GATE_MIF1_CMU_MIF1_QCH (CLK_MFCMSCL_BASE + 11) > > +#define GATE_MODEM_CMU_MODEM_QCH (CLK_MFCMSCL_BASE + 12) > > +#define DOUT_CLK_MFCMSCL_BUSP (CLK_MFCMSCL_BASE + 13) > > +#define MFCMSCL_MFC (CLK_MFCMSCL_BASE + 14) > > +#define MFCMSCL_M2M (CLK_MFCMSCL_BASE + 15) > > +#define MFCMSCL_MCSC (CLK_MFCMSCL_BASE + 16) > > +#define MFCMSCL_JPEG (CLK_MFCMSCL_BASE + 17) > > +#define UMUX_CLKCMU_MFCMSCL_MFC (CLK_MFCMSCL_BASE + 18) > > +#define UMUX_CLKCMU_MFCMSCL_M2M (CLK_MFCMSCL_BASE + 19) > > +#define UMUX_CLKCMU_MFCMSCL_MCSC (CLK_MFCMSCL_BASE + 20) > > +#define UMUX_CLKCMU_MFCMSCL_JPEG (CLK_MFCMSCL_BASE + 21) > > + > > +#define CLK_PERI_BASE (550) > > +#define UMUX_CLKCMU_PERI_BUS_USER (CLK_PERI_BASE + 0) > > +#define UMUX_CLKCMU_PERI_UART_USER (CLK_PERI_BASE + 1) > > +#define UMUX_CLKCMU_PERI_HSI2C_USER (CLK_PERI_BASE + 2) > > +#define UMUX_CLKCMU_PERI_SPI_USER (CLK_PERI_BASE + 3) > > +#define GATE_BUSIF_TMU_QCH (CLK_PERI_BASE + 4) > > +#define GATE_GPIO_PERI_QCH (CLK_PERI_BASE + 5) > > +#define GATE_HSI2C_0_QCH (CLK_PERI_BASE + 6) > > +#define GATE_HSI2C_1_QCH (CLK_PERI_BASE + 7) > > +#define GATE_HSI2C_2_QCH (CLK_PERI_BASE + 8) > > +#define GATE_I2C_0_QCH (CLK_PERI_BASE + 9) > > +#define GATE_I2C_1_QCH (CLK_PERI_BASE + 10) > > +#define GATE_I2C_2_QCH (CLK_PERI_BASE + 11) > > +#define GATE_I2C_3_QCH (CLK_PERI_BASE + 12) > > +#define GATE_I2C_4_QCH (CLK_PERI_BASE + 13) > > +#define GATE_I2C_5_QCH (CLK_PERI_BASE + 14) > > +#define GATE_I2C_6_QCH (CLK_PERI_BASE + 15) > > +#define GATE_MCT_QCH (CLK_PERI_BASE + 16) > > +#define GATE_OTP_CON_TOP_QCH (CLK_PERI_BASE + 17) > > +#define GATE_PWM_MOTOR_QCH (CLK_PERI_BASE + 18) > > +#define GATE_SPI_0_QCH (CLK_PERI_BASE + 19) > > +#define GATE_UART_QCH (CLK_PERI_BASE + 20) > > +#define GATE_WDT_0_QCH (CLK_PERI_BASE + 21) > > +#define GATE_WDT_1_QCH (CLK_PERI_BASE + 22) > > +#define DOUT_CLK_PERI_SPI_0 (CLK_PERI_BASE + 23) > > +#define DOUT_CLK_PERI_HSI2C_0 (CLK_PERI_BASE + 24) > > +#define DOUT_CLK_PERI_HSI2C_1 (CLK_PERI_BASE + 25) > > +#define DOUT_CLK_PERI_HSI2C_2 (CLK_PERI_BASE + 26) > > +#define DOUT_I2C_0 (CLK_PERI_BASE + 27) > > +#define DOUT_I2C_1 (CLK_PERI_BASE + 28) > > +#define DOUT_I2C_2 (CLK_PERI_BASE + 29) > > +#define DOUT_I2C_3 (CLK_PERI_BASE + 30) > > +#define DOUT_I2C_4 (CLK_PERI_BASE + 31) > > +#define DOUT_I2C_5 (CLK_PERI_BASE + 32) > > +#define DOUT_I2C_6 (CLK_PERI_BASE + 33) > > +#define DOUT_UART (CLK_PERI_BASE + 34) > > + > > +#define CLK_CLKOUT_BASE (700) > > +#define OSC_NFC (CLK_CLKOUT_BASE + 0) > > +#define OSC_AUD (CLK_CLKOUT_BASE + 1) > > What are these? > > > + > > +/* Must be greater than maximal clock ID */ > > Why? > > > +#define CLK_NR_CLKS (1125 + 1) > > + > > +#endif /* _DT_BINDINGS_CLOCK_EXYNOS_850_H */ > > > > > Best regards, > Krzysztof _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel