def generate_file(config): # get cpu processor list cpu_list = board_cfg_lib.get_processor_info() max_cpu_num = len(cpu_list) # set macro of max clos number common_clos_max = board_cfg_lib.get_common_clos_max() max_mba_clos_entries = common_clos_max # start to generate board_info.h print("{0}".format(board_cfg_lib.HEADER_LICENSE), file=config) print(BOARD_INFO_DEFINE, file=config) # define CONFIG_MAX_PCPCU_NUM print("#define MAX_PCPU_NUM\t\t\t{}U".format(max_cpu_num), file=config) print("#define MAX_PLATFORM_CLOS_NUM\t\t{}U".format(common_clos_max), file=config) # define MAX_VMSIX_ON_MSI_PDEVS_NUM gen_known_caps_pci_head(config) # define MAX_HIDDEN_PDEVS_NUM if board_cfg_lib.BOARD_NAME in list( board_cfg_lib.KNOWN_HIDDEN_PDEVS_BOARD_DB): print("#define MAX_HIDDEN_PDEVS_NUM\t\t{}U".format( len(board_cfg_lib.KNOWN_HIDDEN_PDEVS_BOARD_DB[ board_cfg_lib.BOARD_NAME])), file=config) else: print("#define MAX_HIDDEN_PDEVS_NUM\t\t0U", file=config) # generate HI_MMIO_START/HI_MMIO_END find_hi_mmio_window(config) print(BOARD_INFO_ENDIF, file=config)
def get_processor_val(self): """ Get cpu core list :return: cpu processor which one cpu has """ self.processor_val = board_cfg_lib.get_processor_info() return self.processor_val
def cpus_assignment(cpus_per_vm, index): """ Get cpu id assignment for vm by vm index :param cpus_per_vm: a dictionary by vmid:cpus :param index: vm index :return: cpu assignment string """ vm_cpu_bmp = {} if "SOS_VM" == common.VM_TYPES[index]: if index not in cpus_per_vm: sos_extend_all_cpus = board_cfg_lib.get_processor_info() cpus_per_vm[index] = sos_extend_all_cpus for i in range(len(cpus_per_vm[index])): if i == 0: if len(cpus_per_vm[index]) == 1: cpu_str = "(AFFINITY_CPU({0}U))".format(cpus_per_vm[index][0]) else: cpu_str = "(AFFINITY_CPU({0}U)".format(cpus_per_vm[index][0]) else: if i == len(cpus_per_vm[index]) - 1: cpu_str = cpu_str + " | AFFINITY_CPU({0}U))".format( cpus_per_vm[index][i]) else: cpu_str = cpu_str + " | AFFINITY_CPU({0}U)".format( cpus_per_vm[index][i]) vm_cpu_bmp['cpu_map'] = cpu_str vm_cpu_bmp['cpu_num'] = len(cpus_per_vm[index]) return vm_cpu_bmp
def generate_file(config): """Start to generate board.c :param config: it is a file pointer of board information for writing to """ err_dic = {} # this dictonary mapped with 'address start':'mem range' ram_range = {} if board_cfg_lib.VM_COUNT in list(VM_NUM_MAP_TOTAL_HV_RAM_SIZE.keys()): hv_ram_size = VM_NUM_MAP_TOTAL_HV_RAM_SIZE[board_cfg_lib.VM_COUNT] else: board_cfg_lib.print_red("VM num should not be greater than 8", err=True) err_dic[ "board config: total vm number error"] = "VM num should not be greater than 8" return err_dic ram_range = get_ram_range() # reseve 16M memory for hv sbuf, ramoops, etc. reserved_ram = 0x1000000 # We recommend to put hv ram start address high than 0x10000000 to # reduce memory conflict with GRUB/SOS Kernel. hv_start_offset = 0x10000000 total_size = reserved_ram + hv_ram_size avl_start_addr = find_avl_memory(ram_range, str(total_size), hv_start_offset) hv_start_addr = int(avl_start_addr, 16) + int(hex(reserved_ram), 16) hv_start_addr = board_cfg_lib.round_up(hv_start_addr, MEM_ALIGN) print("{}".format(DESC), file=config) print('CONFIG_BOARD="{}"'.format(board_cfg_lib.BOARD_NAME), file=config) (serial_type, serial_value) = get_serial_type() if serial_type == "portio": print("CONFIG_SERIAL_LEGACY=y", file=config) print("CONFIG_SERIAL_PIO_BASE={}".format(serial_value), file=config) if serial_type == "mmio": print("CONFIG_SERIAL_PCI=y", file=config) print("CONFIG_SERIAL_PCI_BDF={}".format(serial_value), file=config) print("CONFIG_HV_RAM_START={}".format(hex(hv_start_addr)), file=config) print("CONFIG_HV_RAM_SIZE={}".format(hex(hv_ram_size)), file=config) cpu_core_num = len(board_cfg_lib.get_processor_info()) if cpu_core_num == 2: print("# KATA VM is not supported on dual-core systems", file=config) print("CONFIG_MAX_KATA_VM_NUM=0", file=config) if is_rdt_supported(): print("CONFIG_RDT_ENABLED=y", file=config) else: print("CONFIG_RDT_ENABLED=n", file=config) return err_dic
def sos_cpu_affinity(etree): if common.get_node("//vm[vm_type = 'SOS_VM']", etree) is None: return None if common.get_node("//vm[vm_type = 'SOS_VM' and count(cpu_affinity)]", etree) is not None: return None sos_extend_all_cpus = board_cfg_lib.get_processor_info() pre_all_cpus = etree.xpath("//vm[vm_type = 'PRE_RT_VM' or vm_type = 'PRE_STD_VM' or vm_type = 'SAFETY_VM']/cpu_affinity/pcpu_id/text()") cpus_for_sos = list(set(sos_extend_all_cpus) - set(pre_all_cpus)) return sorted(cpus_for_sos)
def get_launch_item_values(board_info, scenario_info=None): """ Get items which capable multi select for user :param board_info: it is a file what contains board information for script to read from :param sceanrio_info: it is a file what contains scenario information for script to read from """ common.BOARD_INFO_FILE = board_info launch_item_values = {} # passthrough devices pthru = AvailablePthru(board_info) pthru.get_pci_dev() pthru.insert_nun() # pre passthrough device for ui launch_item_values["user_vm,passthrough_devices,usb_xdci"] = pthru.avl[ "usb_xdci"] launch_item_values["user_vm,passthrough_devices,gpu"] = pthru.avl["gpu"] launch_item_values["user_vm,passthrough_devices,ipu"] = pthru.avl["ipu"] launch_item_values["user_vm,passthrough_devices,ipu_i2c"] = pthru.avl[ "ipu_i2c"] launch_item_values["user_vm,passthrough_devices,cse"] = pthru.avl["cse"] launch_item_values["user_vm,passthrough_devices,audio"] = pthru.avl[ "audio"] launch_item_values["user_vm,passthrough_devices,audio_codec"] = pthru.avl[ "audio_codec"] launch_item_values["user_vm,passthrough_devices,sd_card"] = pthru.avl[ "sd_card"] launch_item_values["user_vm,passthrough_devices,wifi"] = pthru.avl["wifi"] launch_item_values["user_vm,passthrough_devices,ethernet"] = pthru.avl[ "ethernet"] launch_item_values["user_vm,passthrough_devices,sata"] = pthru.avl["sata"] launch_item_values["user_vm,passthrough_devices,nvme"] = pthru.avl["nvme"] launch_item_values["user_vm,passthrough_devices,bluetooth"] = pthru.avl[ "bluetooth"] # acrn dm available optargs launch_item_values['user_vm,user_vm_type'] = launch_cfg_lib.USER_VM_TYPES launch_item_values["user_vm,rtos_type"] = launch_cfg_lib.RTOS_TYPE launch_item_values["user_vm,vbootloader"] = launch_cfg_lib.BOOT_TYPE launch_item_values['user_vm,vuart0'] = launch_cfg_lib.DM_VUART0 launch_item_values['user_vm,poweroff_channel'] = launch_cfg_lib.PM_CHANNEL launch_item_values[ "user_vm,cpu_affinity"] = board_cfg_lib.get_processor_info() launch_item_values['user_vm,enable_ptm'] = launch_cfg_lib.y_n launch_item_values['user_vm,allow_trigger_s5'] = launch_cfg_lib.y_n launch_cfg_lib.set_shm_regions(launch_item_values, scenario_info) launch_cfg_lib.set_pci_vuarts(launch_item_values, scenario_info) return launch_item_values
def generate_file(config): # get cpu processor list cpu_list = board_cfg_lib.get_processor_info() max_cpu_num = len(cpu_list) # start to generate board_info.h print("{0}".format(board_cfg_lib.HEADER_LICENSE), file=config) print(BOARD_INFO_DEFINE, file=config) # define CONFIG_MAX_PCPCU_NUM print("#define MAX_PCPU_NUM\t\t\t{}U".format(max_cpu_num), file=config) # define MAX_VMSIX_ON_MSI_PDEVS_NUM gen_known_caps_pci_head(config) # define MAX_HIDDEN_PDEVS_NUM if board_cfg_lib.BOARD_NAME in list( board_cfg_lib.KNOWN_HIDDEN_PDEVS_BOARD_DB): print("#define MAX_HIDDEN_PDEVS_NUM\t\t{}U".format( len(board_cfg_lib.KNOWN_HIDDEN_PDEVS_BOARD_DB[ board_cfg_lib.BOARD_NAME])), file=config) else: print("#define MAX_HIDDEN_PDEVS_NUM\t\t0U", file=config) # generate HI_MMIO_START/HI_MMIO_END find_hi_mmio_window(config) p2sb = common.get_leaf_tag_map_bool(common.SCENARIO_INFO_FILE, "mmio_resources", "p2sb") if (common.VM_TYPES.get(0) is not None and scenario_cfg_lib.VM_DB[common.VM_TYPES[0]]['load_type'] == "PRE_LAUNCHED_VM" and board_cfg_lib.is_p2sb_passthru_possible() and p2sb.get(0, False)): print("", file=config) print("#define P2SB_VGPIO_DM_ENABLED", file=config) hpa = board_cfg_lib.find_p2sb_bar_addr() print("#define P2SB_BAR_ADDR\t\t\t0x{:X}UL".format(hpa), file=config) gpa = common.hpa2gpa(0, hpa, 0x1000000) print("#define P2SB_BAR_ADDR_GPA\t\t0x{:X}UL".format(gpa), file=config) print("#define P2SB_BAR_SIZE\t\t\t0x1000000UL", file=config) if board_cfg_lib.is_matched_board(("ehl-crb-b")): print("", file=config) print("#define P2SB_BASE_GPIO_PORT_ID\t\t0x69U", file=config) print("#define P2SB_MAX_GPIO_COMMUNITIES\t0x6U", file=config) print(BOARD_INFO_ENDIF, file=config)
def sos_cpu_affinity(etree): if common.get_node("//vm[load_order = 'SERVICE_VM']", etree) is None: return None if common.get_node( "//vm[load_order = 'SERVICE_VM' and count(cpu_affinity//pcpu_id)]", etree) is not None: return None sos_extend_all_cpus = board_cfg_lib.get_processor_info() pre_all_cpus = etree.xpath( "//vm[load_order = 'PRE_LAUNCHED_VM']/cpu_affinity//pcpu_id/text()") cpus_for_sos = list(set(sos_extend_all_cpus) - set(pre_all_cpus)) return sorted(cpus_for_sos)
def cpus_assignment(cpus_per_vm, index): """ Get cpu id assignment for vm by vm index :param cpus_per_vm: a dictionary by vmid:cpus :param index: vm index :return: cpu assignment string """ vm_cpu_bmp = {} if "SOS_VM" == common.VM_TYPES[index]: if index not in cpus_per_vm or cpus_per_vm[index] == [None]: sos_extend_all_cpus = board_cfg_lib.get_processor_info() pre_all_cpus = [] for vmid, cpu_list in cpus_per_vm.items(): if vmid in common.VM_TYPES: vm_type = common.VM_TYPES[vmid] load_type = '' if vm_type in VM_DB: load_type = VM_DB[vm_type]['load_type'] if load_type == "PRE_LAUNCHED_VM": pre_all_cpus += cpu_list cpus_per_vm[index] = list( set(sos_extend_all_cpus) - set(pre_all_cpus)) cpus_per_vm[index].sort() for i in range(len(cpus_per_vm[index])): if i == 0: if len(cpus_per_vm[index]) == 1: cpu_str = "(AFFINITY_CPU({0}U))".format(cpus_per_vm[index][0]) else: cpu_str = "(AFFINITY_CPU({0}U)".format(cpus_per_vm[index][0]) else: if i == len(cpus_per_vm[index]) - 1: cpu_str = cpu_str + " | AFFINITY_CPU({0}U))".format( cpus_per_vm[index][i]) else: cpu_str = cpu_str + " | AFFINITY_CPU({0}U)".format( cpus_per_vm[index][i]) vm_cpu_bmp['cpu_map'] = cpu_str vm_cpu_bmp['cpu_num'] = len(cpus_per_vm[index]) return vm_cpu_bmp
def generate_file(config): """ Start to generate board.c :param config: it is a file pointer of board information for writing to """ board_cfg_lib.get_valid_irq(common.BOARD_INFO_FILE) # get the vuart0/vuart1 which user chosed from scenario.xml of board_private section (err_dic, ttys_n) = board_cfg_lib.parser_hv_console() if err_dic: return err_dic # parse sos_bootargs/rootfs/console (err_dic, sos_cmdlines, sos_rootfs, vuart0_dic, vuart1_dic) = parse_boot_info() if err_dic: return err_dic if vuart0_dic: # parse to get poart/base of vuart0/vuart1 vuart0_port_base = board_cfg_lib.LEGACY_TTYS[list( vuart0_dic.keys())[0]] vuart0_irq = vuart0_dic[list(vuart0_dic.keys())[0]] vuart1_port_base = board_cfg_lib.LEGACY_TTYS[list(vuart1_dic.keys())[0]] vuart1_irq = vuart1_dic[list(vuart1_dic.keys())[0]] # parse the setting ttys vuatx dic: {vmid:base/irq} vuart0_setting = Vuart() vuart1_setting = Vuart() vuart0_setting = common.get_vuart_info_id(common.SCENARIO_INFO_FILE, 0) vuart1_setting = common.get_vuart_info_id(common.SCENARIO_INFO_FILE, 1) # sos command lines information sos_cmdlines = [i for i in sos_cmdlines[0].split() if i != ''] # add maxcpus parameter into sos cmdlines if there are pre-launched VMs pcpu_list = board_cfg_lib.get_processor_info() cpu_affinity = common.get_leaf_tag_map(common.SCENARIO_INFO_FILE, "cpu_affinity", "pcpu_id") pre_cpu_list = [] sos_cpu_num = 0 for vmid, cpu_list in cpu_affinity.items(): if vmid in common.VM_TYPES and cpu_list != [None]: vm_type = common.VM_TYPES[vmid] load_type = '' if vm_type in scenario_cfg_lib.VM_DB: load_type = scenario_cfg_lib.VM_DB[vm_type]['load_type'] if load_type == "PRE_LAUNCHED_VM": pre_cpu_list += cpu_list elif load_type == "SOS_VM": sos_cpu_num += len(cpu_list) if sos_cpu_num == 0: sos_cpu_num_max = len(list(set(pcpu_list) - set(pre_cpu_list))) else: sos_cpu_num_max = sos_cpu_num if sos_cpu_num_max > 0: sos_cmdlines.append('maxcpus=' + str(sos_cpu_num_max)) # get native rootfs list from board_info.xml (root_devs, root_dev_num) = board_cfg_lib.get_rootfs(common.BOARD_INFO_FILE) # start to generate misc_cfg.h print("{0}".format(board_cfg_lib.HEADER_LICENSE), file=config) print("{}".format(MISC_CFG_HEADER), file=config) print("", file=config) # define rootfs with macro #for i in range(root_dev_num): # print('#define ROOTFS_{}\t\t"root={} "'.format(i, root_devs[i]), file=config) # sos rootfs and console if "SOS_VM" in common.VM_TYPES.values(): print('#define SOS_ROOTFS\t\t"root={} "'.format(sos_rootfs[0]), file=config) if ttys_n: print('#define SOS_CONSOLE\t\t"console={} "'.format(ttys_n), file=config) else: print('#define SOS_CONSOLE\t\t" "', file=config) # sos com base/irq i_type = 0 for vm_i, vm_type in common.VM_TYPES.items(): if vm_type == "SOS_VM": i_type = vm_i break if "SOS_VM" in common.VM_TYPES.values(): if vuart0_dic: print("#define SOS_COM1_BASE\t\t{}U".format(vuart0_port_base), file=config) print("#define SOS_COM1_IRQ\t\t{}U".format(vuart0_irq), file=config) else: print("#define SOS_COM1_BASE\t\t0U", file=config) print("#define SOS_COM1_IRQ\t\t0U", file=config) if vuart1_setting[i_type]['base'] != "INVALID_COM_BASE": print("#define SOS_COM2_BASE\t\t{}U".format(vuart1_port_base), file=config) print("#define SOS_COM2_IRQ\t\t{}U".format(vuart1_irq), file=config) # sos boot command line print("", file=config) if "SOS_VM" in common.VM_TYPES.values(): sos_bootarg_diff(sos_cmdlines, config) print("", file=config) cpu_affinity_per_vm_gen(config) common_clos_max = board_cfg_lib.get_common_clos_max() max_mba_clos_entries = common_clos_max max_cache_clos_entries = common_clos_max comments_max_clos = ''' /* * The maximum CLOS that is allowed by ACRN hypervisor, * its value is set to be least common Max CLOS (CPUID.(EAX=0x10,ECX=ResID):EDX[15:0]) * among all supported RDT resources in the platform. In other words, it is * min(maximum CLOS of L2, L3 and MBA). This is done in order to have consistent * CLOS allocations between all the RDT resources. */''' comments_max_mba_clos = ''' /* * Max number of Cache Mask entries corresponding to each CLOS. * This can vary if CDP is enabled vs disabled, as each CLOS entry * will have corresponding cache mask values for Data and Code when * CDP is enabled. */''' comments_max_cache_clos = ''' /* Max number of MBA delay entries corresponding to each CLOS. */''' if board_cfg_lib.is_cdp_enabled(): max_cache_clos_entries_cdp_enable = 2 * common_clos_max (res_info, rdt_res_clos_max, clos_max_mask_list) = board_cfg_lib.clos_info_parser( common.BOARD_INFO_FILE) common_clos_max_cdp_disable = min(rdt_res_clos_max) print("#ifdef CONFIG_RDT_ENABLED", file=config) print("#ifdef CONFIG_CDP_ENABLED", file=config) print(comments_max_clos, file=config) print("#define HV_SUPPORTED_MAX_CLOS\t{}U".format(common_clos_max), file=config) print(comments_max_cache_clos, file=config) print("#define MAX_CACHE_CLOS_NUM_ENTRIES\t{}U".format( max_cache_clos_entries_cdp_enable), file=config) print("#else", file=config) print(comments_max_clos, file=config) print("#define HV_SUPPORTED_MAX_CLOS\t{}U".format( common_clos_max_cdp_disable), file=config) print(comments_max_cache_clos, file=config) print("#define MAX_CACHE_CLOS_NUM_ENTRIES\t{}U".format( max_cache_clos_entries), file=config) print("#endif", file=config) print(comments_max_mba_clos, file=config) print("#define MAX_MBA_CLOS_NUM_ENTRIES\t{}U".format( max_mba_clos_entries), file=config) else: print("#ifdef CONFIG_RDT_ENABLED", file=config) print(comments_max_clos, file=config) print("#define HV_SUPPORTED_MAX_CLOS\t{}U".format(common_clos_max), file=config) print(comments_max_mba_clos, file=config) print("#define MAX_MBA_CLOS_NUM_ENTRIES\t{}U".format( max_mba_clos_entries), file=config) print(comments_max_cache_clos, file=config) print("#define MAX_CACHE_CLOS_NUM_ENTRIES\t{}U".format( max_cache_clos_entries), file=config) if not board_cfg_lib.is_rdt_supported(): print("#endif", file=config) print("", file=config) if board_cfg_lib.is_rdt_supported(): (rdt_resources, rdt_res_clos_max, _) = board_cfg_lib.clos_info_parser(common.BOARD_INFO_FILE) cat_mask_list = common.get_hv_item_tag(common.SCENARIO_INFO_FILE, "FEATURES", "RDT", "CLOS_MASK") mba_delay_list = common.get_hv_item_tag(common.SCENARIO_INFO_FILE, "FEATURES", "RDT", "MBA_DELAY") idx = 0 for mba_delay_mask in mba_delay_list: print("#define MBA_MASK_{}\t\t\t{}U".format(idx, mba_delay_mask), file=config) idx += 1 idx = 0 for cat_mask in cat_mask_list: print("#define CLOS_MASK_{}\t\t\t{}U".format(idx, cat_mask), file=config) idx += 1 print("", file=config) clos_per_vm_gen(config) print("#endif", file=config) print("", file=config) vm0_pre_launch = False common.get_vm_types() for vm_idx, vm_type in common.VM_TYPES.items(): if vm_idx == 0 and scenario_cfg_lib.VM_DB[vm_type][ 'load_type'] == "PRE_LAUNCHED_VM": vm0_pre_launch = True if vm0_pre_launch and board_cfg_lib.is_tpm_passthru(): tpm2_passthru_enabled = common.get_leaf_tag_map_bool( common.SCENARIO_INFO_FILE, "mmio_resources", "TPM2") if 0 in tpm2_passthru_enabled and tpm2_passthru_enabled[0]: print("#define VM0_PASSTHROUGH_TPM", file=config) print("#define VM0_TPM_BUFFER_BASE_ADDR 0xFED40000UL", file=config) gpa = common.hpa2gpa(0, 0xFED40000, 0x5000) print( "#define VM0_TPM_BUFFER_BASE_ADDR_GPA 0x{:X}UL".format(gpa), file=config) print("#define VM0_TPM_BUFFER_SIZE 0x5000UL", file=config) print("", file=config) pci_dev_num_per_vm_gen(config) boot_args_per_vm_gen(config) pt_intx_num_vm0_gen(config) swsram_base_gpa_gen(config) print("{}".format(MISC_CFG_END), file=config) return err_dic
def generate_file(config): """ Start to generate board.c :param config: it is a file pointer of board information for writing to """ board_cfg_lib.get_valid_irq(common.BOARD_INFO_FILE) # get cpu processor list cpu_list = board_cfg_lib.get_processor_info() max_cpu_num = len(cpu_list) # get the vuart0/vuart1 which user chosed from scenario.xml of board_private section (err_dic, ttys_n) = board_cfg_lib.parser_hv_console() if err_dic: return err_dic # parse sos_bootargs/rootfs/console (err_dic, sos_cmdlines, sos_rootfs, vuart0_dic, vuart1_dic) = parse_boot_info() if err_dic: return err_dic if vuart0_dic: # parse to get poart/base of vuart0/vuart1 vuart0_port_base = board_cfg_lib.LEGACY_TTYS[list(vuart0_dic.keys())[0]] vuart0_irq = vuart0_dic[list(vuart0_dic.keys())[0]] vuart1_port_base = board_cfg_lib.LEGACY_TTYS[list(vuart1_dic.keys())[0]] vuart1_irq = vuart1_dic[list(vuart1_dic.keys())[0]] # parse the setting ttys vuatx dic: {vmid:base/irq} vuart0_setting = Vuart() vuart1_setting = Vuart() vuart0_setting = common.get_vuart_info_id(common.SCENARIO_INFO_FILE, 0) vuart1_setting = common.get_vuart_info_id(common.SCENARIO_INFO_FILE, 1) # sos command lines information sos_cmdlines = [i for i in sos_cmdlines[0].split() if i != ''] # get native rootfs list from board_info.xml (root_devs, root_dev_num) = board_cfg_lib.get_rootfs(common.BOARD_INFO_FILE) # start to generate misc_cfg.h print("{0}".format(board_cfg_lib.HEADER_LICENSE), file=config) print("{}".format(MISC_CFG_HEADER), file=config) # define CONFIG_MAX_PCPCU_NUM print("#define MAX_PCPU_NUM\t{}U".format(max_cpu_num), file=config) # set macro of max clos number (_, clos_max, _) = board_cfg_lib.clos_info_parser(common.BOARD_INFO_FILE) if len(clos_max) != 0: common_clos_max = min(clos_max) else: common_clos_max = 0 print("#define MAX_PLATFORM_CLOS_NUM\t{}U".format(common_clos_max), file=config) # define rootfs with macro for i in range(root_dev_num): print('#define ROOTFS_{}\t\t"root={} "'.format(i, root_devs[i]), file=config) # sos rootfs and console print("", file=config) if "SOS_VM" in common.VM_TYPES.values(): print('#define SOS_ROOTFS\t\t"root={} "'.format(sos_rootfs[0]), file=config) if ttys_n: print('#define SOS_CONSOLE\t\t"console={} "'.format(ttys_n), file=config) else: print('#define SOS_CONSOLE\t\t" "', file=config) # sos com base/irq i_type = 0 for vm_i,vm_type in common.VM_TYPES.items(): if vm_type == "SOS_VM": i_type = vm_i break if "SOS_VM" in common.VM_TYPES.values(): if vuart0_dic: print("#define SOS_COM1_BASE\t\t{}U".format(vuart0_port_base), file=config) print("#define SOS_COM1_IRQ\t\t{}U".format(vuart0_irq), file=config) else: print("#define SOS_COM1_BASE\t\t0U", file=config) print("#define SOS_COM1_IRQ\t\t0U", file=config) if vuart1_setting[i_type]['base'] != "INVALID_COM_BASE": print("#define SOS_COM2_BASE\t\t{}U".format(vuart1_port_base), file=config) print("#define SOS_COM2_IRQ\t\t{}U".format(vuart1_irq), file=config) # sos boot command line print("", file=config) if "SOS_VM" in common.VM_TYPES.values(): sos_bootarg_diff(sos_cmdlines, config) # set macro for HIDDEN PTDEVS print("", file=config) if board_cfg_lib.BOARD_NAME in list(board_cfg_lib.KNOWN_HIDDEN_PDEVS_BOARD_DB): print("#define MAX_HIDDEN_PDEVS_NUM {}U".format(len(board_cfg_lib.KNOWN_HIDDEN_PDEVS_BOARD_DB[board_cfg_lib.BOARD_NAME])), file=config) else: print("#define MAX_HIDDEN_PDEVS_NUM 0U", file=config) # generate HI_MMIO_START/HI_MMIO_END find_hi_mmio_window(config) print("", file=config) print("{}".format(MISC_CFG_END), file=config) return err_dic
def generate_file(config): """ Start to generate board.c :param config: it is a file pointer of board information for writing to """ board_cfg_lib.get_valid_irq(common.BOARD_INFO_FILE) # get the vuart0/vuart1 which user chosed from scenario.xml of board_private section (err_dic, ttys_n) = board_cfg_lib.parser_hv_console() if err_dic: return err_dic # parse sos_bootargs/rootfs/console (err_dic, sos_cmdlines, sos_rootfs, vuart0_dic, vuart1_dic) = parse_boot_info() if err_dic: return err_dic if vuart0_dic: # parse to get poart/base of vuart0/vuart1 vuart0_port_base = board_cfg_lib.LEGACY_TTYS[list( vuart0_dic.keys())[0]] vuart0_irq = vuart0_dic[list(vuart0_dic.keys())[0]] vuart1_port_base = board_cfg_lib.LEGACY_TTYS[list(vuart1_dic.keys())[0]] vuart1_irq = vuart1_dic[list(vuart1_dic.keys())[0]] # parse the setting ttys vuatx dic: {vmid:base/irq} vuart0_setting = Vuart() vuart1_setting = Vuart() vuart0_setting = common.get_vuart_info_id(common.SCENARIO_INFO_FILE, 0) vuart1_setting = common.get_vuart_info_id(common.SCENARIO_INFO_FILE, 1) # sos command lines information sos_cmdlines = [i for i in sos_cmdlines[0].split() if i != ''] # add maxcpus parameter into sos cmdlines if there are pre-launched VMs pcpu_list = board_cfg_lib.get_processor_info() cpu_affinity = common.get_leaf_tag_map(common.SCENARIO_INFO_FILE, "cpu_affinity", "pcpu_id") pre_cpu_list = [] sos_cpu_num = 0 for vmid, cpu_list in cpu_affinity.items(): if vmid in common.VM_TYPES and cpu_list != [None]: vm_type = common.VM_TYPES[vmid] load_type = '' if vm_type in scenario_cfg_lib.VM_DB: load_type = scenario_cfg_lib.VM_DB[vm_type]['load_type'] if load_type == "PRE_LAUNCHED_VM": pre_cpu_list += cpu_list elif load_type == "SOS_VM": sos_cpu_num += len(cpu_list) if sos_cpu_num == 0: sos_cpu_num_max = len(list(set(pcpu_list) - set(pre_cpu_list))) else: sos_cpu_num_max = sos_cpu_num if sos_cpu_num_max > 0: sos_cmdlines.append('maxcpus=' + str(sos_cpu_num_max)) # get native rootfs list from board_info.xml (root_devs, root_dev_num) = board_cfg_lib.get_rootfs(common.BOARD_INFO_FILE) # start to generate misc_cfg.h print("{0}".format(board_cfg_lib.HEADER_LICENSE), file=config) print("{}".format(MISC_CFG_HEADER), file=config) print("", file=config) # define rootfs with macro #for i in range(root_dev_num): # print('#define ROOTFS_{}\t\t"root={} "'.format(i, root_devs[i]), file=config) # sos rootfs and console if "SOS_VM" in common.VM_TYPES.values(): print('#define SOS_ROOTFS\t\t"root={} "'.format(sos_rootfs[0]), file=config) if ttys_n: print('#define SOS_CONSOLE\t\t"console={} "'.format(ttys_n), file=config) else: print('#define SOS_CONSOLE\t\t" "', file=config) # sos com base/irq i_type = 0 for vm_i, vm_type in common.VM_TYPES.items(): if vm_type == "SOS_VM": i_type = vm_i break if "SOS_VM" in common.VM_TYPES.values(): if vuart0_dic: print("#define SOS_COM1_BASE\t\t{}U".format(vuart0_port_base), file=config) print("#define SOS_COM1_IRQ\t\t{}U".format(vuart0_irq), file=config) else: print("#define SOS_COM1_BASE\t\t0U", file=config) print("#define SOS_COM1_IRQ\t\t0U", file=config) if vuart1_setting[i_type]['base'] != "INVALID_COM_BASE": print("#define SOS_COM2_BASE\t\t{}U".format(vuart1_port_base), file=config) print("#define SOS_COM2_IRQ\t\t{}U".format(vuart1_irq), file=config) # sos boot command line print("", file=config) if "SOS_VM" in common.VM_TYPES.values(): sos_bootarg_diff(sos_cmdlines, config) print("", file=config) common_clos_max = board_cfg_lib.get_common_clos_max() max_mba_clos_entries = common_clos_max max_cache_clos_entries = common_clos_max if board_cfg_lib.is_cdp_enabled(): max_cache_clos_entries_cdp_enable = 2 * common_clos_max (res_info, rdt_res_clos_max, clos_max_mask_list) = board_cfg_lib.clos_info_parser( common.BOARD_INFO_FILE) common_clos_max_cdp_disable = min(rdt_res_clos_max) print("#ifdef CONFIG_RDT_ENABLED", file=config) print("#ifdef CONFIG_CDP_ENABLED", file=config) print("#define HV_SUPPORTED_MAX_CLOS\t{}U".format(common_clos_max), file=config) print("#define MAX_CACHE_CLOS_NUM_ENTRIES\t{}U".format( max_cache_clos_entries_cdp_enable), file=config) print("#else", file=config) print("#define HV_SUPPORTED_MAX_CLOS\t{}U".format( common_clos_max_cdp_disable), file=config) print("#define MAX_CACHE_CLOS_NUM_ENTRIES\t{}U".format( max_cache_clos_entries), file=config) print("#endif", file=config) print("#define MAX_MBA_CLOS_NUM_ENTRIES\t{}U".format( max_mba_clos_entries), file=config) else: print("#ifdef CONFIG_RDT_ENABLED", file=config) print("#define HV_SUPPORTED_MAX_CLOS\t{}U".format(common_clos_max), file=config) print("#define MAX_MBA_CLOS_NUM_ENTRIES\t{}U".format( max_mba_clos_entries), file=config) print("#define MAX_CACHE_CLOS_NUM_ENTRIES\t{}U".format( max_cache_clos_entries), file=config) if not board_cfg_lib.is_rdt_supported(): print("#endif", file=config) print("", file=config) if board_cfg_lib.is_rdt_supported(): (rdt_resources, rdt_res_clos_max, _) = board_cfg_lib.clos_info_parser(common.BOARD_INFO_FILE) cat_mask_list = common.get_hv_item_tag(common.SCENARIO_INFO_FILE, "FEATURES", "RDT", "CLOS_MASK") mba_delay_list = common.get_hv_item_tag(common.SCENARIO_INFO_FILE, "FEATURES", "RDT", "MBA_DELAY") idx = 0 for mba_delay_mask in mba_delay_list: print("#define MBA_MASK_{}\t\t\t{}U".format(idx, mba_delay_mask), file=config) idx += 1 idx = 0 for cat_mask in cat_mask_list: print("#define CLOS_MASK_{}\t\t\t{}U".format(idx, cat_mask), file=config) idx += 1 print("", file=config) clos_per_vm_gen(config) print("#endif", file=config) print("", file=config) vm0_pre_launch = False common.get_vm_types() for vm_idx, vm_type in common.VM_TYPES.items(): if vm_idx == 0 and scenario_cfg_lib.VM_DB[vm_type][ 'load_type'] == "PRE_LAUNCHED_VM": vm0_pre_launch = True if vm0_pre_launch and board_cfg_lib.is_tpm_passthru(): print("#define VM0_PASSTHROUGH_TPM", file=config) print("#define VM0_TPM_BUFFER_BASE_ADDR 0xFED40000UL", file=config) print("#define VM0_TPM_BUFFER_SIZE 0x5000UL", file=config) print("", file=config) print("{}".format(MISC_CFG_END), file=config) return err_dic
def generate_file(config): """ Start to generate board.c :param config: it is a file pointer of board information for writing to """ board_cfg_lib.get_valid_irq(board_cfg_lib.BOARD_INFO_FILE) # get cpu processor list cpu_list = board_cfg_lib.get_processor_info() max_cpu_num = len(cpu_list) # get the vuart0/vuart1 which user chosed from scenario.xml of board_private section (err_dic, ttys_n) = board_cfg_lib.parser_vuart_console() if err_dic: return err_dic # parse sos_bootargs/rootfs/console (err_dic, sos_cmdlines, sos_rootfs, vuart0_dic, vuart1_dic, vm_types) = parse_boot_info() if err_dic: return err_dic # parse to get poart/base of vuart0/vuart1 vuart0_port_base = board_cfg_lib.TTY_CONSOLE[list(vuart0_dic.keys())[0]] vuart0_irq = vuart0_dic[list(vuart0_dic.keys())[0]] vuart1_port_base = board_cfg_lib.TTY_CONSOLE[list(vuart1_dic.keys())[0]] vuart1_irq = vuart1_dic[list(vuart1_dic.keys())[0]] # parse the setting ttys vuatx dic: {vmid:base/irq} vuart0_setting = Vuart() vuart1_setting = Vuart() vuart0_setting = board_cfg_lib.get_vuart_info_id(board_cfg_lib.SCENARIO_INFO_FILE, 0) vuart1_setting = board_cfg_lib.get_vuart_info_id(board_cfg_lib.SCENARIO_INFO_FILE, 1) # sos command lines information sos_cmdlines = [i for i in sos_cmdlines[0].split() if i != ''] # get native rootfs list from board_info.xml (root_devs, root_dev_num) = board_cfg_lib.get_rootfs(board_cfg_lib.BOARD_INFO_FILE) # start to generate misc_cfg.h print("{0}".format(board_cfg_lib.HEADER_LICENSE), file=config) print("{}".format(MISC_CFG_HEADER), file=config) # define CONFIG_MAX_PCPCU_NUM print("#define CONFIG_MAX_PCPU_NUM\t{}U".format(max_cpu_num), file=config) # define rootfs with macro for i in range(root_dev_num): print('#define ROOTFS_{}\t\t"root={} "'.format(i, root_devs[i]), file=config) # sos rootfs and console print("", file=config) if "SOS_VM" in vm_types: print('#define SOS_ROOTFS\t\t"root={} "'.format(sos_rootfs[0]), file=config) print('#define SOS_CONSOLE\t\t"console={} "'.format(ttys_n), file=config) # sos com base/irq i_type = 0 for vm_type in vm_types: if vm_type == "SOS_VM": break i_type += 1 if "SOS_VM" in vm_types: print("#define SOS_COM1_BASE\t\t{}U".format(vuart0_port_base), file=config) print("#define SOS_COM1_IRQ\t\t{}U".format(vuart0_irq), file=config) if vuart1_setting[i_type]['base'] != "INVALID_COM_BASE": print("#define SOS_COM2_BASE\t\t{}U".format(vuart1_port_base), file=config) print("#define SOS_COM2_IRQ\t\t{}U".format(vuart1_irq), file=config) # sos boot command line print("", file=config) if "SOS_VM" in vm_types: sos_bootarg_diff(sos_cmdlines, config) print("{}".format(MISC_CFG_END), file=config) return err_dic