On 5/28/2026 1:42 AM, Eric Auger wrote:
On 5/28/26 12:16 AM, Nathan Chen wrote:
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.

Reviewed-by: Shameer Kolothum<[email protected]>
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 97ac893d86..4e630b6403 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)
@@ -2164,22 +2171,22 @@ static void smmuv3_class_init(ObjectClass *klass, const 
void *data)
          "device assignment before enabling.");
      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."
          "Please ensure the value does not exceed the maximum "
          "Output Address Size supported by the host platform.");
      object_class_property_set_description(klass, "ssidsize",
          "Set number of bits used to represent SubstreamIDs (SSIDs). "
-        "Valid values are 0-20 and auto. Defaults to 0. "
+        "Valid values are 0-20 and auto. Defaults to auto. "
          "A value of N allows SSIDs in the range [0 .. 2^N - 1]. "
          "A value of 0 disables SubstreamID support. A value greater "
          "than 0 is required to enable PASID support."
also I think the set value sould be <= host range, to make it consistent
with the rest, no?

Eric
Yes, I will include it for ssidsize in the next refresh.

Thanks,
Nathan

diff --git a/hw/core/machine.c b/hw/core/machine.c
index 63baff859f..3339da99ee 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -38,9 +38,14 @@
  #include "hw/virtio/virtio-iommu.h"
  #include "hw/acpi/generic_event_device.h"
  #include "qemu/audio.h"
+#include "hw/arm/smmuv3.h"
GlobalProperty hw_compat_11_0[] = {
      { "chardev-vc", "encoding", "cp437" },
+    { TYPE_ARM_SMMUV3, "ats", "off" },
+    { TYPE_ARM_SMMUV3, "ril", "on" },
+    { TYPE_ARM_SMMUV3, "ssidsize", "0" },
+    { TYPE_ARM_SMMUV3, "oas", "44" },
  };
  const size_t hw_compat_11_0_len = G_N_ELEMENTS(hw_compat_11_0);


Reply via email to