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