acrn-config: add support for P2SB bridge passthrough

This patch is to support direct assignment of P2SB bridge to one pre-launched
VM for EHL. User can configure this per-VM attribute in scenario xml:
    <mmio_resources desc="MMIO resources.">
         <p2sb>y</p2sb>
    </mmio_resources>

Set p2sb to y to passthru P2SB bridge to VM, and n otherwise.

Tracked-On: #5221
Signed-off-by: dongshen <dongsheng.x.zhang@intel.com>
This commit is contained in:
dongshen
2020-08-23 17:45:16 -07:00
committed by wenlingz
parent 10d4773f1d
commit 01c66eb4b3
9 changed files with 137 additions and 0 deletions

View File

@@ -52,6 +52,7 @@ def get_scenario_item_values(board_info, scenario_info):
scenario_item_values["vm,clos,vcpu_clos"] = hw_info.get_clos_val()
scenario_item_values["vm,pci_devs"] = scenario_cfg_lib.avl_pci_devs()
scenario_item_values["vm,os_config,kern_type"] = scenario_cfg_lib.KERN_TYPE_LIST
scenario_item_values["vm,mmio_resources,p2sb"] = hv_cfg_lib.N_Y
scenario_item_values.update(scenario_cfg_lib.avl_vuart_ui_select(scenario_info))
# board

View File

@@ -272,6 +272,29 @@ class LoadOrderNum:
self.sos_vm = scenario_cfg_lib.get_load_vm_cnt(load_vm, "SOS_VM")
self.post_vm = scenario_cfg_lib.get_load_vm_cnt(load_vm, "POST_LAUNCHED_VM")
class MmioResourcesInfo:
""" This is Abstract of class of mmio resource setting information """
p2sb = False
def __init__(self, scenario_file):
self.scenario_info = scenario_file
def get_info(self):
"""
Get all items which belong to this class
:return: None
"""
self.p2sb = common.get_leaf_tag_map_bool(self.scenario_info, "mmio_resources", "p2sb")
def check_item(self):
"""
Check all items in this class
:return: None
"""
scenario_cfg_lib.check_p2sb(self.p2sb)
class VmInfo:
""" This is Abstract of class of VM setting """
name = {}
@@ -292,6 +315,8 @@ class VmInfo:
self.cfg_pci = CfgPci(self.scenario_info)
self.load_order_cnt = LoadOrderNum()
self.shmem = ShareMem(self.scenario_info)
self.mmio_resource_info = MmioResourcesInfo(self.scenario_info)
def get_info(self):
"""
@@ -313,6 +338,7 @@ class VmInfo:
self.vuart.get_info()
self.cfg_pci.get_info()
self.load_order_cnt.get_info(self.load_vm)
self.mmio_resource_info.get_info()
def set_ivshmem(self, ivshmem_regions):
"""
@@ -352,4 +378,5 @@ class VmInfo:
self.cfg_pci.check_item()
self.vuart.check_item()
self.shmem.check_items()
self.mmio_resource_info.check_item()
scenario_cfg_lib.ERR_LIST.update(err_dic)

View File

@@ -357,6 +357,19 @@ def gen_pre_launch_vm(vm_type, vm_i, scenario_items, config):
print("\t\t\t.size = VM0_TPM_BUFFER_SIZE,", file=config)
print("\t\t},", file=config)
print("#endif", file=config)
if (vm_i == 0 and vm_info.mmio_resource_info.p2sb.get(vm_i) is not None
and vm_info.mmio_resource_info.p2sb[vm_i]):
print("#ifdef P2SB_BAR_ADDR", file=config)
print("\t\t.pt_p2sb_bar = true,", file=config)
print("\t\t.mmiodevs[0] = {", file=config)
gpa = common.hpa2gpa(0, board_cfg_lib.find_p2sb_bar_addr(), 0x1000000)
print("\t\t\t.base_gpa = 0x{:X}UL,".format(gpa), file=config)
print("\t\t\t.base_hpa = P2SB_BAR_ADDR,", file=config)
print("\t\t\t.size = 0x1000000UL,", file=config)
print("\t\t},", file=config)
print("#endif", file=config)
print("\t},", file=config)