Skip to content
This repository was archived by the owner on Oct 3, 2024. It is now read-only.

Commit 5ac342e

Browse files
committed
drm/i915/pvc: Add SSEU changes
PVC splits the mask of enabled DSS over two registers. It also changes the meaning of the EU fuse register such that each bit represents a single EU rather than a pair of EUs. Signed-off-by: Matt Roper <[email protected]> Acked-by: Tvrtko Ursulin <[email protected]> Reviewed-by: Balasubramani Vivekanandan <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent b87d390 commit 5ac342e

File tree

6 files changed

+31
-9
lines changed

6 files changed

+31
-9
lines changed

drivers/gpu/drm/i915/gt/intel_gt_regs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,7 @@
561561
#define GEN11_GT_VEBOX_DISABLE_MASK (0x0f << GEN11_GT_VEBOX_DISABLE_SHIFT)
562562

563563
#define GEN12_GT_COMPUTE_DSS_ENABLE _MMIO(0x9144)
564+
#define XEHPC_GT_COMPUTE_DSS_ENABLE_EXT _MMIO(0x9148)
564565

565566
#define GEN6_UCGCTL1 _MMIO(0x9400)
566567
#define GEN6_GAMUNIT_CLOCK_GATE_DISABLE (1 << 22)

drivers/gpu/drm/i915/gt/intel_sseu.c

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -210,27 +210,44 @@ static void xehp_sseu_info_init(struct intel_gt *gt)
210210
struct intel_uncore *uncore = gt->uncore;
211211
u16 eu_en = 0;
212212
u8 eu_en_fuse;
213+
int num_compute_regs, num_geometry_regs;
213214
int eu;
214215

216+
if (IS_PONTEVECCHIO(gt->i915)) {
217+
num_geometry_regs = 0;
218+
num_compute_regs = 2;
219+
} else {
220+
num_geometry_regs = 1;
221+
num_compute_regs = 1;
222+
}
223+
215224
/*
216225
* The concept of slice has been removed in Xe_HP. To be compatible
217226
* with prior generations, assume a single slice across the entire
218227
* device. Then calculate out the DSS for each workload type within
219228
* that software slice.
220229
*/
221-
intel_sseu_set_info(sseu, 1, 32, 16);
230+
intel_sseu_set_info(sseu, 1,
231+
32 * max(num_geometry_regs, num_compute_regs),
232+
16);
222233
sseu->has_xehp_dss = 1;
223234

224-
xehp_load_dss_mask(uncore, &sseu->geometry_subslice_mask, 1,
235+
xehp_load_dss_mask(uncore, &sseu->geometry_subslice_mask,
236+
num_geometry_regs,
225237
GEN12_GT_GEOMETRY_DSS_ENABLE);
226-
xehp_load_dss_mask(uncore, &sseu->compute_subslice_mask, 1,
227-
GEN12_GT_COMPUTE_DSS_ENABLE);
238+
xehp_load_dss_mask(uncore, &sseu->compute_subslice_mask,
239+
num_compute_regs,
240+
GEN12_GT_COMPUTE_DSS_ENABLE,
241+
XEHPC_GT_COMPUTE_DSS_ENABLE_EXT);
228242

229243
eu_en_fuse = intel_uncore_read(uncore, XEHP_EU_ENABLE) & XEHP_EU_ENA_MASK;
230244

231-
for (eu = 0; eu < sseu->max_eus_per_subslice / 2; eu++)
232-
if (eu_en_fuse & BIT(eu))
233-
eu_en |= BIT(eu * 2) | BIT(eu * 2 + 1);
245+
if (HAS_ONE_EU_PER_FUSE_BIT(gt->i915))
246+
eu_en = eu_en_fuse;
247+
else
248+
for (eu = 0; eu < sseu->max_eus_per_subslice / 2; eu++)
249+
if (eu_en_fuse & BIT(eu))
250+
eu_en |= BIT(eu * 2) | BIT(eu * 2 + 1);
234251

235252
xehp_compute_sseu_info(sseu, eu_en);
236253
}

drivers/gpu/drm/i915/gt/intel_sseu.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ struct drm_printer;
3333
* Maximum number of 32-bit registers used by hardware to express the
3434
* enabled/disabled subslices.
3535
*/
36-
#define I915_MAX_SS_FUSE_REGS 1
36+
#define I915_MAX_SS_FUSE_REGS 2
3737
#define I915_MAX_SS_FUSE_BITS (I915_MAX_SS_FUSE_REGS * 32)
3838

3939
/* Maximum number of EUs that can exist within a subslice or DSS. */

drivers/gpu/drm/i915/i915_drv.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,6 +1422,8 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
14221422

14231423
#define HAS_3D_PIPELINE(i915) (INTEL_INFO(i915)->has_3d_pipeline)
14241424

1425+
#define HAS_ONE_EU_PER_FUSE_BIT(i915) (INTEL_INFO(i915)->has_one_eu_per_fuse_bit)
1426+
14251427
/* i915_gem.c */
14261428
void i915_gem_init_early(struct drm_i915_private *dev_priv);
14271429
void i915_gem_cleanup_early(struct drm_i915_private *dev_priv);

drivers/gpu/drm/i915/i915_pci.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,8 @@ static const struct intel_device_info ats_m_info = {
10901090
XE_HP_FEATURES, \
10911091
.dma_mask_size = 52, \
10921092
.has_3d_pipeline = 0, \
1093-
.has_l3_ccs_read = 1
1093+
.has_l3_ccs_read = 1, \
1094+
.has_one_eu_per_fuse_bit = 1
10941095

10951096
__maybe_unused
10961097
static const struct intel_device_info pvc_info = {

drivers/gpu/drm/i915/intel_device_info.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ enum intel_ppgtt_type {
158158
func(has_logical_ring_elsq); \
159159
func(has_media_ratio_mode); \
160160
func(has_mslices); \
161+
func(has_one_eu_per_fuse_bit); \
161162
func(has_pooled_eu); \
162163
func(has_pxp); \
163164
func(has_rc6); \

0 commit comments

Comments
 (0)