Skip to content

Commit d751311

Browse files
vsyrjalaAndi Shyti
authored andcommitted
drm/i915: Use REG_BIT() & co. for BDW+ EU/slice fuse bits
Convert the BDW+ EU/slice fuse bits to the modern REG_BIT()/etc. style. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com> Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250211231941.22769-10-ville.syrjala@linux.intel.com
1 parent d4ca1a8 commit d751311

File tree

4 files changed

+53
-63
lines changed

4 files changed

+53
-63
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -769,9 +769,8 @@ static void engine_mask_apply_media_fuses(struct intel_gt *gt)
769769
if (MEDIA_VER_FULL(i915) < IP_VER(12, 55))
770770
media_fuse = ~media_fuse;
771771

772-
vdbox_mask = media_fuse & GEN11_GT_VDBOX_DISABLE_MASK;
773-
vebox_mask = (media_fuse & GEN11_GT_VEBOX_DISABLE_MASK) >>
774-
GEN11_GT_VEBOX_DISABLE_SHIFT;
772+
vdbox_mask = REG_FIELD_GET(GEN11_GT_VDBOX_DISABLE_MASK, media_fuse);
773+
vebox_mask = REG_FIELD_GET(GEN11_GT_VEBOX_DISABLE_MASK, media_fuse);
775774

776775
if (MEDIA_VER_FULL(i915) >= IP_VER(12, 55)) {
777776
fuse1 = intel_uncore_read(gt->uncore, HSW_PAVP_FUSE1);

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,8 @@ void intel_gt_mcr_init(struct intel_gt *gt)
121121
gt->info.mslice_mask =
122122
intel_slicemask_from_xehp_dssmask(gt->info.sseu.subslice_mask,
123123
GEN_DSS_PER_MSLICE);
124-
gt->info.mslice_mask |=
125-
(intel_uncore_read(gt->uncore, GEN10_MIRROR_FUSE3) &
126-
GEN12_MEML3_EN_MASK);
124+
gt->info.mslice_mask |= REG_FIELD_GET(GEN12_MEML3_EN_MASK,
125+
intel_uncore_read(gt->uncore, GEN10_MIRROR_FUSE3));
127126

128127
if (!gt->info.mslice_mask) /* should be impossible! */
129128
gt_warn(gt, "mslice mask all zero!\n");

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

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -517,24 +517,24 @@
517517
#define GEN9_SLICE_PGCTL_ACK(slice) _MMIO(0x804c + (slice) * 0x4)
518518
#define GEN10_SLICE_PGCTL_ACK(slice) _MMIO(0x804c + ((slice) / 3) * 0x34 + \
519519
((slice) % 3) * 0x4)
520-
#define GEN9_PGCTL_SLICE_ACK (1 << 0)
521-
#define GEN9_PGCTL_SS_ACK(subslice) (1 << (2 + (subslice) * 2))
522-
#define GEN10_PGCTL_VALID_SS_MASK(slice) ((slice) == 0 ? 0x7F : 0x1F)
520+
#define GEN9_PGCTL_SLICE_ACK REG_BIT(0)
521+
#define GEN9_PGCTL_SS_ACK(subslice) REG_BIT(2 + (subslice) * 2)
522+
#define GEN10_PGCTL_VALID_SS_MASK(slice) ((slice) == 0 ? REG_GENMASK(6, 0) : REG_GENMASK(4, 0))
523523

524524
#define GEN9_SS01_EU_PGCTL_ACK(slice) _MMIO(0x805c + (slice) * 0x8)
525525
#define GEN10_SS01_EU_PGCTL_ACK(slice) _MMIO(0x805c + ((slice) / 3) * 0x30 + \
526526
((slice) % 3) * 0x8)
527527
#define GEN9_SS23_EU_PGCTL_ACK(slice) _MMIO(0x8060 + (slice) * 0x8)
528528
#define GEN10_SS23_EU_PGCTL_ACK(slice) _MMIO(0x8060 + ((slice) / 3) * 0x30 + \
529529
((slice) % 3) * 0x8)
530-
#define GEN9_PGCTL_SSA_EU08_ACK (1 << 0)
531-
#define GEN9_PGCTL_SSA_EU19_ACK (1 << 2)
532-
#define GEN9_PGCTL_SSA_EU210_ACK (1 << 4)
533-
#define GEN9_PGCTL_SSA_EU311_ACK (1 << 6)
534-
#define GEN9_PGCTL_SSB_EU08_ACK (1 << 8)
535-
#define GEN9_PGCTL_SSB_EU19_ACK (1 << 10)
536-
#define GEN9_PGCTL_SSB_EU210_ACK (1 << 12)
537-
#define GEN9_PGCTL_SSB_EU311_ACK (1 << 14)
530+
#define GEN9_PGCTL_SSA_EU08_ACK REG_BIT(0)
531+
#define GEN9_PGCTL_SSA_EU19_ACK REG_BIT(2)
532+
#define GEN9_PGCTL_SSA_EU210_ACK REG_BIT(4)
533+
#define GEN9_PGCTL_SSA_EU311_ACK REG_BIT(6)
534+
#define GEN9_PGCTL_SSB_EU08_ACK REG_BIT(8)
535+
#define GEN9_PGCTL_SSB_EU19_ACK REG_BIT(10)
536+
#define GEN9_PGCTL_SSB_EU210_ACK REG_BIT(12)
537+
#define GEN9_PGCTL_SSB_EU311_ACK REG_BIT(14)
538538

