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.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 2C43BC6377A for ; Thu, 22 Jul 2021 02:28:50 +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 E41C1611C1 for ; Thu, 22 Jul 2021 02:28:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E41C1611C1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@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:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=8kSmEXbH2CGpWnqX4l4s+UNbdWYJrJ7HUMoFRjpP8hk=; b=VGGDQXukBmeEiG d+Uugp5Bulu3BtG98Hk0juY0JxvlE7KIm/vsgZysiSrC/82e4hpv7cf1XYGcur9LXj2ocdw2QH+mz ygIsy7H7/wPnAa7qBG+BXJfVLYpk7FqY7xzfA56qQ3HgaWcFjoFnKwLKL0vu2H0x4a0HkbWT55mAE WyO3c6CKk+bmMzpIk/L6bJxSPfeTiI7dkEH7HZ5CWkaee688I2lUEAtl4DVlZliqlGE7ivtA/FJcE acpjb9pP43qiP21iS6kc7dUXdqOyiwXOYvwr/lMvsVzEPZgnqM8qByjFkr9GxEqG7GCshsyGf0iDD +XUyFJE6l5hZVvvuo84A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m6OQH-0000t2-Un; Thu, 22 Jul 2021 02:26:54 +0000 Received: from mail-io1-f54.google.com ([209.85.166.54]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m6OQC-0000sB-In for linux-arm-kernel@lists.infradead.org; Thu, 22 Jul 2021 02:26:51 +0000 Received: by mail-io1-f54.google.com with SMTP id k11so4663210ioa.5 for ; Wed, 21 Jul 2021 19:26:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=sUZXj6CmcLqZYdNfLK/fU90Wp5ECzs7rcpG77z2MkPA=; b=rTQz/eTy0nVnHpbxpoqO03Ccv/w40hPST3y7PtN4piTdxAybJeXFoqwE1IWlY6XKRe +r0CP7axIDEnvLO427CLDuKFG1M2uMw1m+BEpR86y9+aPW+pC3j+sWCCVztrxX8NfNR4 GueEKDHCy/0S/tWIq3m4pF8p4yqgX0QqBRHOB3MMrqIPLMUvpuWDm68WncYxtUTqnvKO S5bJjGvIYRkP9CZX1EhOAnmeYICf34ka7LBc0s9yLHH1CPO5MfjPcs/4s+l++0eoO59y Y3iufge8QyCOCEsyNkdFfnIuXvB7DEq9fr2kYDsTL2Til0zsXPN7k9677WnoSChmS+J8 5L0A== X-Gm-Message-State: AOAM531aPQau/aZOEDE4aI525zRXDtWqDIVWoemVs2oSdU3BY19rcc9w pn+XhzhWWZ46eaKKc0Hj1A== X-Google-Smtp-Source: ABdhPJwgY3ki3yzxob3eMVIFlvwrDl82JEnjTvhJKSW1X25eodBlVc+oFYeu9Rb6Ti3+TBTolL2QZQ== X-Received: by 2002:a5d:9f11:: with SMTP id q17mr27511350iot.62.1626920807849; Wed, 21 Jul 2021 19:26:47 -0700 (PDT) Received: from robh.at.kernel.org ([64.188.179.248]) by smtp.gmail.com with ESMTPSA id j18sm14997271ioa.53.2021.07.21.19.26.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Jul 2021 19:26:47 -0700 (PDT) Received: (nullmailer pid 3168042 invoked by uid 1000); Thu, 22 Jul 2021 02:26:45 -0000 Date: Wed, 21 Jul 2021 20:26:45 -0600 From: Rob Herring To: Maxime Ripard Cc: Chen-Yu Tsai , Jernej Skrabec , devicetree@vger.kernel.org, Frank Rowand , linux-arm-kernel@lists.infradead.org, linux-sunxi@googlegroups.com, Lorenzo Pieralisi Subject: Re: [PATCH 06/54] dt-bindings: arm: Convert ARM CCI-400 binding to a schema Message-ID: <20210722022645.GA3153207@robh.at.kernel.org> References: <20210721140424.725744-1-maxime@cerno.tech> <20210721140424.725744-7-maxime@cerno.tech> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20210721140424.725744-7-maxime@cerno.tech> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210721_192648_689194_6D1827B0 X-CRM114-Status: GOOD ( 36.93 ) 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 Wed, Jul 21, 2021 at 04:03:36PM +0200, Maxime Ripard wrote: > The ARM CCI-400 Interconnect is supported by Linux thanks to its device > tree binding. > > Now that we have the DT validation in place, let's convert the device > tree bindings for that driver over to a YAML schema. > > Cc: Lorenzo Pieralisi > Signed-off-by: Maxime Ripard > --- > .../devicetree/bindings/arm/arm,cci-400.yaml | 216 +++++++++++++++++ > .../bindings/arm/cci-control-port.yaml | 38 +++ > Documentation/devicetree/bindings/arm/cci.txt | 224 ------------------ > 3 files changed, 254 insertions(+), 224 deletions(-) > create mode 100644 Documentation/devicetree/bindings/arm/arm,cci-400.yaml > create mode 100644 Documentation/devicetree/bindings/arm/cci-control-port.yaml > delete mode 100644 Documentation/devicetree/bindings/arm/cci.txt > > diff --git a/Documentation/devicetree/bindings/arm/arm,cci-400.yaml b/Documentation/devicetree/bindings/arm/arm,cci-400.yaml > new file mode 100644 > index 000000000000..b5c0fef9a0c2 > --- /dev/null > +++ b/Documentation/devicetree/bindings/arm/arm,cci-400.yaml > @@ -0,0 +1,216 @@ > +# SPDX-License-Identifier: GPL-2.0 > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/arm/arm,cci-400.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: ARM CCI Cache Coherent Interconnect Device Tree Binding > + > +maintainers: > + - Lorenzo Pieralisi > + > +description: > > + ARM multi-cluster systems maintain intra-cluster coherency through a cache > + coherent interconnect (CCI) that is capable of monitoring bus transactions > + and manage coherency, TLB invalidations and memory barriers. > + > + It allows snooping and distributed virtual memory message broadcast across > + clusters, through memory mapped interface, with a global control register > + space and multiple sets of interface control registers, one per slave > + interface. > + > +properties: > + $nodename: > + pattern: "^cci(@[0-9a-f]+)?$" > + > + compatible: > + enum: > + - arm,cci-400 > + - arm,cci-500 > + - arm,cci-550 > + > + reg: > + maxItems: 1 > + description: > > + Specifies base physical address of CCI control registers common to all > + interfaces. > + > + "#address-cells": true > + "#size-cells": true > + ranges: true > + > +patternProperties: > + "^slave-if@[0-9a-f]+$": > + type: object > + > + properties: > + compatible: > + const: arm,cci-400-ctrl-if > + > + interface-type: > + enum: > + - ace > + - ace-lite > + > + reg: > + maxItems: 1 > + > + required: > + - compatible > + - interface-type > + - reg > + > + additionalProperties: false > + > + "^pmu@[0-9a-f]+$": > + type: object > + > + properties: > + compatible: > + oneOf: > + - const: arm,cci-400-pmu,r0 > + - const: arm,cci-400-pmu,r1 > + - const: arm,cci-400-pmu > + deprecated: true > + description: > > + Permitted only where OS has secure access to CCI registers > + - const: arm,cci-500-pmu,r0 > + - const: arm,cci-550-pmu,r0 > + > + interrupts: > + minItems: 1 > + maxItems: 255 There's only 8 counters in cci-550. I doubt this schema will be extended. > + description: > > + List of counter overflow interrupts, one per counter. The interrupts > + must be specified starting with the cycle counter overflow interrupt, > + followed by counter0 overflow interrupt, counter1 overflow > + interrupt,... ,counterN overflow interrupt. > + > + The CCI PMU has an interrupt signal for each counter. The number of > + interrupts must be equal to the number of counters. > + > + reg: > + maxItems: 1 > + > + required: > + - compatible > + - interrupts > + - reg > + > + additionalProperties: false > + > +required: > + - "#address-cells" > + - "#size-cells" > + - compatible > + - ranges > + - reg > + > +additionalProperties: false > + > +examples: > + - | > + / { > + #address-cells = <2>; > + #size-cells = <2>; > + > + compatible = "arm,vexpress,v2p-ca15_a7", "arm,vexpress"; > + model = "V2P-CA15_CA7"; > + arm,hbi = <0x249>; > + interrupt-parent = <&gic>; > + > + /* > + * This CCI node corresponds to a CCI component whose control > + * registers sits at address 0x000000002c090000. > + * > + * CCI slave interface @0x000000002c091000 is connected to dma > + * controller dma0. > + * > + * CCI slave interface @0x000000002c094000 is connected to CPUs > + * {CPU0, CPU1}; > + * > + * CCI slave interface @0x000000002c095000 is connected to CPUs > + * {CPU2, CPU3}; > + */ > + > + cpus { > + #size-cells = <0>; > + #address-cells = <1>; > + > + CPU0: cpu@0 { > + device_type = "cpu"; > + compatible = "arm,cortex-a15"; > + cci-control-port = <&cci_control1>; Needs to be added to the cpu schema unless I missed you did that. > + reg = <0x0>; > + }; > + > + CPU1: cpu@1 { > + device_type = "cpu"; > + compatible = "arm,cortex-a15"; > + cci-control-port = <&cci_control1>; > + reg = <0x1>; > + }; > + > + CPU2: cpu@100 { > + device_type = "cpu"; > + compatible = "arm,cortex-a7"; > + cci-control-port = <&cci_control2>; > + reg = <0x100>; > + }; > + > + CPU3: cpu@101 { > + device_type = "cpu"; > + compatible = "arm,cortex-a7"; > + cci-control-port = <&cci_control2>; > + reg = <0x101>; > + }; > + }; > + > + dma0: dma@3000000 { > + compatible = "arm,pl330", "arm,primecell"; > + cci-control-port = <&cci_control0>; > + reg = <0x0 0x3000000 0x0 0x1000>; > + interrupts = <10>; > + #dma-cells = <1>; > + #dma-channels = <8>; > + #dma-requests = <32>; > + }; > + > + cci@2c090000 { > + compatible = "arm,cci-400"; > + #address-cells = <1>; > + #size-cells = <1>; > + reg = <0x0 0x2c090000 0 0x1000>; > + ranges = <0x0 0x0 0x2c090000 0x10000>; > + > + cci_control0: slave-if@1000 { > + compatible = "arm,cci-400-ctrl-if"; > + interface-type = "ace-lite"; > + reg = <0x1000 0x1000>; > + }; > + > + cci_control1: slave-if@4000 { > + compatible = "arm,cci-400-ctrl-if"; > + interface-type = "ace"; > + reg = <0x4000 0x1000>; > + }; > + > + cci_control2: slave-if@5000 { > + compatible = "arm,cci-400-ctrl-if"; > + interface-type = "ace"; > + reg = <0x5000 0x1000>; > + }; > + > + pmu@9000 { > + compatible = "arm,cci-400-pmu"; > + reg = <0x9000 0x5000>; > + interrupts = <0 101 4>, > + <0 102 4>, > + <0 103 4>, > + <0 104 4>, > + <0 105 4>; > + }; > + }; > + }; > + > +... > diff --git a/Documentation/devicetree/bindings/arm/cci-control-port.yaml b/Documentation/devicetree/bindings/arm/cci-control-port.yaml > new file mode 100644 > index 000000000000..c9114866213f > --- /dev/null > +++ b/Documentation/devicetree/bindings/arm/cci-control-port.yaml > @@ -0,0 +1,38 @@ > +# SPDX-License-Identifier: GPL-2.0 > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/arm/cci-control-port.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: CCI Interconnect Bus Masters binding > + > +maintainers: > + - Lorenzo Pieralisi > + > +description: | > + Masters in the device tree connected to a CCI port (inclusive of CPUs > + and their cpu nodes). > + > +select: true > + > +properties: > + cci-control-port: > + $ref: /schemas/types.yaml#/definitions/phandle > + > +additionalProperties: true > + > +examples: > + - | > + cpus { > + #address-cells = <1>; > + #size-cells = <0>; > + > + cpu@0 { > + compatible = "arm,cortex-a15"; > + device_type = "cpu"; > + cci-control-port = <&cci_control1>; > + reg = <0>; > + }; > + }; > + > +... > diff --git a/Documentation/devicetree/bindings/arm/cci.txt b/Documentation/devicetree/bindings/arm/cci.txt > deleted file mode 100644 > index 9600761f2d5b..000000000000 > --- a/Documentation/devicetree/bindings/arm/cci.txt > +++ /dev/null > @@ -1,224 +0,0 @@ > -======================================================= > -ARM CCI cache coherent interconnect binding description > -======================================================= > - > -ARM multi-cluster systems maintain intra-cluster coherency through a > -cache coherent interconnect (CCI) that is capable of monitoring bus > -transactions and manage coherency, TLB invalidations and memory barriers. > - > -It allows snooping and distributed virtual memory message broadcast across > -clusters, through memory mapped interface, with a global control register > -space and multiple sets of interface control registers, one per slave > -interface. > - > -* CCI interconnect node > - > - Description: Describes a CCI cache coherent Interconnect component > - > - Node name must be "cci". > - Node's parent must be the root node /, and the address space visible > - through the CCI interconnect is the same as the one seen from the > - root node (ie from CPUs perspective as per DT standard). > - Every CCI node has to define the following properties: > - > - - compatible > - Usage: required > - Value type: > - Definition: must contain one of the following: > - "arm,cci-400" > - "arm,cci-500" > - "arm,cci-550" > - > - - reg > - Usage: required > - Value type: Integer cells. A register entry, expressed as a pair > - of cells, containing base and size. > - Definition: A standard property. Specifies base physical > - address of CCI control registers common to all > - interfaces. > - > - - ranges: > - Usage: required > - Value type: Integer cells. An array of range entries, expressed > - as a tuple of cells, containing child address, > - parent address and the size of the region in the > - child address space. > - Definition: A standard property. Follow rules in the Devicetree > - Specification for hierarchical bus addressing. CCI > - interfaces addresses refer to the parent node > - addressing scheme to declare their register bases. > - > - CCI interconnect node can define the following child nodes: > - > - - CCI control interface nodes > - > - Node name must be "slave-if". > - Parent node must be CCI interconnect node. > - > - A CCI control interface node must contain the following > - properties: > - > - - compatible > - Usage: required > - Value type: > - Definition: must be set to > - "arm,cci-400-ctrl-if" > - > - - interface-type: > - Usage: required > - Value type: > - Definition: must be set to one of {"ace", "ace-lite"} > - depending on the interface type the node > - represents. > - > - - reg: > - Usage: required > - Value type: Integer cells. A register entry, expressed > - as a pair of cells, containing base and > - size. > - Definition: the base address and size of the > - corresponding interface programming > - registers. > - > - - CCI PMU node > - > - Parent node must be CCI interconnect node. > - > - A CCI pmu node must contain the following properties: > - > - - compatible > - Usage: required > - Value type: > - Definition: Must contain one of: > - "arm,cci-400-pmu,r0" > - "arm,cci-400-pmu,r1" > - "arm,cci-400-pmu" - DEPRECATED, permitted only where OS has > - secure access to CCI registers > - "arm,cci-500-pmu,r0" > - "arm,cci-550-pmu,r0" > - - reg: > - Usage: required > - Value type: Integer cells. A register entry, expressed > - as a pair of cells, containing base and > - size. > - Definition: the base address and size of the > - corresponding interface programming > - registers. > - > - - interrupts: > - Usage: required > - Value type: Integer cells. Array of interrupt specifier > - entries, as defined in > - ../interrupt-controller/interrupts.txt. > - Definition: list of counter overflow interrupts, one per > - counter. The interrupts must be specified > - starting with the cycle counter overflow > - interrupt, followed by counter0 overflow > - interrupt, counter1 overflow interrupt,... > - ,counterN overflow interrupt. > - > - The CCI PMU has an interrupt signal for each > - counter. The number of interrupts must be > - equal to the number of counters. > - > -* CCI interconnect bus masters > - > - Description: masters in the device tree connected to a CCI port > - (inclusive of CPUs and their cpu nodes). > - > - A CCI interconnect bus master node must contain the following > - properties: > - > - - cci-control-port: > - Usage: required > - Value type: > - Definition: a phandle containing the CCI control interface node > - the master is connected to. > - > -Example: > - > - cpus { > - #size-cells = <0>; > - #address-cells = <1>; > - > - CPU0: cpu@0 { > - device_type = "cpu"; > - compatible = "arm,cortex-a15"; > - cci-control-port = <&cci_control1>; > - reg = <0x0>; > - }; > - > - CPU1: cpu@1 { > - device_type = "cpu"; > - compatible = "arm,cortex-a15"; > - cci-control-port = <&cci_control1>; > - reg = <0x1>; > - }; > - > - CPU2: cpu@100 { > - device_type = "cpu"; > - compatible = "arm,cortex-a7"; > - cci-control-port = <&cci_control2>; > - reg = <0x100>; > - }; > - > - CPU3: cpu@101 { > - device_type = "cpu"; > - compatible = "arm,cortex-a7"; > - cci-control-port = <&cci_control2>; > - reg = <0x101>; > - }; > - > - }; > - > - dma0: dma@3000000 { > - compatible = "arm,pl330", "arm,primecell"; > - cci-control-port = <&cci_control0>; > - reg = <0x0 0x3000000 0x0 0x1000>; > - interrupts = <10>; > - #dma-cells = <1>; > - #dma-channels = <8>; > - #dma-requests = <32>; > - }; > - > - cci@2c090000 { > - compatible = "arm,cci-400"; > - #address-cells = <1>; > - #size-cells = <1>; > - reg = <0x0 0x2c090000 0 0x1000>; > - ranges = <0x0 0x0 0x2c090000 0x10000>; > - > - cci_control0: slave-if@1000 { > - compatible = "arm,cci-400-ctrl-if"; > - interface-type = "ace-lite"; > - reg = <0x1000 0x1000>; > - }; > - > - cci_control1: slave-if@4000 { > - compatible = "arm,cci-400-ctrl-if"; > - interface-type = "ace"; > - reg = <0x4000 0x1000>; > - }; > - > - cci_control2: slave-if@5000 { > - compatible = "arm,cci-400-ctrl-if"; > - interface-type = "ace"; > - reg = <0x5000 0x1000>; > - }; > - > - pmu@9000 { > - compatible = "arm,cci-400-pmu"; > - reg = <0x9000 0x5000>; > - interrupts = <0 101 4>, > - <0 102 4>, > - <0 103 4>, > - <0 104 4>, > - <0 105 4>; > - }; > - }; > - > -This CCI node corresponds to a CCI component whose control registers sits > -at address 0x000000002c090000. > -CCI slave interface @0x000000002c091000 is connected to dma controller dma0. > -CCI slave interface @0x000000002c094000 is connected to CPUs {CPU0, CPU1}; > -CCI slave interface @0x000000002c095000 is connected to CPUs {CPU2, CPU3}; > -- > 2.31.1 > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel