1#!/usr/bin/env python3 2# 3# Copyright (C) 2022 Intel Corporation. 4# 5# SPDX-License-Identifier: BSD-3-Clause 6# 7 8import sys, os 9sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'library')) 10import acrn_config_utilities, board_cfg_lib, scenario_cfg_lib 11from acrn_config_utilities import get_node 12 13HV_RAM_SIZE_MAX = 0x40000000 14 15MEM_ALIGN = 2 * acrn_config_utilities.SIZE_M 16 17def fn(board_etree, scenario_etree, allocation_etree): 18 # this dictonary mapped with 'address start':'mem range' 19 ram_range = {} 20 21 max_vm_num = int(get_node(f"//hv/CAPACITIES/MAX_VM_NUM/text()", scenario_etree)) 22 max_trusty_vm = len(scenario_etree.xpath(f"//vm[./secure_world_support/text() = 'y']")) 23 hv_ram_size = acrn_config_utilities.HV_BASE_RAM_SIZE + acrn_config_utilities.VM_RAM_SIZE * max_vm_num + max_trusty_vm * acrn_config_utilities.TRUSTY_RAM_SIZE 24 assert(hv_ram_size <= HV_RAM_SIZE_MAX) 25 26 # We recommend to put hv ram start address high than 0x400000 to 27 # reduce memory conflict with hv log. 28 hv_start_offset = 0x400000 29 30 for start_addr in list(board_cfg_lib.USED_RAM_RANGE): 31 if hv_start_offset <= start_addr < 0x80000000: 32 del board_cfg_lib.USED_RAM_RANGE[start_addr] 33 ram_range = board_cfg_lib.get_ram_range() 34 35 avl_start_addr = board_cfg_lib.find_avl_memory(ram_range, str(hv_ram_size), hv_start_offset) 36 hv_start_addr = int(avl_start_addr, 16) 37 hv_start_addr = acrn_config_utilities.round_up(hv_start_addr, MEM_ALIGN) 38 board_cfg_lib.USED_RAM_RANGE[hv_start_addr] = hv_ram_size 39 acrn_config_utilities.append_node("/acrn-config/hv/MEMORY/HV_RAM_START", hex(hv_start_addr), allocation_etree) 40 acrn_config_utilities.append_node("/acrn-config/hv/MEMORY/HV_RAM_SIZE", hex(hv_ram_size), allocation_etree) 41