mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-19 20:22:46 +00:00
Enhance the $(board).config for new board. Serial config should be set in $(board).config for new board. Tracked-On: #3854 Signed-off-by: Wei Liu <weix.w.liu@intel.com> Acked-by: Victor Sun <victor.sun@intel.com>
132 lines
3.8 KiB
Python
132 lines
3.8 KiB
Python
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
#
|
|
|
|
import sys
|
|
import board_cfg_lib
|
|
|
|
|
|
DESC = """
|
|
# New board kconfig generated by vm config tool
|
|
# Modified by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)
|
|
"""
|
|
|
|
VM_NUM_MAP_TOTAL_HV_RAM_SIZE = {
|
|
# 120M
|
|
2:0x7800000,
|
|
# 150M
|
|
3:0x9600000,
|
|
# 180M
|
|
4:0xB400000,
|
|
# 210M
|
|
5:0xD200000,
|
|
# 240M
|
|
6:0xF000000,
|
|
# 270M
|
|
7:0x10E00000,
|
|
}
|
|
|
|
|
|
def find_avl_memory(ram_range, hpa_size):
|
|
"""
|
|
This is get hv address from System RAM as host physical size
|
|
:param ram_range: System RAM mapping
|
|
:param hpa_size: fixed host physical size
|
|
:return: start host physical address
|
|
"""
|
|
ret_start_addr = 0
|
|
tmp_order_key = 0
|
|
|
|
tmp_order_key = sorted(ram_range)
|
|
for start_addr in tmp_order_key:
|
|
mem_range = ram_range[start_addr]
|
|
if mem_range > int(hpa_size, 10):
|
|
ret_start_addr = start_addr
|
|
break
|
|
|
|
return hex(ret_start_addr)
|
|
|
|
|
|
def get_ram_range():
|
|
""" Get System RAM range mapping """
|
|
# read system ram from board_info.xml
|
|
ram_range = {}
|
|
|
|
sys_mem_lines = board_cfg_lib.get_info(
|
|
board_cfg_lib.BOARD_INFO_FILE, "<SYSTEM_RAM_INFO>", "</SYSTEM_RAM_INFO>")
|
|
for line in sys_mem_lines:
|
|
start_addr = int(line.split('-')[0], 16)
|
|
end_addr = int(line.split('-')[1].split(':')[0], 16)
|
|
mem_range = end_addr - start_addr
|
|
ram_range[start_addr] = mem_range
|
|
|
|
return ram_range
|
|
|
|
|
|
def get_serial_type():
|
|
""" Get the serial type of consle which set by user """
|
|
ttys_type = ''
|
|
|
|
# Get ttySx information from board config file
|
|
ttys_lines = board_cfg_lib.get_info(board_cfg_lib.BOARD_INFO_FILE, "<TTYS_INFO>", "</TTYS_INFO>")
|
|
|
|
scenario_name = board_cfg_lib.get_scenario_name()
|
|
if scenario_name == "logical_partition":
|
|
ttyn = 'ttyS0'
|
|
else:
|
|
# Get ttySx from scenario config file which selected by user
|
|
(err_dic, ttyn) = board_cfg_lib.parser_vuart_console()
|
|
if err_dic:
|
|
board_cfg_lib.ERR_LIST.update(err_dic)
|
|
|
|
# query the serial type from board config file
|
|
for line in ttys_lines:
|
|
if ttyn in line:
|
|
# line format:
|
|
# seri:/dev/ttyS0 type:portio base:0x3F8 irq:4
|
|
# seri:/dev/ttyS0 type:mmio base:0xB3640000 irq:4
|
|
ttys_type = line.split()[1].split(':')[1]
|
|
break
|
|
|
|
return ttys_type
|
|
|
|
|
|
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 greater than 8", err=True)
|
|
err_dic["baord config: total vm number error"] = "VM num should not greater than 8"
|
|
return err_dic
|
|
|
|
ram_range = get_ram_range()
|
|
|
|
# reseve 16M memory for hv sbuf, ramoops, etc.
|
|
reserved_ram = 0xf00000
|
|
total_size = reserved_ram + hv_ram_size
|
|
avl_start_addr = find_avl_memory(ram_range, str(total_size))
|
|
hv_start_addr = int(avl_start_addr, 16) + int(hex(reserved_ram), 16)
|
|
|
|
print("{}".format(DESC), file=config)
|
|
print('CONFIG_BOARD="{}"'.format(board_cfg_lib.BOARD_NAME), file=config)
|
|
|
|
serial_type = get_serial_type()
|
|
|
|
if serial_type == "portio":
|
|
print("CONFIG_SERIAL_LEGACY=y", file=config)
|
|
if serial_type == "mmio":
|
|
print("CONFIG_SERIAL_PCI=y", 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)
|
|
|
|
return err_dic
|