diff options
author | Lucas De Marchi <lucas.demarchi@intel.com> | 2023-03-14 01:29:59 +0100 |
---|---|---|
committer | Rodrigo Vivi <rodrigo.vivi@intel.com> | 2023-12-20 00:29:47 +0100 |
commit | 143800547b96dfc56d1f50a135c367fbfd40fd5d (patch) | |
tree | 658a846f1c01fad171f5db0bdb8d1c5d03ee4625 /drivers/gpu/drm/xe/xe_rtp.c | |
parent | drm/xe: add xe_ttm_stolen_cpu_access_needs_ggtt() (diff) | |
download | linux-143800547b96dfc56d1f50a135c367fbfd40fd5d.tar.xz linux-143800547b96dfc56d1f50a135c367fbfd40fd5d.zip |
drm/xe/rtp: Add match helper for gslice fused off
Add match helper to detect when the first gslice is fused off, as needed
by future workarounds.
v2:
- Add warning if called on a platform without geometry pipeline
(Matt Roper)
- Hardcode 4 as the number of gslices, which matches all the currently
supported platforms. PVC doesn't have geometry pipeline and
shouldn't use this function (Matt Roper)
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20230314003012.2600353-2-lucas.demarchi@intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Diffstat (limited to 'drivers/gpu/drm/xe/xe_rtp.c')
-rw-r--r-- | drivers/gpu/drm/xe/xe_rtp.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c index 0d2f51bb06e8..cb9dd894547d 100644 --- a/drivers/gpu/drm/xe/xe_rtp.c +++ b/drivers/gpu/drm/xe/xe_rtp.c @@ -8,6 +8,7 @@ #include <drm/xe_drm.h> #include "xe_gt.h" +#include "xe_gt_topology.h" #include "xe_macros.h" #include "xe_reg_sr.h" @@ -170,3 +171,18 @@ bool xe_rtp_match_first_render_or_compute(const struct xe_gt *gt, return render_compute_mask && hwe->engine_id == __ffs(render_compute_mask); } + +bool xe_rtp_match_first_gslice_fused_off(const struct xe_gt *gt, + const struct xe_hw_engine *hwe) +{ + unsigned int dss_per_gslice = 4; + unsigned int dss; + + if (drm_WARN(>_to_xe(gt)->drm, !gt->fuse_topo.g_dss_mask, + "Checking gslice for platform without geometry pipeline\n")) + return false; + + dss = xe_dss_mask_group_ffs(gt->fuse_topo.g_dss_mask, 0, 0); + + return dss >= dss_per_gslice; +} |