summaryrefslogtreecommitdiff
path: root/util/sconfig/sconfig.y
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@google.com>2018-06-03 04:22:17 -0700
committerFurquan Shaikh <furquan@google.com>2018-06-08 23:36:02 +0000
commit931982600d3ac3dfb9d66e013604ecc0573a1744 (patch)
treef4ceeaa3bf1e4a0c24e89587ce86d54ff8ea808a /util/sconfig/sconfig.y
parent7398deda2b12f2ba3ab6c14009ff8da003ef2b0c (diff)
downloadcoreboot-931982600d3ac3dfb9d66e013604ecc0573a1744.tar.xz
util/sconfig: Re-factor device structure in parse tree
This change re-factors the device structure in parse tree to be able to support multidev devices just like non-multidev devices. With this change, every device has a bus under it which is the parent of all devices that fall on the bus. If there are duplicate entries in the devicetree, then there will be multiple buses under the device and each bus will have its own set of children. The tree starts out with a root device which has a root bus under it. This is a special device which is created statically and its parent is its own root bus. When parsing the device tree file, devices get added under the root bus as children. Since this change re-organizes the way devicetree is represented, it gets rid of latestchild and next_sibling pointers from struct device. Also, the tree traversal to generate static.c is changed to breadth-first walk instead of using the next_sibling. BUG=b:80081934 TEST=Verified using abuild that all boards compile successfully. Change-Id: Ic8c8a73a247e8e992ab6b1b2cc3131e06fa2e5a1 Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/26800 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'util/sconfig/sconfig.y')
-rwxr-xr-xutil/sconfig/sconfig.y14
1 files changed, 6 insertions, 8 deletions
diff --git a/util/sconfig/sconfig.y b/util/sconfig/sconfig.y
index a355c77c56..3e463059c8 100755
--- a/util/sconfig/sconfig.y
+++ b/util/sconfig/sconfig.y
@@ -20,12 +20,12 @@
int yylex();
void yyerror(const char *s);
-static struct device *cur_parent;
+static struct bus *cur_parent;
static struct chip_instance *cur_chip_instance;
%}
%union {
- struct device *device;
+ struct device *dev;
struct chip_instance *chip_instance;
char *string;
int number;
@@ -33,7 +33,7 @@ static struct chip_instance *cur_chip_instance;
%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
%%
-devtree: { cur_parent = head; } chip { postprocess_devtree(); } ;
+devtree: { cur_parent = root_parent; } chip;
chipchildren: chipchildren device | chipchildren chip | chipchildren registers | /* empty */ ;
@@ -49,13 +49,11 @@ chip: CHIP STRING /* == path */ {
};
device: DEVICE BUS NUMBER /* == devnum */ BOOL {
- $<device>$ = new_device(cur_parent, cur_chip_instance, $<number>2, $<string>3, $<number>4);
- cur_parent = $<device>$;
+ $<dev>$ = new_device(cur_parent, cur_chip_instance, $<number>2, $<string>3, $<number>4);
+ cur_parent = $<dev>$->last_bus;
}
devicechildren END {
- cur_parent = $<device>5->parent;
- fold_in($<device>5);
- alias_siblings($<device>5->children);
+ cur_parent = $<dev>5->parent;
};
resource: RESOURCE NUMBER /* == resnum */ EQUALS NUMBER /* == resval */