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 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.

> 
> > +              - 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




[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