[PATCH 3/3] drm/xe/vf: Add proper detection of the SR-IOV VF mode
Matt Roper
matthew.d.roper at intel.com
Wed Mar 27 23:01:27 UTC 2024
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,
Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
> + mode = XE_SRIOV_MODE_VF;
> + }
>
> xe_assert(xe, !xe->sriov.__mode);
> xe->sriov.__mode = mode;
> --
> 2.43.0
>
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-xe
mailing list