539539
#define VF_PREEMPTION _MMIO(0x83a4)
540540
#define PREEMPTION_VERTEX_COUNT REG_GENMASK(15, 0)
@@ -591,7 +591,7 @@
591591
#define GEN10_L3BANK_MASK 0x0F
592592
/* on Xe_HP the same fuses indicates mslices instead of L3 banks */
593593
#define GEN12_MAX_MSLICES 4
594-
#define GEN12_MEML3_EN_MASK 0x0F
594+
#define GEN12_MEML3_EN_MASK REG_GENMASK(3, 0)
595595

596596
#define HSW_PAVP_FUSE1 _MMIO(0x911c)
597597
#define XEHP_SFC_ENABLE_MASK REG_GENMASK(27, 24)
@@ -601,47 +601,39 @@
601601
#define HSW_F1_EU_DIS_6EUS 2
602602

603603
#define GEN8_FUSE2 _MMIO(0x9120)
604-
#define GEN8_F2_SS_DIS_SHIFT 21
605-
#define GEN8_F2_SS_DIS_MASK (0x7 << GEN8_F2_SS_DIS_SHIFT)
606-
#define GEN8_F2_S_ENA_SHIFT 25
607-
#define GEN8_F2_S_ENA_MASK (0x7 << GEN8_F2_S_ENA_SHIFT)
608-
#define GEN9_F2_SS_DIS_SHIFT 20
609-
#define GEN9_F2_SS_DIS_MASK (0xf << GEN9_F2_SS_DIS_SHIFT)
610-
#define GEN10_F2_S_ENA_SHIFT 22
611-
#define GEN10_F2_S_ENA_MASK (0x3f << GEN10_F2_S_ENA_SHIFT)
612-
#define GEN10_F2_SS_DIS_SHIFT 18
613-
#define GEN10_F2_SS_DIS_MASK (0xf << GEN10_F2_SS_DIS_SHIFT)
604+
#define GEN8_F2_SS_DIS_MASK REG_GENMASK(23, 21)
605+
#define GEN8_F2_S_ENA_MASK REG_GENMASK(27, 25)
606+
#define GEN9_F2_SS_DIS_MASK REG_GENMASK(23, 20)
607+
#define GEN10_F2_S_ENA_MASK REG_GENMASK(27, 22)
608+
#define GEN10_F2_SS_DIS_MASK REG_GENMASK(21, 18)
614609

615610
#define GEN8_EU_DISABLE0 _MMIO(0x9134)
616611
#define GEN9_EU_DISABLE(slice) _MMIO(0x9134 + (slice) * 0x4)
617612
#define GEN11_EU_DISABLE _MMIO(0x9134)
618-
#define GEN8_EU_DIS0_S0_MASK 0xffffff
619-
#define GEN8_EU_DIS0_S1_SHIFT 24
620-
#define GEN8_EU_DIS0_S1_MASK (0xff << GEN8_EU_DIS0_S1_SHIFT)
621-
#define GEN11_EU_DIS_MASK 0xFF
613+
#define GEN8_EU_DIS0_S0_MASK REG_GENMASK(23, 0)
614+
#define GEN8_EU_DIS0_S1_MASK REG_GENMASK(31, 24)
615+
#define GEN11_EU_DIS_MASK REG_GENMASK(7, 0)
622616
#define XEHP_EU_ENABLE _MMIO(0x9134)
623-
#define XEHP_EU_ENA_MASK 0xFF
617+
#define XEHP_EU_ENA_MASK REG_GENMASK(7, 0)
624618

625619
#define GEN8_EU_DISABLE1 _MMIO(0x9138)
626-
#define GEN8_EU_DIS1_S1_MASK 0xffff
627-
#define GEN8_EU_DIS1_S2_SHIFT 16
628-
#define GEN8_EU_DIS1_S2_MASK (0xffff << GEN8_EU_DIS1_S2_SHIFT)
620+
#define GEN8_EU_DIS1_S1_MASK REG_GENMASK(15, 0)
621+
#define GEN8_EU_DIS1_S2_MASK REG_GENMASK(31, 16)
629622

