>-----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:


Reply via email to