>-----Original Message-----
>From: Eric Auger <eric.au...@redhat.com>
>Subject: Re: [PATCH rfcv2 08/20] iommufd: Implement query of
>HOST_IOMMU_DEVICE_CAP_ERRATA
>
>
>
>
>On 2/19/25 9:22 AM, Zhenzhong Duan wrote:
>> Implement query of HOST_IOMMU_DEVICE_CAP_ERRATA for IOMMUFD
>> backed host IOMMU device.
>>
>> Query on this capability is not supported for legacy backend
>> because there is no plan to support nesting with leacy backend
>legacy
>> backed host device.
>>
>> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com>
>> ---
>> include/system/host_iommu_device.h | 2 ++
>> backends/iommufd.c | 2 ++
>> hw/vfio/iommufd.c | 1 +
>> 3 files changed, 5 insertions(+)
>>
>> diff --git a/include/system/host_iommu_device.h
>b/include/system/host_iommu_device.h
>> index 18f8b5e5cf..250600fc1d 100644
>> --- a/include/system/host_iommu_device.h
>> +++ b/include/system/host_iommu_device.h
>> @@ -32,6 +32,7 @@ typedef struct HostIOMMUDeviceCaps {
>> uint64_t hw_caps;
>> bool nesting;
>> bool fs1gp;
>> + uint32_t errata;
>to be consistent with the others yu may have introduced this alongside
>with the 2 others?
>This is also not usable by other IOMMUs.
Yes, this is vendor specific element. Will merge after confirm nesting and fs1gp
are vendor specific too.
Thanks
Zhenzhong
>
>Eric
>> } HostIOMMUDeviceCaps;
>>
>> #define TYPE_HOST_IOMMU_DEVICE "host-iommu-device"
>> @@ -130,6 +131,7 @@ struct HostIOMMUDeviceClass {
>> #define HOST_IOMMU_DEVICE_CAP_AW_BITS 1
>> #define HOST_IOMMU_DEVICE_CAP_NESTING 2
>> #define HOST_IOMMU_DEVICE_CAP_FS1GP 3
>> +#define HOST_IOMMU_DEVICE_CAP_ERRATA 4
>>
>> #define HOST_IOMMU_DEVICE_CAP_AW_BITS_MAX 64
>> #endif
>> diff --git a/backends/iommufd.c b/backends/iommufd.c
>> index 0a1a40cbba..3c23caef96 100644
>> --- a/backends/iommufd.c
>> +++ b/backends/iommufd.c
>> @@ -374,6 +374,8 @@ static int hiod_iommufd_get_cap(HostIOMMUDevice
>*hiod, int cap, Error **errp)
>> return caps->nesting;
>> case HOST_IOMMU_DEVICE_CAP_FS1GP:
>> return caps->fs1gp;
>> + case HOST_IOMMU_DEVICE_CAP_ERRATA:
>> + return caps->errata;
>> default:
>> error_setg(errp, "%s: unsupported capability %x", hiod->name, cap);
>> return -EINVAL;
>> diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
>> index df6a12d200..58bff030e1 100644
>> --- a/hw/vfio/iommufd.c
>> +++ b/hw/vfio/iommufd.c
>> @@ -848,6 +848,7 @@ static bool
>hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
>> case IOMMU_HW_INFO_TYPE_INTEL_VTD:
>> caps->nesting = !!(data.vtd.ecap_reg & VTD_ECAP_NEST);
>> caps->fs1gp = !!(data.vtd.cap_reg & VTD_CAP_FS1GP);
>> + caps->errata = data.vtd.flags &
>IOMMU_HW_INFO_VTD_ERRATA_772415_SPR17;
>> break;
>> case IOMMU_HW_INFO_TYPE_ARM_SMMUV3:
>> case IOMMU_HW_INFO_TYPE_NONE: