From: Nathan Chen<[email protected]>
Set the default value of ATS, RIL, SSIDSIZE, and OAS to auto, in order
to match the host IOMMU properties when accel=on.
If accel=off and these property values are set to auto, the default
property values defined in smmuv3_init_id_regs() for OAS and RIL will
remain unchanged, while SSIDSIZE and ATS values will remain initialized
at 0.
Introduce a new compat for the changed defaults.
Signed-off-by: Nathan Chen<[email protected]>
---
hw/arm/smmuv3.c | 23 +++++++++++++++--------
hw/core/machine.c | 5 +++++
2 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c
index 31c2eec2f4..665e6a2538 100644
--- a/hw/arm/smmuv3.c
+++ b/hw/arm/smmuv3.c
@@ -2129,12 +2129,19 @@ static const Property smmuv3_properties[] = {
DEFINE_PROP_BOOL("accel", SMMUv3State, accel, false),
/* GPA of MSI doorbell, for SMMUv3 accel use. */
DEFINE_PROP_UINT64("msi-gpa", SMMUv3State, msi_gpa, 0),
+ /*
+ * AUTO values for accel=off will resolve to:
+ * ril: on
+ * ats: off
+ * oas: 44
+ * ssidsize: 0
+ */
/* RIL can be turned off for accel cases */
- DEFINE_PROP_ON_OFF_AUTO("ril", SMMUv3State, ril, ON_OFF_AUTO_ON),
- DEFINE_PROP_ON_OFF_AUTO("ats", SMMUv3State, ats, ON_OFF_AUTO_OFF),
- DEFINE_PROP_OAS_MODE("oas", SMMUv3State, oas, OAS_MODE_44),
+ DEFINE_PROP_ON_OFF_AUTO("ril", SMMUv3State, ril, ON_OFF_AUTO_AUTO),
+ DEFINE_PROP_ON_OFF_AUTO("ats", SMMUv3State, ats, ON_OFF_AUTO_AUTO),
+ DEFINE_PROP_OAS_MODE("oas", SMMUv3State, oas, OAS_MODE_AUTO),
DEFINE_PROP_SSIDSIZE_MODE("ssidsize", SMMUv3State, ssidsize,
- SSID_SIZE_MODE_0),
+ SSID_SIZE_MODE_AUTO),
};
static void smmuv3_instance_init(Object *obj)
@@ -2162,20 +2169,20 @@ static void smmuv3_class_init(ObjectClass *klass, const
void *data)
"configured in nested mode for vfio-pci dev assignment");
object_class_property_set_description(klass, "ril",
"Enable/disable range invalidation support (for accel=on). "
- "Valid values are on, off, and auto. Defaults to on. "
+ "Valid values are on, off, and auto. Defaults to auto. "
"Any attempt to turn it 'on' while the host does not support "
"it would fail.");
object_class_property_set_description(klass, "ats",
"Enable/disable ATS support (for accel=on). "
- "Valid values are on, off, and auto. Defaults to off. "
+ "Valid values are on, off, and auto. Defaults to auto. "
"Please ensure host platform supports ATS before setting it "
"to on.");
object_class_property_set_description(klass, "oas",
"Set Output Address Size in bits (for accel=on). "
- "Valid values are 44, 48, and auto. Defaults to 44 bits.");
+ "Valid values are 44, 48, and auto. Defaults to auto.");