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=-17.4 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,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, UPPERCASE_50_75,URIBL_BLOCKED,USER_AGENT_SANE_1 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 58A38C4338F for ; Fri, 30 Jul 2021 15:43:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3174E60EBB for ; Fri, 30 Jul 2021 15:43:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230192AbhG3Pne (ORCPT ); Fri, 30 Jul 2021 11:43:34 -0400 Received: from smtp-relay-canonical-1.canonical.com ([185.125.188.121]:37248 "EHLO smtp-relay-canonical-1.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230261AbhG3Pnc (ORCPT ); Fri, 30 Jul 2021 11:43:32 -0400 Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-1.canonical.com (Postfix) with ESMTPS id 0EB723F23D for ; Fri, 30 Jul 2021 15:43:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1627659807; bh=NoQ9eIAEpinZ33fG9d/GHNtQTBwk+tkFUEdVbVmbXiU=; h=To:Cc:References:From:Subject:Message-ID:Date:MIME-Version: In-Reply-To:Content-Type; b=Zt+r7U7iPs7fjyPSE+8F0Jx5h3W8UdSrv3+yGdP6QP/X+Esy8yaaaUJzlWNvCOm7B Q3JAPRu8RmKoQOfNJ7BSTZM9EP81lJXC8huhMVOx2miHv6fe3w4sOTHLgJypP920i0 FsuwD7/7c+Vxg0IIVPeV3c24gLYado33JvB8yDEQPoeezbd9ebHoXXHL4UybfUaAaN dhN6+Ek8Vib70Qzi2SV5CdyCtp1ylZoJJ5CenQqqDJb2jyD7PhosK0O1/2opuORaXd 8tYY2CQSMfId19AMfo4CQHbcKSfEV6/osp2MBhcZdgGjqV0JPbci4j71XLf1sEs8g/ 7sElk0Q8nJWmA== Received: by mail-ed1-f71.google.com with SMTP id l10-20020aa7caca0000b02903b874f26036so4772704edt.20 for ; Fri, 30 Jul 2021 08:43:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:cc:references:from:subject:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=NoQ9eIAEpinZ33fG9d/GHNtQTBwk+tkFUEdVbVmbXiU=; b=CnLvrBfpfw24FycLwjMRiT97izcMCJ9wupKGnG47pgscRbZnPbUjmfOW5UPy9i6bJZ kr1nZKu/UPcf0Lsp83fGizq+sU6CGteyy2Of/2fiD4n3GHIZLoXipgX1iQvYGvfK5gIv kEvqMRwOHdiE0L/6arYoUofAM8YvI5f/ZqVgMOP0vRuH821llHA2twP0U6jlHGHFL0Tk LJioj8v9qaEhCzfOiVnz4GDn2eYvLFQzdCynpaab1elCrUwgSITPGqLfBD7WLGa/0+sU kel+epOMH7Nam8bt+ApCdspP6xjs9Q0AWInBrg3aXVoRiJPga8V2Vcv5//OLg6tp3p4v K7DA== X-Gm-Message-State: AOAM530+sN1i/RgSw7FknXQTq3UVoSTBZEfXyLPpvRhU3846mGZo8YUn NI4NLU2eDhsw8B7XkwKJ0r3sq5fhg7LlZAhFyrire3QxqNN2hagO76LO+ey24L70lvr2qr4b3pr dHaFMWniMCZz64Q1JT3MwKOl3KWGfx4C1GEp3UQk= X-Received: by 2002:a17:907:9604:: with SMTP id gb4mr3177170ejc.142.1627659806735; Fri, 30 Jul 2021 08:43:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy60TrtCJuwTTsd8xJRS21UpOrb7LjSt2oRHOpavOwOZPebgpHjG3y7idVaCWplJWiuH/uRYg== X-Received: by 2002:a17:907:9604:: with SMTP id gb4mr3177145ejc.142.1627659806459; Fri, 30 Jul 2021 08:43:26 -0700 (PDT) Received: from [192.168.8.102] ([86.32.47.9]) by smtp.gmail.com with ESMTPSA id p23sm854685edt.71.2021.07.30.08.43.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Jul 2021 08:43:25 -0700 (PDT) To: Sam Protsenko , Sylwester Nawrocki , Chanwoo Choi , Linus Walleij , Tomasz Figa Cc: Rob Herring , Stephen Boyd , Michael Turquette , Jiri Slaby , Greg Kroah-Hartman , Charles Keepax , Ryu Euiyoul , Tom Gall , Sumit Semwal , John Stultz , Amit Pundir , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-serial@vger.kernel.org References: <20210730144922.29111-1-semen.protsenko@linaro.org> <20210730144922.29111-10-semen.protsenko@linaro.org> From: Krzysztof Kozlowski Subject: Re: [PATCH 09/12] dt-bindings: clock: Add bindings for Exynos850 clock controller Message-ID: <042095c4-8404-9292-83d3-531bfdcd7b35@canonical.com> Date: Fri, 30 Jul 2021 17:43:23 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210730144922.29111-10-semen.protsenko@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org 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 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=-16.1 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,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, UPPERCASE_50_75,URIBL_BLOCKED,USER_AGENT_SANE_1 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 30A68C4338F for ; Fri, 30 Jul 2021 15:45:43 +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 F1CCC60F26 for ; Fri, 30 Jul 2021 15:45:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org F1CCC60F26 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=canonical.com 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:In-Reply-To:MIME-Version:Date: Message-ID:Subject:From:References:Cc:To:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=KW+a2HGsCDPq6yjj7qYJVNXW7wIeo1EQlk4Nbnbl1qY=; b=h+Ro+fiuZuD2Q+i1KyHEujFtmt q9DDQ27ik6sM1rM49AgtKpPs224TZw6t54r+AJ4bPU95MKzNSe4XnDfVhLbyqcn1qpcSqQoY5bkcq GpvJNOSiOqSmMpoxbGW8Ijv1kuPFPFoTAmeySRy1vaYcVm/fHks4grcaKqP0vXTGPjodR7R5U70D4 ipbP6HD5GxeCueJI/OMp5V/hoYhJXDdP3KiZECHSjHT+Vopzy5eRoVmSj03zXTDIIKJ/yCMZ2CinS spYjUJdJo9yQDx/lfrv82AqUe+iFehHG0iXtgkE9R7CSwanyNYIEbfFHPd/VL/n+BHvMDaYJVizpN qXWcV40A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m9Uff-009Lbw-Pf; Fri, 30 Jul 2021 15:43:36 +0000 Received: from smtp-relay-canonical-1.canonical.com ([185.125.188.121]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m9Ufa-009LaG-7e for linux-arm-kernel@lists.infradead.org; Fri, 30 Jul 2021 15:43:33 +0000 Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-1.canonical.com (Postfix) with ESMTPS id 2E9313F243 for ; Fri, 30 Jul 2021 15:43:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1627659807; bh=NoQ9eIAEpinZ33fG9d/GHNtQTBwk+tkFUEdVbVmbXiU=; h=To:Cc:References:From:Subject:Message-ID:Date:MIME-Version: In-Reply-To:Content-Type; b=Zt+r7U7iPs7fjyPSE+8F0Jx5h3W8UdSrv3+yGdP6QP/X+Esy8yaaaUJzlWNvCOm7B Q3JAPRu8RmKoQOfNJ7BSTZM9EP81lJXC8huhMVOx2miHv6fe3w4sOTHLgJypP920i0 FsuwD7/7c+Vxg0IIVPeV3c24gLYado33JvB8yDEQPoeezbd9ebHoXXHL4UybfUaAaN dhN6+Ek8Vib70Qzi2SV5CdyCtp1ylZoJJ5CenQqqDJb2jyD7PhosK0O1/2opuORaXd 8tYY2CQSMfId19AMfo4CQHbcKSfEV6/osp2MBhcZdgGjqV0JPbci4j71XLf1sEs8g/ 7sElk0Q8nJWmA== Received: by mail-ed1-f69.google.com with SMTP id d12-20020a50fe8c0000b02903a4b519b413so4804947edt.9 for ; Fri, 30 Jul 2021 08:43:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:cc:references:from:subject:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=NoQ9eIAEpinZ33fG9d/GHNtQTBwk+tkFUEdVbVmbXiU=; b=ooib9jPtyBDT6GfigRr37TYxxEWeSfdR9pZxRflIQkW/f9GwrKwmKZB4KafSokTOER ri20koGRQJo9XBMZjW+hTabhRbHlRXUEgTnG2M2zlrN4BBp4Vfu2wvWl8Uv14PeyqFg0 GsLMZmWueLxyynQvmYACfByHqMghXkiLvfsqjariqOAGgMkm1lNWImIusAmxXMQ6C7V4 NKTm81kN8ZTjRV0X6VDpHWpOsmbGKu13ss4CCaASZyBnr4G8I+Q/eiUeofOF1v9Wsnzg nH5tPaEjHImQh+gAhKgE5HCABxS4qBe31vzawRMR3GnJs6ntDfANX0k6vZeBQ3DyTiA5 Khuw== X-Gm-Message-State: AOAM532GIUtYlCv+iV0jFTBwonsgSELZwR49epuw8x0hLPmBlSi/aWsl BCTS+xxagL+JoLuKTpzELVJCRUnDlCxZHCchnQemP2kISZUeXA+DY/BpzTQa/gd5p2FUx1LNlxs +UvDlDlzBmaVfArS1GEwJND54gQyBbSmEClL43bGVA0LhNDSA9JF7 X-Received: by 2002:a17:907:9604:: with SMTP id gb4mr3177186ejc.142.1627659806771; Fri, 30 Jul 2021 08:43:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy60TrtCJuwTTsd8xJRS21UpOrb7LjSt2oRHOpavOwOZPebgpHjG3y7idVaCWplJWiuH/uRYg== X-Received: by 2002:a17:907:9604:: with SMTP id gb4mr3177145ejc.142.1627659806459; Fri, 30 Jul 2021 08:43:26 -0700 (PDT) Received: from [192.168.8.102] ([86.32.47.9]) by smtp.gmail.com with ESMTPSA id p23sm854685edt.71.2021.07.30.08.43.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Jul 2021 08:43:25 -0700 (PDT) To: Sam Protsenko , Sylwester Nawrocki , Chanwoo Choi , Linus Walleij , Tomasz Figa Cc: Rob Herring , Stephen Boyd , Michael Turquette , Jiri Slaby , Greg Kroah-Hartman , Charles Keepax , Ryu Euiyoul , Tom Gall , Sumit Semwal , John Stultz , Amit Pundir , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-serial@vger.kernel.org References: <20210730144922.29111-1-semen.protsenko@linaro.org> <20210730144922.29111-10-semen.protsenko@linaro.org> From: Krzysztof Kozlowski Subject: Re: [PATCH 09/12] dt-bindings: clock: Add bindings for Exynos850 clock controller Message-ID: <042095c4-8404-9292-83d3-531bfdcd7b35@canonical.com> Date: Fri, 30 Jul 2021 17:43:23 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210730144922.29111-10-semen.protsenko@linaro.org> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210730_084330_588294_186A8D19 X-CRM114-Status: GOOD ( 32.26 ) 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 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 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