<p>Furquan Shaikh has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/26805">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">util/sconfig: Get rid of latestchild and next_sibling<br><br>latestchild and next_sibling members of struct device were primarily<br>used for walking the device tree. Now that we are using<br>breadth-first walk, there is no need for these members. This CL gets<br>rid of latestchild and next_sibling and the functions required to<br>update these pointers during tree parsing i.e. fold_in and<br>postprocess_devtree.<br><br>BUG=b:80081934<br>TEST=Verified that the static.c generated with and without this CL is<br>exactly the same for all boards built using abuild.<br><br>Change-Id: I0da64f6f10017c9c36f40b0d915f6dbffca9195e<br>Signed-off-by: Furquan Shaikh <furquan@google.com><br>---<br>M util/sconfig/main.c<br>M util/sconfig/sconfig.h<br>M util/sconfig/sconfig.tab.c_shipped<br>M util/sconfig/sconfig.y<br>4 files changed, 3 insertions(+), 52 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/05/26805/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 7540fc5..5c32178 100644</span><br><span>--- a/util/sconfig/main.c</span><br><span>+++ b/util/sconfig/main.c</span><br><span>@@ -191,25 +191,6 @@</span><br><span>    return !!d->linkcnt;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void fold_in(struct device *parent)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    struct device *child;</span><br><span style="color: hsl(0, 100%, 40%);">-   struct device *latest = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      child = device_has_instance(parent) ? parent->last_instance->children</span><br><span style="color: hsl(0, 100%, 40%);">-             : parent->children;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  while (child != latest) {</span><br><span style="color: hsl(0, 100%, 40%);">-               if (child->children) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (!latest)</span><br><span style="color: hsl(0, 100%, 40%);">-                            latest = child->children;</span><br><span style="color: hsl(0, 100%, 40%);">-                    parent->latestchild->next_sibling = child->children;</span><br><span style="color: hsl(0, 100%, 40%);">-                   parent->latestchild = child->latestchild;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">-               child = child->next_sibling;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> int yywrap(void)</span><br><span> {</span><br><span>  return 1;</span><br><span>@@ -222,17 +203,6 @@</span><br><span>     exit(1);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void postprocess_devtree(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-        root.next_sibling = root.children;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      /*</span><br><span style="color: hsl(0, 100%, 40%);">-       * Since root is statically created we need to call fold_in explicitly</span><br><span style="color: hsl(0, 100%, 40%);">-   * here to have the next_sibling and latestchild setup correctly.</span><br><span style="color: hsl(0, 100%, 40%);">-        */</span><br><span style="color: hsl(0, 100%, 40%);">-     fold_in(&root);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> char *translate_name(const char *str, translate_t mode)</span><br><span> {</span><br><span>         char *b, *c;</span><br><span>@@ -427,11 +397,6 @@</span><br><span>  if (parent->linkcnt)</span><br><span>              new_d->linknum = parent->linkcnt - 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (parent->latestchild)</span><br><span style="color: hsl(0, 100%, 40%);">-             parent->latestchild->next_sibling = new_d;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        parent->latestchild = new_d;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>      struct device *c;</span><br><span>    c = device_has_instance(parent) ? parent->last_instance->children :</span><br><span>                    parent->children;</span><br><span>diff --git a/util/sconfig/sconfig.h b/util/sconfig/sconfig.h</span><br><span>index e4f2270..2c52d23 100644</span><br><span>--- a/util/sconfig/sconfig.h</span><br><span>+++ b/util/sconfig/sconfig.h</span><br><span>@@ -109,8 +109,6 @@</span><br><span>      int linknum;</span><br><span> </span><br><span>     struct device *children;</span><br><span style="color: hsl(0, 100%, 40%);">-        struct device *latestchild;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct device *next_sibling;</span><br><span>         struct device *sibling;</span><br><span>      struct resource *res;</span><br><span> </span><br><span>@@ -124,10 +122,6 @@</span><br><span> </span><br><span> extern struct device *tree_root;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void fold_in(struct device *parent);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void postprocess_devtree(void);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> struct device *new_device(struct device *parent,</span><br><span>                    struct chip_instance *chip_instance,</span><br><span>                         const int bustype, const char *devnum,</span><br><span>diff --git a/util/sconfig/sconfig.tab.c_shipped b/util/sconfig/sconfig.tab.c_shipped</span><br><span>index 152e70d..b9300ce 100644</span><br><span>--- a/util/sconfig/sconfig.tab.c_shipped</span><br><span>+++ b/util/sconfig/sconfig.tab.c_shipped</span><br><span>@@ -487,8 +487,8 @@</span><br><span> static const yytype_uint8 yyrline[] =</span><br><span> {</span><br><span>        0,    36,    36,    36,    38,    38,    38,    38,    40,    40,</span><br><span style="color: hsl(0, 100%, 40%);">-      40,    40,    40,    40,    42,    42,    51,    51,    60,    63,</span><br><span style="color: hsl(0, 100%, 40%);">-      66,    69,    72</span><br><span style="color: hsl(120, 100%, 40%);">+      40,    40,    40,    40,    42,    42,    51,    51,    59,    62,</span><br><span style="color: hsl(120, 100%, 40%);">+      65,    68,    71</span><br><span> };</span><br><span> #endif</span><br><span> </span><br><span>@@ -1291,12 +1291,6 @@</span><br><span> </span><br><span>     break;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    { postprocess_devtree(); }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    break;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>   case 14:</span><br><span> </span><br><span>     {</span><br><span>@@ -1328,7 +1322,6 @@</span><br><span> </span><br><span>     {</span><br><span>    cur_parent = (yyvsp[-2].device)->parent;</span><br><span style="color: hsl(0, 100%, 40%);">-     fold_in((yyvsp[-2].device));</span><br><span> }</span><br><span> </span><br><span>     break;</span><br><span>diff --git a/util/sconfig/sconfig.y b/util/sconfig/sconfig.y</span><br><span>index 48a727f..4c05a47 100755</span><br><span>--- a/util/sconfig/sconfig.y</span><br><span>+++ b/util/sconfig/sconfig.y</span><br><span>@@ -33,7 +33,7 @@</span><br><span> </span><br><span> %token CHIP DEVICE REGISTER BOOL BUS RESOURCE END EQUALS HEX STRING PCI PNP I2C APIC CPU_CLUSTER CPU DOMAIN IRQ DRQ IO NUMBER SUBSYSTEMID INHERIT IOAPIC_IRQ IOAPIC PCIINT GENERIC SPI USB MMIO</span><br><span> %%</span><br><span style="color: hsl(0, 100%, 40%);">-devtree: { cur_parent = tree_root; } chip { postprocess_devtree(); } ;</span><br><span style="color: hsl(120, 100%, 40%);">+devtree: { cur_parent = tree_root; } chip;</span><br><span> </span><br><span> chipchildren: chipchildren device | chipchildren chip | chipchildren registers | /* empty */ ;</span><br><span> </span><br><span>@@ -54,7 +54,6 @@</span><br><span> }</span><br><span>       devicechildren END {</span><br><span>         cur_parent = $<device>5->parent;</span><br><span style="color: hsl(0, 100%, 40%);">-       fold_in($<device>5);</span><br><span> };</span><br><span> </span><br><span> resource: RESOURCE NUMBER /* == resnum */ EQUALS NUMBER /* == resval */</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/26805">change 26805</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/26805"/><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: I0da64f6f10017c9c36f40b0d915f6dbffca9195e </div>
<div style="display:none"> Gerrit-Change-Number: 26805 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Furquan Shaikh <furquan@google.com> </div>