[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC v2 03/22] intel_iommu: modify x-scalable-mode to be string option
From: |
Liu Yi L |
Subject: |
[RFC v2 03/22] intel_iommu: modify x-scalable-mode to be string option |
Date: |
Thu, 24 Oct 2019 08:34:24 -0400 |
Intel VT-d 3.0 introduces scalable mode, and it has a bunch of capabilities
related to scalable mode translation, thus there are multiple combinations.
While this vIOMMU implementation wants simplify it for user by providing
typical combinations. User could config it by "x-scalable-mode" option. The
usage is as below:
"-device intel-iommu,x-scalable-mode=["legacy"|"modern"]"
- "legacy": gives support for SL page table
- "modern": gives support for FL page table, pasid, virtual command
- if not configured, means no scalable mode support, if not proper
configured, will throw error
Cc: Kevin Tian <address@hidden>
Cc: Jacob Pan <address@hidden>
Cc: Peter Xu <address@hidden>
Cc: Yi Sun <address@hidden>
Signed-off-by: Liu Yi L <address@hidden>
Signed-off-by: Yi Sun <address@hidden>
---
hw/i386/intel_iommu.c | 15 +++++++++++++--
hw/i386/intel_iommu_internal.h | 3 +++
include/hw/i386/intel_iommu.h | 2 +-
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index 771bed2..4a1a07a 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -3019,7 +3019,7 @@ static Property vtd_properties[] = {
DEFINE_PROP_UINT8("aw-bits", IntelIOMMUState, aw_bits,
VTD_HOST_ADDRESS_WIDTH),
DEFINE_PROP_BOOL("caching-mode", IntelIOMMUState, caching_mode, FALSE),
- DEFINE_PROP_BOOL("x-scalable-mode", IntelIOMMUState, scalable_mode, FALSE),
+ DEFINE_PROP_STRING("x-scalable-mode", IntelIOMMUState, scalable_mode),
DEFINE_PROP_BOOL("dma-drain", IntelIOMMUState, dma_drain, true),
DEFINE_PROP_END_OF_LIST(),
};
@@ -3581,7 +3581,12 @@ static void vtd_init(IntelIOMMUState *s)
/* TODO: read cap/ecap from host to decide which cap to be exposed. */
if (s->scalable_mode) {
- s->ecap |= VTD_ECAP_SMTS | VTD_ECAP_SRS | VTD_ECAP_SLTS;
+ if (!strcmp(s->scalable_mode, "legacy")) {
+ s->ecap |= VTD_ECAP_SMTS | VTD_ECAP_SRS | VTD_ECAP_SLTS;
+ } else if (!strcmp(s->scalable_mode, "modern")) {
+ s->ecap |= VTD_ECAP_SMTS | VTD_ECAP_SRS | VTD_ECAP_PASID
+ | VTD_ECAP_FLTS | VTD_ECAP_PSS;
+ }
}
vtd_reset_caches(s);
@@ -3700,6 +3705,12 @@ static bool vtd_decide_config(IntelIOMMUState *s, Error
**errp)
return false;
}
+ if (s->scalable_mode &&
+ (strcmp(s->scalable_mode, "modern") &&
+ strcmp(s->scalable_mode, "legacy"))) {
+ error_setg(errp, "Invalid x-scalable-mode config");
+ }
+
return true;
}
diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h
index c1235a7..be7b30a 100644
--- a/hw/i386/intel_iommu_internal.h
+++ b/hw/i386/intel_iommu_internal.h
@@ -190,8 +190,11 @@
#define VTD_ECAP_PT (1ULL << 6)
#define VTD_ECAP_MHMV (15ULL << 20)
#define VTD_ECAP_SRS (1ULL << 31)
+#define VTD_ECAP_PSS (19ULL << 35)
+#define VTD_ECAP_PASID (1ULL << 40)
#define VTD_ECAP_SMTS (1ULL << 43)
#define VTD_ECAP_SLTS (1ULL << 46)
+#define VTD_ECAP_FLTS (1ULL << 47)
/* CAP_REG */
/* (offset >> 4) << 24 */
diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h
index 66b931e..6062588 100644
--- a/include/hw/i386/intel_iommu.h
+++ b/include/hw/i386/intel_iommu.h
@@ -231,7 +231,7 @@ struct IntelIOMMUState {
uint32_t version;
bool caching_mode; /* RO - is cap CM enabled? */
- bool scalable_mode; /* RO - is Scalable Mode supported? */
+ char *scalable_mode; /* RO - Scalable Mode model */
dma_addr_t root; /* Current root table pointer */
bool root_scalable; /* Type of root table (scalable or not) */
--
2.7.4
- [RFC v2 00/22] intel_iommu: expose Shared Virtual Addressing to VM, Liu Yi L, 2019/10/24
- [RFC v2 01/22] update-linux-headers: Import iommu.h, Liu Yi L, 2019/10/24
- [RFC v2 06/22] hw/pci: modify pci_setup_iommu() to set PCIIOMMUOps, Liu Yi L, 2019/10/24
- [RFC v2 09/22] vfio/pci: add iommu_context notifier for pasid alloc/free, Liu Yi L, 2019/10/24
- [RFC v2 10/22] intel_iommu: add virtual command capability support, Liu Yi L, 2019/10/24
- [RFC v2 05/22] vfio/common: add iommu_ctx_notifier in container, Liu Yi L, 2019/10/24
- [RFC v2 03/22] intel_iommu: modify x-scalable-mode to be string option,
Liu Yi L <=
- [RFC v2 04/22] hw/iommu: introduce IOMMUContext, Liu Yi L, 2019/10/24
- [RFC v2 07/22] hw/pci: introduce pci_device_iommu_context(), Liu Yi L, 2019/10/24
- [RFC v2 08/22] intel_iommu: provide get_iommu_context() callback, Liu Yi L, 2019/10/24
- [RFC v2 02/22] header update VFIO/IOMMU vSVA APIs against 5.4.0-rc3+, Liu Yi L, 2019/10/24
- [RFC v2 11/22] intel_iommu: process pasid cache invalidation, Liu Yi L, 2019/10/24
- [RFC v2 12/22] intel_iommu: add present bit check for pasid table entries, Liu Yi L, 2019/10/24
- [RFC v2 14/22] vfio/pci: add iommu_context notifier for pasid bind/unbind, Liu Yi L, 2019/10/24
- [RFC v2 13/22] intel_iommu: add PASID cache management infrastructure, Liu Yi L, 2019/10/24