mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-26 07:21:37 +00:00
HV: link CONFIG_MAX_IOMMU_NUM and MAX_DRHDS to DRHD_COUNT
The value of CONFIG_MAX_IOMMU and MAX_DRHDS are identical to DRHD_COUNT which defined in platform ACPI table, so remove CONFIG_MAX_IOMMU_NUM from Kconfig and link these three MACROs together. Tracked-On: #3977 Signed-off-by: Victor Sun <victor.sun@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
bce4b61db7
commit
e9a1ace1cc
@ -14,13 +14,13 @@
|
|||||||
|
|
||||||
|
|
||||||
struct find_iter_args {
|
struct find_iter_args {
|
||||||
int32_t i;
|
uint32_t i;
|
||||||
struct acpi_dmar_hardware_unit *res;
|
struct acpi_dmar_hardware_unit *res;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int32_t (*dmar_iter_t)(struct acpi_dmar_header*, void*);
|
typedef int32_t (*dmar_iter_t)(struct acpi_dmar_header*, void*);
|
||||||
|
|
||||||
static int32_t dmar_unit_cnt;
|
static uint32_t dmar_unit_cnt;
|
||||||
|
|
||||||
static void *get_dmar_table(void)
|
static void *get_dmar_table(void)
|
||||||
{
|
{
|
||||||
@ -72,7 +72,7 @@ drhd_find_iter(struct acpi_dmar_header *dmar_header, void *arg)
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
args = arg;
|
args = arg;
|
||||||
if (args->i == 0) {
|
if (args->i == 0U) {
|
||||||
args->res = (struct acpi_dmar_hardware_unit *)dmar_header;
|
args->res = (struct acpi_dmar_hardware_unit *)dmar_header;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ drhd_find_iter(struct acpi_dmar_header *dmar_header, void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct acpi_dmar_hardware_unit *
|
static struct acpi_dmar_hardware_unit *
|
||||||
drhd_find_by_index(int32_t idx)
|
drhd_find_by_index(uint32_t idx)
|
||||||
{
|
{
|
||||||
struct find_iter_args args;
|
struct find_iter_args args;
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ handle_one_drhd(struct acpi_dmar_hardware_unit *acpi_drhd,
|
|||||||
|
|
||||||
int32_t parse_dmar_table(struct dmar_info *plat_dmar_info)
|
int32_t parse_dmar_table(struct dmar_info *plat_dmar_info)
|
||||||
{
|
{
|
||||||
int32_t i;
|
uint32_t i;
|
||||||
struct acpi_dmar_hardware_unit *acpi_drhd;
|
struct acpi_dmar_hardware_unit *acpi_drhd;
|
||||||
|
|
||||||
/* find out how many dmar units */
|
/* find out how many dmar units */
|
||||||
@ -238,12 +238,12 @@ int32_t parse_dmar_table(struct dmar_info *plat_dmar_info)
|
|||||||
|
|
||||||
plat_dmar_info->drhd_count = dmar_unit_cnt;
|
plat_dmar_info->drhd_count = dmar_unit_cnt;
|
||||||
|
|
||||||
for (i = 0; i < dmar_unit_cnt; i++) {
|
for (i = 0U; i < dmar_unit_cnt; i++) {
|
||||||
acpi_drhd = drhd_find_by_index(i);
|
acpi_drhd = drhd_find_by_index(i);
|
||||||
if (acpi_drhd == NULL)
|
if (acpi_drhd == NULL)
|
||||||
continue;
|
continue;
|
||||||
if (acpi_drhd->flags & DRHD_FLAG_INCLUDE_PCI_ALL_MASK)
|
if (acpi_drhd->flags & DRHD_FLAG_INCLUDE_PCI_ALL_MASK)
|
||||||
ASSERT((i+1) == dmar_unit_cnt,
|
ASSERT((i + 1U) == dmar_unit_cnt,
|
||||||
"drhd with flags set should be the last one");
|
"drhd with flags set should be the last one");
|
||||||
handle_one_drhd(acpi_drhd, &(plat_dmar_info->drhd_units[i]));
|
handle_one_drhd(acpi_drhd, &(plat_dmar_info->drhd_units[i]));
|
||||||
}
|
}
|
||||||
|
@ -73,13 +73,6 @@ config MAX_PT_IRQ_ENTRIES
|
|||||||
range 0 128
|
range 0 128
|
||||||
default 64
|
default 64
|
||||||
|
|
||||||
config MAX_IOMMU_NUM
|
|
||||||
int "Maximum number of IOMMU devices"
|
|
||||||
range 1 6
|
|
||||||
default 2
|
|
||||||
help
|
|
||||||
The maximum number of physical IOMMUs the hypervisor can support.
|
|
||||||
|
|
||||||
config STACK_SIZE
|
config STACK_SIZE
|
||||||
hex "Capacity of one stack, in bytes"
|
hex "Capacity of one stack, in bytes"
|
||||||
default 0x2000
|
default 0x2000
|
||||||
|
@ -3,4 +3,3 @@ CONFIG_BOARD="icl-rvp"
|
|||||||
CONFIG_SERIAL_LEGACY=y
|
CONFIG_SERIAL_LEGACY=y
|
||||||
CONFIG_SOS_RAM_SIZE=0x600000000
|
CONFIG_SOS_RAM_SIZE=0x600000000
|
||||||
CONFIG_UOS_RAM_SIZE=0x600000000
|
CONFIG_UOS_RAM_SIZE=0x600000000
|
||||||
CONFIG_MAX_IOMMU_NUM=3
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#define RESET_REGISTER_SPACE_ID 0UL
|
#define RESET_REGISTER_SPACE_ID 0UL
|
||||||
|
|
||||||
/* DRHD of DMAR */
|
/* DRHD of DMAR */
|
||||||
#define DRHD_COUNT 0U
|
#define DRHD_COUNT 8U
|
||||||
|
|
||||||
#define DRHD0_DEV_CNT 0U
|
#define DRHD0_DEV_CNT 0U
|
||||||
#define DRHD0_SEGMENT 0U
|
#define DRHD0_SEGMENT 0U
|
||||||
|
@ -36,6 +36,8 @@
|
|||||||
#define ROOT_ENTRY_LOWER_CTP_POS (12U)
|
#define ROOT_ENTRY_LOWER_CTP_POS (12U)
|
||||||
#define ROOT_ENTRY_LOWER_CTP_MASK (0xFFFFFFFFFFFFFUL << ROOT_ENTRY_LOWER_CTP_POS)
|
#define ROOT_ENTRY_LOWER_CTP_MASK (0xFFFFFFFFFFFFFUL << ROOT_ENTRY_LOWER_CTP_POS)
|
||||||
|
|
||||||
|
#define CONFIG_MAX_IOMMU_NUM DRHD_COUNT
|
||||||
|
|
||||||
/* 4 iommu fault register state */
|
/* 4 iommu fault register state */
|
||||||
#define IOMMU_FAULT_REGISTER_STATE_NUM 4U
|
#define IOMMU_FAULT_REGISTER_STATE_NUM 4U
|
||||||
#define IOMMU_FAULT_REGISTER_SIZE 4U
|
#define IOMMU_FAULT_REGISTER_SIZE 4U
|
||||||
@ -188,7 +190,7 @@ bool iommu_snoop_supported(const struct iommu_domain *iommu)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct dmar_drhd_rt dmar_drhd_units[CONFIG_MAX_IOMMU_NUM];
|
static struct dmar_drhd_rt dmar_drhd_units[MAX_DRHDS];
|
||||||
static bool iommu_page_walk_coherent = true;
|
static bool iommu_page_walk_coherent = true;
|
||||||
static uint32_t qi_status = 0U;
|
static uint32_t qi_status = 0U;
|
||||||
static struct dmar_info *platform_dmar_info = NULL;
|
static struct dmar_info *platform_dmar_info = NULL;
|
||||||
|
@ -47,44 +47,6 @@ static struct dmar_dev_scope drhd1_dev_scope[MAX_DRHD_DEVSCOPES] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct dmar_dev_scope drhd2_dev_scope[MAX_DRHD_DEVSCOPES] = {
|
|
||||||
{
|
|
||||||
.bus = DRHD2_DEVSCOPE0_BUS,
|
|
||||||
.devfun = DRHD2_DEVSCOPE0_PATH
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.bus = DRHD2_DEVSCOPE1_BUS,
|
|
||||||
.devfun = DRHD2_DEVSCOPE1_PATH
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.bus = DRHD2_DEVSCOPE2_BUS,
|
|
||||||
.devfun = DRHD2_DEVSCOPE2_PATH
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.bus = DRHD2_DEVSCOPE3_BUS,
|
|
||||||
.devfun = DRHD2_DEVSCOPE3_PATH
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct dmar_dev_scope drhd3_dev_scope[MAX_DRHD_DEVSCOPES] = {
|
|
||||||
{
|
|
||||||
.bus = DRHD3_DEVSCOPE0_BUS,
|
|
||||||
.devfun = DRHD3_DEVSCOPE0_PATH
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.bus = DRHD3_DEVSCOPE1_BUS,
|
|
||||||
.devfun = DRHD3_DEVSCOPE1_PATH
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.bus = DRHD3_DEVSCOPE2_BUS,
|
|
||||||
.devfun = DRHD3_DEVSCOPE2_PATH
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.bus = DRHD3_DEVSCOPE3_BUS,
|
|
||||||
.devfun = DRHD3_DEVSCOPE3_PATH
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct dmar_drhd drhd_info_array[MAX_DRHDS] = {
|
static struct dmar_drhd drhd_info_array[MAX_DRHDS] = {
|
||||||
{
|
{
|
||||||
.dev_cnt = DRHD0_DEV_CNT,
|
.dev_cnt = DRHD0_DEV_CNT,
|
||||||
@ -102,22 +64,6 @@ static struct dmar_drhd drhd_info_array[MAX_DRHDS] = {
|
|||||||
.ignore = DRHD1_IGNORE,
|
.ignore = DRHD1_IGNORE,
|
||||||
.devices = drhd1_dev_scope
|
.devices = drhd1_dev_scope
|
||||||
},
|
},
|
||||||
{
|
|
||||||
.dev_cnt = DRHD2_DEV_CNT,
|
|
||||||
.segment = DRHD2_SEGMENT,
|
|
||||||
.flags = DRHD2_FLAGS,
|
|
||||||
.reg_base_addr = DRHD2_REG_BASE,
|
|
||||||
.ignore = DRHD2_IGNORE,
|
|
||||||
.devices = drhd2_dev_scope
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.dev_cnt = DRHD3_DEV_CNT,
|
|
||||||
.segment = DRHD3_SEGMENT,
|
|
||||||
.flags = DRHD3_FLAGS,
|
|
||||||
.reg_base_addr = DRHD3_REG_BASE,
|
|
||||||
.ignore = DRHD3_IGNORE,
|
|
||||||
.devices = drhd3_dev_scope
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct dmar_info plat_dmar_info = {
|
static struct dmar_info plat_dmar_info = {
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
#define VTD_H
|
#define VTD_H
|
||||||
#include <types.h>
|
#include <types.h>
|
||||||
#include <pci.h>
|
#include <pci.h>
|
||||||
|
#include <platform_acpi_info.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Intel IOMMU register specification per version 1.0 public spec.
|
* Intel IOMMU register specification per version 1.0 public spec.
|
||||||
*/
|
*/
|
||||||
@ -468,7 +470,7 @@ static inline uint16_t dma_frcd_up_sid(uint64_t up_sid)
|
|||||||
return ((uint16_t)up_sid & 0xffffU);
|
return ((uint16_t)up_sid & 0xffffU);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAX_DRHDS 4
|
#define MAX_DRHDS DRHD_COUNT
|
||||||
#define MAX_DRHD_DEVSCOPES 4
|
#define MAX_DRHD_DEVSCOPES 4
|
||||||
|
|
||||||
#define DMAR_CONTEXT_TRANSLATION_TYPE_TRANSLATED 0x00U
|
#define DMAR_CONTEXT_TRANSLATION_TYPE_TRANSLATED 0x00U
|
||||||
|
Loading…
Reference in New Issue
Block a user