630623
#define GEN11_GT_SLICE_ENABLE _MMIO(0x9138)
631-
#define GEN11_GT_S_ENA_MASK 0xFF
624+
#define GEN11_GT_S_ENA_MASK REG_GENMASK(7, 0)
632625

633626
#define GEN8_EU_DISABLE2 _MMIO(0x913c)
634-
#define GEN8_EU_DIS2_S2_MASK 0xff
627+
#define GEN8_EU_DIS2_S2_MASK REG_GENMASK(7, 0)
635628

636629
#define GEN11_GT_SUBSLICE_DISABLE _MMIO(0x913c)
637630
#define GEN12_GT_GEOMETRY_DSS_ENABLE _MMIO(0x913c)
638631

639632
#define GEN10_EU_DISABLE3 _MMIO(0x9140)
640633
#define GEN10_EU_DIS_SS_MASK 0xff
641634
#define GEN11_GT_VEBOX_VDBOX_DISABLE _MMIO(0x9140)
642-
#define GEN11_GT_VDBOX_DISABLE_MASK 0xff
643-
#define GEN11_GT_VEBOX_DISABLE_SHIFT 16
644-
#define GEN11_GT_VEBOX_DISABLE_MASK (0x0f << GEN11_GT_VEBOX_DISABLE_SHIFT)
635+
#define GEN11_GT_VDBOX_DISABLE_MASK REG_GENMASK(7, 0)
636+
#define GEN11_GT_VEBOX_DISABLE_MASK REG_GENMASK(19, 16)
645637

646638
#define GEN12_GT_COMPUTE_DSS_ENABLE _MMIO(0x9144)
647639
#define XEHPC_GT_COMPUTE_DSS_ENABLE_EXT _MMIO(0x9148)

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

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,8 @@ static void xehp_sseu_info_init(struct intel_gt *gt)
236236
GEN12_GT_COMPUTE_DSS_ENABLE,
237237
XEHPC_GT_COMPUTE_DSS_ENABLE_EXT);
238238

239-
eu_en_fuse = intel_uncore_read(uncore, XEHP_EU_ENABLE) & XEHP_EU_ENA_MASK;
239+
eu_en_fuse = REG_FIELD_GET(XEHP_EU_ENA_MASK,
240+
intel_uncore_read(uncore, XEHP_EU_ENABLE));
240241

241242
if (HAS_ONE_EU_PER_FUSE_BIT(gt->i915))
242243
eu_en = eu_en_fuse;
@@ -269,15 +270,15 @@ static void gen12_sseu_info_init(struct intel_gt *gt)
269270
* Although gen12 architecture supported multiple slices, TGL, RKL,
270271
* DG1, and ADL only had a single slice.
271272
*/
272-
s_en = intel_uncore_read(uncore, GEN11_GT_SLICE_ENABLE) &
273-
GEN11_GT_S_ENA_MASK;
273+
s_en = REG_FIELD_GET(GEN11_GT_S_ENA_MASK,
274+
intel_uncore_read(uncore, GEN11_GT_SLICE_ENABLE));
274275
drm_WARN_ON(&gt->i915->drm, s_en != 0x1);
275276

276277
g_dss_en = intel_uncore_read(uncore, GEN12_GT_GEOMETRY_DSS_ENABLE);
277278

278279
/* one bit per pair of EUs */
279-
eu_en_fuse = ~(intel_uncore_read(uncore, GEN11_EU_DISABLE) &
280-
GEN11_EU_DIS_MASK);
280+
eu_en_fuse = ~REG_FIELD_GET(GEN11_EU_DIS_MASK,
281+
intel_uncore_read(uncore, GEN11_EU_DISABLE));
281282

282283
for (eu = 0; eu < sseu->max_eus_per_subslice / 2; eu++)
283284
if (eu_en_fuse & BIT(eu))
@@ -306,14 +307,14 @@ static void gen11_sseu_info_init(struct intel_gt *gt)
306307
* Although gen11 architecture supported multiple slices, ICL and
307308
* EHL/JSL only had a single slice in practice.
308309
*/
309-
s_en = intel_uncore_read(uncore, GEN11_GT_SLICE_ENABLE) &
310-
GEN11_GT_S_ENA_MASK;
310+
s_en = REG_FIELD_GET(GEN11_GT_S_ENA_MASK,
311+
intel_uncore_read(uncore, GEN11_GT_SLICE_ENABLE));
311312
drm_WARN_ON(&gt->i915->drm, s_en != 0x1);
312313

