Commit 4699c04b authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-intel-fixes-2025-08-13' of...

Merge tag 'drm-intel-fixes-2025-08-13' of https://gitlab.freedesktop.org/drm/i915/kernel

 into drm-fixes

- Fix the implementation of wa_18038517565 [fbc] (Vinod Govindapillai)
- Do not trigger Frame Change events from frontbuffer flush [psr] (Jouni Högander)

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
From: Tvrtko Ursulin <tursulin@igalia.com>
Link: https://lore.kernel.org/r/aJ0HAh06VHWVdv63@linux
parents 68ad07df 184889df
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -552,10 +552,6 @@ static void ilk_fbc_deactivate(struct intel_fbc *fbc)
	if (dpfc_ctl & DPFC_CTL_EN) {
		dpfc_ctl &= ~DPFC_CTL_EN;
		intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), dpfc_ctl);

		/* wa_18038517565 Enable DPFC clock gating after FBC disable */
		if (display->platform.dg2 || DISPLAY_VER(display) >= 14)
			fbc_compressor_clkgate_disable_wa(fbc, false);
	}
}

@@ -1710,6 +1706,10 @@ static void __intel_fbc_disable(struct intel_fbc *fbc)

	__intel_fbc_cleanup_cfb(fbc);

	/* wa_18038517565 Enable DPFC clock gating after FBC disable */
	if (display->platform.dg2 || DISPLAY_VER(display) >= 14)
		fbc_compressor_clkgate_disable_wa(fbc, false);

	fbc->state.plane = NULL;
	fbc->flip_pending = false;
	fbc->busy_bits = 0;
+9 −5
Original line number Diff line number Diff line
@@ -3275,7 +3275,9 @@ static void intel_psr_configure_full_frame_update(struct intel_dp *intel_dp)

static void _psr_invalidate_handle(struct intel_dp *intel_dp)
{
	if (intel_dp->psr.psr2_sel_fetch_enabled) {
	struct intel_display *display = to_intel_display(intel_dp);

	if (DISPLAY_VER(display) < 20 && intel_dp->psr.psr2_sel_fetch_enabled) {
		if (!intel_dp->psr.psr2_sel_fetch_cff_enabled) {
			intel_dp->psr.psr2_sel_fetch_cff_enabled = true;
			intel_psr_configure_full_frame_update(intel_dp);
@@ -3361,7 +3363,7 @@ static void _psr_flush_handle(struct intel_dp *intel_dp)
{
	struct intel_display *display = to_intel_display(intel_dp);

	if (intel_dp->psr.psr2_sel_fetch_enabled) {
	if (DISPLAY_VER(display) < 20 && intel_dp->psr.psr2_sel_fetch_enabled) {
		if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
			/* can we turn CFF off? */
			if (intel_dp->psr.busy_frontbuffer_bits == 0)
@@ -3378,11 +3380,13 @@ static void _psr_flush_handle(struct intel_dp *intel_dp)
		 * existing SU configuration
		 */
		intel_psr_configure_full_frame_update(intel_dp);
	}

		intel_psr_force_update(intel_dp);
	} else {
		intel_psr_exit(intel_dp);
	}

	if (!intel_dp->psr.psr2_sel_fetch_enabled && !intel_dp->psr.active &&
	if ((!intel_dp->psr.psr2_sel_fetch_enabled || DISPLAY_VER(display) >= 20) &&
	    !intel_dp->psr.busy_frontbuffer_bits)
		queue_work(display->wq.unordered, &intel_dp->psr.work);
}