| From 922bf4629103a3cedaa1d75ec9ea8495c4bd150e Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 21 Jan 2025 00:24:43 +0100 |
| Subject: drm/xe/pf: Fix migration initialization |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Michal Wajdeczko <michal.wajdeczko@intel.com> |
| |
| [ Upstream commit 9f706fd8024208b0686bb8ec68589d758f765672 ] |
| |
| The migration support only needs to be initialized once, but it |
| was incorrectly called from the xe_gt_sriov_pf_init_hw(), which |
| is part of the reset flow and may be called multiple times. |
| |
| Fixes: d86e3737c7ab ("drm/xe/pf: Add functions to save and restore VF GuC state") |
| Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> |
| Cc: Michał Winiarski <michal.winiarski@intel.com> |
| Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20250120232443.544-1-michal.wajdeczko@intel.com |
| (cherry picked from commit 9ebb5846e1a3b1705f8a7cbc528888a1aa0b163e) |
| Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/xe/xe_gt.c | 4 +++- |
| drivers/gpu/drm/xe/xe_gt_sriov_pf.c | 14 +++++++++++++- |
| drivers/gpu/drm/xe/xe_gt_sriov_pf.h | 6 ++++++ |
| 3 files changed, 22 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c |
| index 94d468d01253d..77d818beb26d3 100644 |
| --- a/drivers/gpu/drm/xe/xe_gt.c |
| +++ b/drivers/gpu/drm/xe/xe_gt.c |
| @@ -532,8 +532,10 @@ static int all_fw_domain_init(struct xe_gt *gt) |
| if (IS_SRIOV_PF(gt_to_xe(gt)) && !xe_gt_is_media_type(gt)) |
| xe_lmtt_init_hw(>_to_tile(gt)->sriov.pf.lmtt); |
| |
| - if (IS_SRIOV_PF(gt_to_xe(gt))) |
| + if (IS_SRIOV_PF(gt_to_xe(gt))) { |
| + xe_gt_sriov_pf_init(gt); |
| xe_gt_sriov_pf_init_hw(gt); |
| + } |
| |
| xe_force_wake_put(gt_to_fw(gt), fw_ref); |
| |
| diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf.c |
| index e71fc3d2bda22..6f906c8e8108b 100644 |
| --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf.c |
| +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf.c |
| @@ -68,6 +68,19 @@ int xe_gt_sriov_pf_init_early(struct xe_gt *gt) |
| return 0; |
| } |
| |
| +/** |
| + * xe_gt_sriov_pf_init - Prepare SR-IOV PF data structures on PF. |
| + * @gt: the &xe_gt to initialize |
| + * |
| + * Late one-time initialization of the PF data. |
| + * |
| + * Return: 0 on success or a negative error code on failure. |
| + */ |
| +int xe_gt_sriov_pf_init(struct xe_gt *gt) |
| +{ |
| + return xe_gt_sriov_pf_migration_init(gt); |
| +} |
| + |
| static bool pf_needs_enable_ggtt_guest_update(struct xe_device *xe) |
| { |
| return GRAPHICS_VERx100(xe) == 1200; |
| @@ -90,7 +103,6 @@ void xe_gt_sriov_pf_init_hw(struct xe_gt *gt) |
| pf_enable_ggtt_guest_update(gt); |
| |
| xe_gt_sriov_pf_service_update(gt); |
| - xe_gt_sriov_pf_migration_init(gt); |
| } |
| |
| static u32 pf_get_vf_regs_stride(struct xe_device *xe) |
| diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf.h |
| index 96fab779a906f..f474509411c0c 100644 |
| --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf.h |
| +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf.h |
| @@ -10,6 +10,7 @@ struct xe_gt; |
| |
| #ifdef CONFIG_PCI_IOV |
| int xe_gt_sriov_pf_init_early(struct xe_gt *gt); |
| +int xe_gt_sriov_pf_init(struct xe_gt *gt); |
| void xe_gt_sriov_pf_init_hw(struct xe_gt *gt); |
| void xe_gt_sriov_pf_sanitize_hw(struct xe_gt *gt, unsigned int vfid); |
| void xe_gt_sriov_pf_restart(struct xe_gt *gt); |
| @@ -19,6 +20,11 @@ static inline int xe_gt_sriov_pf_init_early(struct xe_gt *gt) |
| return 0; |
| } |
| |
| +static inline int xe_gt_sriov_pf_init(struct xe_gt *gt) |
| +{ |
| + return 0; |
| +} |
| + |
| static inline void xe_gt_sriov_pf_init_hw(struct xe_gt *gt) |
| { |
| } |
| -- |
| 2.39.5 |
| |