Message ID | 20200221021002.18795-2-yamada.masahiro@socionext.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3] dt-bindings: arm: Convert UniPhier board/SoC bindings to json-schema | expand |
On Fri, 21 Feb 2020 11:10:01 +0900, Masahiro Yamada wrote: > Convert the UniPhier GPIO controller binding to DT schema format. > > I omitted the 'gpio-ranges' property because it is defined in the > dt-schema project (/schemas/gpio/gpio.yaml). > > As of writing, the 'gpio-ranges-group-names' is not defined in that > file despite it is a common property described in > Documentation/devicetree/bindings/gpio/gpio.txt > So, I defined it in this schema. > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > --- > > I have a question about the range about 'ngpio'. > > ngpios: > minimum: 0 > maximum: 512 > > The 'ngpio' property is already defined as 'uint32' in the dt-schema tool: > https://github.com/robherring/dt-schema/blob/master/schemas/gpio/gpio.yaml#L20 > > 'uint32' is unsigned, so 'minimum: 0' looks too obvious. > > I cannot omit the minimum because minimum and maximum depend on each other. > I just put a sensible number, 512, in maximum. > > If this range is entirely unneeded, I will delete it. This property is generally for when you can have some number less than a maximum number implied by the compatible string. If there is really no max (e.g. 2^32 - 1 is valid), then just do 'ngpios: true' > > > .../bindings/gpio/gpio-uniphier.txt | 51 ----------- > .../gpio/socionext,uniphier-gpio.yaml | 89 +++++++++++++++++++ > MAINTAINERS | 2 +- > 3 files changed, 90 insertions(+), 52 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/gpio/gpio-uniphier.txt > create mode 100644 Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml > My bot found errors running 'make dt_binding_check' on your patch: Documentation/devicetree/bindings/display/simple-framebuffer.example.dts:21.16-37.11: Warning (chosen_node_is_root): /example-0/chosen: chosen node must be at root node Error: Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.example.dts:38.34-35 syntax error FATAL ERROR: Unable to parse input tree scripts/Makefile.lib:300: recipe for target 'Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.example.dt.yaml' failed make[1]: *** [Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.example.dt.yaml] Error 1 Makefile:1263: recipe for target 'dt_binding_check' failed make: *** [dt_binding_check] Error 2 See https://patchwork.ozlabs.org/patch/1241747 Please check and re-submit.
Hi Rob, On Sat, Feb 22, 2020 at 12:32 AM Rob Herring <robh@kernel.org> wrote: > > On Fri, 21 Feb 2020 11:10:01 +0900, Masahiro Yamada wrote: > > Convert the UniPhier GPIO controller binding to DT schema format. > > > > I omitted the 'gpio-ranges' property because it is defined in the > > dt-schema project (/schemas/gpio/gpio.yaml). > > > > As of writing, the 'gpio-ranges-group-names' is not defined in that > > file despite it is a common property described in > > Documentation/devicetree/bindings/gpio/gpio.txt > > So, I defined it in this schema. > > > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > > --- > > > > I have a question about the range about 'ngpio'. > > > > ngpios: > > minimum: 0 > > maximum: 512 > > > > The 'ngpio' property is already defined as 'uint32' in the dt-schema tool: > > https://github.com/robherring/dt-schema/blob/master/schemas/gpio/gpio.yaml#L20 > > > > 'uint32' is unsigned, so 'minimum: 0' looks too obvious. > > > > I cannot omit the minimum because minimum and maximum depend on each other. > > I just put a sensible number, 512, in maximum. > > > > If this range is entirely unneeded, I will delete it. > > This property is generally for when you can have some number less > than a maximum number implied by the compatible string. > > If there is really no max (e.g. 2^32 - 1 is valid), then just do > 'ngpios: true' What does ': true' mean? If it is documented somewhere, could you point me to the reference? Even if I remove the 'ngpio' entirely from my dt-schema, the 'ngpio' is checked correctly. > > > > > > > .../bindings/gpio/gpio-uniphier.txt | 51 ----------- > > .../gpio/socionext,uniphier-gpio.yaml | 89 +++++++++++++++++++ > > MAINTAINERS | 2 +- > > 3 files changed, 90 insertions(+), 52 deletions(-) > > delete mode 100644 Documentation/devicetree/bindings/gpio/gpio-uniphier.txt > > create mode 100644 Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml > > > > My bot found errors running 'make dt_binding_check' on your patch: > > Documentation/devicetree/bindings/display/simple-framebuffer.example.dts:21.16-37.11: Warning (chosen_node_is_root): /example-0/chosen: chosen node must be at root node > Error: Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.example.dts:38.34-35 syntax error > FATAL ERROR: Unable to parse input tree > scripts/Makefile.lib:300: recipe for target 'Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.example.dt.yaml' failed > make[1]: *** [Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.example.dt.yaml] Error 1 > Makefile:1263: recipe for target 'dt_binding_check' failed > make: *** [dt_binding_check] Error 2 > > See https://patchwork.ozlabs.org/patch/1241747 > Please check and re-submit. OK, I will.
On Fri, Feb 21, 2020 at 11:33 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > Hi Rob, > > On Sat, Feb 22, 2020 at 12:32 AM Rob Herring <robh@kernel.org> wrote: > > > > On Fri, 21 Feb 2020 11:10:01 +0900, Masahiro Yamada wrote: > > > Convert the UniPhier GPIO controller binding to DT schema format. > > > > > > I omitted the 'gpio-ranges' property because it is defined in the > > > dt-schema project (/schemas/gpio/gpio.yaml). > > > > > > As of writing, the 'gpio-ranges-group-names' is not defined in that > > > file despite it is a common property described in > > > Documentation/devicetree/bindings/gpio/gpio.txt > > > So, I defined it in this schema. > > > > > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > > > --- > > > > > > I have a question about the range about 'ngpio'. > > > > > > ngpios: > > > minimum: 0 > > > maximum: 512 > > > > > > The 'ngpio' property is already defined as 'uint32' in the dt-schema tool: > > > https://github.com/robherring/dt-schema/blob/master/schemas/gpio/gpio.yaml#L20 > > > > > > 'uint32' is unsigned, so 'minimum: 0' looks too obvious. > > > > > > I cannot omit the minimum because minimum and maximum depend on each other. > > > I just put a sensible number, 512, in maximum. > > > > > > If this range is entirely unneeded, I will delete it. > > > > This property is generally for when you can have some number less > > than a maximum number implied by the compatible string. > > > > If there is really no max (e.g. 2^32 - 1 is valid), then just do > > 'ngpios: true' > > > What does ': true' mean? It's a schema that always passes validation. It's purpose here is just to say you are using this common property for this binding. > > If it is documented somewhere, > could you point me to the reference? https://github.com/devicetree-org/dt-schema/blob/master/schemas/gpio/gpio.yaml > > Even if I remove the 'ngpio' entirely > from my dt-schema, the 'ngpio' is checked > correctly. Yes, if you change it to a string value for example, it should fail. (Only if DT_SCHEMA_FILES is not set without my kbuild changes) You should also add 'additionalProperties: false' at the top level of your schema and then it will also fail if you don't list ngpios in properties. Rob
Hi Rob, On Mon, Feb 24, 2020 at 11:52 PM Rob Herring <robh@kernel.org> wrote: > > On Fri, Feb 21, 2020 at 11:33 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > Hi Rob, > > > > On Sat, Feb 22, 2020 at 12:32 AM Rob Herring <robh@kernel.org> wrote: > > > > > > On Fri, 21 Feb 2020 11:10:01 +0900, Masahiro Yamada wrote: > > > > Convert the UniPhier GPIO controller binding to DT schema format. > > > > > > > > I omitted the 'gpio-ranges' property because it is defined in the > > > > dt-schema project (/schemas/gpio/gpio.yaml). > > > > > > > > As of writing, the 'gpio-ranges-group-names' is not defined in that > > > > file despite it is a common property described in > > > > Documentation/devicetree/bindings/gpio/gpio.txt > > > > So, I defined it in this schema. > > > > > > > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > > > > --- > > > > > > > > I have a question about the range about 'ngpio'. > > > > > > > > ngpios: > > > > minimum: 0 > > > > maximum: 512 > > > > > > > > The 'ngpio' property is already defined as 'uint32' in the dt-schema tool: > > > > https://github.com/robherring/dt-schema/blob/master/schemas/gpio/gpio.yaml#L20 > > > > > > > > 'uint32' is unsigned, so 'minimum: 0' looks too obvious. > > > > > > > > I cannot omit the minimum because minimum and maximum depend on each other. > > > > I just put a sensible number, 512, in maximum. > > > > > > > > If this range is entirely unneeded, I will delete it. > > > > > > This property is generally for when you can have some number less > > > than a maximum number implied by the compatible string. > > > > > > If there is really no max (e.g. 2^32 - 1 is valid), then just do > > > 'ngpios: true' > > > > > > What does ': true' mean? > > It's a schema that always passes validation. It's purpose here is just > to say you are using this common property for this binding. OK, I see two useful cases: [1] Documenting purpose in order to clarify that you are using this property [2] You need to explicitly specify ': true' if you have 'additionalProperties: false' . Otherwise, the following warning is displayed: ... do not match any of the regexes: 'pinctrl-[0-9]+' For [1], it is already clear that this binding is using ngpios from 'require' require: - ngpios > > > > If it is documented somewhere, > > could you point me to the reference? > > https://github.com/devicetree-org/dt-schema/blob/master/schemas/gpio/gpio.yaml > > > > > Even if I remove the 'ngpio' entirely > > from my dt-schema, the 'ngpio' is checked > > correctly. > > Yes, if you change it to a string value for example, it should fail. > (Only if DT_SCHEMA_FILES is not set without my kbuild changes) > > You should also add 'additionalProperties: false' at the top level of > your schema and then it will also fail if you don't list ngpios in > properties. Hmm, I am confused. 'require: - ngpios' will warn if you don't list ngpios. 'additionalProperties: false' will warn if you list other properties than what is explicitly specified. BTW, I will not add 'additionalProperties: false' in this binding. The real DT files have interrupt-parent = <&aidet>; (arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi line 324) but, commit 791d3ef2e11100449837dc0b6fe884e60ca3a484 removed interrupt-parent from bindings. -- Best Regards Masahiro Yamada
On Mon, Feb 24, 2020 at 10:00 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > Hi Rob, > > On Mon, Feb 24, 2020 at 11:52 PM Rob Herring <robh@kernel.org> wrote: > > > > On Fri, Feb 21, 2020 at 11:33 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > Hi Rob, > > > > > > On Sat, Feb 22, 2020 at 12:32 AM Rob Herring <robh@kernel.org> wrote: > > > > > > > > On Fri, 21 Feb 2020 11:10:01 +0900, Masahiro Yamada wrote: > > > > > Convert the UniPhier GPIO controller binding to DT schema format. > > > > > > > > > > I omitted the 'gpio-ranges' property because it is defined in the > > > > > dt-schema project (/schemas/gpio/gpio.yaml). > > > > > > > > > > As of writing, the 'gpio-ranges-group-names' is not defined in that > > > > > file despite it is a common property described in > > > > > Documentation/devicetree/bindings/gpio/gpio.txt > > > > > So, I defined it in this schema. > > > > > > > > > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > > > > > --- > > > > > > > > > > I have a question about the range about 'ngpio'. > > > > > > > > > > ngpios: > > > > > minimum: 0 > > > > > maximum: 512 > > > > > > > > > > The 'ngpio' property is already defined as 'uint32' in the dt-schema tool: > > > > > https://github.com/robherring/dt-schema/blob/master/schemas/gpio/gpio.yaml#L20 > > > > > > > > > > 'uint32' is unsigned, so 'minimum: 0' looks too obvious. > > > > > > > > > > I cannot omit the minimum because minimum and maximum depend on each other. > > > > > I just put a sensible number, 512, in maximum. > > > > > > > > > > If this range is entirely unneeded, I will delete it. > > > > > > > > This property is generally for when you can have some number less > > > > than a maximum number implied by the compatible string. > > > > > > > > If there is really no max (e.g. 2^32 - 1 is valid), then just do > > > > 'ngpios: true' > > > > > > > > > What does ': true' mean? > > > > It's a schema that always passes validation. It's purpose here is just > > to say you are using this common property for this binding. > > > > OK, I see two useful cases: > > [1] > Documenting purpose in order to clarify > that you are using this property > > [2] > You need to explicitly specify ': true' > if you have 'additionalProperties: false' . > Otherwise, the following warning is displayed: > ... do not match any of the regexes: 'pinctrl-[0-9]+' > > > > For [1], it is already clear that this binding > is using ngpios from 'require' > > > require: > - ngpios > > > > > > > > > If it is documented somewhere, > > > could you point me to the reference? > > > > https://github.com/devicetree-org/dt-schema/blob/master/schemas/gpio/gpio.yaml > > > > > > > > Even if I remove the 'ngpio' entirely > > > from my dt-schema, the 'ngpio' is checked > > > correctly. > > > > Yes, if you change it to a string value for example, it should fail. > > (Only if DT_SCHEMA_FILES is not set without my kbuild changes) > > > > You should also add 'additionalProperties: false' at the top level of > > your schema and then it will also fail if you don't list ngpios in > > properties. > > Hmm, I am confused. > > 'require: - ngpios' will warn if you don't list ngpios. > > 'additionalProperties: false' will warn if you list > other properties than what is explicitly specified. Yeah, that's a quirk of json-schema. We could probably ensure that anything listed in 'required' also has a property schema, but in this case I think it's better to be explicit. Without 'additionalProperties: false', then the validation will pass with a 'foo-bar' property. Or worse, typos like 'ngpio', 'nrgpios', '#gpios-cells', etc. will pass validation. > BTW, I will not add 'additionalProperties: false' > in this binding. > > > The real DT files have > > interrupt-parent = <&aidet>; > (arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi line 324) > > but, commit 791d3ef2e11100449837dc0b6fe884e60ca3a484 > removed interrupt-parent from bindings. interrupt-parent is automagically added by the tools for any node with 'interrupts'. Similarly, 'interrupts-extended' will also work. Rob > > > > > > -- > Best Regards > Masahiro Yamada
diff --git a/Documentation/devicetree/bindings/gpio/gpio-uniphier.txt b/Documentation/devicetree/bindings/gpio/gpio-uniphier.txt deleted file mode 100644 index f281f12dac18..000000000000 --- a/Documentation/devicetree/bindings/gpio/gpio-uniphier.txt +++ /dev/null @@ -1,51 +0,0 @@ -UniPhier GPIO controller - -Required properties: -- compatible: Should be "socionext,uniphier-gpio". -- reg: Specifies offset and length of the register set for the device. -- gpio-controller: Marks the device node as a GPIO controller. -- #gpio-cells: Should be 2. The first cell is the pin number and the second - cell is used to specify optional parameters. -- interrupt-controller: Marks the device node as an interrupt controller. -- #interrupt-cells: Should be 2. The first cell defines the interrupt number. - The second cell bits[3:0] is used to specify trigger type as follows: - 1 = low-to-high edge triggered - 2 = high-to-low edge triggered - 4 = active high level-sensitive - 8 = active low level-sensitive - Valid combinations are 1, 2, 3, 4, 8. -- ngpios: Specifies the number of GPIO lines. -- gpio-ranges: Mapping to pin controller pins (as described in gpio.txt) -- socionext,interrupt-ranges: Specifies an interrupt number mapping between - this GPIO controller and its interrupt parent, in the form of arbitrary - number of <child-interrupt-base parent-interrupt-base length> triplets. - -Optional properties: -- gpio-ranges-group-names: Used for named gpio ranges (as described in gpio.txt) - -Example: - gpio: gpio@55000000 { - compatible = "socionext,uniphier-gpio"; - reg = <0x55000000 0x200>; - interrupt-parent = <&aidet>; - interrupt-controller; - #interrupt-cells = <2>; - gpio-controller; - #gpio-cells = <2>; - gpio-ranges = <&pinctrl 0 0 0>; - gpio-ranges-group-names = "gpio_range"; - ngpios = <248>; - socionext,interrupt-ranges = <0 48 16>, <16 154 5>, <21 217 3>; - }; - -Consumer Example: - - sdhci0_pwrseq { - compatible = "mmc-pwrseq-emmc"; - reset-gpios = <&gpio UNIPHIER_GPIO_PORT(29, 4) GPIO_ACTIVE_LOW>; - }; - -Please note UNIPHIER_GPIO_PORT(29, 4) represents PORT294 in the SoC document. -Unfortunately, only the one's place is octal in the port numbering. (That is, -PORT 8, 9, 18, 19, 28, 29, ... are missing.) UNIPHIER_GPIO_PORT() is a helper -macro to calculate 29 * 8 + 4. diff --git a/Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml b/Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml new file mode 100644 index 000000000000..94beb4342249 --- /dev/null +++ b/Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml @@ -0,0 +1,89 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/gpio/socionext,uniphier-gpio.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: UniPhier GPIO controller + +maintainers: + - Masahiro Yamada <yamada.masahiro@socionext.com> + +properties: + $nodename: + pattern: "^gpio@[0-9a-f]+$" + + compatible: + const: socionext,uniphier-gpio + + reg: + maxItems: 1 + + gpio-controller: true + + "#gpio-cells": + const: 2 + + interrupt-controller: true + + "#interrupt-cells": + description: | + The first cell defines the interrupt number. + The second cell bits[3:0] is used to specify trigger type as follows: + 1 = low-to-high edge triggered + 2 = high-to-low edge triggered + 4 = active high level-sensitive + 8 = active low level-sensitive + Valid combinations are 1, 2, 3, 4, 8. + const: 2 + + ngpios: + minimum: 0 + maximum: 512 + + gpio-ranges-group-names: + $ref: /schemas/types.yaml#/definitions/string-array + + socionext,interrupt-ranges: + description: | + Specifies an interrupt number mapping between this GPIO controller and + its interrupt parent, in the form of arbitrary number of + <child-interrupt-base parent-interrupt-base length> triplets. + $ref: /schemas/types.yaml#/definitions/uint32-matrix + +required: + - compatible + - reg + - gpio-controller + - "#gpio-cells" + - interrupt-controller + - "#interrupt-cells" + - ngpios + - gpio-ranges + - socionext,interrupt-ranges + +examples: + - | + gpio: gpio@55000000 { + compatible = "socionext,uniphier-gpio"; + reg = <0x55000000 0x200>; + interrupt-parent = <&aidet>; + interrupt-controller; + #interrupt-cells = <2>; + gpio-controller; + #gpio-cells = <2>; + gpio-ranges = <&pinctrl 0 0 0>; + gpio-ranges-group-names = "gpio_range"; + ngpios = <248>; + socionext,interrupt-ranges = <0 48 16>, <16 154 5>, <21 217 3>; + }; + + // Consumer: + // Please note UNIPHIER_GPIO_PORT(29, 4) represents PORT294 in the SoC + // document. Unfortunately, only the one's place is octal in the port + // numbering. (That is, PORT 8, 9, 18, 19, 28, 29, ... are missing.) + // UNIPHIER_GPIO_PORT() is a helper macro to calculate 29 * 8 + 4. + sdhci0_pwrseq { + compatible = "mmc-pwrseq-emmc"; + reset-gpios = <&gpio UNIPHIER_GPIO_PORT(29, 4) GPIO_ACTIVE_LOW>; + }; diff --git a/MAINTAINERS b/MAINTAINERS index 93ccb6708ae9..3cb4c8a9107d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2547,7 +2547,7 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) T: git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-uniphier.git S: Maintained F: Documentation/devicetree/bindings/arm/socionext/uniphier.yaml -F: Documentation/devicetree/bindings/gpio/gpio-uniphier.txt +F: Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml F: Documentation/devicetree/bindings/pinctrl/socionext,uniphier-pinctrl.txt F: arch/arm/boot/dts/uniphier* F: arch/arm/include/asm/hardware/cache-uniphier.h
Convert the UniPhier GPIO controller binding to DT schema format. I omitted the 'gpio-ranges' property because it is defined in the dt-schema project (/schemas/gpio/gpio.yaml). As of writing, the 'gpio-ranges-group-names' is not defined in that file despite it is a common property described in Documentation/devicetree/bindings/gpio/gpio.txt So, I defined it in this schema. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> --- I have a question about the range about 'ngpio'. ngpios: minimum: 0 maximum: 512 The 'ngpio' property is already defined as 'uint32' in the dt-schema tool: https://github.com/robherring/dt-schema/blob/master/schemas/gpio/gpio.yaml#L20 'uint32' is unsigned, so 'minimum: 0' looks too obvious. I cannot omit the minimum because minimum and maximum depend on each other. I just put a sensible number, 512, in maximum. If this range is entirely unneeded, I will delete it. .../bindings/gpio/gpio-uniphier.txt | 51 ----------- .../gpio/socionext,uniphier-gpio.yaml | 89 +++++++++++++++++++ MAINTAINERS | 2 +- 3 files changed, 90 insertions(+), 52 deletions(-) delete mode 100644 Documentation/devicetree/bindings/gpio/gpio-uniphier.txt create mode 100644 Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml