mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-05-03 05:56:57 +00:00
The current code use a start address and hv_ram_size to find the start address of acrn.bin, the start address is 32M which leaving too much memory and will be load modules by grub, sometimes these modules will override the HV log region. This patch set the start address to 4M to avoid the above issue as much as possible. This algorithm depend on the board info, so the board XML should be generate again if user change the SSRAM. Tracked-On: #6690 Signed-off-by: Chenli Wei <chenli.wei@linux.intel.com>
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Copyright (C) 2022 Intel Corporation. All rights reserved.
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
#
|
|
|
|
import sys, os
|
|
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'library'))
|
|
import common, board_cfg_lib, scenario_cfg_lib
|
|
|
|
HV_RAM_SIZE_MAX = 0x40000000
|
|
|
|
MEM_ALIGN = 2 * common.SIZE_M
|
|
|
|
def fn(board_etree, scenario_etree, allocation_etree):
|
|
# this dictonary mapped with 'address start':'mem range'
|
|
ram_range = {}
|
|
|
|
vm_num = 0
|
|
vm_list = scenario_etree.xpath("//vm")
|
|
if vm_list is not None:
|
|
vm_num = len(vm_list)
|
|
hv_ram_size = common.HV_BASE_RAM_SIZE + common.VM_RAM_SIZE * vm_num
|
|
ivshmem_list = scenario_etree.xpath("//IVSHMEM_SIZE/text()")
|
|
total_shm_size = 0
|
|
for ram_size in ivshmem_list:
|
|
try:
|
|
total_shm_size += int(ram_size) * 0x100000
|
|
except Exception as e:
|
|
print(e)
|
|
hv_ram_size += 2 * max(total_shm_size, 0x200000)
|
|
assert(hv_ram_size <= HV_RAM_SIZE_MAX)
|
|
|
|
# We recommend to put hv ram start address high than 0x400000 to
|
|
# reduce memory conflict with hv log.
|
|
hv_start_offset = 0x400000
|
|
|
|
for start_addr in list(board_cfg_lib.USED_RAM_RANGE):
|
|
if hv_start_offset <= start_addr < 0x80000000:
|
|
del board_cfg_lib.USED_RAM_RANGE[start_addr]
|
|
ram_range = board_cfg_lib.get_ram_range()
|
|
|
|
avl_start_addr = board_cfg_lib.find_avl_memory(ram_range, str(hv_ram_size), hv_start_offset)
|
|
hv_start_addr = int(avl_start_addr, 16)
|
|
hv_start_addr = common.round_up(hv_start_addr, MEM_ALIGN)
|
|
board_cfg_lib.USED_RAM_RANGE[hv_start_addr] = hv_ram_size
|
|
common.append_node("/acrn-config/hv/MEMORY/HV_RAM_START", hex(hv_start_addr), allocation_etree)
|
|
common.append_node("/acrn-config/hv/MEMORY/HV_RAM_SIZE", hex(hv_ram_size), allocation_etree)
|