acrn-config: generate proper msr_index value for CLOS
Since msr_index relys on the MSR_IA32_L2_QOS_MASKn(n:max to 3) macro which defined in hv source code, generate array that CLOS number more than 4 means need define more than 4 macro. This patch solve such issue by using MSR_IA32_L2/L3_MASK_BASE with the msr index offset. Tracked-On: #3854 Signed-off-by: Wei Liu <weix.w.liu@intel.com> Acked-by: Victor Sun <victor.sun@intel.com>
This commit is contained in:
parent
6d9ff40183
commit
ad9f424ce5
|
@ -7,6 +7,17 @@ import sys
|
||||||
import board_cfg_lib
|
import board_cfg_lib
|
||||||
|
|
||||||
|
|
||||||
|
INCLUDE_HEADER = """
|
||||||
|
#include <board.h>
|
||||||
|
#include <vtd.h>"""
|
||||||
|
|
||||||
|
|
||||||
|
MSR_IA32_L2_MASK_BASE = 0x00000D10
|
||||||
|
MSR_IA32_L2_MASK_END = 0x00000D4F
|
||||||
|
MSR_IA32_L3_MASK_BASE = 0x00000C90
|
||||||
|
MSR_IA32_L3_MASK_END = 0x00000D0F
|
||||||
|
|
||||||
|
|
||||||
def gen_cat(config):
|
def gen_cat(config):
|
||||||
"""
|
"""
|
||||||
Get CAT information
|
Get CAT information
|
||||||
|
@ -15,34 +26,30 @@ def gen_cat(config):
|
||||||
err_dic = {}
|
err_dic = {}
|
||||||
(cache_support, clos_max) = board_cfg_lib.clos_info_parser(board_cfg_lib.BOARD_INFO_FILE)
|
(cache_support, clos_max) = board_cfg_lib.clos_info_parser(board_cfg_lib.BOARD_INFO_FILE)
|
||||||
|
|
||||||
print("\n#include <board.h>", file=config)
|
if clos_max > MSR_IA32_L2_MASK_END - MSR_IA32_L2_MASK_BASE or\
|
||||||
print("#include <acrn_common.h>", file=config)
|
clos_max > MSR_IA32_L3_MASK_END - MSR_IA32_L3_MASK_BASE:
|
||||||
print("#include <msr.h>", file=config)
|
err_dic["board config: generate board.c failed"] = "CLOS MAX should be less than reserved adress region length of L2/L3 cache"
|
||||||
|
return err_dic
|
||||||
|
|
||||||
if cache_support == "False" or clos_max == 0:
|
if cache_support == "False" or clos_max == 0:
|
||||||
print("\nstruct platform_clos_info platform_clos_array[0];", file=config)
|
print("\nstruct platform_clos_info platform_clos_array[MAX_PLATFORM_CLOS_NUM];", file=config)
|
||||||
print("uint16_t platform_clos_num = 0;", file=config)
|
|
||||||
else:
|
else:
|
||||||
print("\nstruct platform_clos_info platform_clos_array[{0}] = {{".format(
|
print("\nstruct platform_clos_info platform_clos_array[{}] = {{".format(
|
||||||
clos_max), file=config)
|
"MAX_PLATFORM_CLOS_NUM"), file=config)
|
||||||
for i_cnt in range(clos_max):
|
for i_cnt in range(clos_max):
|
||||||
print("\t{", file=config)
|
print("\t{", file=config)
|
||||||
|
|
||||||
print("\t\t.clos_mask = {0},".format(hex(0xff)), file=config)
|
print("\t\t.clos_mask = {0}U,".format(hex(0xff)), file=config)
|
||||||
if cache_support == "L2":
|
if cache_support == "L2":
|
||||||
print("\t\t.msr_index = MSR_IA32_{0}_MASK_{1},".format(
|
print("\t\t.msr_index = MSR_IA32_L2_MASK_BASE + {}U,".format(i_cnt), file=config)
|
||||||
cache_support, i_cnt), file=config)
|
|
||||||
elif cache_support == "L3":
|
elif cache_support == "L3":
|
||||||
print("\t\t.msr_index = {0}U,".format(hex(0x00000C90+i_cnt)), file=config)
|
print("\t\t.msr_index = MSR_IA32_L3_MASK_BASE + {}U,".format(i_cnt), file=config)
|
||||||
else:
|
else:
|
||||||
err_dic['board config: generate board.c failed'] = "The input of {} was corrupted!".format(board_cfg_lib.BOARD_INFO_FILE)
|
err_dic['board config: generate board.c failed'] = "The input of {} was corrupted!".format(board_cfg_lib.BOARD_INFO_FILE)
|
||||||
return err_dic
|
return err_dic
|
||||||
print("\t},", file=config)
|
print("\t},", file=config)
|
||||||
|
|
||||||
print("};\n", file=config)
|
print("};\n", file=config)
|
||||||
print("uint16_t platform_clos_num = ", file=config, end="")
|
|
||||||
print("(uint16_t)(sizeof(platform_clos_array)/sizeof(struct platform_clos_info));",
|
|
||||||
file=config)
|
|
||||||
|
|
||||||
print("", file=config)
|
print("", file=config)
|
||||||
return err_dic
|
return err_dic
|
||||||
|
@ -92,6 +99,7 @@ def generate_file(config):
|
||||||
|
|
||||||
# insert bios info into board.c
|
# insert bios info into board.c
|
||||||
board_cfg_lib.handle_bios_info(config)
|
board_cfg_lib.handle_bios_info(config)
|
||||||
|
print(INCLUDE_HEADER, file=config)
|
||||||
|
|
||||||
# start to parser to get CAT info
|
# start to parser to get CAT info
|
||||||
err_dic = gen_cat(config)
|
err_dic = gen_cat(config)
|
||||||
|
|
|
@ -124,6 +124,10 @@ def generate_file(config):
|
||||||
# define CONFIG_MAX_PCPCU_NUM
|
# define CONFIG_MAX_PCPCU_NUM
|
||||||
print("#define CONFIG_MAX_PCPU_NUM\t{}U".format(max_cpu_num), file=config)
|
print("#define CONFIG_MAX_PCPU_NUM\t{}U".format(max_cpu_num), file=config)
|
||||||
|
|
||||||
|
# set macro of max clos number
|
||||||
|
(cache_support, clos_max) = board_cfg_lib.clos_info_parser(board_cfg_lib.BOARD_INFO_FILE)
|
||||||
|
print("#define MAX_PLATFORM_CLOS_NUM\t{}U".format(clos_max), file=config)
|
||||||
|
|
||||||
# define rootfs with macro
|
# define rootfs with macro
|
||||||
for i in range(root_dev_num):
|
for i in range(root_dev_num):
|
||||||
print('#define ROOTFS_{}\t\t"root={} "'.format(i, root_devs[i]), file=config)
|
print('#define ROOTFS_{}\t\t"root={} "'.format(i, root_devs[i]), file=config)
|
||||||
|
|
Loading…
Reference in New Issue