Thread (26 messages) 26 messages, 4 authors, 2022-09-28

Re: [PATCH v2 03/15] dt-bindings: memory: snps: Convert the schema to being generic

From: Rob Herring <robh@kernel.org>
Date: 2022-09-27 22:03:00
Also in: linux-devicetree, linux-edac, lkml

On Mon, Sep 26, 2022 at 5:56 AM Serge Semin [off-list ref] wrote:
On Mon, Sep 12, 2022 at 09:32:19AM -0500, Rob Herring wrote:
quoted
On Sat, Sep 10, 2022 at 10:56:47PM +0300, Serge Semin wrote:
quoted
At the current state the DW uMCTL2 DDRC DT-schema can't be used as the
common one for all the IP-core-based devices due to the compatible string
property constraining the list of the supported device names. In order to
fix that we suggest to update the compatible property constraints so one
would permit having any value aside with the generic device names. At the
same time the generic DT-schema selection must be restricted to the
denoted generic devices only so not to permit the generic fallback
compatibles. Finally since the generic schema will be referenced from the
vendor-specific DT-bindings with possibly non-standard properties defined
it must permit having additional properties specified.

Signed-off-by: Serge Semin <redacted>

---

Note alternatively we could drop the "additionalProperties" keyword
modification since currently there is no actual device available with the
properties not listed in the generic DT-schema.
quoted
Normally, this has required 2 schema files. However, I think you can
do something like this:

if:
  compatible:
    enum:
      - snps,ddrc-3.80a
      - snps,dw-umctl2-ddrc
      - xlnx,zynqmp-ddrc-2.40a
then:
  unevaluatedProperties: false


But please make sure that actually catches undocumented properties
because unevaluateProperties under 'then' is not something I've tried.
Oh, I wish this would work! Alas it doesn't. AFAIU the schemas under
the "then" and "else" keywords are considered as separate schemas
and are independently applied to the DT node. As soon as I added the
construction suggested by you the schema evaluation started failing
with error as none of the DT-node properties in the examples are valid:

< ... /snps,dw-umctl2-ddrc.example.dtb: memory-controller@fd070000:
<     Unevaluated properties are not allowed ('compatible', 'reg', interrupts', 'interrupt-names', '$nodename' were unexpected)

< ... /snps,dw-umctl2-ddrc.example.dtb: memory-controller@3d400000:
<     Unevaluated properties are not allowed ('compatible', 'reg', 'interrupts', 'interrupt-names', 'clocks', 'clock-names', '$nodename' were unexpected)
Indeed. While unevaluatedProperties takes if/then/else into account,
flipping it around doesn't.
Any suggestion of how this could be fixed? Perhaps updating the
dtschema tool anyhow? (I failed to find a quick-fix for it) Creating
an additional separate schema with the common properties seems a bit
overkill in this case. On the other hand is there a decent
alternative?
I don't think there is any other fix.
What about accepting what I suggested in this patch? It does permit
additional properties, but we won't need to have a separate schema
with just several common properties.
No. You can't have it both ways. Either it is a common schema or a
specific device schema.

Rob

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help