Pipe joiner is used only with FRL mode, so allow it only when the platform
and the sink both support FRL.

Signed-off-by: Ankit Nautiyal <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_hdmi.c   | 8 ++++++++
 drivers/gpu/drm/i915/display/intel_hdmi.h   | 1 +
 drivers/gpu/drm/i915/display/intel_joiner.c | 4 ++++
 3 files changed, 13 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c 
b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 2c7c47a3c61d..2955ab5880fe 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -4378,3 +4378,11 @@ void intel_hdmi_frl_get_config(struct intel_crtc_state 
*crtc_state)
 
        intel_hdmi_frl_dfm_read(crtc_state);
 }
+
+bool intel_hdmi_has_joiner(struct intel_hdmi *intel_hdmi)
+{
+       struct intel_display *display = to_intel_display(intel_hdmi);
+       struct intel_encoder *encoder = &hdmi_to_dig_port(intel_hdmi)->base;
+
+       return HAS_HDMI_FRL(display) && 
intel_bios_hdmi_max_frl_rate(encoder->devdata);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.h 
b/drivers/gpu/drm/i915/display/intel_hdmi.h
index 71b12f557d75..b0b40e46b568 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.h
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.h
@@ -87,6 +87,7 @@ int intel_hdmi_sink_max_frl_rate(struct drm_connector 
*connector);
 int intel_hdmi_sink_dsc_max_frl_rate(struct drm_connector *connector);
 void intel_hdmi_frl_cfg_write(const struct intel_crtc_state *crtc_state);
 void intel_hdmi_frl_get_config(struct intel_crtc_state *crtc_state);
+bool intel_hdmi_has_joiner(struct intel_hdmi *intel_hdmi);
 
 /* FRL rate per lane (Gbps) -> PHY PLL table units (10 kbps) */
 #define FRL_GBPS_TO_10KBPS(rate)       ((rate) * 100000)
diff --git a/drivers/gpu/drm/i915/display/intel_joiner.c 
b/drivers/gpu/drm/i915/display/intel_joiner.c
index 9dfe855f5668..9330d53e3cb4 100644
--- a/drivers/gpu/drm/i915/display/intel_joiner.c
+++ b/drivers/gpu/drm/i915/display/intel_joiner.c
@@ -6,6 +6,7 @@
 #include "intel_display_core.h"
 #include "intel_display_types.h"
 #include "intel_dp.h"
+#include "intel_hdmi.h"
 #include "intel_joiner.h"
 
 bool intel_joiner_needs_dsc(struct intel_display *display,
@@ -33,6 +34,9 @@ bool intel_joiner_connector_can_join(struct intel_connector 
*connector)
        case DRM_MODE_CONNECTOR_DisplayPort:
        case DRM_MODE_CONNECTOR_eDP:
                return intel_dp_has_joiner(intel_attached_dp(connector));
+       case DRM_MODE_CONNECTOR_HDMIA:
+       case DRM_MODE_CONNECTOR_HDMIB:
+               return intel_hdmi_has_joiner(intel_attached_hdmi(connector));
        default:
                return false;
        }
-- 
2.50.1

Reply via email to