Re: Next steps for schema language

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



Hi Rob,

> On Nov 3, 2017, at 15:59 , Rob Herring <robh@xxxxxxxxxx> wrote:
> 
> On Thu, Nov 2, 2017 at 11:44 AM, Grant Likely <grant.likely@xxxxxxxxxxxx> wrote:
>> Hi Pantelis and Rob,
>> 
>> After the workshop next week, I'm trying to capture the direction
>> we're going for the schema format. Roughly I think we're aiming
>> towards:
>> 
>> - Schema files to be written in YAML
>> - DT files shall remain written in DTS for the foreseeable future.
>> YAML will be treated as an intermediary format
>>  - That said, we'll try to make design decisions that allow YAML to
>> be used as a source format.
>> - All schema files and yaml-encoded-dt files must be parsable by stock
>> YAML parsers
>> - Schema files to use the jsonschema vocabulary
>>  - (jsonschema assumes json files, but YAML is a superset so this will be okay)
>>  - Extended to add vocabulary for DT concepts (ignored by stock validators)
>>    - C-like expressions as used in Pantelis' yamldt could be added in this way
>>  - Need to write a jsonschema "metaschema" do define DT specific extensions
>>    - metaschema will be used to validate format of schema files
>>    - Existing tools can confirm is schema files are in the right format.
>>    - will make review a lot easier.
> 
> I want to start small here with defining top-level board/soc bindings.
> This is essentially just defining the root node compatible strings.
> Seems easy enough, right? However, I quickly run into the problem of
> how to match for when to apply the schema. "compatible" is the obvious
> choice, but that's also what I'm checking. We can't key off of what we
> are validating. So we really need 2 schema. The first is for matching
> on any valid compatible for board, then 2nd is checking for valid
> combinations (e.g. 1 board compatible followed by 1 SoC compatible). I
> don't like that as we'd be listing compatibles twice. An alternative
> would be we apply every board schema and exactly 1 must pass. Perhaps
> we generate a schema that's a "oneOf" of all the boards? Then we just
> need to tag board schemas in some way.
> 

I’ve run into this as the first problem with validation using compatible properties.

The way I’ve solved it is by having a ‘selected’ property that is generating
a test for when to check a binding against a node.

For a concrete example using the spi-slave binding

—- spi-slave.yaml ---
...
inherings: *device-compatible
…

Where device compatible is:

%YAML 1.1
---
device-compatible: &device-compatible
  title: Contraint for devices with compatible properties
  # select node for checking when the compatible constraint and
  # the device status enable constraint are met.
  selected: [ "compatible", *device-status-enabled ]

  class: constraint
  virtual: true

The selected property here declares that any “compatible” property constraint
for the node under test must match and that the device-status-enabled
rule matches too.

The device-status-enabled is declared as follows:

%YAML 1.1
---
device-enabled:
  title: Contraint for enabled devices
 
  class: constraint
  virtual: true
  
  properties:
    status: &device-status-enabled
      category: optional
      type: str
      description: Marks device state as enabled
      constraint: |
        !exists || streq(v, "okay") || streq(v, "ok”)

This declares that the constraint matches when either the optional
status property is not present or if it is, it’s either “okay” or “ok”.

Taken together when the spi-slave binding is inherited (for instance
by the jedec,spi-nor binding:

— jedec,spi-nor.yaml —

…
inherits: *spi-slave

…
  compatible: &jedec-spi-nor-compatible
  category: required
  type: strseq
  constraint: | 
    anystreq(v,  "at25df321a") ||
     ….


> I'm thinking of this very specific case, but no doubt it is going to
> apply in other places. This has been one of the harder problems with
> writing dtc checks. What to key off of to trigger checks and how to
> check errors in the key itself.
> 
> Rob

Regards

— Pantelis

--
To unsubscribe from this list: send the line "unsubscribe devicetree-spec" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




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

  Powered by Linux