<p>Duncan Laurie has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/26169">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">devicetree: Add USB device type<br><br>This commit adds support for describing USB ports in devicetree.cb.<br>It allows a USB port location to be described in the tree with<br>configuration information, and ACPI code to be generated that<br>provides this information to the OS.<br><br>A new scan_usb_bus() is added that will scan bridges for devices so<br>a tree of ports and hubs can be created.<br><br>The device address is computed with a 'port type' and a 'port id'<br>which is flexible for SOC to handle depending on their specific USB<br>setup and allows USB2 and USB3 ports to be described separately.<br><br>For example a board may have devices on two ports, one with a USB2<br>device and one with a USB3 device, both of which are connected to an<br>xHCI controller with a root hub:<br><br> xHCI<br> |<br> RootHub<br> | |<br>USB2[0] USB3[2]<br><br>device pci 14.0 on<br> chip drivers/usb/acpi<br> register "name" = ""Root Hub""<br> device usb 0.0 on<br> chip drivers/usb/acpi<br> register "name" = ""USB 2.0 Port 0""<br> device usb 2.0 on end<br> end<br> chip drivers/usb/acpi<br> register "name" = ""USB 3.0 Port 2""<br> device usb 3.2 on end<br> end<br> end<br> end<br>end<br><br>Change-Id: I64e6eba503cdab49be393465b535e139a8c90ef4<br>Signed-off-by: Duncan Laurie <dlaurie@google.com><br>---<br>M src/device/device_util.c<br>M src/device/root_device.c<br>M src/include/device/device.h<br>M src/include/device/path.h<br>M util/sconfig/lex.yy.c_shipped<br>M util/sconfig/main.c<br>M util/sconfig/sconfig.l<br>M util/sconfig/sconfig.tab.c_shipped<br>M util/sconfig/sconfig.tab.h_shipped<br>M util/sconfig/sconfig.y<br>10 files changed, 173 insertions(+), 126 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/69/26169/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/device/device_util.c b/src/device/device_util.c</span><br><span>index a64b63a..aad3b4b 100644</span><br><span>--- a/src/device/device_util.c</span><br><span>+++ b/src/device/device_util.c</span><br><span>@@ -256,6 +256,9 @@</span><br><span> case DEVICE_PATH_SPI:</span><br><span> ret |= dev->path.spi.cs;</span><br><span> break;</span><br><span style="color: hsl(120, 100%, 40%);">+ case DEVICE_PATH_USB:</span><br><span style="color: hsl(120, 100%, 40%);">+ ret |= dev->path.usb.port_type << 8 || dev->path.usb.port_id;</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span> case DEVICE_PATH_NONE:</span><br><span> case DEVICE_PATH_MMIO: /* don't care */</span><br><span> default:</span><br><span>@@ -333,6 +336,10 @@</span><br><span> snprintf(buffer, sizeof (buffer), "SPI: %02x",</span><br><span> dev->path.spi.cs);</span><br><span> break;</span><br><span style="color: hsl(120, 100%, 40%);">+ case DEVICE_PATH_USB:</span><br><span style="color: hsl(120, 100%, 40%);">+ snprintf(buffer, sizeof (buffer), "USB%u port %u",</span><br><span style="color: hsl(120, 100%, 40%);">+ dev->path.usb.port_type, dev->path.usb.port_id);</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span> case DEVICE_PATH_MMIO:</span><br><span> snprintf(buffer, sizeof (buffer), "MMIO: %08x",</span><br><span> dev->path.mmio.addr);</span><br><span>@@ -411,6 +418,10 @@</span><br><span> case DEVICE_PATH_SPI:</span><br><span> equal = (path1->spi.cs == path2->spi.cs);</span><br><span> break;</span><br><span style="color: hsl(120, 100%, 40%);">+ case DEVICE_PATH_USB:</span><br><span style="color: hsl(120, 100%, 40%);">+ equal = (path1->usb.port_type == path2->usb.port_type) &&</span><br><span style="color: hsl(120, 100%, 40%);">+ (path1->usb.port_id == path2->usb.port_id);</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span> case DEVICE_PATH_MMIO:</span><br><span> equal = (path1->mmio.addr == path2->mmio.addr);</span><br><span> break;</span><br><span>diff --git a/src/device/root_device.c b/src/device/root_device.c</span><br><span>index a19028d..b0b6712 100644</span><br><span>--- a/src/device/root_device.c</span><br><span>+++ b/src/device/root_device.c</span><br><span>@@ -72,6 +72,21 @@</span><br><span> printk(BIOS_SPEW, "%s for %s done\n", __func__, dev_path(bus));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void scan_usb_bus(struct device *bus)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct bus *link;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_SPEW, "%s for %s\n", __func__, dev_path(bus));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ scan_static_bus(bus);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Scan bridges in case this device is a hub */</span><br><span style="color: hsl(120, 100%, 40%);">+ for (link = bus->link_list; link; link = link->next)</span><br><span style="color: hsl(120, 100%, 40%);">+ scan_bridges(link);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printk(BIOS_SPEW, "%s for %s done\n", __func__, dev_path(bus));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void scan_generic_bus(struct device *bus)</span><br><span> {</span><br><span> struct device *child;</span><br><span>diff --git a/src/include/device/device.h b/src/include/device/device.h</span><br><span>index 744836d..f3afd60 100644</span><br><span>--- a/src/include/device/device.h</span><br><span>+++ b/src/include/device/device.h</span><br><span>@@ -27,6 +27,7 @@</span><br><span> struct smbus_bus_operations;</span><br><span> struct pnp_mode_ops;</span><br><span> struct spi_bus_operations;</span><br><span style="color: hsl(120, 100%, 40%);">+struct usb_bus_operations;</span><br><span> </span><br><span> /* Chip operations */</span><br><span> struct chip_operations {</span><br><span>@@ -276,6 +277,7 @@</span><br><span> void scan_generic_bus(struct device *bus);</span><br><span> void scan_static_bus(struct device *bus);</span><br><span> void scan_lpc_bus(struct device *bus);</span><br><span style="color: hsl(120, 100%, 40%);">+void scan_usb_bus(struct device *bus);</span><br><span> </span><br><span> #endif /* !defined(__ROMCC__) */</span><br><span> </span><br><span>diff --git a/src/include/device/path.h b/src/include/device/path.h</span><br><span>index eaa9cc7..067a507 100644</span><br><span>--- a/src/include/device/path.h</span><br><span>+++ b/src/include/device/path.h</span><br><span>@@ -15,6 +15,7 @@</span><br><span> DEVICE_PATH_IOAPIC,</span><br><span> DEVICE_PATH_GENERIC,</span><br><span> DEVICE_PATH_SPI,</span><br><span style="color: hsl(120, 100%, 40%);">+ DEVICE_PATH_USB,</span><br><span> DEVICE_PATH_MMIO,</span><br><span> </span><br><span> /*</span><br><span>@@ -37,6 +38,7 @@</span><br><span> "DEVICE_PATH_IOAPIC", \</span><br><span> "DEVICE_PATH_GENERIC", \</span><br><span> "DEVICE_PATH_SPI", \</span><br><span style="color: hsl(120, 100%, 40%);">+ "DEVICE_PATH_USB", \</span><br><span> "DEVICE_PATH_MMIO", \</span><br><span> }</span><br><span> </span><br><span>@@ -91,6 +93,11 @@</span><br><span> unsigned int subid;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct usb_path {</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int port_type;</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int port_id;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct mmio_path {</span><br><span> uintptr_t addr;</span><br><span> };</span><br><span>@@ -109,6 +116,7 @@</span><br><span> struct cpu_bus_path cpu_bus;</span><br><span> struct generic_path generic;</span><br><span> struct spi_path spi;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct usb_path usb;</span><br><span> struct mmio_path mmio;</span><br><span> };</span><br><span> };</span><br><span>diff --git a/util/sconfig/lex.yy.c_shipped b/util/sconfig/lex.yy.c_shipped</span><br><span>index cde6f9f..dbdd8e6 100644</span><br><span>--- a/util/sconfig/lex.yy.c_shipped</span><br><span>+++ b/util/sconfig/lex.yy.c_shipped</span><br><span>@@ -358,8 +358,8 @@</span><br><span> *yy_cp = '\0'; \</span><br><span> (yy_c_buf_p) = yy_cp;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define YY_NUM_RULES 35</span><br><span style="color: hsl(0, 100%, 40%);">-#define YY_END_OF_BUFFER 36</span><br><span style="color: hsl(120, 100%, 40%);">+#define YY_NUM_RULES 36</span><br><span style="color: hsl(120, 100%, 40%);">+#define YY_END_OF_BUFFER 37</span><br><span> /* This struct is not used in this scanner,</span><br><span> but its presence is necessary. */</span><br><span> struct yy_trans_info</span><br><span>@@ -367,23 +367,23 @@</span><br><span> flex_int32_t yy_verify;</span><br><span> flex_int32_t yy_nxt;</span><br><span> };</span><br><span style="color: hsl(0, 100%, 40%);">-static yyconst flex_int16_t yy_accept[136] =</span><br><span style="color: hsl(120, 100%, 40%);">+static yyconst flex_int16_t yy_accept[139] =</span><br><span> { 0,</span><br><span style="color: hsl(0, 100%, 40%);">- 0, 0, 36, 34, 1, 3, 34, 34, 34, 29,</span><br><span style="color: hsl(0, 100%, 40%);">- 29, 27, 30, 34, 30, 30, 30, 34, 34, 34,</span><br><span style="color: hsl(0, 100%, 40%);">- 34, 34, 34, 34, 34, 34, 1, 3, 34, 0,</span><br><span style="color: hsl(0, 100%, 40%);">- 34, 34, 0, 2, 29, 30, 34, 34, 34, 34,</span><br><span style="color: hsl(0, 100%, 40%);">- 30, 34, 34, 34, 34, 34, 34, 22, 34, 34,</span><br><span style="color: hsl(0, 100%, 40%);">- 34, 34, 7, 34, 34, 34, 34, 34, 33, 33,</span><br><span style="color: hsl(0, 100%, 40%);">- 34, 0, 28, 34, 34, 15, 34, 34, 21, 26,</span><br><span style="color: hsl(0, 100%, 40%);">- 34, 12, 34, 34, 20, 34, 34, 8, 9, 11,</span><br><span style="color: hsl(0, 100%, 40%);">- 34, 19, 34, 34, 0, 31, 4, 34, 34, 34,</span><br><span style="color: hsl(0, 100%, 40%);">- 34, 34, 34, 34, 18, 34, 34, 32, 32, 34,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 0, 37, 35, 1, 3, 35, 35, 35, 30,</span><br><span style="color: hsl(120, 100%, 40%);">+ 30, 28, 31, 35, 31, 31, 31, 35, 35, 35,</span><br><span style="color: hsl(120, 100%, 40%);">+ 35, 35, 35, 35, 35, 35, 35, 1, 3, 35,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 35, 35, 0, 2, 30, 31, 35, 35, 35,</span><br><span style="color: hsl(120, 100%, 40%);">+ 35, 31, 35, 35, 35, 35, 35, 35, 23, 35,</span><br><span style="color: hsl(120, 100%, 40%);">+ 35, 35, 35, 7, 35, 35, 35, 35, 35, 35,</span><br><span style="color: hsl(120, 100%, 40%);">+ 34, 34, 35, 0, 29, 35, 35, 15, 35, 35,</span><br><span style="color: hsl(120, 100%, 40%);">+ 22, 27, 35, 12, 35, 35, 21, 35, 35, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+ 9, 11, 35, 19, 35, 20, 35, 0, 32, 4,</span><br><span style="color: hsl(120, 100%, 40%);">+ 35, 35, 35, 35, 35, 35, 35, 18, 35, 35,</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- 34, 34, 34, 34, 34, 13, 34, 34, 34, 5,</span><br><span style="color: hsl(0, 100%, 40%);">- 16, 34, 34, 10, 34, 34, 34, 17, 24, 34,</span><br><span style="color: hsl(0, 100%, 40%);">- 34, 34, 34, 34, 6, 34, 34, 34, 34, 34,</span><br><span style="color: hsl(0, 100%, 40%);">- 23, 34, 14, 25, 0</span><br><span style="color: hsl(120, 100%, 40%);">+ 33, 33, 35, 35, 35, 35, 35, 35, 13, 35,</span><br><span style="color: hsl(120, 100%, 40%);">+ 35, 35, 5, 16, 35, 35, 10, 35, 35, 35,</span><br><span style="color: hsl(120, 100%, 40%);">+ 17, 25, 35, 35, 35, 35, 35, 6, 35, 35,</span><br><span style="color: hsl(120, 100%, 40%);">+ 35, 35, 35, 24, 35, 14, 26, 0</span><br><span> } ;</span><br><span> </span><br><span> static yyconst YY_CHAR yy_ec[256] =</span><br><span>@@ -426,106 +426,106 @@</span><br><span> 1, 1, 1, 1, 1, 1, 1, 1</span><br><span> } ;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static yyconst flex_uint16_t yy_base[143] =</span><br><span style="color: hsl(120, 100%, 40%);">+static yyconst flex_uint16_t yy_base[146] =</span><br><span> { 0,</span><br><span style="color: hsl(0, 100%, 40%);">- 0, 0, 205, 0, 202, 206, 200, 37, 41, 38,</span><br><span style="color: hsl(0, 100%, 40%);">- 165, 0, 44, 187, 54, 78, 60, 179, 45, 182,</span><br><span style="color: hsl(0, 100%, 40%);">- 171, 42, 47, 176, 41, 0, 194, 206, 77, 190,</span><br><span style="color: hsl(0, 100%, 40%);">- 87, 91, 191, 206, 0, 88, 104, 178, 167, 156,</span><br><span style="color: hsl(0, 100%, 40%);">- 93, 163, 158, 168, 159, 167, 161, 167, 152, 152,</span><br><span style="color: hsl(0, 100%, 40%);">- 156, 158, 0, 154, 148, 154, 151, 157, 0, 206,</span><br><span style="color: hsl(0, 100%, 40%);">- 101, 169, 0, 162, 142, 155, 145, 152, 0, 0,</span><br><span style="color: hsl(0, 100%, 40%);">- 147, 0, 146, 136, 0, 140, 135, 0, 0, 0,</span><br><span style="color: hsl(0, 100%, 40%);">- 138, 0, 129, 156, 155, 0, 0, 140, 139, 132,</span><br><span style="color: hsl(0, 100%, 40%);">- 124, 123, 129, 134, 0, 119, 113, 0, 206, 124,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 0, 207, 0, 204, 208, 202, 37, 41, 38,</span><br><span style="color: hsl(120, 100%, 40%);">+ 167, 0, 44, 189, 54, 78, 60, 181, 45, 184,</span><br><span style="color: hsl(120, 100%, 40%);">+ 173, 42, 47, 178, 41, 165, 0, 195, 208, 77,</span><br><span style="color: hsl(120, 100%, 40%);">+ 191, 87, 91, 192, 208, 0, 88, 104, 179, 168,</span><br><span style="color: hsl(120, 100%, 40%);">+ 157, 93, 164, 159, 169, 160, 168, 162, 168, 153,</span><br><span style="color: hsl(120, 100%, 40%);">+ 153, 157, 159, 0, 155, 149, 155, 152, 158, 157,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 208, 101, 169, 0, 162, 142, 155, 145, 152,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 0, 147, 0, 146, 136, 0, 140, 135, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 0, 138, 0, 129, 0, 156, 155, 0, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ 140, 139, 132, 124, 123, 129, 134, 0, 119, 113,</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- 128, 120, 122, 121, 126, 0, 110, 110, 107, 0,</span><br><span style="color: hsl(0, 100%, 40%);">- 0, 109, 93, 104, 98, 84, 84, 0, 0, 89,</span><br><span style="color: hsl(0, 100%, 40%);">- 77, 87, 71, 66, 0, 64, 62, 50, 47, 33,</span><br><span style="color: hsl(0, 100%, 40%);">- 0, 28, 0, 0, 206, 40, 129, 131, 133, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 137, 139</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 208, 124, 128, 120, 122, 121, 126, 0, 110,</span><br><span style="color: hsl(120, 100%, 40%);">+ 110, 107, 0, 0, 109, 93, 104, 98, 84, 84,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 0, 89, 77, 87, 71, 66, 0, 64, 62,</span><br><span style="color: hsl(120, 100%, 40%);">+ 50, 47, 33, 0, 28, 0, 0, 208, 40, 129,</span><br><span style="color: hsl(120, 100%, 40%);">+ 131, 133, 135, 137, 139</span><br><span> } ;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static yyconst flex_int16_t yy_def[143] =</span><br><span style="color: hsl(120, 100%, 40%);">+static yyconst flex_int16_t yy_def[146] =</span><br><span> { 0,</span><br><span style="color: hsl(0, 100%, 40%);">- 135, 1, 135, 136, 135, 135, 136, 137, 138, 136,</span><br><span style="color: hsl(0, 100%, 40%);">- 10, 136, 10, 136, 10, 10, 10, 136, 136, 136,</span><br><span style="color: hsl(0, 100%, 40%);">- 136, 136, 136, 136, 136, 136, 135, 135, 137, 139,</span><br><span style="color: hsl(0, 100%, 40%);">- 140, 138, 141, 135, 10, 10, 10, 136, 136, 136,</span><br><span style="color: hsl(0, 100%, 40%);">- 10, 136, 136, 136, 136, 136, 136, 136, 136, 136,</span><br><span style="color: hsl(0, 100%, 40%);">- 136, 136, 136, 136, 136, 136, 136, 136, 136, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 140, 142, 37, 136, 136, 136, 136, 136, 136, 136,</span><br><span style="color: hsl(0, 100%, 40%);">- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,</span><br><span style="color: hsl(0, 100%, 40%);">- 136, 136, 136, 136, 135, 136, 136, 136, 136, 136,</span><br><span style="color: hsl(0, 100%, 40%);">- 136, 136, 136, 136, 136, 136, 136, 136, 135, 136,</span><br><span style="color: hsl(120, 100%, 40%);">+ 138, 1, 138, 139, 138, 138, 139, 140, 141, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 10, 139, 10, 139, 10, 10, 10, 139, 139, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 139, 139, 139, 139, 139, 139, 138, 138, 140,</span><br><span style="color: hsl(120, 100%, 40%);">+ 142, 143, 141, 144, 138, 10, 10, 10, 139, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 10, 139, 139, 139, 139, 139, 139, 139, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 138, 143, 145, 38, 139, 139, 139, 139, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 139, 139, 139, 139, 139, 139, 138, 139, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,</span><br><span style="color: hsl(0, 100%, 40%);">- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,</span><br><span style="color: hsl(0, 100%, 40%);">- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,</span><br><span style="color: hsl(0, 100%, 40%);">- 136, 136, 136, 136, 0, 135, 135, 135, 135, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 135, 135</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 138, 139, 139, 139, 139, 139, 139, 139, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 139, 139, 139, 139, 139, 139, 0, 138, 138,</span><br><span style="color: hsl(120, 100%, 40%);">+ 138, 138, 138, 138, 138</span><br><span> } ;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static yyconst flex_uint16_t yy_nxt[245] =</span><br><span style="color: hsl(120, 100%, 40%);">+static yyconst flex_uint16_t yy_nxt[247] =</span><br><span> { 0,</span><br><span> 4, 5, 6, 7, 8, 9, 10, 11, 10, 12,</span><br><span> 13, 13, 14, 4, 4, 4, 13, 13, 15, 16,</span><br><span> 17, 13, 18, 4, 19, 20, 21, 4, 22, 23,</span><br><span style="color: hsl(0, 100%, 40%);">- 4, 24, 25, 4, 4, 4, 4, 4, 30, 30,</span><br><span style="color: hsl(0, 100%, 40%);">- 26, 31, 33, 34, 35, 35, 35, 134, 36, 36,</span><br><span style="color: hsl(0, 100%, 40%);">- 36, 36, 36, 46, 36, 36, 36, 36, 36, 36,</span><br><span style="color: hsl(0, 100%, 40%);">- 36, 36, 36, 52, 133, 54, 36, 36, 36, 53,</span><br><span style="color: hsl(0, 100%, 40%);">- 57, 132, 47, 48, 55, 58, 49, 39, 30, 30,</span><br><span style="color: hsl(0, 100%, 40%);">- 131, 59, 130, 40, 36, 36, 36, 44, 62, 62,</span><br><span style="color: hsl(0, 100%, 40%);">- 129, 26, 33, 34, 36, 36, 36, 128, 41, 36,</span><br><span style="color: hsl(120, 100%, 40%);">+ 4, 24, 25, 4, 26, 4, 4, 4, 31, 31,</span><br><span style="color: hsl(120, 100%, 40%);">+ 27, 32, 34, 35, 36, 36, 36, 137, 37, 37,</span><br><span style="color: hsl(120, 100%, 40%);">+ 37, 37, 37, 47, 37, 37, 37, 37, 37, 37,</span><br><span style="color: hsl(120, 100%, 40%);">+ 37, 37, 37, 53, 136, 55, 37, 37, 37, 54,</span><br><span style="color: hsl(120, 100%, 40%);">+ 58, 135, 48, 49, 56, 59, 50, 40, 31, 31,</span><br><span style="color: hsl(120, 100%, 40%);">+ 134, 61, 133, 41, 37, 37, 37, 45, 64, 64,</span><br><span style="color: hsl(120, 100%, 40%);">+ 132, 27, 34, 35, 37, 37, 37, 131, 42, 37,</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- 36, 36, 62, 62, 127, 84, 42, 126, 125, 43,</span><br><span style="color: hsl(0, 100%, 40%);">- 63, 63, 63, 124, 63, 63, 123, 122, 121, 120,</span><br><span style="color: hsl(0, 100%, 40%);">- 63, 63, 63, 63, 63, 63, 119, 118, 67, 29,</span><br><span style="color: hsl(0, 100%, 40%);">- 29, 32, 32, 30, 30, 61, 61, 33, 33, 62,</span><br><span style="color: hsl(0, 100%, 40%);">- 62, 117, 116, 115, 114, 113, 112, 111, 110, 109,</span><br><span style="color: hsl(0, 100%, 40%);">- 108, 107, 106, 105, 104, 103, 102, 101, 100, 99,</span><br><span style="color: hsl(0, 100%, 40%);">- 98, 97, 96, 95, 94, 93, 92, 91, 90, 89,</span><br><span style="color: hsl(0, 100%, 40%);">- 88, 87, 86, 85, 83, 82, 81, 80, 79, 78,</span><br><span style="color: hsl(0, 100%, 40%);">- 77, 76, 75, 74, 73, 72, 71, 70, 69, 68,</span><br><span style="color: hsl(0, 100%, 40%);">- 66, 65, 64, 34, 60, 27, 56, 51, 50, 45,</span><br><span style="color: hsl(120, 100%, 40%);">+ 37, 37, 64, 64, 130, 87, 43, 129, 128, 44,</span><br><span style="color: hsl(120, 100%, 40%);">+ 65, 65, 65, 127, 65, 65, 126, 125, 124, 123,</span><br><span style="color: hsl(120, 100%, 40%);">+ 65, 65, 65, 65, 65, 65, 122, 121, 69, 30,</span><br><span style="color: hsl(120, 100%, 40%);">+ 30, 33, 33, 31, 31, 63, 63, 34, 34, 64,</span><br><span style="color: hsl(120, 100%, 40%);">+ 64, 120, 119, 118, 117, 116, 115, 114, 113, 112,</span><br><span style="color: hsl(120, 100%, 40%);">+ 111, 110, 109, 108, 107, 106, 105, 104, 103, 102,</span><br><span style="color: hsl(120, 100%, 40%);">+ 101, 100, 99, 98, 97, 96, 95, 94, 93, 92,</span><br><span style="color: hsl(120, 100%, 40%);">+ 91, 90, 89, 88, 86, 85, 84, 83, 82, 81,</span><br><span style="color: hsl(120, 100%, 40%);">+ 80, 79, 78, 77, 76, 75, 74, 73, 72, 71,</span><br><span style="color: hsl(120, 100%, 40%);">+ 70, 68, 67, 66, 35, 62, 28, 60, 57, 52,</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- 38, 37, 28, 27, 135, 3, 135, 135, 135, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 135, 135, 135, 135</span><br><span style="color: hsl(120, 100%, 40%);">+ 51, 46, 39, 38, 29, 28, 138, 3, 138, 138,</span><br><span style="color: hsl(120, 100%, 40%);">+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,</span><br><span style="color: hsl(120, 100%, 40%);">+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,</span><br><span style="color: hsl(120, 100%, 40%);">+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,</span><br><span style="color: hsl(120, 100%, 40%);">+ 138, 138, 138, 138, 138, 138</span><br><span> } ;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static yyconst flex_int16_t yy_chk[245] =</span><br><span style="color: hsl(120, 100%, 40%);">+static yyconst flex_int16_t yy_chk[247] =</span><br><span> { 0,</span><br><span> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</span><br><span> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</span><br><span> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</span><br><span> 1, 1, 1, 1, 1, 1, 1, 1, 8, 8,</span><br><span style="color: hsl(0, 100%, 40%);">- 136, 8, 9, 9, 10, 10, 10, 132, 10, 10,</span><br><span style="color: hsl(120, 100%, 40%);">+ 139, 8, 9, 9, 10, 10, 10, 135, 10, 10,</span><br><span> 13, 13, 13, 19, 10, 10, 10, 10, 10, 10,</span><br><span style="color: hsl(0, 100%, 40%);">- 15, 15, 15, 22, 130, 23, 17, 17, 17, 22,</span><br><span style="color: hsl(0, 100%, 40%);">- 25, 129, 19, 19, 23, 25, 19, 15, 29, 29,</span><br><span style="color: hsl(0, 100%, 40%);">- 128, 29, 127, 15, 16, 16, 16, 17, 31, 31,</span><br><span style="color: hsl(0, 100%, 40%);">- 126, 31, 32, 32, 36, 36, 36, 124, 16, 41,</span><br><span style="color: hsl(120, 100%, 40%);">+ 15, 15, 15, 22, 133, 23, 17, 17, 17, 22,</span><br><span style="color: hsl(120, 100%, 40%);">+ 25, 132, 19, 19, 23, 25, 19, 15, 30, 30,</span><br><span style="color: hsl(120, 100%, 40%);">+ 131, 30, 130, 15, 16, 16, 16, 17, 32, 32,</span><br><span style="color: hsl(120, 100%, 40%);">+ 129, 32, 33, 33, 37, 37, 37, 127, 16, 42,</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- 41, 41, 61, 61, 123, 61, 16, 122, 121, 16,</span><br><span style="color: hsl(0, 100%, 40%);">- 37, 37, 37, 120, 37, 37, 117, 116, 115, 114,</span><br><span style="color: hsl(0, 100%, 40%);">- 37, 37, 37, 37, 37, 37, 113, 112, 41, 137,</span><br><span style="color: hsl(0, 100%, 40%);">- 137, 138, 138, 139, 139, 140, 140, 141, 141, 142,</span><br><span style="color: hsl(0, 100%, 40%);">- 142, 109, 108, 107, 105, 104, 103, 102, 101, 100,</span><br><span style="color: hsl(0, 100%, 40%);">- 97, 96, 94, 93, 92, 91, 90, 89, 88, 85,</span><br><span style="color: hsl(0, 100%, 40%);">- 84, 83, 81, 77, 76, 74, 73, 71, 68, 67,</span><br><span style="color: hsl(0, 100%, 40%);">- 66, 65, 64, 62, 58, 57, 56, 55, 54, 52,</span><br><span style="color: hsl(0, 100%, 40%);">- 51, 50, 49, 48, 47, 46, 45, 44, 43, 42,</span><br><span style="color: hsl(0, 100%, 40%);">- 40, 39, 38, 33, 30, 27, 24, 21, 20, 18,</span><br><span style="color: hsl(120, 100%, 40%);">+ 42, 42, 63, 63, 126, 63, 16, 125, 124, 16,</span><br><span style="color: hsl(120, 100%, 40%);">+ 38, 38, 38, 123, 38, 38, 120, 119, 118, 117,</span><br><span style="color: hsl(120, 100%, 40%);">+ 38, 38, 38, 38, 38, 38, 116, 115, 42, 140,</span><br><span style="color: hsl(120, 100%, 40%);">+ 140, 141, 141, 142, 142, 143, 143, 144, 144, 145,</span><br><span style="color: hsl(120, 100%, 40%);">+ 145, 112, 111, 110, 108, 107, 106, 105, 104, 103,</span><br><span style="color: hsl(120, 100%, 40%);">+ 100, 99, 97, 96, 95, 94, 93, 92, 91, 88,</span><br><span style="color: hsl(120, 100%, 40%);">+ 87, 85, 83, 79, 78, 76, 75, 73, 70, 69,</span><br><span style="color: hsl(120, 100%, 40%);">+ 68, 67, 66, 64, 60, 59, 58, 57, 56, 55,</span><br><span style="color: hsl(120, 100%, 40%);">+ 53, 52, 51, 50, 49, 48, 47, 46, 45, 44,</span><br><span style="color: hsl(120, 100%, 40%);">+ 43, 41, 40, 39, 34, 31, 28, 26, 24, 21,</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- 14, 11, 7, 5, 3, 135, 135, 135, 135, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,</span><br><span style="color: hsl(0, 100%, 40%);">- 135, 135, 135, 135</span><br><span style="color: hsl(120, 100%, 40%);">+ 20, 18, 14, 11, 7, 5, 3, 138, 138, 138,</span><br><span style="color: hsl(120, 100%, 40%);">+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,</span><br><span style="color: hsl(120, 100%, 40%);">+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,</span><br><span style="color: hsl(120, 100%, 40%);">+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,</span><br><span style="color: hsl(120, 100%, 40%);">+ 138, 138, 138, 138, 138, 138</span><br><span> } ;</span><br><span> </span><br><span> static yy_state_type yy_last_accepting_state;</span><br><span>@@ -804,13 +804,13 @@</span><br><span> while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )</span><br><span> {</span><br><span> yy_current_state = (int) yy_def[yy_current_state];</span><br><span style="color: hsl(0, 100%, 40%);">- if ( yy_current_state >= 136 )</span><br><span style="color: hsl(120, 100%, 40%);">+ if ( yy_current_state >= 139 )</span><br><span> yy_c = yy_meta[(unsigned int) yy_c];</span><br><span> }</span><br><span> yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];</span><br><span> ++yy_cp;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- while ( yy_base[yy_current_state] != 206 );</span><br><span style="color: hsl(120, 100%, 40%);">+ while ( yy_base[yy_current_state] != 208 );</span><br><span> </span><br><span> yy_find_action:</span><br><span> yy_act = yy_accept[yy_current_state];</span><br><span>@@ -914,39 +914,39 @@</span><br><span> YY_BREAK</span><br><span> case 20:</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{yylval.number=IRQ; return(RESOURCE);}</span><br><span style="color: hsl(120, 100%, 40%);">+{yylval.number=USB; return(BUS);}</span><br><span> YY_BREAK</span><br><span> case 21:</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{yylval.number=DRQ; return(RESOURCE);}</span><br><span style="color: hsl(120, 100%, 40%);">+{yylval.number=IRQ; return(RESOURCE);}</span><br><span> YY_BREAK</span><br><span> case 22:</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{yylval.number=IO; return(RESOURCE);}</span><br><span style="color: hsl(120, 100%, 40%);">+{yylval.number=DRQ; return(RESOURCE);}</span><br><span> YY_BREAK</span><br><span> case 23:</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{return(IOAPIC_IRQ);}</span><br><span style="color: hsl(120, 100%, 40%);">+{yylval.number=IO; return(RESOURCE);}</span><br><span> YY_BREAK</span><br><span> case 24:</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{return(INHERIT);}</span><br><span style="color: hsl(120, 100%, 40%);">+{return(IOAPIC_IRQ);}</span><br><span> YY_BREAK</span><br><span> case 25:</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{return(SUBSYSTEMID);}</span><br><span style="color: hsl(120, 100%, 40%);">+{return(INHERIT);}</span><br><span> YY_BREAK</span><br><span> case 26:</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{return(END);}</span><br><span style="color: hsl(120, 100%, 40%);">+{return(SUBSYSTEMID);}</span><br><span> YY_BREAK</span><br><span> case 27:</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{return(EQUALS);}</span><br><span style="color: hsl(120, 100%, 40%);">+{return(END);}</span><br><span> YY_BREAK</span><br><span> case 28:</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}</span><br><span style="color: hsl(120, 100%, 40%);">+{return(EQUALS);}</span><br><span> YY_BREAK</span><br><span> case 29:</span><br><span> YY_RULE_SETUP</span><br><span>@@ -958,12 +958,11 @@</span><br><span> YY_BREAK</span><br><span> case 31:</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(PCIINT);}</span><br><span style="color: hsl(120, 100%, 40%);">+{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}</span><br><span> YY_BREAK</span><br><span> case 32:</span><br><span style="color: hsl(0, 100%, 40%);">-/* rule 32 can match eol */</span><br><span> YY_RULE_SETUP</span><br><span style="color: hsl(0, 100%, 40%);">-{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}</span><br><span style="color: hsl(120, 100%, 40%);">+{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(PCIINT);}</span><br><span> YY_BREAK</span><br><span> case 33:</span><br><span> /* rule 33 can match eol */</span><br><span>@@ -971,10 +970,15 @@</span><br><span> {yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}</span><br><span> YY_BREAK</span><br><span> case 34:</span><br><span style="color: hsl(120, 100%, 40%);">+/* rule 34 can match eol */</span><br><span style="color: hsl(120, 100%, 40%);">+YY_RULE_SETUP</span><br><span style="color: hsl(120, 100%, 40%);">+{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}</span><br><span style="color: hsl(120, 100%, 40%);">+ YY_BREAK</span><br><span style="color: hsl(120, 100%, 40%);">+case 35:</span><br><span> YY_RULE_SETUP</span><br><span> {yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(STRING);}</span><br><span> YY_BREAK</span><br><span style="color: hsl(0, 100%, 40%);">-case 35:</span><br><span style="color: hsl(120, 100%, 40%);">+case 36:</span><br><span> YY_RULE_SETUP</span><br><span> ECHO;</span><br><span> YY_BREAK</span><br><span>@@ -1270,7 +1274,7 @@</span><br><span> while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )</span><br><span> {</span><br><span> yy_current_state = (int) yy_def[yy_current_state];</span><br><span style="color: hsl(0, 100%, 40%);">- if ( yy_current_state >= 136 )</span><br><span style="color: hsl(120, 100%, 40%);">+ if ( yy_current_state >= 139 )</span><br><span> yy_c = yy_meta[(unsigned int) yy_c];</span><br><span> }</span><br><span> yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];</span><br><span>@@ -1298,11 +1302,11 @@</span><br><span> while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )</span><br><span> {</span><br><span> yy_current_state = (int) yy_def[yy_current_state];</span><br><span style="color: hsl(0, 100%, 40%);">- if ( yy_current_state >= 136 )</span><br><span style="color: hsl(120, 100%, 40%);">+ if ( yy_current_state >= 139 )</span><br><span> yy_c = yy_meta[(unsigned int) yy_c];</span><br><span> }</span><br><span> yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];</span><br><span style="color: hsl(0, 100%, 40%);">- yy_is_jam = (yy_current_state == 135);</span><br><span style="color: hsl(120, 100%, 40%);">+ yy_is_jam = (yy_current_state == 138);</span><br><span> </span><br><span> return yy_is_jam ? 0 : yy_current_state;</span><br><span> }</span><br><span>diff --git a/util/sconfig/main.c b/util/sconfig/main.c</span><br><span>index 8f4d7d9..2e34d85 100644</span><br><span>--- a/util/sconfig/main.c</span><br><span>+++ b/util/sconfig/main.c</span><br><span>@@ -290,6 +290,10 @@</span><br><span> new_d->path = ".type=DEVICE_PATH_SPI,{.spi={ .cs = 0x%x }}";</span><br><span> break;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ case USB:</span><br><span style="color: hsl(120, 100%, 40%);">+ new_d->path = ".type=DEVICE_PATH_USB,{.usb={ .port_type = %d, .port_id = %d }}";</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> case MMIO:</span><br><span> new_d->path = ".type=DEVICE_PATH_MMIO,{.mmio={ .addr = 0x%x }}";</span><br><span> break;</span><br><span>diff --git a/util/sconfig/sconfig.l b/util/sconfig/sconfig.l</span><br><span>index 484843d..3af70f8 100755</span><br><span>--- a/util/sconfig/sconfig.l</span><br><span>+++ b/util/sconfig/sconfig.l</span><br><span>@@ -40,6 +40,7 @@</span><br><span> generic {yylval.number=GENERIC; return(BUS);}</span><br><span> mmio {yylval.number=MMIO; return(BUS);}</span><br><span> spi {yylval.number=SPI; return(BUS);}</span><br><span style="color: hsl(120, 100%, 40%);">+usb {yylval.number=USB; return(BUS);}</span><br><span> irq {yylval.number=IRQ; return(RESOURCE);}</span><br><span> drq {yylval.number=DRQ; return(RESOURCE);}</span><br><span> io {yylval.number=IO; return(RESOURCE);}</span><br><span>diff --git a/util/sconfig/sconfig.tab.c_shipped b/util/sconfig/sconfig.tab.c_shipped</span><br><span>index 4c8b8ff..1832f35 100644</span><br><span>--- a/util/sconfig/sconfig.tab.c_shipped</span><br><span>+++ b/util/sconfig/sconfig.tab.c_shipped</span><br><span>@@ -151,7 +151,8 @@</span><br><span> PCIINT = 283,</span><br><span> GENERIC = 284,</span><br><span> SPI = 285,</span><br><span style="color: hsl(0, 100%, 40%);">- MMIO = 286</span><br><span style="color: hsl(120, 100%, 40%);">+ USB = 286,</span><br><span style="color: hsl(120, 100%, 40%);">+ MMIO = 287</span><br><span> };</span><br><span> #endif</span><br><span> </span><br><span>@@ -428,7 +429,7 @@</span><br><span> #define YYLAST 39</span><br><span> </span><br><span> /* YYNTOKENS -- Number of terminals. */</span><br><span style="color: hsl(0, 100%, 40%);">-#define YYNTOKENS 32</span><br><span style="color: hsl(120, 100%, 40%);">+#define YYNTOKENS 33</span><br><span> /* YYNNTS -- Number of nonterminals. */</span><br><span> #define YYNNTS 13</span><br><span> /* YYNRULES -- Number of rules. */</span><br><span>@@ -439,7 +440,7 @@</span><br><span> /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned</span><br><span> by yylex, with out-of-bounds checking. */</span><br><span> #define YYUNDEFTOK 2</span><br><span style="color: hsl(0, 100%, 40%);">-#define YYMAXUTOK 286</span><br><span style="color: hsl(120, 100%, 40%);">+#define YYMAXUTOK 287</span><br><span> </span><br><span> #define YYTRANSLATE(YYX) \</span><br><span> ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)</span><br><span>@@ -476,7 +477,7 @@</span><br><span> 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,</span><br><span> 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,</span><br><span> 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,</span><br><span style="color: hsl(0, 100%, 40%);">- 25, 26, 27, 28, 29, 30, 31</span><br><span style="color: hsl(120, 100%, 40%);">+ 25, 26, 27, 28, 29, 30, 31, 32</span><br><span> };</span><br><span> </span><br><span> #if YYDEBUG</span><br><span>@@ -498,7 +499,7 @@</span><br><span> "BUS", "RESOURCE", "END", "EQUALS", "HEX", "STRING", "PCI", "PNP", "I2C",</span><br><span> "APIC", "CPU_CLUSTER", "CPU", "DOMAIN", "IRQ", "DRQ", "IO", "NUMBER",</span><br><span> "SUBSYSTEMID", "INHERIT", "IOAPIC_IRQ", "IOAPIC", "PCIINT", "GENERIC",</span><br><span style="color: hsl(0, 100%, 40%);">- "SPI", "MMIO", "$accept", "devtree", "$@1", "chipchildren",</span><br><span style="color: hsl(120, 100%, 40%);">+ "SPI", "USB", "MMIO", "$accept", "devtree", "$@1", "chipchildren",</span><br><span> "devicechildren", "chip", "@2", "device", "@3", "resource", "registers",</span><br><span> "subsystemid", "ioapic_irq", YY_NULLPTR</span><br><span> };</span><br><span>@@ -512,7 +513,7 @@</span><br><span> 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,</span><br><span> 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,</span><br><span> 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,</span><br><span style="color: hsl(0, 100%, 40%);">- 285, 286</span><br><span style="color: hsl(120, 100%, 40%);">+ 285, 286, 287</span><br><span> };</span><br><span> # endif</span><br><span> </span><br><span>@@ -586,19 +587,19 @@</span><br><span> symbol of state STATE-NUM. */</span><br><span> static const yytype_uint8 yystos[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- 0, 33, 34, 0, 3, 37, 12, 38, 35, 4,</span><br><span style="color: hsl(0, 100%, 40%);">- 5, 9, 37, 39, 42, 7, 12, 23, 10, 6,</span><br><span style="color: hsl(0, 100%, 40%);">- 12, 40, 36, 8, 9, 24, 26, 37, 39, 41,</span><br><span style="color: hsl(0, 100%, 40%);">- 43, 44, 23, 23, 23, 10, 23, 28, 23, 25,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 34, 35, 0, 3, 38, 12, 39, 36, 4,</span><br><span style="color: hsl(120, 100%, 40%);">+ 5, 9, 38, 40, 43, 7, 12, 23, 10, 6,</span><br><span style="color: hsl(120, 100%, 40%);">+ 12, 41, 37, 8, 9, 24, 26, 38, 40, 42,</span><br><span style="color: hsl(120, 100%, 40%);">+ 44, 45, 23, 23, 23, 10, 23, 28, 23, 25,</span><br><span> 23</span><br><span> };</span><br><span> </span><br><span> /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */</span><br><span> static const yytype_uint8 yyr1[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- 0, 32, 34, 33, 35, 35, 35, 35, 36, 36,</span><br><span style="color: hsl(0, 100%, 40%);">- 36, 36, 36, 36, 38, 37, 40, 39, 41, 42,</span><br><span style="color: hsl(0, 100%, 40%);">- 43, 43, 44</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 33, 35, 34, 36, 36, 36, 36, 37, 37,</span><br><span style="color: hsl(120, 100%, 40%);">+ 37, 37, 37, 37, 39, 38, 41, 40, 42, 43,</span><br><span style="color: hsl(120, 100%, 40%);">+ 44, 44, 45</span><br><span> };</span><br><span> </span><br><span> /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */</span><br><span>diff --git a/util/sconfig/sconfig.tab.h_shipped b/util/sconfig/sconfig.tab.h_shipped</span><br><span>index 3670c08..89b936a 100644</span><br><span>--- a/util/sconfig/sconfig.tab.h_shipped</span><br><span>+++ b/util/sconfig/sconfig.tab.h_shipped</span><br><span>@@ -73,7 +73,8 @@</span><br><span> PCIINT = 283,</span><br><span> GENERIC = 284,</span><br><span> SPI = 285,</span><br><span style="color: hsl(0, 100%, 40%);">- MMIO = 286</span><br><span style="color: hsl(120, 100%, 40%);">+ USB = 286,</span><br><span style="color: hsl(120, 100%, 40%);">+ MMIO = 287</span><br><span> };</span><br><span> #endif</span><br><span> </span><br><span>diff --git a/util/sconfig/sconfig.y b/util/sconfig/sconfig.y</span><br><span>index 05fb751..5cecbba 100755</span><br><span>--- a/util/sconfig/sconfig.y</span><br><span>+++ b/util/sconfig/sconfig.y</span><br><span>@@ -29,7 +29,7 @@</span><br><span> int number;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-%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 MMIO</span><br><span style="color: hsl(120, 100%, 40%);">+%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> devtree: { cur_parent = cur_bus = head; } chip { postprocess_devtree(); } ;</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/26169">change 26169</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/26169"/><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: I64e6eba503cdab49be393465b535e139a8c90ef4 </div>
<div style="display:none"> Gerrit-Change-Number: 26169 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Duncan Laurie <dlaurie@chromium.org> </div>