This series adds a proof of concept framework to implement schema checker using a combined C and DTSS based approach. Several example bindings are also implemented using C and DTSS[1]. Complex and generic bindings can be implemented directly in C and then instantiated from simple device-specific bindings using DTS-like DTSS language. A quick description of C part: A new check is registered in dtc checks framework to perform schema checking of each node. Checking is done by searching specified schema set for matching schemas (by compatible, device_type or absolute path) and applying matched schemas to the node. Schemas for complex generic bindings (such as interrupts, gpios, clocks, i2c, mmio-bus, etc.) can be implemented directly in C and instantiated from DTSS schemas of particular devices. An example C schema may look like: static void generic_checkfn_xxx_yyy(const struct generic_schema *schema, struct node *root, struct node *node, struct node *params, bool required) { /* * Get necessary schema arguments from DTSS schema by looking * at properties of @params node. * * Check whether @node node matches the schema. * * The @required argument may be used to check whether some error * conditions should be ignored (e.g. unspecified interrupt). */ } GENERIC_SCHEMA("xxx-yyy", xxx_yyy); A quick description of DTSS part: * DTSS is a DTS-like language for specification of simple bindings, e.g. bindings of particular devices. The basic syntax is very similar to DTS, with main elements being nodes and properties. At root level a series of nodes should be specified representing particular bindings: /dtss-v1/; binding1 { /* Definition of binding 1 */ }; binding2 { /* Definition of binding 2 */ }; * Matching key for each binding can be specified using /match/ keyword: root-node { /match/ path = "/"; }; wlf,wm8903 { /match/ compatible = "wlf,wm8903"; }; pci-bus { /match/ device_type = "memory"; }; Currently supported matches: path, compatible, device_type. * Bindings can be specified either by listing properties they require (or can use) directly or by instantiating generic C-based bindings. binding { required-property; /optional/ optional-property; /require/ required-generic-schema; /use/ optional-generic-schema { schema-argument = <1>; }; }; Generic schemas are implemented in C, as described above, and can use arguments specified in DTSS as properties. /require/ calls the schema with required=true, while /use/ with required=false. This is based on Stephen Warren's C based DT schema checker proof of concept patch adding C-based validation[2]. TODO: - specification of subnodes directly from DTSS, - specification of simple property values from DTSS (cells, strings, phandles), - reporting of unrecognized properties, - probably many more... [1] Device Tree Schema Source [2] http://thread.gmane.org/gmane.linux.ports.arm.kernel/275896 Tomasz Figa (5): dtc: Add helpers for various message levels dtc: livetree: Add more tree parsing helpers Another try of DT schema checker using hybrid C and DTSS based approach Add sample C-based generic bindings Add sample DTS and DTSS schema Makefile | 2 +- Makefile.dtc | 10 +- checks.c | 15 + dtc.c | 17 +- dtc.h | 57 ++++ dtss-lexer.l | 291 +++++++++++++++++++ dtss-parser.y | 341 ++++++++++++++++++++++ livetree.c | 230 +++++++++++++++ sample.dts | 70 +++++ schema.dtss | 86 ++++++ schemas/clock/clock.c | 77 +++++ schemas/gpio/gpio.c | 93 ++++++ schemas/i2c/i2c.c | 42 +++ schemas/interrupt-controller/interrupts.c | 452 ++++++++++++++++++++++++++++++ schemas/mmio-bus.c | 97 +++++++ schemas/schema.c | 311 ++++++++++++++++++++ schemas/schema.h | 89 ++++++ srcpos.h | 2 + treesource.c | 22 ++ 19 files changed, 2300 insertions(+), 4 deletions(-) create mode 100644 dtss-lexer.l create mode 100644 dtss-parser.y create mode 100644 sample.dts create mode 100644 schema.dtss create mode 100644 schemas/clock/clock.c create mode 100644 schemas/gpio/gpio.c create mode 100644 schemas/i2c/i2c.c create mode 100644 schemas/interrupt-controller/interrupts.c create mode 100644 schemas/mmio-bus.c create mode 100644 schemas/schema.c create mode 100644 schemas/schema.h -- 1.8.5.2 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html