<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>