Move intel_dp_joiner_candidate_valid() and the max hdisplay helper to intel_joiner.c so any encoder can use them. Replace the DP-only check with intel_joiner_connector_can_join(), which uses connector type, allowing HDMI to be added later.
Signed-off-by: Ankit Nautiyal <[email protected]> --- .../drm/i915/display/intel_display_debugfs.c | 6 ++-- drivers/gpu/drm/i915/display/intel_dp.c | 36 ------------------- drivers/gpu/drm/i915/display/intel_dp.h | 9 ----- drivers/gpu/drm/i915/display/intel_joiner.c | 35 ++++++++++++++++++ drivers/gpu/drm/i915/display/intel_joiner.h | 9 +++++ 5 files changed, 46 insertions(+), 49 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c index 3e302f23f247..7c0864ed0384 100644 --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c @@ -43,6 +43,7 @@ #include "intel_hdcp.h" #include "intel_hdmi.h" #include "intel_hotplug.h" +#include "intel_joiner.h" #include "intel_link_bw.h" #include "intel_panel.h" #include "intel_pps.h" @@ -1352,12 +1353,9 @@ void intel_connector_debugfs_add(struct intel_connector *connector) connector, &i915_dsc_fractional_bpp_fops); } - if ((connector_type == DRM_MODE_CONNECTOR_DisplayPort || - connector_type == DRM_MODE_CONNECTOR_eDP) && - intel_dp_has_joiner(intel_attached_dp(connector))) { + if (intel_joiner_connector_can_join(connector)) debugfs_create_file("i915_joiner_force_enable", 0644, root, connector, &i915_joiner_fops); - } if (connector_type == DRM_MODE_CONNECTOR_DSI || connector_type == DRM_MODE_CONNECTOR_eDP || diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index 49e4c77b5142..ba724c2e16f6 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -1243,11 +1243,6 @@ intel_dp_sink_format_valid(struct intel_connector *connector, } } -int intel_dp_max_hdisplay_per_pipe(struct intel_display *display) -{ - return DISPLAY_VER(display) >= 30 ? 6144 : 5120; -} - bool intel_dp_has_dsc(const struct intel_connector *connector) { struct intel_display *display = to_intel_display(connector); @@ -1268,18 +1263,6 @@ bool intel_dp_has_dsc(const struct intel_connector *connector) return true; } -static -bool intel_dp_can_join(struct intel_dp *intel_dp, - int num_joined_pipes) -{ - struct intel_display *display = to_intel_display(intel_dp); - - if (num_joined_pipes > 1 && !intel_dp_has_joiner(intel_dp)) - return false; - - return intel_joiner_valid_primary_pipe_mask(display, num_joined_pipes); -} - bool intel_dp_dotclk_valid(struct intel_display *display, int target_clock, int htotal, @@ -7515,25 +7498,6 @@ int intel_dp_sdp_min_guardband(const struct intel_crtc_state *crtc_state, return sdp_guardband; } -bool intel_dp_joiner_candidate_valid(struct intel_connector *connector, - int hdisplay, - int num_joined_pipes) -{ - struct intel_display *display = to_intel_display(connector); - struct intel_dp *intel_dp = intel_attached_dp(connector); - - if (!intel_dp_can_join(intel_dp, num_joined_pipes)) - return false; - - if (hdisplay > num_joined_pipes * intel_dp_max_hdisplay_per_pipe(display)) - return false; - - if (connector->force_joined_pipes && connector->force_joined_pipes != num_joined_pipes) - return false; - - return true; -} - u8 intel_dp_as_sdp_transmission_time(void) { /* diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h index 17b6e270b05e..26d2313f2662 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.h +++ b/drivers/gpu/drm/i915/display/intel_dp.h @@ -221,20 +221,11 @@ int intel_dp_compute_config_late(struct intel_encoder *encoder, struct drm_connector_state *conn_state); int intel_dp_sdp_min_guardband(const struct intel_crtc_state *crtc_state, bool assume_all_enabled); -int intel_dp_max_hdisplay_per_pipe(struct intel_display *display); bool intel_dp_dotclk_valid(struct intel_display *display, int target_clock, int htotal, int dsc_slice_count, int num_joined_pipes); -bool intel_dp_joiner_candidate_valid(struct intel_connector *connector, - int hdisplay, - int num_joined_pipes); - -#define for_each_joiner_candidate(__connector, __mode, __num_joined_pipes) \ - for ((__num_joined_pipes) = 1; (__num_joined_pipes) <= (I915_MAX_PIPES); (__num_joined_pipes)++) \ - for_each_if(intel_dp_joiner_candidate_valid(__connector, (__mode)->hdisplay, __num_joined_pipes)) - u8 intel_dp_as_sdp_transmission_time(void); int intel_dp_link_init(struct intel_dp *intel_dp); diff --git a/drivers/gpu/drm/i915/display/intel_joiner.c b/drivers/gpu/drm/i915/display/intel_joiner.c index b9d7c9bfd1a6..4c50f226199d 100644 --- a/drivers/gpu/drm/i915/display/intel_joiner.c +++ b/drivers/gpu/drm/i915/display/intel_joiner.c @@ -20,3 +20,38 @@ bool intel_joiner_needs_dsc(struct intel_display *display, return (!HAS_UNCOMPRESSED_JOINER(display) && num_joined_pipes == 2) || num_joined_pipes == 4; } + +static +int intel_joiner_max_hdisplay_per_pipe(struct intel_display *display) +{ + return DISPLAY_VER(display) >= 30 ? 6144 : 5120; +} + +bool intel_joiner_connector_can_join(struct intel_connector *connector) +{ + switch (connector->base.connector_type) { + case DRM_MODE_CONNECTOR_DisplayPort: + case DRM_MODE_CONNECTOR_eDP: + return intel_dp_has_joiner(intel_attached_dp(connector)); + default: + return false; + } +} + +bool intel_joiner_candidate_valid(struct intel_connector *connector, + int hdisplay, + int num_joined_pipes) +{ + struct intel_display *display = to_intel_display(connector); + + if (hdisplay > num_joined_pipes * intel_joiner_max_hdisplay_per_pipe(display)) + return false; + + if (connector->force_joined_pipes && connector->force_joined_pipes != num_joined_pipes) + return false; + + if (num_joined_pipes > 1 && !intel_joiner_connector_can_join(connector)) + return false; + + return intel_joiner_valid_primary_pipe_mask(display, num_joined_pipes); +} diff --git a/drivers/gpu/drm/i915/display/intel_joiner.h b/drivers/gpu/drm/i915/display/intel_joiner.h index a091eab2f86d..85e19ed1527f 100644 --- a/drivers/gpu/drm/i915/display/intel_joiner.h +++ b/drivers/gpu/drm/i915/display/intel_joiner.h @@ -8,9 +8,18 @@ #include <linux/types.h> +struct intel_connector; struct intel_display; bool intel_joiner_needs_dsc(struct intel_display *display, int num_joined_pipes); +bool intel_joiner_connector_can_join(struct intel_connector *connector); +bool intel_joiner_candidate_valid(struct intel_connector *connector, + int hdisplay, + int num_joined_pipes); + +#define for_each_joiner_candidate(__connector, __mode, __num_joined_pipes) \ + for ((__num_joined_pipes) = 1; (__num_joined_pipes) <= (I915_MAX_PIPES); (__num_joined_pipes)++) \ + for_each_if(intel_joiner_candidate_valid(__connector, (__mode)->hdisplay, __num_joined_pipes)) #endif /* __INTEL_JOINER_H__ */ -- 2.50.1
