diff mbox series

[v6,8/9] hw/arm/virt: Set virtio-iommu aw-bits default value to 48

Message ID 20240305180734.48515-9-eric.auger@redhat.com
State New
Headers show
Series VIRTIO-IOMMU: Introduce aw-bits and granule options | expand

Commit Message

Eric Auger March 5, 2024, 6:06 p.m. UTC
On ARM we set 48b as a default (matching SMMUv3 SMMU_IDR5.VAX == 0).

hw_compat_8_2 is used to handle the compatibility for machine types
before 9.0 (default was 64 bits).

Signed-off-by: Eric Auger <eric.auger@redhat.com>
---
 hw/arm/virt.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

Comments

Duan, Zhenzhong March 6, 2024, 3:25 a.m. UTC | #1
>-----Original Message-----
>From: Eric Auger <eric.auger@redhat.com>
>Subject: [PATCH v6 8/9] hw/arm/virt: Set virtio-iommu aw-bits default value
>to 48
>
>On ARM we set 48b as a default (matching SMMUv3 SMMU_IDR5.VAX == 0).
>
>hw_compat_8_2 is used to handle the compatibility for machine types
>before 9.0 (default was 64 bits).
>
>Signed-off-by: Eric Auger <eric.auger@redhat.com>
>---
> hw/arm/virt.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
>diff --git a/hw/arm/virt.c b/hw/arm/virt.c
>index 0af1943697..dcfb25369b 100644
>--- a/hw/arm/virt.c
>+++ b/hw/arm/virt.c
>@@ -85,11 +85,28 @@
> #include "hw/char/pl011.h"
> #include "qemu/guest-random.h"
>
>+GlobalProperty arm_virt_compat[] = {
>+    { TYPE_VIRTIO_IOMMU_PCI, "aw-bits", "48" },
>+};
>+const size_t arm_virt_compat_len = G_N_ELEMENTS(arm_virt_compat);

This can be static, otherwise,

Reviewed-by: Zhenzhong Duan <Zhenzhong.duan@intel.com>

Thanks
Zhenzhong

>+
>+/*
>+ * This cannot be called from the virt_machine_class_init() because
>+ * TYPE_VIRT_MACHINE is abstract and mc->compat_props
>g_ptr_array_new()
>+ * only is called on virt non abstract class init.
>+ */
>+static void arm_virt_compat_set(MachineClass *mc)
>+{
>+    compat_props_add(mc->compat_props, arm_virt_compat,
>+                     arm_virt_compat_len);
>+}
>+
> #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \
>     static void virt_##major##_##minor##_class_init(ObjectClass *oc, \
>                                                     void *data) \
>     { \
>         MachineClass *mc = MACHINE_CLASS(oc); \
>+        arm_virt_compat_set(mc); \
>         virt_machine_##major##_##minor##_options(mc); \
>         mc->desc = "QEMU " # major "." # minor " ARM Virtual Machine"; \
>         if (latest) { \
>--
>2.41.0
Eric Auger March 6, 2024, 8:11 a.m. UTC | #2
On 3/6/24 04:25, Duan, Zhenzhong wrote:
>
>> -----Original Message-----
>> From: Eric Auger <eric.auger@redhat.com>
>> Subject: [PATCH v6 8/9] hw/arm/virt: Set virtio-iommu aw-bits default value
>> to 48
>>
>> On ARM we set 48b as a default (matching SMMUv3 SMMU_IDR5.VAX == 0).
>>
>> hw_compat_8_2 is used to handle the compatibility for machine types
>> before 9.0 (default was 64 bits).
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>> ---
>> hw/arm/virt.c | 17 +++++++++++++++++
>> 1 file changed, 17 insertions(+)
>>
>> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
>> index 0af1943697..dcfb25369b 100644
>> --- a/hw/arm/virt.c
>> +++ b/hw/arm/virt.c
>> @@ -85,11 +85,28 @@
>> #include "hw/char/pl011.h"
>> #include "qemu/guest-random.h"
>>
>> +GlobalProperty arm_virt_compat[] = {
>> +    { TYPE_VIRTIO_IOMMU_PCI, "aw-bits", "48" },
>> +};
>> +const size_t arm_virt_compat_len = G_N_ELEMENTS(arm_virt_compat);
> This can be static, otherwise,
sure
>
> Reviewed-by: Zhenzhong Duan <Zhenzhong.duan@intel.com>
thanks!

Eric
>
> Thanks
> Zhenzhong
>
>> +
>> +/*
>> + * This cannot be called from the virt_machine_class_init() because
>> + * TYPE_VIRT_MACHINE is abstract and mc->compat_props
>> g_ptr_array_new()
>> + * only is called on virt non abstract class init.
>> + */
>> +static void arm_virt_compat_set(MachineClass *mc)
>> +{
>> +    compat_props_add(mc->compat_props, arm_virt_compat,
>> +                     arm_virt_compat_len);
>> +}
>> +
>> #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \
>>     static void virt_##major##_##minor##_class_init(ObjectClass *oc, \
>>                                                     void *data) \
>>     { \
>>         MachineClass *mc = MACHINE_CLASS(oc); \
>> +        arm_virt_compat_set(mc); \
>>         virt_machine_##major##_##minor##_options(mc); \
>>         mc->desc = "QEMU " # major "." # minor " ARM Virtual Machine"; \
>>         if (latest) { \
>> --
>> 2.41.0
diff mbox series

Patch

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 0af1943697..dcfb25369b 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -85,11 +85,28 @@ 
 #include "hw/char/pl011.h"
 #include "qemu/guest-random.h"
 
+GlobalProperty arm_virt_compat[] = {
+    { TYPE_VIRTIO_IOMMU_PCI, "aw-bits", "48" },
+};
+const size_t arm_virt_compat_len = G_N_ELEMENTS(arm_virt_compat);
+
+/*
+ * This cannot be called from the virt_machine_class_init() because
+ * TYPE_VIRT_MACHINE is abstract and mc->compat_props g_ptr_array_new()
+ * only is called on virt non abstract class init.
+ */
+static void arm_virt_compat_set(MachineClass *mc)
+{
+    compat_props_add(mc->compat_props, arm_virt_compat,
+                     arm_virt_compat_len);
+}
+
 #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \
     static void virt_##major##_##minor##_class_init(ObjectClass *oc, \
                                                     void *data) \
     { \
         MachineClass *mc = MACHINE_CLASS(oc); \
+        arm_virt_compat_set(mc); \
         virt_machine_##major##_##minor##_options(mc); \
         mc->desc = "QEMU " # major "." # minor " ARM Virtual Machine"; \
         if (latest) { \