Re: [PATCH] dt-bindings: can: convert tcan4x5x.txt to DT schema

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Nov 05, 2024 at 11:33:33AM +0100, Sean Nyekjaer wrote:
> On Tue, Nov 05, 2024 at 10:16:30AM +0100, Krzysztof Kozlowski wrote:
> > On Mon, Nov 04, 2024 at 01:53:40PM +0100, Sean Nyekjaer wrote:
> > > Convert binding doc tcan4x5x.txt to yaml.
> > > 
> > > Signed-off-by: Sean Nyekjaer <sean@xxxxxxxxxx>
> > > ---
> > > Changes since rfc:
> > 
> > That's a v2. RFC was v1. *ALWAYS*.
> > Try by yourself:
> > b4 diff 20241104125342.1691516-1-sean@xxxxxxxxxx
> > 
> > Works? No. Should work? Yes.
> > 
> > 
> 
> Ok. Good to know RFC cannot be used...
> Next version would need to be? In order to fix this?
> 
> I have enrolled my patch into b4, next verison will be v2 ;)
> 
> > >   - Tried to re-add ti,tcan4x5x wildcard
> > >   - Removed xceiver and vdd supplies (copy paste error)
> > >   - Corrected max SPI frequency
> > >   - Copy pasted bosch,mram-cfg from bosch,m_can.yaml
> > >   - device-state-gpios and device-wake-gpios only available for tcan4x5x
> > 
> > ...
> > 
> > > +properties:
> > > +  compatible:
> > > +    oneOf:
> > > +      - items:
> > > +          - enum:
> > > +              - ti,tcan4552
> > > +          - const: ti,tcan4x5x
> > > +      - items:
> > > +          - enum:
> > > +              - ti,tcan4553
> > 
> > Odd syntax. Combine these two into one enum.
> > 
> > > +          - const: ti,tcan4x5x
> > > +      - items:
> > 
> > Drop items.
> > 
> > > +          - enum:
> > 
> > ... and drop enum. That's just const or do you already plan to add here
> > entries?
> 
> Honestly I'm struggling a bit with the syntax and I feel the feedback is containing
> a lot of implicit terms :)
> 
> Something like:
> properties:
>   compatible:
>     oneOf:
>       - items:
>           - enum:
>               - ti,tcan4552
>               - ti,tcan4x5x
>       - items:
>           - enum:
>               - ti,tcan4553
>               - ti,tcan4x5x
>       - const: ti,tcan4x5x
> 
> Gives:
> /linux/Documentation/devicetree/bindings/net/can/ti,tcan4x5x.example.dtb: can@0: compatible: ['ti,tcan4x5x'] is valid under each of {'items': [{'enum': ['ti,tcan4553', 'ti,tcan4x5x']}], 'type': 'array', 'minItems': 1, 'maxItems': 1}, {'items': [{'const': 'ti,tcan4x5x'}], 'type': 'array', 'minItems': 1, 'maxItems': 1}, {'items': [{'enum': ['ti,tcan4552', 'ti,tcan4x5x']}], 'type': 'array', 'minItems': 1, 'maxItems': 1}
>         from schema $id: http://devicetree.org/schemas/net/can/ti,tcan4x5x.yaml#
> /linux/Documentation/devicetree/bindings/net/can/ti,tcan4x5x.example.dtb: can@0: compatible: 'oneOf' conditional failed, one must be fixed:
>         ['ti,tcan4552', 'ti,tcan4x5x'] is too long
>         'ti,tcan4552' is not one of ['ti,tcan4553', 'ti,tcan4x5x']
>         'ti,tcan4x5x' was expected
>         from schema $id: http://devicetree.org/schemas/net/can/ti,tcan4x5x.yaml#
> 
> I can understand the original binding is broken.
> I kinda agree with Marc that we cannot break things for users of this.
> 

Oh, did you mean something like:

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - ti,tcan4552
              - ti,tcan4553
          - const: ti,tcan4x5x
      - const: ti,tcan4x5x

