Skip to content

Commit 4f7652d

Browse files
mwajdeczrodrigovivi
authored andcommitted
drm/xe/pf: Fix VF config validation on multi-GT platforms
When validating VF config on the media GT, we may wrongly report that VF is already partially configured on it, as we consider GGTT and LMEM provisioning done on the primary GT (since both GGTT and LMEM are tile-level resources, not a GT-level). This will cause skipping a VF auto-provisioning on the media-GT and in result will block a VF from successfully initialize that GT. Fix that by considering GGTT and LMEM configurations only when checking if a VF provisioning is complete, and omit GGTT and LMEM when reporting empty/partial provisioning. Fixes: 234670c ("drm/xe/pf: Skip fair VFs provisioning if already provisioned") Signed-off-by: Michal Wajdeczko <[email protected]> Cc: Piotr Piórkowski <[email protected]> Reviewed-by: Jonathan Cavitt <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] (cherry picked from commit 5bdacb0) Signed-off-by: Rodrigo Vivi <[email protected]>
1 parent 55ea73a commit 4f7652d

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1927,6 +1927,7 @@ static int pf_validate_vf_config(struct xe_gt *gt, unsigned int vfid)
19271927
{
19281928
struct xe_gt *primary_gt = gt_to_tile(gt)->primary_gt;
19291929
struct xe_device *xe = gt_to_xe(gt);
1930+
bool is_primary = !xe_gt_is_media_type(gt);
19301931
bool valid_ggtt, valid_ctxs, valid_dbs;
19311932
bool valid_any, valid_all;
19321933

@@ -1935,13 +1936,17 @@ static int pf_validate_vf_config(struct xe_gt *gt, unsigned int vfid)
19351936
valid_dbs = pf_get_vf_config_dbs(gt, vfid);
19361937

19371938
/* note that GuC doorbells are optional */
1938-
valid_any = valid_ggtt || valid_ctxs || valid_dbs;
1939-
valid_all = valid_ggtt && valid_ctxs;
1939+
valid_any = valid_ctxs || valid_dbs;
1940+
valid_all = valid_ctxs;
1941+
1942+
/* and GGTT/LMEM is configured on primary GT only */
1943+
valid_all = valid_all && valid_ggtt;
1944+
valid_any = valid_any || (valid_ggtt && is_primary);
19401945

19411946
if (IS_DGFX(xe)) {
19421947
bool valid_lmem = pf_get_vf_config_ggtt(primary_gt, vfid);
19431948

1944-
valid_any = valid_any || valid_lmem;
1949+
valid_any = valid_any || (valid_lmem && is_primary);
19451950
valid_all = valid_all && valid_lmem;
19461951
}
19471952

0 commit comments

Comments
 (0)