From 0e273e996c938da586e5660cb7b3fe04e1e4de9a Mon Sep 17 00:00:00 2001 From: Wei Liu Date: Mon, 2 Dec 2019 09:50:33 +0800 Subject: [PATCH] acrn-config: get default pci mmcfg base address parse default pci mmcfg base address from target board. Tracked-On: #4173 Signed-off-by: Wei Liu Acked-by: Victor Sun --- .../board_config/acpi_platform_h.py | 1 + misc/acrn-config/target/acpi.py | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/misc/acrn-config/board_config/acpi_platform_h.py b/misc/acrn-config/board_config/acpi_platform_h.py index e3e288f36..1896191e0 100644 --- a/misc/acrn-config/board_config/acpi_platform_h.py +++ b/misc/acrn-config/board_config/acpi_platform_h.py @@ -168,6 +168,7 @@ def platform_info_parser(config, default_platform): write_direct_info_parser(config, "", "") write_direct_info_parser(config, "", "") drhd_info_parser(config) + write_direct_info_parser(config, "", "") def generate_file(config, default_platform): diff --git a/misc/acrn-config/target/acpi.py b/misc/acrn-config/target/acpi.py index 6b6c1ed19..bc9fcb726 100644 --- a/misc/acrn-config/target/acpi.py +++ b/misc/acrn-config/target/acpi.py @@ -115,6 +115,9 @@ DWORD_LEN = 4 PACK_TYPE_LEN = 12 WAKE_VECTOR_OFFSET_32 = 12 WAKE_VECTOR_OFFSET_64 = 24 +MCFG_OFFSET = 4 +MCFG_ENTRY1_OFFSET = 60 +MCFG_ENTRY0_BASE_OFFSET = 44 S3_PKG = SxPkg() S5_PKG = SxPkg() @@ -559,6 +562,23 @@ def store_px_data(sysnode, config): p_cnt += 1 +def store_mmcfg_base_data(mmcfg_node, config): + + print("\t/* PCI mmcfg base of MCFG */", file=config) + with open(mmcfg_node, 'rb') as mmcfg: + mmcfg.read(MCFG_OFFSET) + mmcfg_len_obj = mmcfg.read(DWORD_LEN) + mmcfg_len_int = int.from_bytes(mmcfg_len_obj, 'little') + + if mmcfg_len_int > MCFG_ENTRY1_OFFSET: + parser_lib.print_red("Multiple PCI segment groups is not supported!", err=True) + sys.exit(1) + + mmcfg.seek(MCFG_ENTRY0_BASE_OFFSET, 0) + mmcfg_base_addr_obj = mmcfg.read(DWORD_LEN) + mmcfg_base_addr = int.from_bytes(mmcfg_base_addr_obj, 'little') + print("\t#define DEFAULT_PCI_MMCFG_BASE {}UL".format(hex(mmcfg_base_addr)), file=config) + def gen_acpi_info(config): """This will parser the sys node form SYS_PATH and generate ACPI info @@ -590,6 +610,10 @@ def gen_acpi_info(config): store_px_data(SYS_PATH[2], config) print("{0}".format("\t\n"), file=config) + print("{0}".format("\t"), file=config) + store_mmcfg_base_data(SYS_PATH[1] + 'MCFG', config) + print("{0}".format("\t\n"), file=config) + def generate_info(board_file): """This will generate ACPI info from board file