From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
To: Tony Lindgren <tony@atomide.com>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Rob Herring <robh+dt@kernel.org>
Cc: devicetree@vger.kernel.org
Subject: Re: dt binding check error with hash and comma
Date: Fri, 16 Dec 2022 12:58:57 +0100 [thread overview]
Message-ID: <018a8db2-166b-ccbf-5ca5-c75c07fec3b7@linaro.org> (raw)
In-Reply-To: <Y5xcE5Qoyf5Zg6fV@atomide.com>
On 16/12/2022 12:52, Tony Lindgren wrote:
> Hi Krzysztof & Rob,
>
> I'm getting a dt binding check error with a pinctrl-single yaml patch for
> property '#pinctrl-single,gpio-range-cells'. It seems to be caused by having
> both a hash and comma in the property:
>
> DTEX Documentation/devicetree/bindings/pinctrl/pinctrl-single.example.dts
> LINT Documentation/devicetree/bindings
> CHKDT Documentation/devicetree/bindings/processed-schema.json
> Traceback (most recent call last):
> File "/usr/bin/dt-doc-validate", line 63, in <module>
> ret |= check_doc(f)
> ^^^^^^^^^^^^
> File "/usr/bin/dt-doc-validate", line 32, in check_doc
> print(dtschema.format_error(filename, error, verbose=args.verbose), file=sys.stderr)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File "/usr/lib/python3.11/site-packages/dtschema/lib.py", line 1350, in format_error
> msg += '\n' + format_error(filename, suberror, prefix=prefix+"\t", nodename=nodename, verbose=verbose)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File "/usr/lib/python3.11/site-packages/dtschema/lib.py", line 1326, in format_error
> if error.linecol[0] >= 0:
> ^^^^^^^^^^^^^
> AttributeError: 'ValidationError' object has no attribute 'linecol'
> SCHEMA Documentation/devicetree/bindings/processed-schema.json
> DTC_CHK Documentation/devicetree/bindings/pinctrl/pinctrl-single.example.dtb
>
> Any ideas why this is happening?
>
> This is with dt-doc-validate 2022.11 and:
You have old dtschema, update. This error was fixed.
>
> $ make dt_binding_check DT_SCHEMA_FILES=Documentation/devicetree/bindings/pinctrl/pinctrl-single.yaml
>
> With the WIP patch below.
>
> Regards,
>
> Tony
>
> 8< -------------------------
> diff --git a/Documentation/devicetree/bindings/pinctrl/pinctrl-single.txt b/Documentation/devicetree/bindings/pinctrl/pinctrl-single.txt
> deleted file mode 100644
> --- a/Documentation/devicetree/bindings/pinctrl/pinctrl-single.txt
> +++ /dev/null
> @@ -1,262 +0,0 @@
> -One-register-per-pin type device tree based pinctrl driver
> -
> -Required properties:
> -- compatible : "pinctrl-single" or "pinconf-single".
> - "pinctrl-single" means that pinconf isn't supported.
> - "pinconf-single" means that generic pinconf is supported.
> -
> -- reg : offset and length of the register set for the mux registers
> -
> -- #pinctrl-cells : number of cells in addition to the index, set to 1
> - or 2 for pinctrl-single,pins and set to 2 for pinctrl-single,bits
> -
> -- pinctrl-single,register-width : pinmux register access width in bits
> -
> -- pinctrl-single,function-mask : mask of allowed pinmux function bits
> - in the pinmux register
> -
> -Optional properties:
> -- pinctrl-single,function-off : function off mode for disabled state if
> - available and same for all registers; if not specified, disabling of
> - pin functions is ignored
> -
> -- pinctrl-single,bit-per-mux : boolean to indicate that one register controls
> - more than one pin, for which "pinctrl-single,function-mask" property specifies
> - position mask of pin.
> -
> -- pinctrl-single,drive-strength : array of value that are used to configure
> - drive strength in the pinmux register. They're value of drive strength
> - current and drive strength mask.
> -
> - /* drive strength current, mask */
> - pinctrl-single,power-source = <0x30 0xf0>;
> -
> -- pinctrl-single,bias-pullup : array of value that are used to configure the
> - input bias pullup in the pinmux register.
> -
> - /* input, enabled pullup bits, disabled pullup bits, mask */
> - pinctrl-single,bias-pullup = <0 1 0 1>;
> -
> -- pinctrl-single,bias-pulldown : array of value that are used to configure the
> - input bias pulldown in the pinmux register.
> -
> - /* input, enabled pulldown bits, disabled pulldown bits, mask */
> - pinctrl-single,bias-pulldown = <2 2 0 2>;
> -
> - * Two bits to control input bias pullup and pulldown: User should use
> - pinctrl-single,bias-pullup & pinctrl-single,bias-pulldown. One bit means
> - pullup, and the other one bit means pulldown.
> - * Three bits to control input bias enable, pullup and pulldown. User should
> - use pinctrl-single,bias-pullup & pinctrl-single,bias-pulldown. Input bias
> - enable bit should be included in pullup or pulldown bits.
> - * Although driver could set PIN_CONFIG_BIAS_DISABLE, there's no property as
> - pinctrl-single,bias-disable. Because pinctrl single driver could implement
> - it by calling pulldown, pullup disabled.
> -
> -- pinctrl-single,input-schmitt : array of value that are used to configure
> - input schmitt in the pinmux register. In some silicons, there're two input
> - schmitt value (rising-edge & falling-edge) in the pinmux register.
> -
> - /* input schmitt value, mask */
> - pinctrl-single,input-schmitt = <0x30 0x70>;
> -
> -- pinctrl-single,input-schmitt-enable : array of value that are used to
> - configure input schmitt enable or disable in the pinmux register.
> -
> - /* input, enable bits, disable bits, mask */
> - pinctrl-single,input-schmitt-enable = <0x30 0x40 0 0x70>;
> -
> -- pinctrl-single,low-power-mode : array of value that are used to configure
> - low power mode of this pin. For some silicons, the low power mode will
> - control the output of the pin when the pad including the pin enter low
> - power mode.
> - /* low power mode value, mask */
> - pinctrl-single,low-power-mode = <0x288 0x388>;
> -
> -- pinctrl-single,gpio-range : list of value that are used to configure a GPIO
> - range. They're value of subnode phandle, pin base in pinctrl device, pin
> - number in this range, GPIO function value of this GPIO range.
> - The number of parameters is depend on #pinctrl-single,gpio-range-cells
> - property.
> -
> - /* pin base, nr pins & gpio function */
> - pinctrl-single,gpio-range = <&range 0 3 0>, <&range 3 9 1>;
> -
> -- interrupt-controller : standard interrupt controller binding if using
> - interrupts for wake-up events for example. In this case pinctrl-single
> - is set up as a chained interrupt controller and the wake-up interrupts
> - can be requested by the drivers using request_irq().
> -
> -- #interrupt-cells : standard interrupt binding if using interrupts
> -
> -This driver assumes that there is only one register for each pin (unless the
> -pinctrl-single,bit-per-mux is set), and uses the common pinctrl bindings as
> -specified in the pinctrl-bindings.txt document in this directory.
> -
> -The pin configuration nodes for pinctrl-single are specified as pinctrl
> -register offset and values using pinctrl-single,pins. Only the bits specified
> -in pinctrl-single,function-mask are updated.
> -
> -When #pinctrl-cells = 1, then setting a pin for a device could be done with:
> -
> - pinctrl-single,pins = <0xdc 0x118>;
> -
> -Where 0xdc is the offset from the pinctrl register base address for the device
> -pinctrl register, and 0x118 contains the desired value of the pinctrl register.
> -
> -When #pinctrl-cells = 2, then setting a pin for a device could be done with:
> -
> - pinctrl-single,pins = <0xdc 0x30 0x07>;
> -
> -Where 0x30 is the pin configuration value and 0x07 is the pin mux mode value.
> -These two values are OR'd together to produce the value stored at offset 0xdc.
> -See the device example and static board pins example below for more information.
> -
> -In case when one register changes more than one pin's mux the
> -pinctrl-single,bits need to be used which takes three parameters:
> -
> - pinctrl-single,bits = <0xdc 0x18 0xff>;
> -
> -Where 0xdc is the offset from the pinctrl register base address for the
> -device pinctrl register, 0x18 is the desired value, and 0xff is the sub mask to
> -be used when applying this change to the register.
> -
> -
> -Optional sub-node: In case some pins could be configured as GPIO in the pinmux
> -register, those pins could be defined as a GPIO range. This sub-node is required
> -by pinctrl-single,gpio-range property.
> -
> -Required properties in sub-node:
> -- #pinctrl-single,gpio-range-cells : the number of parameters after phandle in
> - pinctrl-single,gpio-range property.
> -
> - range: gpio-range {
> - #pinctrl-single,gpio-range-cells = <3>;
> - };
> -
> -
> -Example:
> -
> -/* SoC common file */
> -
> -/* first controller instance for pins in core domain */
> -pmx_core: pinmux@4a100040 {
> - compatible = "pinctrl-single";
> - reg = <0x4a100040 0x0196>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - #interrupt-cells = <1>;
> - interrupt-controller;
> - pinctrl-single,register-width = <16>;
> - pinctrl-single,function-mask = <0xffff>;
> -};
> -
> -/* second controller instance for pins in wkup domain */
> -pmx_wkup: pinmux@4a31e040 {
> - compatible = "pinctrl-single";
> - reg = <0x4a31e040 0x0038>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - #interrupt-cells = <1>;
> - interrupt-controller;
> - pinctrl-single,register-width = <16>;
> - pinctrl-single,function-mask = <0xffff>;
> -};
> -
> -control_devconf0: pinmux@48002274 {
> - compatible = "pinctrl-single";
> - reg = <0x48002274 4>; /* Single register */
> - #address-cells = <1>;
> - #size-cells = <0>;
> - pinctrl-single,bit-per-mux;
> - pinctrl-single,register-width = <32>;
> - pinctrl-single,function-mask = <0x5F>;
> -};
> -
> -/* third controller instance for pins in gpio domain */
> -pmx_gpio: pinmux@d401e000 {
> - compatible = "pinconf-single";
> - reg = <0xd401e000 0x0330>;
> - #address-cells = <1>;
> - #size-cells = <1>;
> - ranges;
> -
> - pinctrl-single,register-width = <32>;
> - pinctrl-single,function-mask = <7>;
> -
> - /* sparse GPIO range could be supported */
> - pinctrl-single,gpio-range = <&range 0 3 0>, <&range 3 9 1>,
> - <&range 12 1 0>, <&range 13 29 1>,
> - <&range 43 1 0>, <&range 44 49 1>,
> - <&range 94 1 1>, <&range 96 2 1>;
> -
> - range: gpio-range {
> - #pinctrl-single,gpio-range-cells = <3>;
> - };
> -};
> -
> -
> -/* board specific .dts file */
> -
> -&pmx_core {
> -
> - /*
> - * map all board specific static pins enabled by the pinctrl driver
> - * itself during the boot (or just set them up in the bootloader)
> - */
> - pinctrl-names = "default";
> - pinctrl-0 = <&board_pins>;
> -
> - board_pins: pinmux_board_pins {
> - pinctrl-single,pins = <
> - 0x6c 0xf
> - 0x6e 0xf
> - 0x70 0xf
> - 0x72 0xf
> - >;
> - };
> -
> - uart0_pins: pinmux_uart0_pins {
> - pinctrl-single,pins = <
> - 0x208 0 /* UART0_RXD (IOCFG138) */
> - 0x20c 0 /* UART0_TXD (IOCFG139) */
> - >;
> - pinctrl-single,bias-pulldown = <0 2 2>;
> - pinctrl-single,bias-pullup = <0 1 1>;
> - };
> -
> - /* map uart2 pins */
> - uart2_pins: pinmux_uart2_pins {
> - pinctrl-single,pins = <
> - 0xd8 0x118
> - 0xda 0
> - 0xdc 0x118
> - 0xde 0
> - >;
> - };
> -};
> -
> -&control_devconf0 {
> - mcbsp1_pins: pinmux_mcbsp1_pins {
> - pinctrl-single,bits = <
> - 0x00 0x18 0x18 /* FSR/CLKR signal from FSX/CLKX pin */
> - >;
> - };
> -
> - mcbsp2_clks_pins: pinmux_mcbsp2_clks_pins {
> - pinctrl-single,bits = <
> - 0x00 0x40 0x40 /* McBSP2 CLKS from McBSP_CLKS pin */
> - >;
> - };
> -
> -};
> -
> -&uart1 {
> - pinctrl-names = "default";
> - pinctrl-0 = <&uart0_pins>;
> -};
> -
> -&uart2 {
> - pinctrl-names = "default";
> - pinctrl-0 = <&uart2_pins>;
> -};
> diff --git a/Documentation/devicetree/bindings/pinctrl/pinctrl-single.yaml b/Documentation/devicetree/bindings/pinctrl/pinctrl-single.yaml
> new file mode 100644
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/pinctrl/pinctrl-single.yaml
> @@ -0,0 +1,141 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/pinctrl/pinctrl-single.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: One-register-per-pin type device tree based pinctrl driver
> +
> +maintainers:
> + - Tony Lindgren <tony@atomide.com>
> +
> +description: |
> + This binding describes pinctrl devices that use one hardware register to
> + configure each pin.
> +
> +properties:
> + compatible:
> + oneOf:
Drop oneOf
> + - enum:
> + - pinctrl-single
> + - pinconf-single
> +
> + reg:
> + maxItems: 1
> +
> + interrupt-controller: true
> +
> + '#interrupt-cells':
> + const: 1
> +
> + '#address-cells':
> + const: 1
> +
> + '#size-cells':
> + const: 0
> +
> + '#pinctrl-cells':
> + enum: [ 1, 2 ]
> +
> + '#gpio-range-cells':
> + const: 3
> + description: No longer needed, may exist in older files for gpio-ranges
> + deprecated: true
> +
> + pinctrl-single,bit-per-mux:
> + description: Optional flag to indicate register controls more than one pin
> + type: boolean
> +
> + pinctrl-single,function-mask:
> + description: Mask of the allowed register bits
> + $ref: /schemas/types.yaml#/definitions/uint32
> +
> + pinctrl-single,function-off:
> + description: Optional function off mode for disabled state
> + $ref: /schemas/types.yaml#/definitions/uint32
> +
> + pinctrl-single,gpio-range:
> + description: Optional list of pin base, nr pins & gpio function
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> +
> + '#pinctrl-single,gpio-range-cells':
> + const: 3
> + description: Number of gpio range cells
> +
If this is const:3 then why even having this property?
Best regards,
Krzysztof
next prev parent reply other threads:[~2022-12-16 11:59 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-16 11:52 dt binding check error with hash and comma Tony Lindgren
2022-12-16 11:58 ` Krzysztof Kozlowski [this message]
2022-12-16 12:05 ` Tony Lindgren
2022-12-16 15:22 ` Rob Herring
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=018a8db2-166b-ccbf-5ca5-c75c07fec3b7@linaro.org \
--to=krzysztof.kozlowski@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=robh+dt@kernel.org \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox