Commit 6a99e91a authored by Tvrtko Ursulin's avatar Tvrtko Ursulin Committed by Tvrtko Ursulin
Browse files

drm/i915/display: Detect AuxCCS support via display parent interface



Whether AuxCCS can be properly supported depends on the support both from
the display side and non-display side of the driver.

Let us therefore allow for the non-display part to be queried via the
display parent interface.

The new interface replaces the HAS_AUX_CCS macro and we also remove the
FIXME from skl_universal_plane_create since now the xe will not advertise
the AuxCCS caps to start with so they do not need to be removed after
enumeration.

Also, by removing this build specific FIXME we come a step closer to fully
de-coupling display and non-display.

The existing HAS_AUX_CCS gets renamed to HAS_AUX_DIST since it is still
required for determining the need for PLANE_AUX_DIST programming.

Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@igalia.com>
References: cf48bddd ("drm/i915/display: Disable AuxCCS framebuffers if built for Xe")
Cc: intel-gfx@lists.freedesktop.org
Cc: intel-xe@lists.freedesktop.org
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Acked-by: Jani Nikula <jani.nikula@intel.com> # v1
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarTvrtko Ursulin <tursulin@ursulin.net>
Link: https://lore.kernel.org/r/20251209120034.9143-1-tursulin@igalia.com
parent c29ceb0f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -149,7 +149,7 @@ struct intel_display_platforms {
#define HAS_4TILE(__display)		((__display)->platform.dg2 || DISPLAY_VER(__display) >= 14)
#define HAS_ASYNC_FLIPS(__display)	(DISPLAY_VER(__display) >= 5)
#define HAS_AS_SDP(__display)		(DISPLAY_VER(__display) >= 13)
#define HAS_AUX_CCS(__display)		(IS_DISPLAY_VER(__display, 9, 12) || (__display)->platform.alderlake_p || (__display)->platform.meteorlake)
#define HAS_AUX_DIST(__display)		(IS_DISPLAY_VER(__display, 9, 12) || (__display)->platform.alderlake_p || (__display)->platform.meteorlake)
#define HAS_BIGJOINER(__display)	(DISPLAY_VER(__display) >= 11 && HAS_DSC(__display))
#define HAS_CASF(__display)		(DISPLAY_VER(__display) >= 20)
#define HAS_CDCLK_CRAWL(__display)	(DISPLAY_INFO(__display)->has_cdclk_crawl)
+2 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include "intel_fb_bo.h"
#include "intel_frontbuffer.h"
#include "intel_panic.h"
#include "intel_parent.h"
#include "intel_plane.h"

#define check_array_bounds(display, a, i) drm_WARN_ON((display)->drm, (i) >= ARRAY_SIZE(a))
@@ -558,7 +559,7 @@ static bool plane_has_modifier(struct intel_display *display,
	 * where supported.
	 */
	if (intel_fb_is_ccs_modifier(md->modifier) &&
	    HAS_AUX_CCS(display) != !!md->ccs.packed_aux_planes)
	    intel_parent_has_auxccs(display) != !!md->ccs.packed_aux_planes)
		return false;

	if (md->modifier == I915_FORMAT_MOD_4_TILED_BMG_CCS &&
+5 −0
Original line number Diff line number Diff line
@@ -170,3 +170,8 @@ void intel_parent_fence_priority_display(struct intel_display *display, struct d
	if (display->parent->fence_priority_display)
		display->parent->fence_priority_display(fence);
}

bool intel_parent_has_auxccs(struct intel_display *display)
{
	return display->parent->has_auxccs && display->parent->has_auxccs(display->drm);
}
+2 −0
Original line number Diff line number Diff line
@@ -52,4 +52,6 @@ bool intel_parent_has_fenced_regions(struct intel_display *display);

void intel_parent_fence_priority_display(struct intel_display *display, struct dma_fence *fence);

bool intel_parent_has_auxccs(struct intel_display *display);

#endif /* __INTEL_PARENT_H__ */
+2 −7
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include "intel_fbc.h"
#include "intel_frontbuffer.h"
#include "intel_panic.h"
#include "intel_parent.h"
#include "intel_plane.h"
#include "intel_psr.h"
#include "intel_psr_regs.h"
@@ -1602,7 +1603,7 @@ icl_plane_update_noarm(struct intel_dsb *dsb,
	}

	/* FLAT CCS doesn't need to program AUX_DIST */
	if (HAS_AUX_CCS(display))
	if (HAS_AUX_DIST(display))
		intel_de_write_dsb(display, dsb, PLANE_AUX_DIST(pipe, plane_id),
				   skl_plane_aux_dist(plane_state, color_plane));

@@ -2972,12 +2973,6 @@ skl_universal_plane_create(struct intel_display *display,
	else
		caps = skl_plane_caps(display, pipe, plane_id);

	/* FIXME: xe has problems with AUX */
	if (!IS_ENABLED(I915) && HAS_AUX_CCS(display))
		caps &= ~(INTEL_PLANE_CAP_CCS_RC |
			  INTEL_PLANE_CAP_CCS_RC_CC |
			  INTEL_PLANE_CAP_CCS_MC);

	modifiers = intel_fb_plane_get_modifiers(display, caps);

	ret = drm_universal_plane_init(display->drm, &plane->base,
Loading