313314
ss_en = ~intel_uncore_read(uncore, GEN11_GT_SUBSLICE_DISABLE);
314315

315-
eu_en = ~(intel_uncore_read(uncore, GEN11_EU_DISABLE) &
316-
GEN11_EU_DIS_MASK);
316+
eu_en = ~REG_FIELD_GET(GEN11_EU_DIS_MASK,
317+
intel_uncore_read(uncore, GEN11_EU_DISABLE));
317318

318319
gen11_compute_sseu_info(sseu, ss_en, eu_en);
319320

@@ -381,7 +382,7 @@ static void gen9_sseu_info_init(struct intel_gt *gt)
381382
int s, ss;
382383

383384
fuse2 = intel_uncore_read(uncore, GEN8_FUSE2);
384-
sseu->slice_mask = (fuse2 & GEN8_F2_S_ENA_MASK) >> GEN8_F2_S_ENA_SHIFT;
385+
sseu->slice_mask = REG_FIELD_GET(GEN8_F2_S_ENA_MASK, fuse2);
385386

386387
/* BXT has a single slice and at most 3 subslices. */
387388
intel_sseu_set_info(sseu, IS_GEN9_LP(i915) ? 1 : 3,
@@ -392,8 +393,7 @@ static void gen9_sseu_info_init(struct intel_gt *gt)
392393
* to each of the enabled slices.
393394
*/
394395
subslice_mask = (1 << sseu->max_subslices) - 1;
395-
subslice_mask &= ~((fuse2 & GEN9_F2_SS_DIS_MASK) >>
396-
GEN9_F2_SS_DIS_SHIFT);
396+
subslice_mask &= ~REG_FIELD_GET(GEN9_F2_SS_DIS_MASK, fuse2);
397397

398398
/*
399399
* Iterate through enabled slices and subslices to
@@ -486,26 +486,26 @@ static void bdw_sseu_info_init(struct intel_gt *gt)
486486
u32 eu_disable0, eu_disable1, eu_disable2;
487487

488488
fuse2 = intel_uncore_read(uncore, GEN8_FUSE2);
489-
sseu->slice_mask = (fuse2 & GEN8_F2_S_ENA_MASK) >> GEN8_F2_S_ENA_SHIFT;
489+
sseu->slice_mask = REG_FIELD_GET(GEN8_F2_S_ENA_MASK, fuse2);
490490
intel_sseu_set_info(sseu, 3, 3, 8);
491491

492492
/*
493493
* The subslice disable field is global, i.e. it applies
494494
* to each of the enabled slices.
495495
*/
496496
subslice_mask = GENMASK(sseu->max_subslices - 1, 0);
497-
subslice_mask &= ~((fuse2 & GEN8_F2_SS_DIS_MASK) >>
498-
GEN8_F2_SS_DIS_SHIFT);
497+
subslice_mask &= ~REG_FIELD_GET(GEN8_F2_SS_DIS_MASK, fuse2);
499498
eu_disable0 = intel_uncore_read(uncore, GEN8_EU_DISABLE0);
500499
eu_disable1 = intel_uncore_read(uncore, GEN8_EU_DISABLE1);
501500
eu_disable2 = intel_uncore_read(uncore, GEN8_EU_DISABLE2);
502-
eu_disable[0] = eu_disable0 & GEN8_EU_DIS0_S0_MASK;
503-
eu_disable[1] = (eu_disable0 >> GEN8_EU_DIS0_S1_SHIFT) |
504-
((eu_disable1 & GEN8_EU_DIS1_S1_MASK) <<
505-
(32 - GEN8_EU_DIS0_S1_SHIFT));
506-
eu_disable[2] = (eu_disable1 >> GEN8_EU_DIS1_S2_SHIFT) |
507-
((eu_disable2 & GEN8_EU_DIS2_S2_MASK) <<
508-
(32 - GEN8_EU_DIS1_S2_SHIFT));
501+
eu_disable[0] =
502+
REG_FIELD_GET(GEN8_EU_DIS0_S0_MASK, eu_disable0);
503+
eu_disable[1] =
504+
REG_FIELD_GET(GEN8_EU_DIS0_S1_MASK, eu_disable0) |
505+
REG_FIELD_GET(GEN8_EU_DIS1_S1_MASK, eu_disable1) << hweight32(GEN8_EU_DIS0_S1_MASK);
506+
eu_disable[2] =
507+
REG_FIELD_GET(GEN8_EU_DIS1_S2_MASK, eu_disable1) |
508+
REG_FIELD_GET(GEN8_EU_DIS2_S2_MASK, eu_disable2) << hweight32(GEN8_EU_DIS1_S2_MASK);
509509

510510
/*
511511
* Iterate through enabled slices and subslices to

0 commit comments

Comments
 (0)