acrn-hypervisor/misc/config_tools/board_inspector
Junjie Mao 0aa899271d board_inspector/extractors: extract device information
This patch extracts information on devices and put them under the
`/acrn-config/devices` node in the board XML.

The generated XML looks like the following:

  <devices>
    <bus type="system">
      <acpi_object>\_SB_</acpi_object>
      <bus id="PNP0A08" type="pci" address="0x0" description="...">
        <vendor>0x8086</vendor>
        <identifier>0x591f</identifier>
        <subsystem_vendor>0x1028</subsystem_vendor>
        <subsystem_identifier>0x07a1</subsystem_identifier>
        <class>0x060000</class>
        <acpi_object>\_SB_.PCI0</acpi_object>
        <resource type="bus_number" min="0x0" max="0x3e" len="0x3f"/>
        <resource type="io_port" min="0x0" max="0xcf7" len="0xcf8"/>
        <resource type="io_port" min="0xcf8" max="0xcf8" len="0x8"/>
        <resource type="io_port" min="0xd00" max="0xffff" len="0xf300"/>
        <resource type="memory" min="0x10000" max="0x1ffff" len="0x0"/>
        <resource type="memory" min="0xa0000" max="0xbffff" len="0x20000"/>
        <resource type="memory" min="0xc0000" max="0xc3fff" len="0x4000"/>
        <resource type="memory" min="0xc4000" max="0xc7fff" len="0x4000"/>
        ...
        <capability id="vendor_specific"/>
        <device address="0x1"> ... </device>
        ...
      <bus>
    <bus>
    <device> ... <device>
  <devices>

The hierarchy of devices are based on the hierarchy of device objects in
the ACPI namespace (which is established by interpreting the ACPI DSDT and
SSDT tables). Typically most device objects are under the predefined
`_SB_` (i.e. System Bus) object under which an object representing the PCI
root complex (`\_SB_.PCI0` in the example above) can be found. The PCI
devices attached to bus 0 are listed as children of the PCI root complex
node.

For each bus or device, the board inspector tries best to parse the
information from both ACPI device objects and PCI configuration space to
extract the following:

- the model (via `_HID` object and PCI vendor ID, device ID and class code),
- assigned resources (via `_CRS` object and PCI BARs),
- capabilities (via the PCI capability list)

v1 -> v2:
 - Fix references to undeclared modules or variables.
 - Make the ACPI extractor advanced and not enabled by default.
 - Extract the secondary I/O and memory-mapped I/O addresses of bridges.

Tracked-On: #5922
Signed-off-by: Junjie Mao <junjie.mao@intel.com>
2021-05-16 19:02:00 +08:00
..
acpiparser board_inspector/acpiparser: add DSDT/SSDT parser 2021-05-16 19:02:00 +08:00
cpuparser board_inspector/cpuparser: add CPUID parsers 2021-05-16 19:02:00 +08:00
extractors board_inspector/extractors: extract device information 2021-05-16 19:02:00 +08:00
legacy board_inspector/legacy: fix a copy destination error 2021-05-16 19:02:00 +08:00
lib board_inspector/acpiparser: add DSDT/SSDT parser 2021-05-16 19:02:00 +08:00
memmapparser board_inspector/memmapparser: add parser of e820 memory maps 2021-05-16 19:02:00 +08:00
pcieparser board_inspector/extractors: extract device information 2021-05-16 19:02:00 +08:00
smbiosparser board_inspector/smbiosparser: add SMBIOS table parsers 2021-05-16 19:02:00 +08:00
cli.py board_inspector/extractors: framework to support extractors 2021-05-16 19:02:00 +08:00
README board-inspector: reorganize the scripts 2021-05-16 19:02:00 +08:00

board_parser.py will collect all board related info and then generate a board info file for acrn-config host tool usage.

usage: python3 run.py <board_name> [--out board_info_file]

board_name : the name of board that run ACRN hypervisor, like apl-up2/nuc7i7dnb. It will be used as name of the board configurations folder which created by acrn-config host tool.
board_info_file : (optional) the name of board info file. if it is not specified, a name of <board_name>.xml will be generated under the current working directory by default.

Please run this script under native Linux environment with root privilege.

OS requirement:
	Release:	Ubuntu 18.04+ or ClearLinux 30210+
	Tools:		cpuid, rdmsr, lspci, dmidecode
	kernel cmdline: "idle=nomwait intel_idle.max_cstate=0 intel_pstate=disable"