Hi Nathan,
On 4/22/26 10:43 PM, Nathan Chen wrote:
> 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 | 14 +++++++-------
> hw/core/machine.c | 8 ++++++++
> 2 files changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c
> index 39a6f72938..e8ca6be34a 100644
> --- a/hw/arm/smmuv3.c
> +++ b/hw/arm/smmuv3.c
> @@ -2135,11 +2135,11 @@ static const Property smmuv3_properties[] = {
> /* GPA of MSI doorbell, for SMMUv3 accel use. */
> DEFINE_PROP_UINT64("msi-gpa", SMMUv3State, msi_gpa, 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),
The previous suggestions I gave wrt AUTO mode only held for accel mode.
So maybe we should put the consolidated info in qemu-options.hx and not inĀ
object_class_property_set_description. In this latter we shall only list valid
value default.
Here I would add a comment reemphasizing that AUTO values for non accel
is ON/OFF/44/0
Thanks
Eric
> DEFINE_PROP_SSIDSIZE_MODE("ssidsize", SMMUv3State, ssidsize,
> - SSID_SIZE_MODE_0),
> + SSID_SIZE_MODE_AUTO),
> };
>
> static void smmuv3_instance_init(Object *obj)
> @@ -2167,7 +2167,7 @@ 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. "
> "Please enable if host platform supports RIL, and disable if "
> "host platform does not support RIL.");
> object_class_property_set_description(klass, "ats",
> @@ -2176,10 +2176,10 @@ static void smmuv3_class_init(ObjectClass *klass,
> const void *data)
> "Please ensure host platform supports ATS before enabling.");
> 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.");
> 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.");
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 0aa77a57e9..a668bb2ec3 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -37,6 +37,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[] = {
> + { TYPE_ARM_SMMUV3, "ats", "off" },
> + { TYPE_ARM_SMMUV3, "ril", "on" },
> + { TYPE_ARM_SMMUV3, "ssidsize", "0" },
> + { TYPE_ARM_SMMUV3, "oas", "44" },
> +};
>
> GlobalProperty hw_compat_10_2[] = {
> { "scsi-block", "migrate-pr", "off" },