* [PATCH v13 0/7] dtc: Dynamic DT support @ 2016-12-07 12:48 Pantelis Antoniou [not found] ` <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 14+ messages in thread From: Pantelis Antoniou @ 2016-12-07 12:48 UTC (permalink / raw) To: David Gibson Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA, Pantelis Antoniou This patchset adds Dynamic DT support in the DTC compiler as used in a number of boards like the beaglebone/rpi/chip and others. The first patch documents the internals of overlay generation, while the second one adds dynamic object/overlay support proper. The third patch adds a test method that can is used by the subsequent patch which adds a few overlay tests verifying operation. The following 3 patches add support for the syntactic sugar version of &foo { }; in a similar manner. This patchset is against DTC mainline and is also available for a pull request from https://github.com/pantoniou/dtc/tree/overlays Regards -- Pantelis Changes since v12: * Dropped DTBO magic option completely. * Dropped fixup generation option. * Renamed dstversionflags to dstflags * Drop support for the new style /plugin/ tag. Changes since v11: * Syntax and grammatical fixes to the documentation. * Renamed options and internal variables controlling generation of symbols and fixups. * Rename version flags to specify that they refer to DTS version. * Made sure that no symbols/fixup nodes are only generated if they contain entries. Changes since v10: * Split out the syntactic sugar version of &foo { }; into a different patches to make things clearer. * Reworked a bit the arguments passed to fixup node generation method making things simpler and utilize common methodology. * Avoid string parsing the full path using the node walking instead for local fixup generation. * Added an option to suppress generation of fixup nodes on base trees. * Added automatic generation of symbols and fixups when compiling a plugin. * Minor rework according to maintainer requests. Changes since v9: * Reversed -M switch to by default use new DTBO magic value. * Removed global versionflags in the parser by using inherited attributes. * build_node instead of malloc at add_orphan_node(). * Do not use escape for path copy * Do not generate /plugin/ when generating a dts file even when the plugin flag is set.. Changes since v8: * Removed extra member of boot_info in each node; passing boot_info parameter to the check methods instead. * Reworked yacc syntax that supports both old and new plugin syntax * Added handling for new magic number (enabled by 'M' switch). * Dropped dtbo/asmo formats. * Added overlay testsuite. * Addressed last version maintainer comments. Changes since v7: * Dropped xasprintf & backward compatibility patch * Rebased against dgibson's overlay branch * Minor doc wording fixes. Changes since v6: * Introduced xasprintf * Added append_to_property and used it * Changed some die()'s to assert * Reordered node generation to respect sort * Addressed remaining maintainer changes from v6 Changes since v5: * Rebase to latest dtc version. * Addressed all the maintainer requested changes from v5 * Added new magic value for dynamic objects and new format Changes since v4: * Rebase to latest dtc version. * Completely redesigned the generation of resolution data. Now instead of being generated as part of blob generation they are created in the live tree. * Consequently the patchset is much smaller. * Added -A auto-label alias generation option. * Addressed maintainer comments. * Added syntactic sugar for overlays in the form of .dtsi * Added /dts-v1/ /plugin/ preferred plugin form and deprecate the previous form (although still works for backward compatibility) Changes since v3: * Rebase to latest dtc version. Changes since v2: * Split single patch to a patchset. * Updated to dtc mainline. * Changed __local_fixups__ format * Clean up for better legibility. Pantelis Antoniou (7): dtc: Document the dynamic plugin internals dtc: Plugin and fixup support tests: Add check_path test tests: Add overlay tests overlay: Documentation for the overlay sugar syntax overlay: Add syntactic sugar version of overlays tests: Add a test for overlays syntactic sugar Documentation/dt-object-internal.txt | 327 +++++++++++++++++++++++++++++++++++ Documentation/manual.txt | 21 ++- checks.c | 8 +- dtc-lexer.l | 5 + dtc-parser.y | 48 ++++- dtc.c | 33 +++- dtc.h | 17 +- flattree.c | 2 +- fstree.c | 2 +- livetree.c | 291 ++++++++++++++++++++++++++++++- tests/.gitignore | 1 + tests/Makefile.tests | 3 +- tests/check_path.c | 82 +++++++++ tests/overlay_base_fixups.dts | 22 +++ tests/overlay_overlay_dtc.dts | 1 + tests/overlay_overlay_simple.dts | 12 ++ tests/run_tests.sh | 38 ++++ 17 files changed, 898 insertions(+), 15 deletions(-) create mode 100644 Documentation/dt-object-internal.txt create mode 100644 tests/check_path.c create mode 100644 tests/overlay_base_fixups.dts create mode 100644 tests/overlay_overlay_simple.dts -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>]
* [PATCH v13 1/7] dtc: Document the dynamic plugin internals [not found] ` <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> @ 2016-12-07 12:48 ` Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 2/7] dtc: Plugin and fixup support Pantelis Antoniou ` (6 subsequent siblings) 7 siblings, 0 replies; 14+ messages in thread From: Pantelis Antoniou @ 2016-12-07 12:48 UTC (permalink / raw) To: David Gibson Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA, Pantelis Antoniou Provides the document explaining the internal mechanics of plugins and options. Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> --- Documentation/dt-object-internal.txt | 310 +++++++++++++++++++++++++++++++++++ 1 file changed, 310 insertions(+) create mode 100644 Documentation/dt-object-internal.txt diff --git a/Documentation/dt-object-internal.txt b/Documentation/dt-object-internal.txt new file mode 100644 index 0000000..51d68ab --- /dev/null +++ b/Documentation/dt-object-internal.txt @@ -0,0 +1,310 @@ +Device Tree Dynamic Object format internals +------------------------------------------- + +The Device Tree for most platforms is a static representation of +the hardware capabilities. This is insufficient for platforms +that need to dynamically insert Device Tree fragments into the +live tree. + +This document explains the the Device Tree object format and +modifications made to the Device Tree compiler, which make it possible. + +1. Simplified Problem Definition +-------------------------------- + +Assume we have a platform which boots using following simplified Device Tree. + +---- foo.dts ----------------------------------------------------------------- + /* FOO platform */ + / { + compatible = "corp,foo"; + + /* shared resources */ + res: res { + }; + + /* On chip peripherals */ + ocp: ocp { + /* peripherals that are always instantiated */ + peripheral1 { ... }; + }; + }; +---- foo.dts ----------------------------------------------------------------- + +We have a number of peripherals that after probing (using some undefined method) +should result in different Device Tree configuration. + +We cannot boot with this static tree because due to the configuration of the +foo platform there exist multiple conficting peripherals DT fragments. + +So for the bar peripheral we would have this: + +---- foo+bar.dts ------------------------------------------------------------- + /* FOO platform + bar peripheral */ + / { + compatible = "corp,foo"; + + /* shared resources */ + res: res { + }; + + /* On chip peripherals */ + ocp: ocp { + /* peripherals that are always instantiated */ + peripheral1 { ... }; + + /* bar peripheral */ + bar { + compatible = "corp,bar"; + ... /* various properties and child nodes */ + }; + }; + }; +---- foo+bar.dts ------------------------------------------------------------- + +While for the baz peripheral we would have this: + +---- foo+baz.dts ------------------------------------------------------------- + /* FOO platform + baz peripheral */ + / { + compatible = "corp,foo"; + + /* shared resources */ + res: res { + /* baz resources */ + baz_res: res_baz { ... }; + }; + + /* On chip peripherals */ + ocp: ocp { + /* peripherals that are always instantiated */ + peripheral1 { ... }; + + /* baz peripheral */ + baz { + compatible = "corp,baz"; + /* reference to another point in the tree */ + ref-to-res = <&baz_res>; + ... /* various properties and child nodes */ + }; + }; + }; +---- foo+baz.dts ------------------------------------------------------------- + +We note that the baz case is more complicated, since the baz peripheral needs to +reference another node in the DT tree. + +2. Device Tree Object Format Requirements +----------------------------------------- + +Since the Device Tree is used for booting a number of very different hardware +platforms it is imperative that we tread very carefully. + +2.a) No changes to the Device Tree binary format for the base tree. We cannot +modify the tree format at all and all the information we require should be +encoded using Device Tree itself. We can add nodes that can be safely ignored +by both bootloaders and the kernel. The plugin dtbs are optionally tagged +with a different magic number in the header but otherwise they're simple +blobs. + +2.b) Changes to the DTS source format should be absolutely minimal, and should +only be needed for the DT fragment definitions, and not the base boot DT. + +2.c) An explicit option should be used to instruct DTC to generate the required +information needed for object resolution. Platforms that don't use the +dynamic object format can safely ignore it. + +2.d) Finally, DT syntax changes should be kept to a minimum. It should be +possible to express everything using the existing DT syntax. + +3. Implementation +----------------- + +The basic unit of addressing in Device Tree is the phandle. Turns out it's +relatively simple to extend the way phandles are generated and referenced +so that it's possible to dynamically convert symbolic references (labels) +to phandle values. This is a valid assumption as long as the author uses +reference syntax and does not assign phandle values manually (which might +be a problem with decompiled source files). + +We can roughly divide the operation into two steps. + +3.a) Compilation of the base board DTS file using the '-@' option +generates a valid DT blob with an added __symbols__ node at the root node, +containing a list of all nodes that are marked with a label. + +Using the foo.dts file above the following node will be generated; + +$ dtc -@ -O dtb -o foo.dtb -b 0 foo.dts +$ fdtdump foo.dtb +... +/ { + ... + res { + ... + phandle = <0x00000001>; + ... + }; + ocp { + ... + phandle = <0x00000002>; + ... + }; + __symbols__ { + res="/res"; + ocp="/ocp"; + }; +}; + +Notice that all the nodes that had a label have been recorded, and that +phandles have been generated for them. + +This blob can be used to boot the board normally, the __symbols__ node will +be safely ignored both by the bootloader and the kernel (the only loss will +be a few bytes of memory and disk space). + +We generate a __symbols__ node to record nodes that had labels in the base +tree (or subsequent loaded overlays) so that they can be matched up with +references made to them in Device Tree objects. + +3.b) The Device Tree fragments must be compiled with the same option but they +must also have a tag (/plugin/) that allows undefined references to nodes +that are not present at compilation time to be recorded so that the runtime +loader can fix them. + +So the bar peripheral's DTS format would be of the form: + +/dts-v1/; +/plugin/; /* allow undefined references and record them */ +/ { + .... /* various properties for loader use; i.e. part id etc. */ + fragment@0 { + target = <&ocp>; + __overlay__ { + /* bar peripheral */ + bar { + compatible = "corp,bar"; + ... /* various properties and child nodes */ + } + }; + }; +}; + +Note that there's a target property that specifies the location where the +contents of the overlay node will be placed, and it references the node +in the foo.dts file. + +$ dtc -@ -O dtb -o bar.dtbo -b 0 bar.dts +$ fdtdump bar.dtbo +... +/ { + ... /* properties */ + fragment@0 { + target = <0xffffffff>; + __overlay__ { + bar { + compatible = "corp,bar"; + ... /* various properties and child nodes */ + } + }; + }; + __fixups__ { + ocp = "/fragment@0:target:0"; + }; +}; + +No __symbols__ node has been generated (no label in bar.dts). +Note that the target's ocp label is undefined, so the phandle +value is filled with the illegal value '0xffffffff', while a __fixups__ +node has been generated, which marks the location in the tree where +the label lookup should store the runtime phandle value of the ocp node. + +The format of the __fixups__ node entry is + + <label> = "<local-full-path>:<property-name>:<offset>" + [, "<local-full-path>:<property-name>:<offset>"...]; + + <label> Is the label we're referring + <local-full-path> Is the full path of the node the reference is + <property-name> Is the name of the property containing the + reference + <offset> The offset (in bytes) of where the property's + phandle value is located. + +Doing the same with the baz peripheral's DTS format is a little bit more +involved, since baz contains references to local labels which require +local fixups. + +/dts-v1/; +/plugin/; /* allow undefined label references and record them */ +/ { + .... /* various properties for loader use; i.e. part id etc. */ + fragment@0 { + target = <&res>; + __overlay__ { + /* baz resources */ + baz_res: res_baz { ... }; + }; + }; + fragment@1 { + target = <&ocp>; + __overlay__ { + /* baz peripheral */ + baz { + compatible = "corp,baz"; + /* reference to another point in the tree */ + ref-to-res = <&baz_res>; + ... /* various properties and child nodes */ + } + }; + }; +}; + +Note that &bar_res reference. + +$ dtc -@ -O dtb -o baz.dtbo -b 0 baz.dts +$ fdtdump baz.dtbo +... +/ { + ... /* properties */ + fragment@0 { + target = <0xffffffff>; + __overlay__ { + res_baz { + .... + phandle = <0x00000001>; + }; + }; + }; + fragment@1 { + target = <0xffffffff>; + __overlay__ { + baz { + compatible = "corp,baz"; + ... /* various properties and child nodes */ + ref-to-res = <0x00000001>; + } + }; + }; + __fixups__ { + res = "/fragment@0:target:0"; + ocp = "/fragment@1:target:0"; + }; + __local_fixups__ { + fragment@1 { + __overlay__ { + baz { + ref-to-res = <0>; + }; + }; + }; + }; +}; + +This is similar to the bar case, but the reference of a local label by the +baz node generates a __local_fixups__ entry that records the place that the +local reference is being made. No matter how phandles are allocated from dtc +the run time loader must apply an offset to each phandle in every dynamic +DT object loaded. The __local_fixups__ node records the offset relative to the +start of every local reference within that property so that the loader can apply +the offset. -- 2.1.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v13 2/7] dtc: Plugin and fixup support [not found] ` <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> 2016-12-07 12:48 ` [PATCH v13 1/7] dtc: Document the dynamic plugin internals Pantelis Antoniou @ 2016-12-07 12:48 ` Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 3/7] tests: Add check_path test Pantelis Antoniou ` (5 subsequent siblings) 7 siblings, 0 replies; 14+ messages in thread From: Pantelis Antoniou @ 2016-12-07 12:48 UTC (permalink / raw) To: David Gibson Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA, Pantelis Antoniou This patch enable the generation of symbols & local fixup information for trees compiled with the -@ (--symbols) option. Using this patch labels in the tree and their users emit information in __symbols__ and __local_fixups__ nodes. The __fixups__ node make possible the dynamic resolution of phandle references which are present in the plugin tree but lie in the tree that are applying the overlay against. Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> Signed-off-by: Sascha Hauer <s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> Signed-off-by: Jan Luebbe <jlu-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> --- Documentation/manual.txt | 21 +++- checks.c | 8 +- dtc-lexer.l | 5 + dtc-parser.y | 28 ++++- dtc.c | 33 +++++- dtc.h | 16 ++- flattree.c | 2 +- fstree.c | 2 +- livetree.c | 269 ++++++++++++++++++++++++++++++++++++++++++++++- 9 files changed, 373 insertions(+), 11 deletions(-) diff --git a/Documentation/manual.txt b/Documentation/manual.txt index 398de32..74e27c4 100644 --- a/Documentation/manual.txt +++ b/Documentation/manual.txt @@ -119,6 +119,20 @@ Options: Make space for <number> reserve map entries Relevant for dtb and asm output only. + -@ + Generates a __symbols__ node at the root node of the resulting blob + for any node labels used, and for any local references using phandles + it also generates a __local_fixups__ node that tracks them. + + When using the /plugin/ tag all unresolved label references to + be tracked in the __fixups__ node, making dynamic resolution possible. + + -A + Generate automatically aliases for all node labels. This is similar to + the -@ option (the __symbols__ node contain identical information) but + the semantics are slightly different since no phandles are automatically + generated for labeled nodes. + -S <bytes> Ensure the blob at least <bytes> long, adding additional space if needed. @@ -146,13 +160,18 @@ Additionally, dtc performs various sanity checks on the tree. Here is a very rough overview of the layout of a DTS source file: - sourcefile: list_of_memreserve devicetree + sourcefile: versioninfo plugindecl list_of_memreserve devicetree memreserve: label 'memreserve' ADDR ADDR ';' | label 'memreserve' ADDR '-' ADDR ';' devicetree: '/' nodedef + versioninfo: '/' 'dts-v1' '/' ';' + + plugindecl: '/' 'plugin' '/' ';' + | /* empty */ + nodedef: '{' list_of_property list_of_subnode '}' ';' property: label PROPNAME '=' propdata ';' diff --git a/checks.c b/checks.c index 2bd27a4..4d71884 100644 --- a/checks.c +++ b/checks.c @@ -487,8 +487,12 @@ static void fixup_phandle_references(struct check *c, struct boot_info *bi, refnode = get_node_by_ref(dt, m->ref); if (! refnode) { - FAIL(c, "Reference to non-existent node or label \"%s\"\n", - m->ref); + if (!(bi->dtsflags & DTSF_PLUGIN)) + FAIL(c, "Reference to non-existent node or " + "label \"%s\"\n", m->ref); + else /* mark the entry as unresolved */ + *((cell_t *)(prop->val.val + m->offset)) = + cpu_to_fdt32(0xffffffff); continue; } diff --git a/dtc-lexer.l b/dtc-lexer.l index 790fbf6..40bbc87 100644 --- a/dtc-lexer.l +++ b/dtc-lexer.l @@ -121,6 +121,11 @@ static void lexical_error(const char *fmt, ...); return DT_V1; } +<*>"/plugin/" { + DPRINT("Keyword: /plugin/\n"); + return DT_PLUGIN; + } + <*>"/memreserve/" { DPRINT("Keyword: /memreserve/\n"); BEGIN_DEFAULT(); diff --git a/dtc-parser.y b/dtc-parser.y index 14aaf2e..27d358f 100644 --- a/dtc-parser.y +++ b/dtc-parser.y @@ -19,6 +19,7 @@ */ %{ #include <stdio.h> +#include <inttypes.h> #include "dtc.h" #include "srcpos.h" @@ -52,9 +53,11 @@ extern bool treesource_error; struct node *nodelist; struct reserve_info *re; uint64_t integer; + unsigned int flags; } %token DT_V1 +%token DT_PLUGIN %token DT_MEMRESERVE %token DT_LSHIFT DT_RSHIFT DT_LE DT_GE DT_EQ DT_NE DT_AND DT_OR %token DT_BITS @@ -71,6 +74,8 @@ extern bool treesource_error; %type <data> propdata %type <data> propdataprefix +%type <flags> versioninfo +%type <flags> plugindecl %type <re> memreserve %type <re> memreserves %type <array> arrayprefix @@ -101,16 +106,33 @@ extern bool treesource_error; %% sourcefile: - v1tag memreserves devicetree + versioninfo plugindecl memreserves devicetree { - the_boot_info = build_boot_info($2, $3, - guess_boot_cpuid($3)); + the_boot_info = build_boot_info($1 | $2, $3, $4, + guess_boot_cpuid($4)); + } + ; + +versioninfo: + v1tag + { + $$ = DTSF_V1; } ; v1tag: DT_V1 ';' | DT_V1 ';' v1tag + +plugindecl: + DT_PLUGIN ';' + { + $$ = DTSF_PLUGIN; + } + | /* empty */ + { + $$ = 0; + } ; memreserves: diff --git a/dtc.c b/dtc.c index 9dcf640..ab16ab4 100644 --- a/dtc.c +++ b/dtc.c @@ -32,6 +32,9 @@ int minsize; /* Minimum blob size */ int padsize; /* Additional padding to blob */ int alignsize; /* Additional padding to blob accroding to the alignsize */ int phandle_format = PHANDLE_BOTH; /* Use linux,phandle or phandle properties */ +int generate_symbols; /* enable symbols & fixup support */ +int generate_fixups; /* suppress generation of fixups on symbol support */ +int auto_label_aliases; /* auto generate labels -> aliases */ static int is_power_of_2(int x) { @@ -59,7 +62,7 @@ static void fill_fullpaths(struct node *tree, const char *prefix) #define FDT_VERSION(version) _FDT_VERSION(version) #define _FDT_VERSION(version) #version static const char usage_synopsis[] = "dtc [options] <input file>"; -static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:a:fb:i:H:sW:E:hv"; +static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:a:fb:i:H:sW:E:@Ahv"; static struct option const usage_long_opts[] = { {"quiet", no_argument, NULL, 'q'}, {"in-format", a_argument, NULL, 'I'}, @@ -78,6 +81,8 @@ static struct option const usage_long_opts[] = { {"phandle", a_argument, NULL, 'H'}, {"warning", a_argument, NULL, 'W'}, {"error", a_argument, NULL, 'E'}, + {"symbols", no_argument, NULL, '@'}, + {"auto-alias", no_argument, NULL, 'A'}, {"help", no_argument, NULL, 'h'}, {"version", no_argument, NULL, 'v'}, {NULL, no_argument, NULL, 0x0}, @@ -109,6 +114,8 @@ static const char * const usage_opts_help[] = { "\t\tboth - Both \"linux,phandle\" and \"phandle\" properties", "\n\tEnable/disable warnings (prefix with \"no-\")", "\n\tEnable/disable errors (prefix with \"no-\")", + "\n\tEnable generation of symbols", + "\n\tEnable auto-alias of labels", "\n\tPrint this help and exit", "\n\tPrint version and exit", NULL, @@ -249,6 +256,13 @@ int main(int argc, char *argv[]) parse_checks_option(false, true, optarg); break; + case '@': + generate_symbols = 1; + break; + case 'A': + auto_label_aliases = 1; + break; + case 'h': usage(NULL); default: @@ -306,6 +320,23 @@ int main(int argc, char *argv[]) fill_fullpaths(bi->dt, ""); process_checks(force, bi); + /* on a plugin, generate by default */ + if (bi->dtsflags & DTSF_PLUGIN) { + generate_symbols = 1; + generate_fixups = 1; + } + + if (auto_label_aliases) + generate_label_tree(bi, "aliases", false); + + if (generate_symbols) + generate_label_tree(bi, "__symbols__", true); + + if (generate_fixups) { + generate_fixups_tree(bi, "__fixups__"); + generate_local_fixups_tree(bi, "__local_fixups__"); + } + if (sort) sort_tree(bi); diff --git a/dtc.h b/dtc.h index 32009bc..2ca8601 100644 --- a/dtc.h +++ b/dtc.h @@ -55,6 +55,9 @@ extern int minsize; /* Minimum blob size */ extern int padsize; /* Additional padding to blob */ extern int alignsize; /* Additional padding to blob accroding to the alignsize */ extern int phandle_format; /* Use linux,phandle or phandle properties */ +extern int generate_symbols; /* generate symbols for nodes with labels */ +extern int generate_fixups; /* generate fixups */ +extern int auto_label_aliases; /* auto generate labels -> aliases */ #define PHANDLE_LEGACY 0x1 #define PHANDLE_EPAPR 0x2 @@ -202,6 +205,8 @@ void delete_property(struct property *prop); void add_child(struct node *parent, struct node *child); void delete_node_by_name(struct node *parent, char *name); void delete_node(struct node *node); +void append_to_property(struct node *node, + char *name, const void *data, int len); const char *get_unitname(struct node *node); struct property *get_property(struct node *node, const char *propname); @@ -237,14 +242,23 @@ struct reserve_info *add_reserve_entry(struct reserve_info *list, struct boot_info { + unsigned int dtsflags; struct reserve_info *reservelist; struct node *dt; /* the device tree */ uint32_t boot_cpuid_phys; }; -struct boot_info *build_boot_info(struct reserve_info *reservelist, +/* DTS version flags definitions */ +#define DTSF_V1 0x0001 /* /dts-v1/ */ +#define DTSF_PLUGIN 0x0002 /* /plugin/ */ + +struct boot_info *build_boot_info(unsigned int dtsflags, + struct reserve_info *reservelist, struct node *tree, uint32_t boot_cpuid_phys); void sort_tree(struct boot_info *bi); +void generate_label_tree(struct boot_info *bi, char *name, bool allocph); +void generate_fixups_tree(struct boot_info *bi, char *name); +void generate_local_fixups_tree(struct boot_info *bi, char *name); /* Checks */ diff --git a/flattree.c b/flattree.c index a9d9520..99c2c71 100644 --- a/flattree.c +++ b/flattree.c @@ -942,5 +942,5 @@ struct boot_info *dt_from_blob(const char *fname) fclose(f); - return build_boot_info(reservelist, tree, boot_cpuid_phys); + return build_boot_info(DTSF_V1, reservelist, tree, boot_cpuid_phys); } diff --git a/fstree.c b/fstree.c index 6d1beec..e67fd9f 100644 --- a/fstree.c +++ b/fstree.c @@ -86,6 +86,6 @@ struct boot_info *dt_from_fs(const char *dirname) tree = read_fstree(dirname); tree = name_node(tree, ""); - return build_boot_info(NULL, tree, guess_boot_cpuid(tree)); + return build_boot_info(DTSF_V1, NULL, tree, guess_boot_cpuid(tree)); } diff --git a/livetree.c b/livetree.c index 3dc7559..df1bc04 100644 --- a/livetree.c +++ b/livetree.c @@ -296,6 +296,23 @@ void delete_node(struct node *node) delete_labels(&node->labels); } +void append_to_property(struct node *node, + char *name, const void *data, int len) +{ + struct data d; + struct property *p; + + p = get_property(node, name); + if (p) { + d = data_append_data(p->val, data, len); + p->val = d; + } else { + d = data_append_data(empty_data, data, len); + p = build_property(name, d); + add_property(node, p); + } +} + struct reserve_info *build_reserve_entry(uint64_t address, uint64_t size) { struct reserve_info *new = xmalloc(sizeof(*new)); @@ -335,12 +352,14 @@ struct reserve_info *add_reserve_entry(struct reserve_info *list, return list; } -struct boot_info *build_boot_info(struct reserve_info *reservelist, +struct boot_info *build_boot_info(unsigned int dtsflags, + struct reserve_info *reservelist, struct node *tree, uint32_t boot_cpuid_phys) { struct boot_info *bi; bi = xmalloc(sizeof(*bi)); + bi->dtsflags = dtsflags; bi->reservelist = reservelist; bi->dt = tree; bi->boot_cpuid_phys = boot_cpuid_phys; @@ -709,3 +728,251 @@ void sort_tree(struct boot_info *bi) sort_reserve_entries(bi); sort_node(bi->dt); } + +/* utility helper to avoid code duplication */ +static struct node *build_and_name_child_node(struct node *parent, char *name) +{ + struct node *node; + + node = build_node(NULL, NULL); + name_node(node, xstrdup(name)); + add_child(parent, node); + + return node; +} + +static struct node *build_root_node(struct node *dt, char *name) +{ + struct node *an; + + an = get_subnode(dt, name); + if (!an) + an = build_and_name_child_node(dt, name); + + if (!an) + die("Could not build root node /%s\n", name); + + return an; +} + +static bool any_label_tree(struct boot_info *bi, struct node *node) +{ + struct node *c; + + if (node->labels) + return true; + + for_each_child(node, c) + if (any_label_tree(bi, c)) + return true; + + return false; +} + +static void generate_label_tree_internal(struct boot_info *bi, + struct node *an, struct node *node, + bool allocph) +{ + struct node *dt = bi->dt; + struct node *c; + struct property *p; + struct label *l; + + /* if there are labels */ + if (node->labels) { + + /* now add the label in the node */ + for_each_label(node->labels, l) { + + /* check whether the label already exists */ + p = get_property(an, l->label); + if (p) { + fprintf(stderr, "WARNING: label %s already" + " exists in /%s", l->label, + an->name); + continue; + } + + /* insert it */ + p = build_property(l->label, + data_copy_mem(node->fullpath, + strlen(node->fullpath) + 1)); + add_property(an, p); + } + + /* force allocation of a phandle for this node */ + if (allocph) + (void)get_node_phandle(dt, node); + } + + for_each_child(node, c) + generate_label_tree_internal(bi, an, c, allocph); +} + +static bool any_fixup_tree(struct boot_info *bi, struct node *node) +{ + struct node *c; + struct property *prop; + struct marker *m; + + for_each_property(node, prop) { + m = prop->val.markers; + for_each_marker_of_type(m, REF_PHANDLE) { + if (!get_node_by_ref(bi->dt, m->ref)) + return true; + } + } + + for_each_child(node, c) { + if (any_fixup_tree(bi, c)) + return true; + } + + return false; +} + +static void add_fixup_entry(struct boot_info *bi, struct node *fn, + struct node *node, struct property *prop, + struct marker *m) +{ + char *entry; + + /* m->ref can only be a REF_PHANDLE, but check anyway */ + assert(m->type == REF_PHANDLE); + + /* there shouldn't be any ':' in the arguments */ + if (strchr(node->fullpath, ':') || strchr(prop->name, ':')) + die("arguments should not contain ':'\n"); + + xasprintf(&entry, "%s:%s:%u", + node->fullpath, prop->name, m->offset); + append_to_property(fn, m->ref, entry, strlen(entry) + 1); +} + +static void generate_fixups_tree_internal(struct boot_info *bi, + struct node *fn, + struct node *node) +{ + struct node *dt = bi->dt; + struct node *c; + struct property *prop; + struct marker *m; + struct node *refnode; + + for_each_property(node, prop) { + m = prop->val.markers; + for_each_marker_of_type(m, REF_PHANDLE) { + refnode = get_node_by_ref(dt, m->ref); + if (!refnode) + add_fixup_entry(bi, fn, node, prop, m); + } + } + + for_each_child(node, c) + generate_fixups_tree_internal(bi, fn, c); +} + +static bool any_local_fixup_tree(struct boot_info *bi, struct node *node) +{ + struct node *c; + struct property *prop; + struct marker *m; + + for_each_property(node, prop) { + m = prop->val.markers; + for_each_marker_of_type(m, REF_PHANDLE) { + if (get_node_by_ref(bi->dt, m->ref)) + return true; + } + } + + for_each_child(node, c) { + if (any_local_fixup_tree(bi, c)) + return true; + } + + return false; +} + +static void add_local_fixup_entry(struct boot_info *bi, + struct node *lfn, struct node *node, + struct property *prop, struct marker *m, + struct node *refnode) +{ + struct node *wn, *nwn; /* local fixup node, walk node, new */ + uint32_t value_32; + char **compp; + int i, depth; + + /* walk back retreiving depth */ + depth = 0; + for (wn = node; wn; wn = wn->parent) + depth++; + + /* allocate name array */ + compp = xmalloc(sizeof(*compp) * depth); + + /* store names in the array */ + for (wn = node, i = depth - 1; wn; wn = wn->parent, i--) + compp[i] = wn->name; + + /* walk the path components creating nodes if they don't exist */ + for (wn = lfn, i = 1; i < depth; i++, wn = nwn) { + /* if no node exists, create it */ + nwn = get_subnode(wn, compp[i]); + if (!nwn) + nwn = build_and_name_child_node(wn, compp[i]); + } + + free(compp); + + value_32 = cpu_to_fdt32(m->offset); + append_to_property(wn, prop->name, &value_32, sizeof(value_32)); +} + +static void generate_local_fixups_tree_internal(struct boot_info *bi, + struct node *lfn, + struct node *node) +{ + struct node *dt = bi->dt; + struct node *c; + struct property *prop; + struct marker *m; + struct node *refnode; + + for_each_property(node, prop) { + m = prop->val.markers; + for_each_marker_of_type(m, REF_PHANDLE) { + refnode = get_node_by_ref(dt, m->ref); + if (refnode) + add_local_fixup_entry(bi, lfn, node, prop, m, refnode); + } + } + + for_each_child(node, c) + generate_local_fixups_tree_internal(bi, lfn, c); +} + +void generate_label_tree(struct boot_info *bi, char *name, bool allocph) +{ + if (!any_label_tree(bi, bi->dt)) + return; + generate_label_tree_internal(bi, build_root_node(bi->dt, name), + bi->dt, allocph); +} + +void generate_fixups_tree(struct boot_info *bi, char *name) +{ + if (!any_fixup_tree(bi, bi->dt)) + return; + generate_fixups_tree_internal(bi, build_root_node(bi->dt, name), + bi->dt); +} + +void generate_local_fixups_tree(struct boot_info *bi, char *name) +{ + if (!any_local_fixup_tree(bi, bi->dt)) + return; + generate_local_fixups_tree_internal(bi, build_root_node(bi->dt, name), + bi->dt); +} -- 2.1.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v13 3/7] tests: Add check_path test [not found] ` <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> 2016-12-07 12:48 ` [PATCH v13 1/7] dtc: Document the dynamic plugin internals Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 2/7] dtc: Plugin and fixup support Pantelis Antoniou @ 2016-12-07 12:48 ` Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 4/7] tests: Add overlay tests Pantelis Antoniou ` (4 subsequent siblings) 7 siblings, 0 replies; 14+ messages in thread From: Pantelis Antoniou @ 2016-12-07 12:48 UTC (permalink / raw) To: David Gibson Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA, Pantelis Antoniou Add a test that checks for existence or not of a node. It is useful for testing the various cases when generating symbols and fixups for dynamic device tree objects. Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> --- tests/.gitignore | 1 + tests/Makefile.tests | 3 +- tests/check_path.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/run_tests.sh | 3 ++ 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 tests/check_path.c diff --git a/tests/.gitignore b/tests/.gitignore index 354b565..9e209d5 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -8,6 +8,7 @@ tmp.* /asm_tree_dump /boot-cpuid /char_literal +/check_path /del_node /del_property /dtbs_equal_ordered diff --git a/tests/Makefile.tests b/tests/Makefile.tests index eb039c5..3d7a4f8 100644 --- a/tests/Makefile.tests +++ b/tests/Makefile.tests @@ -25,7 +25,8 @@ LIB_TESTS_L = get_mem_rsv \ integer-expressions \ property_iterate \ subnode_iterate \ - overlay overlay_bad_fixup + overlay overlay_bad_fixup \ + check_path LIB_TESTS = $(LIB_TESTS_L:%=$(TESTS_PREFIX)%) LIBTREE_TESTS_L = truncated_property diff --git a/tests/check_path.c b/tests/check_path.c new file mode 100644 index 0000000..0d6a73b --- /dev/null +++ b/tests/check_path.c @@ -0,0 +1,82 @@ +/* + * libfdt - Flat Device Tree manipulation + * Testcase for node existence + * Copyright (C) 2016 Konsulko Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stdio.h> + +#include <libfdt.h> + +#include "tests.h" + +#define CHECK(code) \ + { \ + if (code) \ + FAIL(#code ": %s", fdt_strerror(code)); \ + } + +/* 4k ought to be enough for anybody */ +#define FDT_COPY_SIZE (4 * 1024) + +static void *open_dt(char *path) +{ + void *dt, *copy; + + dt = load_blob(path); + copy = xmalloc(FDT_COPY_SIZE); + + /* + * Resize our DTs to 4k so that we have room to operate on + */ + CHECK(fdt_open_into(dt, copy, FDT_COPY_SIZE)); + + return copy; +} + +int main(int argc, char *argv[]) +{ + void *fdt_base; + int fail_config, exists, check_exists; + + test_init(argc, argv); + fail_config = 0; + + if (argc != 4) + fail_config = 1; + + if (!fail_config) { + if (!strcmp(argv[2], "exists")) + check_exists = 1; + else if (!strcmp(argv[2], "not-exists")) + check_exists = 0; + else + fail_config = 1; + } + + if (fail_config) + CONFIG("Usage: %s <base dtb> <[exists|not-exists]> <node-path>", argv[0]); + + fdt_base = open_dt(argv[1]); + + exists = fdt_path_offset(fdt_base, argv[3]) >= 0; + + if (exists == check_exists) + PASS(); + else + FAIL(); +} diff --git a/tests/run_tests.sh b/tests/run_tests.sh index e4139dd..d64cb2a 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -508,6 +508,9 @@ dtc_tests () { run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label5.dts run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label6.dts + run_test check_path test_tree1.dtb exists "/subnode@1" + run_test check_path test_tree1.dtb not-exists "/subnode@10" + # Check warning options run_sh_test dtc-checkfails.sh address_cells_is_cell interrupt_cells_is_cell -n size_cells_is_cell -- -Wno_size_cells_is_cell -I dts -O dtb bad-ncells.dts run_sh_test dtc-fails.sh -n test-warn-output.test.dtb -I dts -O dtb bad-ncells.dts -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v13 4/7] tests: Add overlay tests [not found] ` <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> ` (2 preceding siblings ...) 2016-12-07 12:48 ` [PATCH v13 3/7] tests: Add check_path test Pantelis Antoniou @ 2016-12-07 12:48 ` Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 5/7] overlay: Documentation for the overlay sugar syntax Pantelis Antoniou ` (3 subsequent siblings) 7 siblings, 0 replies; 14+ messages in thread From: Pantelis Antoniou @ 2016-12-07 12:48 UTC (permalink / raw) To: David Gibson Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA, Pantelis Antoniou Add a number of tests for dynamic objects/overlays. Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> --- tests/overlay_base_fixups.dts | 22 ++++++++++++++++++++++ tests/overlay_overlay_dtc.dts | 1 + tests/overlay_overlay_simple.dts | 12 ++++++++++++ tests/run_tests.sh | 29 +++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 tests/overlay_base_fixups.dts create mode 100644 tests/overlay_overlay_simple.dts diff --git a/tests/overlay_base_fixups.dts b/tests/overlay_base_fixups.dts new file mode 100644 index 0000000..815a054 --- /dev/null +++ b/tests/overlay_base_fixups.dts @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2016 Konsulko Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/dts-v1/; + +/ { + test: test-node { + test-int-property = <42>; + test-str-property = "foo"; + + subtest: sub-test-node { + sub-test-property; + }; + }; + + ref { + local-ref = <&test &subtest>; + }; +}; diff --git a/tests/overlay_overlay_dtc.dts b/tests/overlay_overlay_dtc.dts index 30d2362..b6d841b 100644 --- a/tests/overlay_overlay_dtc.dts +++ b/tests/overlay_overlay_dtc.dts @@ -1,6 +1,7 @@ /* * Copyright (c) 2016 NextThing Co * Copyright (c) 2016 Free Electrons + * Copyright (c) 2016 Konsulko Inc. * * SPDX-License-Identifier: GPL-2.0+ */ diff --git a/tests/overlay_overlay_simple.dts b/tests/overlay_overlay_simple.dts new file mode 100644 index 0000000..8657e1e --- /dev/null +++ b/tests/overlay_overlay_simple.dts @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2016 Konsulko Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/dts-v1/; +/plugin/; + +&test { + test-int-property = <43>; +}; diff --git a/tests/run_tests.sh b/tests/run_tests.sh index d64cb2a..b8e7d44 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -181,6 +181,35 @@ overlay_tests () { run_dtc_test -@ -I dts -O dtb -o overlay_base_with_symbols.test.dtb overlay_base.dts run_dtc_test -@ -I dts -O dtb -o overlay_overlay_with_symbols.test.dtb overlay_overlay_dtc.dts run_test overlay overlay_base_with_symbols.test.dtb overlay_overlay_with_symbols.test.dtb + + # Test symbols/fixups existence + run_test check_path overlay_overlay_with_symbols.test.dtb exists "/__symbols__" + run_test check_path overlay_overlay_with_symbols.test.dtb exists "/__fixups__" + run_test check_path overlay_overlay_with_symbols.test.dtb exists "/__local_fixups__" + + # test plugin source to dtb and back + run_dtc_test -@ -I dtb -O dts -o overlay_overlay_dtc.test.dts overlay_overlay_with_symbols.test.dtb + run_dtc_test -@ -I dts -O dtb -o overlay_overlay_with_symbols.test.test.dtb overlay_overlay_dtc.test.dts + run_test dtbs_equal_ordered overlay_overlay_with_symbols.test.dtb overlay_overlay_with_symbols.test.test.dtb + + # test plugin auto-generation without using -@ + run_dtc_test -I dts -O dtb -o overlay_overlay_with_symbols_auto.test.dtb overlay_overlay_dtc.dts + run_test check_path overlay_overlay_with_symbols_auto.test.dtb exists "/__symbols__" + run_test check_path overlay_overlay_with_symbols_auto.test.dtb exists "/__fixups__" + run_test check_path overlay_overlay_with_symbols_auto.test.dtb exists "/__local_fixups__" + + # Test suppression of fixups + run_dtc_test -@ -I dts -O dtb -o overlay_base_with_symbols_no_fixups.test.dtb overlay_base_fixups.dts + run_test check_path overlay_base_with_symbols_no_fixups.test.dtb exists "/__symbols__" + run_test check_path overlay_base_with_symbols_no_fixups.test.dtb not-exists "/__fixups__" + run_test check_path overlay_base_with_symbols_no_fixups.test.dtb not-exists "/__local_fixups__" + + # Test generation of aliases insted of symbols + run_dtc_test -A -I dts -O dtb -o overlay_overlay_with_aliases.dtb overlay_overlay_dtc.dts + run_test check_path overlay_overlay_with_aliases.dtb exists "/aliases" + run_test check_path overlay_overlay_with_aliases.dtb exists "/__symbols__" + run_test check_path overlay_overlay_with_aliases.dtb exists "/__fixups__" + run_test check_path overlay_overlay_with_aliases.dtb exists "/__local_fixups__" fi # Bad fixup tests -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v13 5/7] overlay: Documentation for the overlay sugar syntax [not found] ` <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> ` (3 preceding siblings ...) 2016-12-07 12:48 ` [PATCH v13 4/7] tests: Add overlay tests Pantelis Antoniou @ 2016-12-07 12:48 ` Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 6/7] overlay: Add syntactic sugar version of overlays Pantelis Antoniou ` (2 subsequent siblings) 7 siblings, 0 replies; 14+ messages in thread From: Pantelis Antoniou @ 2016-12-07 12:48 UTC (permalink / raw) To: David Gibson Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA, Pantelis Antoniou There exists a syntactic sugar version of overlays which make them simpler to write for the trivial case of a single target. Document it in the device tree object internals. Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> --- Documentation/dt-object-internal.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Documentation/dt-object-internal.txt b/Documentation/dt-object-internal.txt index 51d68ab..624aa43 100644 --- a/Documentation/dt-object-internal.txt +++ b/Documentation/dt-object-internal.txt @@ -308,3 +308,20 @@ the run time loader must apply an offset to each phandle in every dynamic DT object loaded. The __local_fixups__ node records the offset relative to the start of every local reference within that property so that the loader can apply the offset. + +There is an alternative syntax to the expanded form for overlays with phandle +targets which makes the format similar to the one using in .dtsi include files. + +So for the &ocp target example above one can simply write: + +/dts-v1/; +/plugin/; +&ocp { + /* bar peripheral */ + bar { + compatible = "corp,bar"; + ... /* various properties and child nodes */ + } +}; + +The resulting dtb object is identical. -- 2.1.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v13 6/7] overlay: Add syntactic sugar version of overlays [not found] ` <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> ` (4 preceding siblings ...) 2016-12-07 12:48 ` [PATCH v13 5/7] overlay: Documentation for the overlay sugar syntax Pantelis Antoniou @ 2016-12-07 12:48 ` Pantelis Antoniou [not found] ` <1481114903-8197-7-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> 2016-12-07 12:48 ` [PATCH v13 7/7] tests: Add a test for overlays syntactic sugar Pantelis Antoniou 2016-12-09 5:57 ` [PATCH v13 0/7] dtc: Dynamic DT support David Gibson 7 siblings, 1 reply; 14+ messages in thread From: Pantelis Antoniou @ 2016-12-07 12:48 UTC (permalink / raw) To: David Gibson Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA, Pantelis Antoniou For simple overlays that use a single target there exists a simpler syntax version. &foo { }; generates an overlay with a single target at foo. Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> --- dtc-parser.y | 20 +++++++++++++++++--- dtc.h | 1 + livetree.c | 22 ++++++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/dtc-parser.y b/dtc-parser.y index 27d358f..50da917 100644 --- a/dtc-parser.y +++ b/dtc-parser.y @@ -183,10 +183,19 @@ devicetree: { struct node *target = get_node_by_ref($1, $2); - if (target) + if (target) { merge_nodes(target, $3); - else - ERROR(&@2, "Label or path %s not found", $2); + } else { + /* + * We rely on the rule being always: + * versioninfo plugindecl memreserves devicetree + * so $-1 is what we want (plugindecl) + */ + if ($<flags>-1 & DTSF_PLUGIN) + add_orphan_node($1, $3, $2); + else + ERROR(&@2, "Label or path %s not found", $2); + } $$ = $1; } | devicetree DT_DEL_NODE DT_REF ';' @@ -201,6 +210,11 @@ devicetree: $$ = $1; } + | /* empty */ + { + /* build empty node */ + $$ = name_node(build_node(NULL, NULL), ""); + } ; nodedef: diff --git a/dtc.h b/dtc.h index 2ca8601..c97e291 100644 --- a/dtc.h +++ b/dtc.h @@ -198,6 +198,7 @@ struct node *build_node_delete(void); struct node *name_node(struct node *node, char *name); struct node *chain_node(struct node *first, struct node *list); struct node *merge_nodes(struct node *old_node, struct node *new_node); +void add_orphan_node(struct node *old_node, struct node *new_node, char *ref); void add_property(struct node *node, struct property *prop); void delete_property_by_name(struct node *node, char *name); diff --git a/livetree.c b/livetree.c index df1bc04..0806e47 100644 --- a/livetree.c +++ b/livetree.c @@ -216,6 +216,28 @@ struct node *merge_nodes(struct node *old_node, struct node *new_node) return old_node; } +void add_orphan_node(struct node *dt, struct node *new_node, char *ref) +{ + static unsigned int next_orphan_fragment = 0; + struct node *node; + struct property *p; + struct data d = empty_data; + char *name; + + d = data_add_marker(d, REF_PHANDLE, ref); + d = data_append_integer(d, 0xffffffff, 32); + + p = build_property("target", d); + + xasprintf(&name, "fragment@%u", + next_orphan_fragment++); + name_node(new_node, "__overlay__"); + node = build_node(p, new_node); + name_node(node, name); + + add_child(dt, node); +} + struct node *chain_node(struct node *first, struct node *list) { assert(first->next_sibling == NULL); -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 14+ messages in thread
[parent not found: <1481114903-8197-7-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH v13 6/7] overlay: Add syntactic sugar version of overlays [not found] ` <1481114903-8197-7-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> @ 2017-11-20 16:12 ` Grant Likely [not found] ` <CACxGe6vdGb6tUn5rW7vnnscOMPPjhYUTwVPupB=Mw5D6ub49Ww-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 14+ messages in thread From: Grant Likely @ 2017-11-20 16:12 UTC (permalink / raw) To: Pantelis Antoniou Cc: David Gibson, Jon Loeliger, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org On Wed, Dec 7, 2016 at 12:48 PM, Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> wrote: > For simple overlays that use a single target there exists a > simpler syntax version. > > &foo { }; generates an overlay with a single target at foo. > > Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> > --- > dtc-parser.y | 20 +++++++++++++++++--- > dtc.h | 1 + > livetree.c | 22 ++++++++++++++++++++++ > 3 files changed, 40 insertions(+), 3 deletions(-) > > diff --git a/dtc-parser.y b/dtc-parser.y > index 27d358f..50da917 100644 > --- a/dtc-parser.y > +++ b/dtc-parser.y > @@ -183,10 +183,19 @@ devicetree: > { > struct node *target = get_node_by_ref($1, $2); > > - if (target) > + if (target) { > merge_nodes(target, $3); > - else > - ERROR(&@2, "Label or path %s not found", $2); > + } else { > + /* > + * We rely on the rule being always: > + * versioninfo plugindecl memreserves devicetree > + * so $-1 is what we want (plugindecl) > + */ > + if ($<flags>-1 & DTSF_PLUGIN) > + add_orphan_node($1, $3, $2); > + else > + ERROR(&@2, "Label or path %s not found", $2); > + } It seems to me that the changes to this rule also need to be made to the "devicetree DT_LABEL DT_REF nodedef" rule immediately above it. Aside from applying the label, the rules are identical. kkk > $$ = $1; > } > | devicetree DT_DEL_NODE DT_REF ';' > @@ -201,6 +210,11 @@ devicetree: > > $$ = $1; > } > + | /* empty */ > + { > + /* build empty node */ > + $$ = name_node(build_node(NULL, NULL), ""); > + } > ; This change to the parser results in shift/reduce warnings due to an ambiguous parser. Just discovered this while playing with the mainline dtc. I *think* what you're trying to do here is allow for files whose first tree is not '/', but a DT_REF. I've got a fix which I'll post as soon as I get email from my Linux box working again. g. > > nodedef: > diff --git a/dtc.h b/dtc.h > index 2ca8601..c97e291 100644 > --- a/dtc.h > +++ b/dtc.h > @@ -198,6 +198,7 @@ struct node *build_node_delete(void); > struct node *name_node(struct node *node, char *name); > struct node *chain_node(struct node *first, struct node *list); > struct node *merge_nodes(struct node *old_node, struct node *new_node); > +void add_orphan_node(struct node *old_node, struct node *new_node, char *ref); > > void add_property(struct node *node, struct property *prop); > void delete_property_by_name(struct node *node, char *name); > diff --git a/livetree.c b/livetree.c > index df1bc04..0806e47 100644 > --- a/livetree.c > +++ b/livetree.c > @@ -216,6 +216,28 @@ struct node *merge_nodes(struct node *old_node, struct node *new_node) > return old_node; > } > > +void add_orphan_node(struct node *dt, struct node *new_node, char *ref) > +{ > + static unsigned int next_orphan_fragment = 0; > + struct node *node; > + struct property *p; > + struct data d = empty_data; > + char *name; > + > + d = data_add_marker(d, REF_PHANDLE, ref); > + d = data_append_integer(d, 0xffffffff, 32); > + > + p = build_property("target", d); > + > + xasprintf(&name, "fragment@%u", > + next_orphan_fragment++); > + name_node(new_node, "__overlay__"); > + node = build_node(p, new_node); > + name_node(node, name); > + > + add_child(dt, node); > +} > + > struct node *chain_node(struct node *first, struct node *list) > { > assert(first->next_sibling == NULL); > -- > 2.1.4 > ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <CACxGe6vdGb6tUn5rW7vnnscOMPPjhYUTwVPupB=Mw5D6ub49Ww-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH v13 6/7] overlay: Add syntactic sugar version of overlays [not found] ` <CACxGe6vdGb6tUn5rW7vnnscOMPPjhYUTwVPupB=Mw5D6ub49Ww-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2017-11-21 8:34 ` Pantelis Antoniou 0 siblings, 0 replies; 14+ messages in thread From: Pantelis Antoniou @ 2017-11-21 8:34 UTC (permalink / raw) To: Grant Likely Cc: David Gibson, Jon Loeliger, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Hi Grant, > On Nov 20, 2017, at 18:12 , Grant Likely <glikely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org> wrote: > > On Wed, Dec 7, 2016 at 12:48 PM, Pantelis Antoniou > <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> wrote: >> For simple overlays that use a single target there exists a >> simpler syntax version. >> >> &foo { }; generates an overlay with a single target at foo. >> >> Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> >> --- >> dtc-parser.y | 20 +++++++++++++++++--- >> dtc.h | 1 + >> livetree.c | 22 ++++++++++++++++++++++ >> 3 files changed, 40 insertions(+), 3 deletions(-) >> >> diff --git a/dtc-parser.y b/dtc-parser.y >> index 27d358f..50da917 100644 >> --- a/dtc-parser.y >> +++ b/dtc-parser.y >> @@ -183,10 +183,19 @@ devicetree: >> { >> struct node *target = get_node_by_ref($1, $2); >> >> - if (target) >> + if (target) { >> merge_nodes(target, $3); >> - else >> - ERROR(&@2, "Label or path %s not found", $2); >> + } else { >> + /* >> + * We rely on the rule being always: >> + * versioninfo plugindecl memreserves devicetree >> + * so $-1 is what we want (plugindecl) >> + */ >> + if ($<flags>-1 & DTSF_PLUGIN) >> + add_orphan_node($1, $3, $2); >> + else >> + ERROR(&@2, "Label or path %s not found", $2); >> + } > > It seems to me that the changes to this rule also need to be made to > the "devicetree DT_LABEL DT_REF nodedef" rule immediately above it. > Aside from applying the label, the rules are identical. > kkk I don’t think this occurs for the intended case, i.e. a reference at root instead of / >> $$ = $1; >> } >> | devicetree DT_DEL_NODE DT_REF ';' >> @@ -201,6 +210,11 @@ devicetree: >> >> $$ = $1; >> } >> + | /* empty */ >> + { >> + /* build empty node */ >> + $$ = name_node(build_node(NULL, NULL), ""); >> + } >> ; > > This change to the parser results in shift/reduce warnings due to an > ambiguous parser. Just discovered this while playing with the mainline > dtc. > > I *think* what you're trying to do here is allow for files whose first > tree is not '/', but a DT_REF. I've got a fix which I'll post as soon > as I get email from my Linux box working again. > Yes, that’s the only use case. > g. > Regards — Pantelis >> >> nodedef: >> diff --git a/dtc.h b/dtc.h >> index 2ca8601..c97e291 100644 >> --- a/dtc.h >> +++ b/dtc.h >> @@ -198,6 +198,7 @@ struct node *build_node_delete(void); >> struct node *name_node(struct node *node, char *name); >> struct node *chain_node(struct node *first, struct node *list); >> struct node *merge_nodes(struct node *old_node, struct node *new_node); >> +void add_orphan_node(struct node *old_node, struct node *new_node, char *ref); >> >> void add_property(struct node *node, struct property *prop); >> void delete_property_by_name(struct node *node, char *name); >> diff --git a/livetree.c b/livetree.c >> index df1bc04..0806e47 100644 >> --- a/livetree.c >> +++ b/livetree.c >> @@ -216,6 +216,28 @@ struct node *merge_nodes(struct node *old_node, struct node *new_node) >> return old_node; >> } >> >> +void add_orphan_node(struct node *dt, struct node *new_node, char *ref) >> +{ >> + static unsigned int next_orphan_fragment = 0; >> + struct node *node; >> + struct property *p; >> + struct data d = empty_data; >> + char *name; >> + >> + d = data_add_marker(d, REF_PHANDLE, ref); >> + d = data_append_integer(d, 0xffffffff, 32); >> + >> + p = build_property("target", d); >> + >> + xasprintf(&name, "fragment@%u", >> + next_orphan_fragment++); >> + name_node(new_node, "__overlay__"); >> + node = build_node(p, new_node); >> + name_node(node, name); >> + >> + add_child(dt, node); >> +} >> + >> struct node *chain_node(struct node *first, struct node *list) >> { >> assert(first->next_sibling == NULL); >> -- >> 2.1.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v13 7/7] tests: Add a test for overlays syntactic sugar [not found] ` <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> ` (5 preceding siblings ...) 2016-12-07 12:48 ` [PATCH v13 6/7] overlay: Add syntactic sugar version of overlays Pantelis Antoniou @ 2016-12-07 12:48 ` Pantelis Antoniou 2016-12-09 5:57 ` [PATCH v13 0/7] dtc: Dynamic DT support David Gibson 7 siblings, 0 replies; 14+ messages in thread From: Pantelis Antoniou @ 2016-12-07 12:48 UTC (permalink / raw) To: David Gibson Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA, Pantelis Antoniou Add a single test makeing sure the &foo { }; syntax works. Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> --- tests/run_tests.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/run_tests.sh b/tests/run_tests.sh index b8e7d44..356c992 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -210,6 +210,12 @@ overlay_tests () { run_test check_path overlay_overlay_with_aliases.dtb exists "/__symbols__" run_test check_path overlay_overlay_with_aliases.dtb exists "/__fixups__" run_test check_path overlay_overlay_with_aliases.dtb exists "/__local_fixups__" + + # test simplified plugin syntax + run_dtc_test -@ -I dts -O dtb -o overlay_overlay_simple.dtb overlay_overlay_simple.dts + + # verify non-generation of local fixups + run_test check_path overlay_overlay_simple.dtb not-exists "/__local_fixups__" fi # Bad fixup tests -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v13 0/7] dtc: Dynamic DT support [not found] ` <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> ` (6 preceding siblings ...) 2016-12-07 12:48 ` [PATCH v13 7/7] tests: Add a test for overlays syntactic sugar Pantelis Antoniou @ 2016-12-09 5:57 ` David Gibson [not found] ` <20161209055709.GP13139-K0bRW+63XPQe6aEkudXLsA@public.gmane.org> 7 siblings, 1 reply; 14+ messages in thread From: David Gibson @ 2016-12-09 5:57 UTC (permalink / raw) To: Pantelis Antoniou Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA [-- Attachment #1: Type: text/plain, Size: 5956 bytes --] On Wed, Dec 07, 2016 at 02:48:16PM +0200, Pantelis Antoniou wrote: > This patchset adds Dynamic DT support in the DTC compiler > as used in a number of boards like the beaglebone/rpi/chip and others. > > The first patch documents the internals of overlay generation, while > the second one adds dynamic object/overlay support proper. > > The third patch adds a test method that can is used by the subsequent > patch which adds a few overlay tests verifying operation. > > The following 3 patches add support for the syntactic sugar version > of &foo { }; in a similar manner. > > This patchset is against DTC mainline and is also available for a pull > request from https://github.com/pantoniou/dtc/tree/overlays Ok, I've merged patches 1-4 into mainline, along with a bunch of minor fixes of my own on top. 5..7 (the start of the new) I want to hold off on for now, to thrash out the details of what we want a new cleaner format to look like a bit more thoroughly. > > Regards > > -- Pantelis > > Changes since v12: > * Dropped DTBO magic option completely. > * Dropped fixup generation option. > * Renamed dstversionflags to dstflags > * Drop support for the new style /plugin/ tag. > > Changes since v11: > * Syntax and grammatical fixes to the documentation. > * Renamed options and internal variables controlling generation of symbols > and fixups. > * Rename version flags to specify that they refer to DTS version. > * Made sure that no symbols/fixup nodes are only generated if they contain > entries. > > Changes since v10: > * Split out the syntactic sugar version of &foo { }; into a different > patches to make things clearer. > * Reworked a bit the arguments passed to fixup node generation method > making things simpler and utilize common methodology. > * Avoid string parsing the full path using the node walking instead for > local fixup generation. > * Added an option to suppress generation of fixup nodes on base trees. > * Added automatic generation of symbols and fixups when compiling a > plugin. > * Minor rework according to maintainer requests. > > Changes since v9: > * Reversed -M switch to by default use new DTBO magic value. > * Removed global versionflags in the parser by using inherited > attributes. > * build_node instead of malloc at add_orphan_node(). > * Do not use escape for path copy > * Do not generate /plugin/ when generating a dts file even when > the plugin flag is set.. > > Changes since v8: > * Removed extra member of boot_info in each node; passing boot_info > parameter to the check methods instead. > * Reworked yacc syntax that supports both old and new plugin syntax > * Added handling for new magic number (enabled by 'M' switch). > * Dropped dtbo/asmo formats. > * Added overlay testsuite. > * Addressed last version maintainer comments. > > Changes since v7: > * Dropped xasprintf & backward compatibility patch > * Rebased against dgibson's overlay branch > * Minor doc wording fixes. > > Changes since v6: > * Introduced xasprintf > * Added append_to_property and used it > * Changed some die()'s to assert > * Reordered node generation to respect sort > * Addressed remaining maintainer changes from v6 > > Changes since v5: > * Rebase to latest dtc version. > * Addressed all the maintainer requested changes from v5 > * Added new magic value for dynamic objects and new format > > Changes since v4: > * Rebase to latest dtc version. > * Completely redesigned the generation of resolution data. > Now instead of being generated as part of blob generation > they are created in the live tree. > * Consequently the patchset is much smaller. > * Added -A auto-label alias generation option. > * Addressed maintainer comments. > * Added syntactic sugar for overlays in the form of .dtsi > * Added /dts-v1/ /plugin/ preferred plugin form and deprecate > the previous form (although still works for backward compatibility) > > Changes since v3: > * Rebase to latest dtc version. > > Changes since v2: > * Split single patch to a patchset. > * Updated to dtc mainline. > * Changed __local_fixups__ format > * Clean up for better legibility. > Pantelis Antoniou (7): > dtc: Document the dynamic plugin internals > dtc: Plugin and fixup support > tests: Add check_path test > tests: Add overlay tests > overlay: Documentation for the overlay sugar syntax > overlay: Add syntactic sugar version of overlays > tests: Add a test for overlays syntactic sugar > > Documentation/dt-object-internal.txt | 327 +++++++++++++++++++++++++++++++++++ > Documentation/manual.txt | 21 ++- > checks.c | 8 +- > dtc-lexer.l | 5 + > dtc-parser.y | 48 ++++- > dtc.c | 33 +++- > dtc.h | 17 +- > flattree.c | 2 +- > fstree.c | 2 +- > livetree.c | 291 ++++++++++++++++++++++++++++++- > tests/.gitignore | 1 + > tests/Makefile.tests | 3 +- > tests/check_path.c | 82 +++++++++ > tests/overlay_base_fixups.dts | 22 +++ > tests/overlay_overlay_dtc.dts | 1 + > tests/overlay_overlay_simple.dts | 12 ++ > tests/run_tests.sh | 38 ++++ > 17 files changed, 898 insertions(+), 15 deletions(-) > create mode 100644 Documentation/dt-object-internal.txt > create mode 100644 tests/check_path.c > create mode 100644 tests/overlay_base_fixups.dts > create mode 100644 tests/overlay_overlay_simple.dts > -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <20161209055709.GP13139-K0bRW+63XPQe6aEkudXLsA@public.gmane.org>]
* Re: [PATCH v13 0/7] dtc: Dynamic DT support [not found] ` <20161209055709.GP13139-K0bRW+63XPQe6aEkudXLsA@public.gmane.org> @ 2016-12-09 8:16 ` Pantelis Antoniou [not found] ` <3C4DD870-3736-42A7-A110-0975C31E74A4-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 14+ messages in thread From: Pantelis Antoniou @ 2016-12-09 8:16 UTC (permalink / raw) To: David Gibson Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA Hi David, > On Dec 9, 2016, at 07:57 , David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org> wrote: > > On Wed, Dec 07, 2016 at 02:48:16PM +0200, Pantelis Antoniou wrote: >> This patchset adds Dynamic DT support in the DTC compiler >> as used in a number of boards like the beaglebone/rpi/chip and others. >> >> The first patch documents the internals of overlay generation, while >> the second one adds dynamic object/overlay support proper. >> >> The third patch adds a test method that can is used by the subsequent >> patch which adds a few overlay tests verifying operation. >> >> The following 3 patches add support for the syntactic sugar version >> of &foo { }; in a similar manner. >> >> This patchset is against DTC mainline and is also available for a pull >> request from https://github.com/pantoniou/dtc/tree/overlays > > Ok, I've merged patches 1-4 into mainline, along with a bunch of minor > fixes of my own on top. 5..7 (the start of the new) I want to hold > off on for now, to thrash out the details of what we want a new > cleaner format to look like a bit more thoroughly. > Thank you. My git tree contains an updated patchset of the syntactic sugar patches for reference now. Regards — Pantelis >> >> Regards >> >> -- Pantelis >> >> Changes since v12: >> * Dropped DTBO magic option completely. >> * Dropped fixup generation option. >> * Renamed dstversionflags to dstflags >> * Drop support for the new style /plugin/ tag. >> >> Changes since v11: >> * Syntax and grammatical fixes to the documentation. >> * Renamed options and internal variables controlling generation of symbols >> and fixups. >> * Rename version flags to specify that they refer to DTS version. >> * Made sure that no symbols/fixup nodes are only generated if they contain >> entries. >> >> Changes since v10: >> * Split out the syntactic sugar version of &foo { }; into a different >> patches to make things clearer. >> * Reworked a bit the arguments passed to fixup node generation method >> making things simpler and utilize common methodology. >> * Avoid string parsing the full path using the node walking instead for >> local fixup generation. >> * Added an option to suppress generation of fixup nodes on base trees. >> * Added automatic generation of symbols and fixups when compiling a >> plugin. >> * Minor rework according to maintainer requests. >> >> Changes since v9: >> * Reversed -M switch to by default use new DTBO magic value. >> * Removed global versionflags in the parser by using inherited >> attributes. >> * build_node instead of malloc at add_orphan_node(). >> * Do not use escape for path copy >> * Do not generate /plugin/ when generating a dts file even when >> the plugin flag is set.. >> >> Changes since v8: >> * Removed extra member of boot_info in each node; passing boot_info >> parameter to the check methods instead. >> * Reworked yacc syntax that supports both old and new plugin syntax >> * Added handling for new magic number (enabled by 'M' switch). >> * Dropped dtbo/asmo formats. >> * Added overlay testsuite. >> * Addressed last version maintainer comments. >> >> Changes since v7: >> * Dropped xasprintf & backward compatibility patch >> * Rebased against dgibson's overlay branch >> * Minor doc wording fixes. >> >> Changes since v6: >> * Introduced xasprintf >> * Added append_to_property and used it >> * Changed some die()'s to assert >> * Reordered node generation to respect sort >> * Addressed remaining maintainer changes from v6 >> >> Changes since v5: >> * Rebase to latest dtc version. >> * Addressed all the maintainer requested changes from v5 >> * Added new magic value for dynamic objects and new format >> >> Changes since v4: >> * Rebase to latest dtc version. >> * Completely redesigned the generation of resolution data. >> Now instead of being generated as part of blob generation >> they are created in the live tree. >> * Consequently the patchset is much smaller. >> * Added -A auto-label alias generation option. >> * Addressed maintainer comments. >> * Added syntactic sugar for overlays in the form of .dtsi >> * Added /dts-v1/ /plugin/ preferred plugin form and deprecate >> the previous form (although still works for backward compatibility) >> >> Changes since v3: >> * Rebase to latest dtc version. >> >> Changes since v2: >> * Split single patch to a patchset. >> * Updated to dtc mainline. >> * Changed __local_fixups__ format >> * Clean up for better legibility. >> Pantelis Antoniou (7): >> dtc: Document the dynamic plugin internals >> dtc: Plugin and fixup support >> tests: Add check_path test >> tests: Add overlay tests >> overlay: Documentation for the overlay sugar syntax >> overlay: Add syntactic sugar version of overlays >> tests: Add a test for overlays syntactic sugar >> >> Documentation/dt-object-internal.txt | 327 +++++++++++++++++++++++++++++++++++ >> Documentation/manual.txt | 21 ++- >> checks.c | 8 +- >> dtc-lexer.l | 5 + >> dtc-parser.y | 48 ++++- >> dtc.c | 33 +++- >> dtc.h | 17 +- >> flattree.c | 2 +- >> fstree.c | 2 +- >> livetree.c | 291 ++++++++++++++++++++++++++++++- >> tests/.gitignore | 1 + >> tests/Makefile.tests | 3 +- >> tests/check_path.c | 82 +++++++++ >> tests/overlay_base_fixups.dts | 22 +++ >> tests/overlay_overlay_dtc.dts | 1 + >> tests/overlay_overlay_simple.dts | 12 ++ >> tests/run_tests.sh | 38 ++++ >> 17 files changed, 898 insertions(+), 15 deletions(-) >> create mode 100644 Documentation/dt-object-internal.txt >> create mode 100644 tests/check_path.c >> create mode 100644 tests/overlay_base_fixups.dts >> create mode 100644 tests/overlay_overlay_simple.dts >> > > -- > David Gibson | I'll have my music baroque, and my code > david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ > | _way_ _around_! > http://www.ozlabs.org/~dgibson -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <3C4DD870-3736-42A7-A110-0975C31E74A4-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH v13 0/7] dtc: Dynamic DT support [not found] ` <3C4DD870-3736-42A7-A110-0975C31E74A4-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> @ 2016-12-09 8:54 ` David Gibson [not found] ` <20161209085432.GR13139-K0bRW+63XPQe6aEkudXLsA@public.gmane.org> 0 siblings, 1 reply; 14+ messages in thread From: David Gibson @ 2016-12-09 8:54 UTC (permalink / raw) To: Pantelis Antoniou Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA [-- Attachment #1: Type: text/plain, Size: 1766 bytes --] On Fri, Dec 09, 2016 at 10:16:51AM +0200, Pantelis Antoniou wrote: > Hi David, > > > On Dec 9, 2016, at 07:57 , David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org> wrote: > > > > On Wed, Dec 07, 2016 at 02:48:16PM +0200, Pantelis Antoniou wrote: > >> This patchset adds Dynamic DT support in the DTC compiler > >> as used in a number of boards like the beaglebone/rpi/chip and others. > >> > >> The first patch documents the internals of overlay generation, while > >> the second one adds dynamic object/overlay support proper. > >> > >> The third patch adds a test method that can is used by the subsequent > >> patch which adds a few overlay tests verifying operation. > >> > >> The following 3 patches add support for the syntactic sugar version > >> of &foo { }; in a similar manner. > >> > >> This patchset is against DTC mainline and is also available for a pull > >> request from https://github.com/pantoniou/dtc/tree/overlays > > > > Ok, I've merged patches 1-4 into mainline, along with a bunch of minor > > fixes of my own on top. 5..7 (the start of the new) I want to hold > > off on for now, to thrash out the details of what we want a new > > cleaner format to look like a bit more thoroughly. > > > > Thank you. > > My git tree contains an updated patchset of the syntactic sugar patches > for reference now. Ok. Note that one of the patches I merged afterwards was a big rename of struct boot_info, so your patches will probably need a fair bit of fiddly though straightforward rebasing. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <20161209085432.GR13139-K0bRW+63XPQe6aEkudXLsA@public.gmane.org>]
* Re: [PATCH v13 0/7] dtc: Dynamic DT support [not found] ` <20161209085432.GR13139-K0bRW+63XPQe6aEkudXLsA@public.gmane.org> @ 2016-12-09 9:12 ` Pantelis Antoniou 0 siblings, 0 replies; 14+ messages in thread From: Pantelis Antoniou @ 2016-12-09 9:12 UTC (permalink / raw) To: David Gibson Cc: Jon Loeliger, Grant Likely, Frank Rowand, Rob Herring, Jan Luebbe, Sascha Hauer, Phil Elwell, Simon Glass, Maxime Ripard, Thomas Petazzoni, Boris Brezillon, Antoine Tenart, Stephen Boyd, Devicetree Compiler, devicetree-u79uwXL29TY76Z2rM5mHXA Hi David, > On Dec 9, 2016, at 10:54 , David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org> wrote: > > On Fri, Dec 09, 2016 at 10:16:51AM +0200, Pantelis Antoniou wrote: >> Hi David, >> >>> On Dec 9, 2016, at 07:57 , David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org> wrote: >>> >>> On Wed, Dec 07, 2016 at 02:48:16PM +0200, Pantelis Antoniou wrote: >>>> This patchset adds Dynamic DT support in the DTC compiler >>>> as used in a number of boards like the beaglebone/rpi/chip and others. >>>> >>>> The first patch documents the internals of overlay generation, while >>>> the second one adds dynamic object/overlay support proper. >>>> >>>> The third patch adds a test method that can is used by the subsequent >>>> patch which adds a few overlay tests verifying operation. >>>> >>>> The following 3 patches add support for the syntactic sugar version >>>> of &foo { }; in a similar manner. >>>> >>>> This patchset is against DTC mainline and is also available for a pull >>>> request from https://github.com/pantoniou/dtc/tree/overlays >>> >>> Ok, I've merged patches 1-4 into mainline, along with a bunch of minor >>> fixes of my own on top. 5..7 (the start of the new) I want to hold >>> off on for now, to thrash out the details of what we want a new >>> cleaner format to look like a bit more thoroughly. >>> >> >> Thank you. >> >> My git tree contains an updated patchset of the syntactic sugar patches >> for reference now. > > Ok. Note that one of the patches I merged afterwards was a big rename > of struct boot_info, so your patches will probably need a fair bit of > fiddly though straightforward rebasing. > Fortunately not. The syntax sugar stuff do not rely on boot_info at all now that the rule uses the inherited attribute trick. > -- > David Gibson | I'll have my music baroque, and my code > david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ > | _way_ _around_! > http://www.ozlabs.org/~dgibson Regards — Pantelis -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2017-11-21 8:34 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-12-07 12:48 [PATCH v13 0/7] dtc: Dynamic DT support Pantelis Antoniou [not found] ` <1481114903-8197-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> 2016-12-07 12:48 ` [PATCH v13 1/7] dtc: Document the dynamic plugin internals Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 2/7] dtc: Plugin and fixup support Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 3/7] tests: Add check_path test Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 4/7] tests: Add overlay tests Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 5/7] overlay: Documentation for the overlay sugar syntax Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 6/7] overlay: Add syntactic sugar version of overlays Pantelis Antoniou [not found] ` <1481114903-8197-7-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> 2017-11-20 16:12 ` Grant Likely [not found] ` <CACxGe6vdGb6tUn5rW7vnnscOMPPjhYUTwVPupB=Mw5D6ub49Ww-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-11-21 8:34 ` Pantelis Antoniou 2016-12-07 12:48 ` [PATCH v13 7/7] tests: Add a test for overlays syntactic sugar Pantelis Antoniou 2016-12-09 5:57 ` [PATCH v13 0/7] dtc: Dynamic DT support David Gibson [not found] ` <20161209055709.GP13139-K0bRW+63XPQe6aEkudXLsA@public.gmane.org> 2016-12-09 8:16 ` Pantelis Antoniou [not found] ` <3C4DD870-3736-42A7-A110-0975C31E74A4-OWPKS81ov/FWk0Htik3J/w@public.gmane.org> 2016-12-09 8:54 ` David Gibson [not found] ` <20161209085432.GR13139-K0bRW+63XPQe6aEkudXLsA@public.gmane.org> 2016-12-09 9:12 ` Pantelis Antoniou
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).