[CI 2/2] drm/i915/gt: Force ccs_mode 4

Andi Shyti andi.shyti at linux.intel.com
Mon Apr 22 16:27:31 UTC 2024


Signed-off-by: Andi Shyti <andi.shyti at linux.intel.com>
---
 drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c
index 044219c5960a..d0f181a8e73e 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c
@@ -10,29 +10,33 @@
 
 void intel_gt_apply_ccs_mode(struct intel_gt *gt)
 {
+	unsigned long ccs_mask = CCS_MASK(gt);
 	int cslice;
 	u32 mode = 0;
-	int first_ccs = __ffs(CCS_MASK(gt));
+	int first_ccs = __ffs(ccs_mask);
 
 	if (!IS_DG2(gt->i915))
 		return;
 
 	/* Build the value for the fixed CCS load balancing */
 	for (cslice = 0; cslice < I915_MAX_CCS; cslice++) {
-		if (CCS_MASK(gt) & BIT(cslice))
+		if (CCS_MASK(gt) & BIT(cslice)) {
 			/*
 			 * If available, assign the cslice
 			 * to the first available engine...
 			 */
 			mode |= XEHP_CCS_MODE_CSLICE(cslice, first_ccs);
-
-		else
+			first_ccs = find_next_bit(&ccs_mask,
+						  I915_MAX_CCS,
+						  first_ccs + 1);
+		} else {
 			/*
 			 * ... otherwise, mark the cslice as
 			 * unavailable if no CCS dispatches here
 			 */
 			mode |= XEHP_CCS_MODE_CSLICE(cslice,
 						     XEHP_CCS_MODE_CSLICE_MASK);
+		}
 	}
 
 	intel_uncore_write(gt->uncore, XEHP_CCS_MODE, mode);
-- 
2.43.0



More information about the Intel-gfx mailing list