> > 
> > > +              - ti,tcan4x5x
> > > +
> > > +  reg:
> > > +    maxItems: 1
> > > +
> > > +  interrupts:
> > > +    maxItems: 1
> > > +    description: The GPIO parent interrupt.
> > > +
> > > +  clocks:
> > > +    maxItems: 1
> > > +
> > > +  reset-gpios:
> > > +    description: Hardwired output GPIO. If not defined then software reset.
> > > +    maxItems: 1
> > > +
> > > +  device-state-gpios:
> > > +    description: |
> > 
> > Do not need '|' unless you need to preserve formatting.
> > 
> > Didn't you get this comment alerady?
> > 
> 
> No, but I have removed the '|'
> 
> > > +      Input GPIO that indicates if the device is in a sleep state or if the
> > > +      device is active. Not available with tcan4552/4553.
> > > +    maxItems: 1
> > > +
> > > +  device-wake-gpios:
> > > +    description: |
> > > +      Wake up GPIO to wake up the TCAN device.
> > > +      Not available with tcan4552/4553.
> > > +    maxItems: 1
> > > +
> > > +  bosch,mram-cfg:
> > > +    description: |
> > > +      Message RAM configuration data.
> > > +      Multiple M_CAN instances can share the same Message RAM
> > > +      and each element(e.g Rx FIFO or Tx Buffer and etc) number
> > > +      in Message RAM is also configurable, so this property is
> > > +      telling driver how the shared or private Message RAM are
> > > +      used by this M_CAN controller.
> > > +
> > > +      The format should be as follows:
> > > +      <offset sidf_elems xidf_elems rxf0_elems rxf1_elems rxb_elems txe_elems txb_elems>
> > > +      The 'offset' is an address offset of the Message RAM where
> > > +      the following elements start from. This is usually set to
> > > +      0x0 if you're using a private Message RAM. The remain cells
> > > +      are used to specify how many elements are used for each FIFO/Buffer.
> > > +
> > > +      M_CAN includes the following elements according to user manual:
> > > +      11-bit Filter	0-128 elements / 0-128 words
> > > +      29-bit Filter	0-64 elements / 0-128 words
> > > +      Rx FIFO 0		0-64 elements / 0-1152 words
> > > +      Rx FIFO 1		0-64 elements / 0-1152 words
> > > +      Rx Buffers	0-64 elements / 0-1152 words
> > > +      Tx Event FIFO	0-32 elements / 0-64 words
> > > +      Tx Buffers	0-32 elements / 0-576 words
> > > +
> > > +      Please refer to 2.4.1 Message RAM Configuration in Bosch
> > > +      M_CAN user manual for details.
> > > +    $ref: /schemas/types.yaml#/definitions/int32-array
> > > +    items:
> > > +      - description: The 'offset' is an address offset of the Message RAM where
> > > +          the following elements start from. This is usually set to 0x0 if
> > > +          you're using a private Message RAM.
> > > +        default: 0
> > > +      - description: 11-bit Filter 0-128 elements / 0-128 words
> > > +        minimum: 0
> > > +        maximum: 128
> > > +      - description: 29-bit Filter 0-64 elements / 0-128 words
> > > +        minimum: 0
> > > +        maximum: 64
> > > +      - description: Rx FIFO 0 0-64 elements / 0-1152 words
> > > +        minimum: 0
> > > +        maximum: 64
> > > +      - description: Rx FIFO 1 0-64 elements / 0-1152 words
> > > +        minimum: 0
> > > +        maximum: 64
> > > +      - description: Rx Buffers 0-64 elements / 0-1152 words
> > > +        minimum: 0
> > > +        maximum: 64
> > > +      - description: Tx Event FIFO 0-32 elements / 0-64 words
> > > +        minimum: 0
> > > +        maximum: 32
> > > +      - description: Tx Buffers 0-32 elements / 0-576 words
> > > +        minimum: 0
> > > +        maximum: 32
> > > +    minItems: 1
> > > +
> > > +  spi-max-frequency:
> > > +    description:
> > > +      Must be half or less of "clocks" frequency.
> > > +    maximum: 18000000
> > > +
> > > +  wakeup-source:
> > > +    $ref: /schemas/types.yaml#/definitions/flag
> > > +    description: |
> > 
> > Do not need '|' unless you need to preserve formatting.
> > 
> 
> OK
> 
> > > +      Enable CAN remote wakeup.
> > > +
> > > +allOf:
> > > +  - $ref: can-controller.yaml#
> > > +  - $ref: /schemas/spi/spi-peripheral-props.yaml#
> > > +  - if:
> > > +      properties:
> > > +        compatible:
> > > +          contains:
> > > +            enum:
> > > +              - ti,tcan4552
> > > +              - ti,tcan4553
> > > +    then:
> > > +      properties:
> > > +        device-state-gpios: false
> > > +        device-wake-gpios: false
> > 
> > Heh, this is a weird binding. It should have specific compatibles for
> > all other variants because above does not make sense. For 4552 one could
> > skip front compatible and use only fallback, right? And then add these
> > properties bypassing schema check. I commented on this already that
> > original binding is flawed and should be fixed, but no one cares then I
> > also don't care.
> 
> To me it looks like the example you linked:
> https://elixir.bootlin.com/linux/v5.19/source/Documentation/devicetree/bindings/example-schema.yaml#L223
> 
> If you use fallback for a 4552 then it would enable the use of the
> optional pins device-state-gpios and device-wake-gpios. But the chip
> doesn't have those so the hw guys would connect them and they won't
> be in the DT.
> 
> Honestly I'm confused :/
> 
> > 
> > > +
> > > +required:
> > > +  - compatible
> > > +  - reg
> > > +  - interrupts
> > > +  - clocks
> > > +  - bosch,mram-cfg
> > > +
> > > +additionalProperties: false
> > 
> > Implement feedback. Nothing changed here.
> > 
> 
> Uh? feedback?
> 
> > > +
> > > +examples:
> > > +  - |
> > > +    #include <dt-bindings/gpio/gpio.h>
> > > +    #include <dt-bindings/interrupt-controller/irq.h>
> > > +
> > > +    spi {
> > > +        #address-cells = <1>;
> > > +        #size-cells = <0>;
> > > +
> > > +        can@0 {
> > > +            compatible = "ti,tcan4x5x";
> > > +            reg = <0>;
> > > +            clocks = <&can0_osc>;
> > > +            pinctrl-names = "default";
> > > +            pinctrl-0 = <&can0_pins>;
> > > +            spi-max-frequency = <10000000>;
> > > +            bosch,mram-cfg = <0x0 0 0 16 0 0 1 1>;
> > > +            interrupt-parent = <&gpio1>;
> > > +            interrupts = <14 IRQ_TYPE_LEVEL_LOW>;
> > > +            device-state-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
> > > +            device-wake-gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>;
> > > +            reset-gpios = <&gpio1 27 GPIO_ACTIVE_HIGH>;
> > > +            wakeup-source;
> > > +        };
> > > +    };
> > > +  - |
> > > +    #include <dt-bindings/gpio/gpio.h>
> > > +    #include <dt-bindings/interrupt-controller/irq.h>
> > > +
> > > +    spi {
> > > +        #address-cells = <1>;
> > > +        #size-cells = <0>;
> > > +
> > > +        can@0 {
> > > +            compatible = "ti,tcan4552","ti,tcan4x5x";
> > 
> > Missing space after ,.
> > 
> 
> Added
> 
> Thanks for the review.
> 
> /Sean
/Sean




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux