devicetree: Add USB device type
This commit adds support for describing USB ports in devicetree.cb.
It allows a USB port location to be described in the tree with
configuration information, and ACPI code to be generated that
provides this information to the OS.
A new scan_usb_bus() is added that will scan bridges for devices so
a tree of ports and hubs can be created.
The device address is computed with a 'port type' and a 'port id'
which is flexible for SOC to handle depending on their specific USB
setup and allows USB2 and USB3 ports to be described separately.
For example a board may have devices on two ports, one with a USB2
device and one with a USB3 device, both of which are connected to an
xHCI controller with a root hub:
xHCI
|
RootHub
| |
USB2[0] USB3[2]
device pci 14.0 on
chip drivers/usb/acpi
register "name" = ""Root Hub""
device usb 0.0 on
chip drivers/usb/acpi
register "name" = ""USB 2.0 Port 0""
device usb 2.0 on end
end
chip drivers/usb/acpi
register "name" = ""USB 3.0 Port 2""
device usb 3.2 on end
end
end
end
end
Change-Id: I64e6eba503cdab49be393465b535e139a8c90ef4
Signed-off-by: Duncan Laurie <dlaurie@google.com>
Reviewed-on: https://review.coreboot.org/26169
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
diff --git a/util/sconfig/sconfig.tab.c_shipped b/util/sconfig/sconfig.tab.c_shipped
index 4c8b8ff..1832f35 100644
--- a/util/sconfig/sconfig.tab.c_shipped
+++ b/util/sconfig/sconfig.tab.c_shipped
@@ -151,7 +151,8 @@
PCIINT = 283,
GENERIC = 284,
SPI = 285,
- MMIO = 286
+ USB = 286,
+ MMIO = 287
};
#endif
@@ -428,7 +429,7 @@
#define YYLAST 39
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 32
+#define YYNTOKENS 33
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 13
/* YYNRULES -- Number of rules. */
@@ -439,7 +440,7 @@
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 286
+#define YYMAXUTOK 287
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -476,7 +477,7 @@
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31
+ 25, 26, 27, 28, 29, 30, 31, 32
};
#if YYDEBUG
@@ -498,7 +499,7 @@
"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", "$accept", "devtree", "$@1", "chipchildren",
+ "SPI", "USB", "MMIO", "$accept", "devtree", "$@1", "chipchildren",
"devicechildren", "chip", "@2", "device", "@3", "resource", "registers",
"subsystemid", "ioapic_irq", YY_NULLPTR
};
@@ -512,7 +513,7 @@
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286
+ 285, 286, 287
};
# endif
@@ -586,19 +587,19 @@
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 33, 34, 0, 3, 37, 12, 38, 35, 4,
- 5, 9, 37, 39, 42, 7, 12, 23, 10, 6,
- 12, 40, 36, 8, 9, 24, 26, 37, 39, 41,
- 43, 44, 23, 23, 23, 10, 23, 28, 23, 25,
+ 0, 34, 35, 0, 3, 38, 12, 39, 36, 4,
+ 5, 9, 38, 40, 43, 7, 12, 23, 10, 6,
+ 12, 41, 37, 8, 9, 24, 26, 38, 40, 42,
+ 44, 45, 23, 23, 23, 10, 23, 28, 23, 25,
23
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 32, 34, 33, 35, 35, 35, 35, 36, 36,
- 36, 36, 36, 36, 38, 37, 40, 39, 41, 42,
- 43, 43, 44
+ 0, 33, 35, 34, 36, 36, 36, 36, 37, 37,
+ 37, 37, 37, 37, 39, 38, 41, 40, 42, 43,
+ 44, 44, 45
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */