mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 16:12:59 +02:00
drm/i915: Compute config and mode valid changes for ultrajoiner
Implement required changes for mode validation and compute config, to support Ultrajoiner. v2: -Drop changes for HDMI. -Separate out DSC changes into another patch. v3: Fix check in can_ultrajoiner. (Ankit) v4: -Unify helper to check joiner requirement. (Ville) -Split patches for ultrajoiner changes for max dsc slices and compressed bpp.(Ankit) v5: Fix check for joiner. (Ville) Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240930163549.416410-12-ankit.k.nautiyal@intel.com
This commit is contained in:
parent
f84be3b3f8
commit
988d9e5fdd
|
|
@ -1307,26 +1307,38 @@ intel_dp_mode_valid_downstream(struct intel_connector *connector,
|
|||
}
|
||||
|
||||
static
|
||||
bool intel_dp_needs_bigjoiner(struct intel_dp *intel_dp,
|
||||
struct intel_connector *connector,
|
||||
int hdisplay, int clock)
|
||||
bool intel_dp_needs_joiner(struct intel_dp *intel_dp,
|
||||
struct intel_connector *connector,
|
||||
int hdisplay, int clock,
|
||||
int num_joined_pipes)
|
||||
{
|
||||
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
|
||||
|
||||
if (!intel_dp_has_joiner(intel_dp))
|
||||
return false;
|
||||
|
||||
return clock > i915->display.cdclk.max_dotclk_freq || hdisplay > 5120;
|
||||
num_joined_pipes /= 2;
|
||||
|
||||
return clock > num_joined_pipes * i915->display.cdclk.max_dotclk_freq ||
|
||||
hdisplay > num_joined_pipes * 5120;
|
||||
}
|
||||
|
||||
int intel_dp_num_joined_pipes(struct intel_dp *intel_dp,
|
||||
struct intel_connector *connector,
|
||||
int hdisplay, int clock)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(intel_dp);
|
||||
struct drm_i915_private *i915 = to_i915(display->drm);
|
||||
|
||||
if (connector->force_joined_pipes)
|
||||
return connector->force_joined_pipes;
|
||||
|
||||
if (intel_dp_needs_bigjoiner(intel_dp, connector, hdisplay, clock))
|
||||
if (HAS_ULTRAJOINER(i915) &&
|
||||
intel_dp_needs_joiner(intel_dp, connector, hdisplay, clock, 4))
|
||||
return 4;
|
||||
|
||||
if ((HAS_BIGJOINER(i915) || HAS_UNCOMPRESSED_JOINER(i915)) &&
|
||||
intel_dp_needs_joiner(intel_dp, connector, hdisplay, clock, 2))
|
||||
return 2;
|
||||
|
||||
return 1;
|
||||
|
|
@ -2532,8 +2544,10 @@ bool intel_dp_joiner_needs_dsc(struct drm_i915_private *i915,
|
|||
* Pipe joiner needs compression up to display 12 due to bandwidth
|
||||
* limitation. DG2 onwards pipe joiner can be enabled without
|
||||
* compression.
|
||||
* Ultrajoiner always needs compression.
|
||||
*/
|
||||
return !HAS_UNCOMPRESSED_JOINER(i915) && num_joined_pipes == 2;
|
||||
return (!HAS_UNCOMPRESSED_JOINER(i915) && num_joined_pipes == 2) ||
|
||||
num_joined_pipes == 4;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user