On 3/12/2026 2:29 AM, Eric Auger wrote:

On 3/11/26 7:24 PM, Nathan Chen wrote:
Hi Eric,

On 3/11/2026 11:20 AM, Eric Auger wrote:
Hi Nathan,

On 3/9/26 8:21 PM, Nathan Chen wrote:
From: Nathan Chen<[email protected]>

Introduce a new enum type property allowing to set an Output Address
Size. Values are auto, 44, and 48, where a value of N specifies an
N-bit OAS.

Signed-off-by: Nathan Chen<[email protected]>
---
   hw/core/qdev-properties-system.c         | 13 +++++++++++++
   include/hw/core/qdev-properties-system.h |  3 +++
   qapi/misc-arm.json                       | 16 ++++++++++++++++
   3 files changed, 32 insertions(+)

diff --git a/hw/core/qdev-properties-system.c
b/hw/core/qdev-properties-system.c
index 4aca1d4326..a805ee2e1f 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -737,6 +737,19 @@ const PropertyInfo qdev_prop_ssidsize_mode = {
       .set_default_value = qdev_propinfo_set_default_value_enum,
   };
   +/* --- OasMode --- */
+
+QEMU_BUILD_BUG_ON(sizeof(OasMode) != sizeof(int));
+
+const PropertyInfo qdev_prop_oas_mode = {
+    .type = "OasMode",
+    .description = "oas mode: auto, 32, 36, 40, 42, 44, 48, 52, 56",
+    .enum_table = &OasMode_lookup,
+    .get = qdev_propinfo_get_enum,
+    .set = qdev_propinfo_set_enum,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
+};
+
   /* --- Reserved Region --- */
     /*
diff --git a/include/hw/core/qdev-properties-system.h
b/include/hw/core/qdev-properties-system.h
index 4708885164..2cbea16d61 100644
--- a/include/hw/core/qdev-properties-system.h
+++ b/include/hw/core/qdev-properties-system.h
@@ -15,6 +15,7 @@ extern const PropertyInfo qdev_prop_mig_mode;
   extern const PropertyInfo qdev_prop_granule_mode;
   extern const PropertyInfo qdev_prop_zero_page_detection;
   extern const PropertyInfo qdev_prop_ssidsize_mode;
+extern const PropertyInfo qdev_prop_oas_mode;
   extern const PropertyInfo qdev_prop_losttickpolicy;
   extern const PropertyInfo qdev_prop_blockdev_on_error;
   extern const PropertyInfo qdev_prop_bios_chs_trans;
@@ -64,6 +65,8 @@ extern const PropertyInfo
qdev_prop_virtio_gpu_output_list;
                          ZeroPageDetection)
   #define DEFINE_PROP_SSIDSIZE_MODE(_n, _s, _f, _d) \
       DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_ssidsize_mode,
SsidSizeMode)
+#define DEFINE_PROP_OAS_MODE(_n, _s, _f, _d) \
+    DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_oas_mode, OasMode)
   #define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
       DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
                           LostTickPolicy)
diff --git a/qapi/misc-arm.json b/qapi/misc-arm.json
index b372a3661b..76b6965502 100644
--- a/qapi/misc-arm.json
+++ b/qapi/misc-arm.json
@@ -60,3 +60,19 @@
   { 'enum': 'SsidSizeMode',
     'data': [ 'auto', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
               '10', '11', '12', '13', '14', '15', '16', '17', '18',
'19', '20' ] }
+
+##
+# @OasMode:
+#
+# SMMUv3 Output Address Size configuration mode.
+#
+# @auto: derive from host IOMMU capabilities
+#
+# @44: 44-bit output address size
+#
+# @48: 48-bit output address size
+#
+# Since: 11.0
+##
+{ 'enum': 'OasMode',
+  'data': [ 'auto', '44', '48' ] }
you also miss other enum values
I left out the other possible OAS values because only 44 and 48 are
supported per the previous accel SMMUv3 series. Should we still
include the other possible OAS values according to the SMMUv3 spec? If
we do, we would end up hitting that check for 44 or 48 bit OAS when a
different value is specified.
I think we want to want to provision for all values supported by the
SMMUv3 spec

Ok, I will include all the values in the next refresh.

Thanks,
Nathan

Reply via email to