<p>Furquan Shaikh has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/27017">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">util/sconfig: Prepare sconfig to allow parsing multiple trees<br><br>In preparation to allow devicetree overrides, it will be necessary to<br>use the same parsing functions to prepare two separate parse<br>trees. This change does the following things:<br>1. Updates root device and bus names to add base_ prefix.<br>2. Adds a function parse_devicetree that sets the root_parent and<br>linenum before calling yyparse().<br>3. Updates all uses of root_dev to refer to the next base_root_dev.<br><br>BUG=b:80081934<br>TEST=Verified that static.c generated for all boards built using<br>abuild is the same with and without this change.<br><br>Change-Id: I403a90c1ebf07ac66115ddfe137daf0980dc1a18<br>Signed-off-by: Furquan Shaikh <furquan@google.com><br>---<br>M util/sconfig/main.c<br>1 file changed, 32 insertions(+), 23 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/17/27017/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/util/sconfig/main.c b/util/sconfig/main.c</span><br><span>index 2a7fa15..b293c5d 100644</span><br><span>--- a/util/sconfig/main.c</span><br><span>+++ b/util/sconfig/main.c</span><br><span>@@ -20,6 +20,7 @@</span><br><span> </span><br><span> extern int linenum;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Maintains list of all the unique chip structures for the board. */</span><br><span> static struct chip chip_header;</span><br><span> </span><br><span> /*</span><br><span>@@ -43,8 +44,8 @@</span><br><span>  *</span><br><span>  *</span><br><span>  *                 +------------------------+                +----------------------+</span><br><span style="color: hsl(0, 100%, 40%);">- *                 |                        |                |  Mainboard           |</span><br><span style="color: hsl(0, 100%, 40%);">- *       +---------+ Root device (root_dev) +--------------->+  instance            +</span><br><span style="color: hsl(120, 100%, 40%);">+ *                 |       Root device      |                |  Mainboard           |</span><br><span style="color: hsl(120, 100%, 40%);">+ *       +---------+     (base_root_dev)    +--------------->+  instance            +</span><br><span>  *       |         |                        | chip_instance  |  (mainboard_instance)|</span><br><span>  *       |         +------------------------+                |                      |</span><br><span>  *       |                      |                            +----------------------+</span><br><span>@@ -52,7 +53,7 @@</span><br><span>  *       | parent               v                                      |</span><br><span>  *       |            +-------------------+                            |</span><br><span>  *       |            |     Root bus      |                            |</span><br><span style="color: hsl(0, 100%, 40%);">- *       +----------->+    (root_bus)     |                            |</span><br><span style="color: hsl(120, 100%, 40%);">+ *       +----------->+  (base_root_bus)  |                            |</span><br><span>  *                    |                   |                            |</span><br><span>  *                    +-------------------+                            |</span><br><span>  *                              |                                      |</span><br><span>@@ -74,23 +75,23 @@</span><br><span>  *</span><br><span>  *</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-static struct device root_dev;</span><br><span style="color: hsl(120, 100%, 40%);">+static struct device base_root_dev;</span><br><span> static struct chip_instance mainboard_instance;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct bus root_bus = {</span><br><span style="color: hsl(120, 100%, 40%);">+static struct bus base_root_bus = {</span><br><span>  .id = 0,</span><br><span style="color: hsl(0, 100%, 40%);">-        .dev = &root_dev,</span><br><span style="color: hsl(120, 100%, 40%);">+ .dev = &base_root_dev,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct device root_dev = {</span><br><span style="color: hsl(120, 100%, 40%);">+static struct device base_root_dev = {</span><br><span>        .name = "dev_root",</span><br><span>        .id = 0,</span><br><span>     .chip_instance = &mainboard_instance,</span><br><span>    .path = " .type = DEVICE_PATH_ROOT ",</span><br><span>      .ops = "&default_dev_ops_root",</span><br><span style="color: hsl(0, 100%, 40%);">-   .parent = &root_bus,</span><br><span style="color: hsl(120, 100%, 40%);">+      .parent = &base_root_bus,</span><br><span>        .enabled = 1,</span><br><span style="color: hsl(0, 100%, 40%);">-   .bus = &root_bus,</span><br><span style="color: hsl(120, 100%, 40%);">+ .bus = &base_root_bus,</span><br><span> };</span><br><span> </span><br><span> static struct chip mainboard_chip = {</span><br><span>@@ -105,7 +106,7 @@</span><br><span> };</span><br><span> </span><br><span> /* This is the parent of all devices added by parsing the devicetree file. */</span><br><span style="color: hsl(0, 100%, 40%);">-struct bus *root_parent = &root_bus;</span><br><span style="color: hsl(120, 100%, 40%);">+struct bus *root_parent;</span><br><span> </span><br><span> struct queue_entry {</span><br><span>         void *data;</span><br><span>@@ -581,7 +582,7 @@</span><br><span> </span><br><span> static void pass0(FILE *fil, struct device *ptr, struct device *next)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     if (ptr == &root_dev) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (ptr == &base_root_dev) {</span><br><span>             fprintf(fil, "DEVTREE_CONST struct bus %s_links[];\n",</span><br><span>                     ptr->name);</span><br><span>               return;</span><br><span>@@ -670,7 +671,7 @@</span><br><span>        struct chip_instance *chip_ins = ptr->chip_instance;</span><br><span>      int has_children = dev_has_children(ptr);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (ptr != &root_dev)</span><br><span style="color: hsl(120, 100%, 40%);">+     if (ptr != &base_root_dev)</span><br><span>               fprintf(fil, "static ");</span><br><span>   fprintf(fil, "DEVTREE_CONST struct device %s = {\n", ptr->name);</span><br><span>        fprintf(fil, "#if !DEVTREE_EARLY\n");</span><br><span>@@ -867,15 +868,9 @@</span><br><span> </span><br><span> #define ARG_COUNT         3</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int main(int argc, char **argv)</span><br><span style="color: hsl(120, 100%, 40%);">+static void parse_devicetree(const char *file, struct bus *parent)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   if (argc != ARG_COUNT)</span><br><span style="color: hsl(0, 100%, 40%);">-          usage();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        char *devtree = argv[DEVICEFILE_ARG];</span><br><span style="color: hsl(0, 100%, 40%);">-   char *outputc = argv[OUTPUTFILE_ARG];</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   FILE *filec = fopen(devtree, "r");</span><br><span style="color: hsl(120, 100%, 40%);">+  FILE *filec = fopen(file, "r");</span><br><span>    if (!filec) {</span><br><span>                perror(NULL);</span><br><span>                exit(1);</span><br><span>@@ -883,9 +878,23 @@</span><br><span> </span><br><span>  yyrestart(filec);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ root_parent = parent;</span><br><span style="color: hsl(120, 100%, 40%);">+ linenum = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       yyparse();</span><br><span> </span><br><span>       fclose(filec);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int main(int argc, char **argv)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       if (argc != ARG_COUNT)</span><br><span style="color: hsl(120, 100%, 40%);">+                usage();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    char *base_devtree = argv[DEVICEFILE_ARG];</span><br><span style="color: hsl(120, 100%, 40%);">+    char *outputc = argv[OUTPUTFILE_ARG];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       parse_devicetree(base_devtree, &base_root_bus);</span><br><span> </span><br><span>      FILE *autogen = fopen(outputc, "w");</span><br><span>       if (!autogen) {</span><br><span>@@ -897,11 +906,11 @@</span><br><span> </span><br><span>  emit_chips(autogen);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        walk_device_tree(autogen, &root_dev, inherit_subsystem_ids);</span><br><span style="color: hsl(120, 100%, 40%);">+      walk_device_tree(autogen, &base_root_dev, inherit_subsystem_ids);</span><br><span>        fprintf(autogen, "\n/* pass 0 */\n");</span><br><span style="color: hsl(0, 100%, 40%);">- walk_device_tree(autogen, &root_dev, pass0);</span><br><span style="color: hsl(120, 100%, 40%);">+      walk_device_tree(autogen, &base_root_dev, pass0);</span><br><span>        fprintf(autogen, "\n/* pass 1 */\n");</span><br><span style="color: hsl(0, 100%, 40%);">- walk_device_tree(autogen, &root_dev, pass1);</span><br><span style="color: hsl(120, 100%, 40%);">+      walk_device_tree(autogen, &base_root_dev, pass1);</span><br><span> </span><br><span>    fclose(autogen);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/27017">change 27017</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/27017"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I403a90c1ebf07ac66115ddfe137daf0980dc1a18 </div>
<div style="display:none"> Gerrit-Change-Number: 27017 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Furquan Shaikh <furquan@google.com> </div>