[PATCH 3/3] drm/xe/vf: Add proper detection of the SR-IOV VF mode

Michal Wajdeczko michal.wajdeczko at intel.com
Thu Mar 28 12:39:12 UTC 2024



On 28.03.2024 00:01, Matt Roper wrote:
> On Wed, Mar 27, 2024 at 07:27:40PM +0100, Michal Wajdeczko wrote:
>> SR-IOV VF mode detection is based on testing VF capability bit on
>> the register that is accessible from both the PF and enabled VFs.
>>
>> Bspec: 49904, 53227
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
>> ---
>>  drivers/gpu/drm/xe/regs/xe_sriov_regs.h |  3 +++
>>  drivers/gpu/drm/xe/xe_sriov.c           | 17 +++++++++++++++--
>>  2 files changed, 18 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/regs/xe_sriov_regs.h b/drivers/gpu/drm/xe/regs/xe_sriov_regs.h
>> index 58a4e0fad1e1..617ddb84b7fa 100644
>> --- a/drivers/gpu/drm/xe/regs/xe_sriov_regs.h
>> +++ b/drivers/gpu/drm/xe/regs/xe_sriov_regs.h
>> @@ -14,4 +14,7 @@
>>  #define   LMEM_EN			REG_BIT(31)
>>  #define   LMTT_DIR_PTR			REG_GENMASK(30, 0) /* in multiples of 64KB */
>>  
>> +#define VF_CAP_REG			XE_REG(0x1901f8, XE_REG_OPTION_VF)
>> +#define   VF_CAP			REG_BIT(0)
>> +
>>  #endif
>> diff --git a/drivers/gpu/drm/xe/xe_sriov.c b/drivers/gpu/drm/xe/xe_sriov.c
>> index 2bcef998c8a9..3e103edf7174 100644
>> --- a/drivers/gpu/drm/xe/xe_sriov.c
>> +++ b/drivers/gpu/drm/xe/xe_sriov.c
>> @@ -5,7 +5,11 @@
>>  
>>  #include <drm/drm_managed.h>
>>  
>> +#include "regs/xe_sriov_regs.h"
>> +
>>  #include "xe_assert.h"
>> +#include "xe_device.h"
>> +#include "xe_mmio.h"
>>  #include "xe_sriov.h"
>>  
>>  /**
>> @@ -28,6 +32,13 @@ const char *xe_sriov_mode_to_string(enum xe_sriov_mode mode)
>>  	}
>>  }
>>  
>> +static bool test_is_vf(struct xe_device *xe)
>> +{
>> +	u32 value = xe_mmio_read32(xe_root_mmio_gt(xe), VF_CAP_REG);
>> +
>> +	return value & VF_CAP;
>> +}
>> +
>>  /**
>>   * xe_sriov_probe_early - Probe a SR-IOV mode.
>>   * @xe: the &xe_device to probe mode on
>> @@ -44,8 +55,10 @@ void xe_sriov_probe_early(struct xe_device *xe)
>>  	enum xe_sriov_mode mode = XE_SRIOV_MODE_NONE;
>>  	bool has_sriov = xe->info.has_sriov;
>>  
>> -	/* TODO: replace with proper mode detection */
>> -	xe_assert(xe, !has_sriov);
>> +	if (has_sriov) {
>> +		if (test_is_vf(xe))
> 
> Seems like we could && these conditions together and avoid the nested
> if's.  But up to you; either way,

soon there will be added another "if" for the PF readiness case and I
wanted to minimize future diffs, hence nested "if"

> 
> Reviewed-by: Matt Roper <matthew.d.roper at intel.com>

thanks!

> 
>> +			mode = XE_SRIOV_MODE_VF;
>> +	}
>>  
>>  	xe_assert(xe, !xe->sriov.__mode);
>>  	xe->sriov.__mode = mode;
>> -- 
>> 2.43.0
>>
>>
> 


More information about the Intel-xe mailing list