* [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST
@ 2019-03-08 19:24 Ville Syrjala
2019-03-08 19:24 ` [PATCH 2/5] drm/i915: Expose the force_audio property with " Ville Syrjala
` (8 more replies)
0 siblings, 9 replies; 16+ messages in thread
From: Ville Syrjala @ 2019-03-08 19:24 UTC (permalink / raw)
To: intel-gfx; +Cc: Ivan Vlk
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Add the "Broadcast RGB" property to MST connectors, and implement
the same logic for it as we have in the SST code.
Cc: Ivan Vlk <ari@adyline.sk>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108821
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/intel_dp_mst.c | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index fb67cd931117..2b791d67a43f 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -38,6 +38,8 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
struct intel_digital_port *intel_dig_port = intel_mst->primary;
struct intel_dp *intel_dp = &intel_dig_port->dp;
struct drm_connector *connector = conn_state->connector;
+ struct intel_digital_connector_state *intel_conn_state =
+ to_intel_digital_connector_state(conn_state);
void *port = to_intel_connector(connector)->port;
struct drm_atomic_state *state = pipe_config->base.state;
struct drm_crtc *crtc = pipe_config->base.crtc;
@@ -77,6 +79,21 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port))
pipe_config->has_audio = true;
+ if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
+ /*
+ * See:
+ * CEA-861-E - 5.1 Default Encoding Parameters
+ * VESA DisplayPort Ver.1.2a - 5.1.1.1 Video Colorimetry
+ */
+ pipe_config->limited_color_range =
+ pipe_config->pipe_bpp != 18 &&
+ drm_default_rgb_quant_range(adjusted_mode) ==
+ HDMI_QUANTIZATION_RANGE_LIMITED;
+ } else {
+ pipe_config->limited_color_range =
+ intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED;
+ }
+
mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
pipe_config->pbn = mst_pbn;
@@ -117,7 +134,11 @@ intel_dp_mst_atomic_check(struct drm_connector *connector,
struct drm_crtc *new_crtc = new_conn_state->crtc;
struct drm_crtc_state *crtc_state;
struct drm_dp_mst_topology_mgr *mgr;
- int ret = 0;
+ int ret;
+
+ ret = intel_digital_connector_atomic_check(connector, new_conn_state);
+ if (ret)
+ return ret;
if (!old_conn_state->crtc)
return 0;
@@ -354,11 +375,13 @@ intel_dp_mst_detect(struct drm_connector *connector, bool force)
static const struct drm_connector_funcs intel_dp_mst_connector_funcs = {
.detect = intel_dp_mst_detect,
.fill_modes = drm_helper_probe_single_connector_modes,
+ .atomic_get_property = intel_digital_connector_atomic_get_property,
+ .atomic_set_property = intel_digital_connector_atomic_set_property,
.late_register = intel_connector_register,
.early_unregister = intel_connector_unregister,
.destroy = intel_connector_destroy,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
- .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+ .atomic_duplicate_state = intel_digital_connector_duplicate_state,
};
static int intel_dp_mst_get_modes(struct drm_connector *connector)
@@ -487,6 +510,8 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
if (ret)
goto err;
+ intel_attach_broadcast_rgb_property(connector);
+
return connector;
err:
--
2.19.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 2/5] drm/i915: Expose the force_audio property with DP MST
2019-03-08 19:24 [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST Ville Syrjala
@ 2019-03-08 19:24 ` Ville Syrjala
2019-03-26 10:41 ` Jani Nikula
2019-03-08 19:24 ` [PATCH 3/5] drm/i915: Remove the 8bpc shackles from " Ville Syrjala
` (7 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Ville Syrjala @ 2019-03-08 19:24 UTC (permalink / raw)
To: intel-gfx
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
We already expose the force_audio property with SST. Do the same
with MST.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/intel_dp_mst.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 2b791d67a43f..f9ce9e87d35b 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -64,6 +64,14 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
DRM_DEBUG_KMS("Setting pipe bpp to %d\n",
bpp);
}
+
+ if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
+ pipe_config->has_audio =
+ drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port);
+ else
+ pipe_config->has_audio =
+ intel_conn_state->force_audio == HDMI_AUDIO_ON;
+
/*
* for MST we always configure max link bw - the spec doesn't
* seem to suggest we should do otherwise.
@@ -76,9 +84,6 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
pipe_config->port_clock = intel_dp_max_link_rate(intel_dp);
- if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port))
- pipe_config->has_audio = true;
-
if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
/*
* See:
@@ -510,6 +515,7 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
if (ret)
goto err;
+ intel_attach_force_audio_property(connector);
intel_attach_broadcast_rgb_property(connector);
return connector;
--
2.19.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 3/5] drm/i915: Remove the 8bpc shackles from DP MST
2019-03-08 19:24 [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST Ville Syrjala
2019-03-08 19:24 ` [PATCH 2/5] drm/i915: Expose the force_audio property with " Ville Syrjala
@ 2019-03-08 19:24 ` Ville Syrjala
2019-03-26 10:43 ` Jani Nikula
2019-03-08 19:24 ` [PATCH 4/5] drm/i915: Add max_bpc property for " Ville Syrjala
` (6 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Ville Syrjala @ 2019-03-08 19:24 UTC (permalink / raw)
To: intel-gfx
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Allow DP MST to output any color depth. This means deep color as
well as falling back to 6bpc if we would otherwise require too
much bandwidth.
TODO: We should probably extend bw_contstrained scheme to force
all streams on the link to 6bpc if we can't fit the new stream(s)
otherwise.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/intel_dp.c | 8 +-
drivers/gpu/drm/i915/intel_dp_mst.c | 120 +++++++++++++++++-----------
drivers/gpu/drm/i915/intel_drv.h | 8 ++
3 files changed, 83 insertions(+), 53 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index f40b3342d82a..e1ab50980b83 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1724,12 +1724,6 @@ void intel_dp_compute_rate(struct intel_dp *intel_dp, int port_clock,
}
}
-struct link_config_limits {
- int min_clock, max_clock;
- int min_lane_count, max_lane_count;
- int min_bpp, max_bpp;
-};
-
static bool intel_dp_source_supports_fec(struct intel_dp *intel_dp,
const struct intel_crtc_state *pipe_config)
{
@@ -1792,7 +1786,7 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
}
/* Adjust link config limits based on compliance test requests. */
-static void
+void
intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
struct intel_crtc_state *pipe_config,
struct link_config_limits *limits)
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index f9ce9e87d35b..df8b396cbcdc 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -29,41 +29,81 @@
#include <drm/drm_edid.h>
#include <drm/drm_probe_helper.h>
+static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder,
+ struct intel_crtc_state *crtc_state,
+ struct drm_connector_state *conn_state,
+ struct link_config_limits *limits)
+{
+ struct drm_atomic_state *state = crtc_state->base.state;
+ struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
+ struct intel_dp *intel_dp = &intel_mst->primary->dp;
+ struct intel_connector *connector =
+ to_intel_connector(conn_state->connector);
+ const struct drm_display_mode *adjusted_mode =
+ &crtc_state->base.adjusted_mode;
+ void *port = connector->port;
+ bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
+ DP_DPCD_QUIRK_CONSTANT_N);
+ int slots;
+
+ for (;;) {
+ crtc_state->lane_count = limits->max_lane_count;
+ crtc_state->port_clock = limits->max_clock;
+ crtc_state->pipe_bpp = limits->max_bpp;
+
+ crtc_state->pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock,
+ crtc_state->pipe_bpp);
+
+ slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp->mst_mgr,
+ port, crtc_state->pbn);
+ if (slots == -EDEADLK)
+ return slots;
+ if (slots >= 0)
+ break;
+
+ if (limits->max_bpp > limits->min_bpp) {
+ limits->max_bpp -= 2 * 3;
+ continue;
+ }
+
+ DRM_DEBUG_KMS("failed finding vcpi slots:%d\n", slots);
+
+ return slots;
+ }
+
+ intel_link_compute_m_n(crtc_state->pipe_bpp,
+ crtc_state->lane_count,
+ adjusted_mode->crtc_clock,
+ crtc_state->port_clock,
+ &crtc_state->dp_m_n,
+ constant_n);
+ crtc_state->dp_m_n.tu = slots;
+
+ return 0;
+}
+
static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
struct intel_crtc_state *pipe_config,
struct drm_connector_state *conn_state)
{
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
- struct intel_digital_port *intel_dig_port = intel_mst->primary;
- struct intel_dp *intel_dp = &intel_dig_port->dp;
- struct drm_connector *connector = conn_state->connector;
+ struct intel_dp *intel_dp = &intel_mst->primary->dp;
+ struct intel_connector *connector =
+ to_intel_connector(conn_state->connector);
struct intel_digital_connector_state *intel_conn_state =
to_intel_digital_connector_state(conn_state);
- void *port = to_intel_connector(connector)->port;
- struct drm_atomic_state *state = pipe_config->base.state;
- struct drm_crtc *crtc = pipe_config->base.crtc;
- struct drm_crtc_state *old_crtc_state =
- drm_atomic_get_old_crtc_state(state, crtc);
- int bpp;
- int lane_count, slots =
- to_intel_crtc_state(old_crtc_state)->dp_m_n.tu;
- const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
- int mst_pbn;
- bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
- DP_DPCD_QUIRK_CONSTANT_N);
+ const struct drm_display_mode *adjusted_mode =
+ &pipe_config->base.adjusted_mode;
+ void *port = connector->port;
+ struct link_config_limits limits;
+ int ret;
if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
return -EINVAL;
pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
pipe_config->has_pch_encoder = false;
- bpp = 24;
- if (intel_dp->compliance.test_data.bpc) {
- bpp = intel_dp->compliance.test_data.bpc * 3;
- DRM_DEBUG_KMS("Setting pipe bpp to %d\n",
- bpp);
- }
if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
pipe_config->has_audio =
@@ -76,13 +116,21 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
* for MST we always configure max link bw - the spec doesn't
* seem to suggest we should do otherwise.
*/
- lane_count = intel_dp_max_lane_count(intel_dp);
+ limits.min_clock =
+ limits.max_clock = intel_dp_max_link_rate(intel_dp);
+
+ limits.min_lane_count =
+ limits.max_lane_count = intel_dp_max_lane_count(intel_dp);
- pipe_config->lane_count = lane_count;
+ limits.min_bpp = 6 * 3;
+ limits.max_bpp = pipe_config->pipe_bpp;
- pipe_config->pipe_bpp = bpp;
+ intel_dp_adjust_compliance_config(intel_dp, pipe_config, &limits);
- pipe_config->port_clock = intel_dp_max_link_rate(intel_dp);
+ ret = intel_dp_mst_compute_link_config(encoder, pipe_config,
+ conn_state, &limits);
+ if (ret)
+ return ret;
if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
/*
@@ -99,25 +147,6 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED;
}
- mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
- pipe_config->pbn = mst_pbn;
-
- slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp->mst_mgr, port,
- mst_pbn);
- if (slots < 0) {
- DRM_DEBUG_KMS("failed finding vcpi slots:%d\n",
- slots);
- return slots;
- }
-
- intel_link_compute_m_n(bpp, lane_count,
- adjusted_mode->crtc_clock,
- pipe_config->port_clock,
- &pipe_config->dp_m_n,
- constant_n);
-
- pipe_config->dp_m_n.tu = slots;
-
if (IS_GEN9_LP(dev_priv))
pipe_config->lane_lat_optim_mask =
bxt_ddi_phy_calc_lane_lat_optim_mask(pipe_config->lane_count);
@@ -401,7 +430,6 @@ intel_dp_mst_mode_valid(struct drm_connector *connector,
struct intel_connector *intel_connector = to_intel_connector(connector);
struct intel_dp *intel_dp = intel_connector->mst_port;
int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
- int bpp = 24; /* MST uses fixed bpp */
int max_rate, mode_rate, max_lanes, max_link_clock;
if (drm_connector_is_unregistered(connector))
@@ -414,7 +442,7 @@ intel_dp_mst_mode_valid(struct drm_connector *connector,
max_lanes = intel_dp_max_lane_count(intel_dp);
max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes);
- mode_rate = intel_dp_link_required(mode->clock, bpp);
+ mode_rate = intel_dp_link_required(mode->clock, 18);
/* TODO - validate mode against available PBN for link */
if (mode->clock < 10000)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 40ebc94b2187..fe05ed7ff749 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1904,6 +1904,14 @@ void intel_csr_ucode_suspend(struct drm_i915_private *);
void intel_csr_ucode_resume(struct drm_i915_private *);
/* intel_dp.c */
+struct link_config_limits {
+ int min_clock, max_clock;
+ int min_lane_count, max_lane_count;
+ int min_bpp, max_bpp;
+};
+void intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
+ struct intel_crtc_state *pipe_config,
+ struct link_config_limits *limits);
bool intel_dp_port_enabled(struct drm_i915_private *dev_priv,
i915_reg_t dp_reg, enum port port,
enum pipe *pipe);
--
2.19.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 4/5] drm/i915: Add max_bpc property for DP MST
2019-03-08 19:24 [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST Ville Syrjala
2019-03-08 19:24 ` [PATCH 2/5] drm/i915: Expose the force_audio property with " Ville Syrjala
2019-03-08 19:24 ` [PATCH 3/5] drm/i915: Remove the 8bpc shackles from " Ville Syrjala
@ 2019-03-08 19:24 ` Ville Syrjala
2019-03-26 10:43 ` Jani Nikula
2019-03-08 19:24 ` [PATCH 5/5] drm/i915: Update TRANS_MSA_MISC for fastsets Ville Syrjala
` (5 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Ville Syrjala @ 2019-03-08 19:24 UTC (permalink / raw)
To: intel-gfx
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Allow the user to limit the output bpc with DP MST.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index df8b396cbcdc..23ca2ab88fd1 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -545,6 +545,7 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
intel_attach_force_audio_property(connector);
intel_attach_broadcast_rgb_property(connector);
+ drm_connector_attach_max_bpc_property(connector, 6, 12);
return connector;
--
2.19.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 5/5] drm/i915: Update TRANS_MSA_MISC for fastsets
2019-03-08 19:24 [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST Ville Syrjala
` (2 preceding siblings ...)
2019-03-08 19:24 ` [PATCH 4/5] drm/i915: Add max_bpc property for " Ville Syrjala
@ 2019-03-08 19:24 ` Ville Syrjala
2019-03-26 10:43 ` Jani Nikula
2019-03-08 20:16 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/5] drm/i915: Add broadcast RGB property for DP MST Patchwork
` (4 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Ville Syrjala @ 2019-03-08 19:24 UTC (permalink / raw)
To: intel-gfx
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Update the DP MSA MISC bits for fastsets. This is needed
when we change between limited and full range RGB output.
On HSW+ changing limited_range does not currently result in a
full modeset since we have don't have the readout code for it
(for DP we could, and probably should, readout from TRANS_MSA_MISC
itself, for HDMI we would have to rely on the infoframe). So
the PIPE_CONF_CHECK() is only performed for pre-HSW platforms.
That means any change in the value will result in a fastset
instead. Fortunately there is no prohibition to changing
TRANS_MSA_MISC dynamically, so it looks like we can legally do
fastsets for this.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 7e3b4e8fdf3a..3d9ad4526cf9 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -3556,6 +3556,8 @@ static void intel_ddi_update_pipe_dp(struct intel_encoder *encoder,
{
struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
+ intel_ddi_set_pipe_settings(crtc_state);
+
intel_psr_update(intel_dp, crtc_state);
intel_edp_drrs_enable(intel_dp, crtc_state);
--
2.19.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 16+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/5] drm/i915: Add broadcast RGB property for DP MST
2019-03-08 19:24 [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST Ville Syrjala
` (3 preceding siblings ...)
2019-03-08 19:24 ` [PATCH 5/5] drm/i915: Update TRANS_MSA_MISC for fastsets Ville Syrjala
@ 2019-03-08 20:16 ` Patchwork
2019-03-08 20:45 ` ✓ Fi.CI.BAT: success " Patchwork
` (3 subsequent siblings)
8 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2019-03-08 20:16 UTC (permalink / raw)
To: Ville Syrjala; +Cc: intel-gfx
== Series Details ==
Series: series starting with [1/5] drm/i915: Add broadcast RGB property for DP MST
URL : https://patchwork.freedesktop.org/series/57766/
State : warning
== Summary ==
$ dim checkpatch origin/drm-tip
3a9a15b38816 drm/i915: Add broadcast RGB property for DP MST
8f0b667de193 drm/i915: Expose the force_audio property with DP MST
124b25ae1de0 drm/i915: Remove the 8bpc shackles from DP MST
-:234: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#234: FILE: drivers/gpu/drm/i915/intel_drv.h:1912:
+};
+void intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
total: 0 errors, 0 warnings, 1 checks, 201 lines checked
0147c94c2c5b drm/i915: Add max_bpc property for DP MST
ccb2723ec15a drm/i915: Update TRANS_MSA_MISC for fastsets
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
* ✓ Fi.CI.BAT: success for series starting with [1/5] drm/i915: Add broadcast RGB property for DP MST
2019-03-08 19:24 [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST Ville Syrjala
` (4 preceding siblings ...)
2019-03-08 20:16 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/5] drm/i915: Add broadcast RGB property for DP MST Patchwork
@ 2019-03-08 20:45 ` Patchwork
2019-03-09 3:49 ` ✓ Fi.CI.IGT: " Patchwork
` (2 subsequent siblings)
8 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2019-03-08 20:45 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx
== Series Details ==
Series: series starting with [1/5] drm/i915: Add broadcast RGB property for DP MST
URL : https://patchwork.freedesktop.org/series/57766/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_5728 -> Patchwork_12424
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://patchwork.freedesktop.org/api/1.0/series/57766/revisions/1/mbox/
Known issues
------------
Here are the changes found in Patchwork_12424 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@amdgpu/amd_basic@cs-compute:
- fi-kbl-8809g: NOTRUN -> FAIL [fdo#108094]
* igt@gem_exec_basic@gtt-bsd2:
- fi-byt-clapper: NOTRUN -> SKIP [fdo#109271] +57
* igt@gem_exec_basic@readonly-bsd2:
- fi-pnv-d510: NOTRUN -> SKIP [fdo#109271] +76
* igt@kms_busy@basic-flip-b:
- fi-gdg-551: PASS -> FAIL [fdo#103182]
* igt@kms_busy@basic-flip-c:
- fi-byt-j1900: NOTRUN -> SKIP [fdo#109271] / [fdo#109278]
- fi-byt-clapper: NOTRUN -> SKIP [fdo#109271] / [fdo#109278]
- fi-pnv-d510: NOTRUN -> SKIP [fdo#109271] / [fdo#109278]
* igt@kms_chamelium@hdmi-crc-fast:
- fi-byt-j1900: NOTRUN -> SKIP [fdo#109271] +52
* igt@kms_frontbuffer_tracking@basic:
- fi-byt-clapper: NOTRUN -> FAIL [fdo#103167]
* igt@kms_pipe_crc_basic@hang-read-crc-pipe-b:
- fi-byt-clapper: NOTRUN -> FAIL [fdo#103191] / [fdo#107362]
* igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a:
- fi-byt-clapper: NOTRUN -> FAIL [fdo#107362]
#### Possible fixes ####
* igt@amdgpu/amd_basic@userptr:
- fi-kbl-8809g: DMESG-WARN [fdo#108965] -> PASS
[fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
[fdo#103182]: https://bugs.freedesktop.org/show_bug.cgi?id=103182
[fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191
[fdo#107362]: https://bugs.freedesktop.org/show_bug.cgi?id=107362
[fdo#108094]: https://bugs.freedesktop.org/show_bug.cgi?id=108094
[fdo#108965]: https://bugs.freedesktop.org/show_bug.cgi?id=108965
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
Participating hosts (42 -> 43)
------------------------------
Additional (3): fi-byt-j1900 fi-byt-clapper fi-pnv-d510
Missing (2): fi-ilk-m540 fi-bdw-samus
Build changes
-------------
* Linux: CI_DRM_5728 -> Patchwork_12424
CI_DRM_5728: 78b288a16a32e8828f93c5e2e9eb3c1b73bfdce7 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4877: d15ad69be07a987d5c2ba408201b287adae8ca59 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_12424: ccb2723ec15a18ab1dcbfc69269004e4ce87dd79 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
ccb2723ec15a drm/i915: Update TRANS_MSA_MISC for fastsets
0147c94c2c5b drm/i915: Add max_bpc property for DP MST
124b25ae1de0 drm/i915: Remove the 8bpc shackles from DP MST
8f0b667de193 drm/i915: Expose the force_audio property with DP MST
3a9a15b38816 drm/i915: Add broadcast RGB property for DP MST
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12424/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
* ✓ Fi.CI.IGT: success for series starting with [1/5] drm/i915: Add broadcast RGB property for DP MST
2019-03-08 19:24 [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST Ville Syrjala
` (5 preceding siblings ...)
2019-03-08 20:45 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2019-03-09 3:49 ` Patchwork
2019-03-14 13:07 ` [PATCH 1/5] " Ville Syrjälä
2019-03-26 10:41 ` Jani Nikula
8 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2019-03-09 3:49 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx
== Series Details ==
Series: series starting with [1/5] drm/i915: Add broadcast RGB property for DP MST
URL : https://patchwork.freedesktop.org/series/57766/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_5728_full -> Patchwork_12424_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_12424_full:
### IGT changes ###
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@kms_frontbuffer_tracking@fbc-2p-indfb-fliptrack:
- {shard-iclb}: NOTRUN -> SKIP +11
* igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-pwrite:
- {shard-iclb}: PASS -> FAIL +24
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-onoff:
- {shard-iclb}: NOTRUN -> FAIL +1
* igt@perf_pmu@busy-accuracy-50-vecs0:
- {shard-iclb}: PASS -> TIMEOUT
* igt@perf_pmu@busy-start-vecs0:
- {shard-iclb}: PASS -> INCOMPLETE +1
* igt@runner@aborted:
- {shard-iclb}: ( 7 FAIL ) [fdo#106612] -> ( 5 FAIL )
Known issues
------------
Here are the changes found in Patchwork_12424_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_cpu_reloc@full:
- shard-apl: PASS -> INCOMPLETE [fdo#103927]
* igt@gem_userptr_blits@process-exit-gtt:
- shard-glk: NOTRUN -> SKIP [fdo#109271] +41
* igt@i915_pm_lpsp@screens-disabled:
- shard-skl: NOTRUN -> SKIP [fdo#109271] +73
* igt@i915_pm_rpm@modeset-lpsp:
- shard-skl: PASS -> INCOMPLETE [fdo#107807]
* igt@kms_atomic_transition@3x-modeset-transitions-nonblocking:
- shard-skl: NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +3
* igt@kms_busy@basic-flip-d:
- shard-glk: NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +5
* igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-c:
- shard-hsw: PASS -> DMESG-WARN [fdo#107956]
* igt@kms_color@pipe-a-ctm-max:
- shard-apl: PASS -> FAIL [fdo#108147]
- shard-glk: NOTRUN -> FAIL [fdo#108147]
* igt@kms_cursor_crc@cursor-128x128-onscreen:
- shard-apl: PASS -> FAIL [fdo#103232] +3
* igt@kms_cursor_crc@cursor-128x42-random:
- shard-glk: NOTRUN -> FAIL [fdo#103232] +1
* igt@kms_cursor_crc@cursor-size-change:
- shard-skl: NOTRUN -> FAIL [fdo#103232] +1
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-onoff:
- shard-apl: PASS -> FAIL [fdo#103167] +1
* igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
- shard-skl: PASS -> INCOMPLETE [fdo#104108]
* igt@kms_plane@pixel-format-pipe-b-planes:
- shard-skl: NOTRUN -> FAIL [fdo#103166]
* igt@kms_plane@pixel-format-pipe-c-planes-source-clamping:
- shard-skl: NOTRUN -> DMESG-WARN [fdo#106885]
* igt@kms_plane@plane-position-covered-pipe-a-planes:
- shard-glk: NOTRUN -> FAIL [fdo#103166]
* igt@kms_plane_alpha_blend@pipe-b-alpha-basic:
- shard-skl: NOTRUN -> FAIL [fdo#107815] / [fdo#108145]
* igt@kms_plane_alpha_blend@pipe-b-alpha-opaque-fb:
- shard-glk: NOTRUN -> FAIL [fdo#108145]
* igt@kms_plane_alpha_blend@pipe-b-coverage-7efc:
- shard-skl: NOTRUN -> FAIL [fdo#107815]
* igt@kms_plane_alpha_blend@pipe-c-alpha-opaque-fb:
- shard-skl: NOTRUN -> FAIL [fdo#108145]
* igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min:
- shard-skl: PASS -> FAIL [fdo#108145]
* igt@kms_plane_multiple@atomic-pipe-b-tiling-none:
- shard-apl: PASS -> FAIL [fdo#103166] +2
* igt@kms_plane_multiple@atomic-pipe-b-tiling-yf:
- shard-glk: PASS -> FAIL [fdo#103166]
* igt@kms_rotation_crc@multiplane-rotation:
- shard-kbl: PASS -> INCOMPLETE [fdo#103665]
* igt@kms_rotation_crc@multiplane-rotation-cropping-bottom:
- shard-kbl: PASS -> DMESG-FAIL [fdo#105763]
* igt@kms_universal_plane@disable-primary-vs-flip-pipe-f:
- shard-apl: NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +1
* igt@prime_nv_api@i915_nv_import_vs_close:
- shard-apl: NOTRUN -> SKIP [fdo#109271] +31
#### Possible fixes ####
* igt@gem_ctx_isolation@vcs0-none:
- {shard-iclb}: DMESG-FAIL -> PASS
* igt@gem_eio@wait-wedge-immediate:
- {shard-iclb}: WARN -> PASS
* igt@i915_pm_rpm@basic-pci-d3-state:
- shard-skl: INCOMPLETE [fdo#107807] -> PASS
* igt@kms_color@pipe-a-degamma:
- shard-apl: FAIL [fdo#104782] / [fdo#108145] -> PASS
* igt@kms_color@pipe-a-legacy-gamma:
- shard-skl: FAIL [fdo#104782] / [fdo#108145] -> PASS
* igt@kms_cursor_crc@cursor-128x42-random:
- shard-skl: FAIL [fdo#103232] -> PASS
* igt@kms_cursor_crc@cursor-64x21-random:
- shard-apl: FAIL [fdo#103232] -> PASS
* igt@kms_cursor_crc@cursor-alpha-opaque:
- shard-apl: FAIL [fdo#109350] -> PASS
* igt@kms_flip@flip-vs-suspend:
- shard-skl: INCOMPLETE [fdo#109507] -> PASS
* igt@kms_flip_tiling@flip-yf-tiled:
- shard-skl: FAIL [fdo#108145] -> PASS +2
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-render:
- shard-apl: FAIL [fdo#103167] -> PASS +3
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move:
- shard-glk: FAIL [fdo#103167] -> PASS +4
* igt@kms_frontbuffer_tracking@fbc-badstride:
- {shard-iclb}: FAIL [fdo#103167] -> PASS +5
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-cpu:
- shard-skl: FAIL [fdo#103167] -> PASS +1
* igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-cpu:
- {shard-iclb}: FAIL [fdo#105682] -> PASS
* igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-pwrite:
- shard-skl: FAIL [fdo#105682] -> PASS +1
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-pwrite:
- {shard-iclb}: FAIL -> PASS +7
* igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes:
- shard-glk: INCOMPLETE [fdo#103359] / [k.org#198133] -> PASS +1
- {shard-iclb}: DMESG-WARN -> PASS +1
* igt@kms_plane@plane-position-covered-pipe-c-planes:
- shard-apl: FAIL [fdo#103166] -> PASS +1
- shard-glk: FAIL [fdo#103166] -> PASS +2
* igt@kms_plane_multiple@atomic-pipe-c-tiling-y:
- {shard-iclb}: FAIL [fdo#103166] -> PASS
* igt@kms_psr@cursor_render:
- {shard-iclb}: FAIL [fdo#107383] -> PASS +2
* igt@kms_psr@psr2_sprite_render:
- {shard-iclb}: SKIP [fdo#109441] -> PASS
* igt@kms_setmode@basic:
- shard-glk: FAIL [fdo#99912] -> PASS
* igt@perf_pmu@busy-idle-vcs0:
- {shard-iclb}: INCOMPLETE -> PASS
#### Warnings ####
* igt@i915_pm_rpm@pc8-residency:
- shard-skl: INCOMPLETE [fdo#107807] -> SKIP [fdo#109271]
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
[fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
[fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
[fdo#103355]: https://bugs.freedesktop.org/show_bug.cgi?id=103355
[fdo#103359]: https://bugs.freedesktop.org/show_bug.cgi?id=103359
[fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
[fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
[fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
[fdo#104782]: https://bugs.freedesktop.org/show_bug.cgi?id=104782
[fdo#105682]: https://bugs.freedesktop.org/show_bug.cgi?id=105682
[fdo#105763]: https://bugs.freedesktop.org/show_bug.cgi?id=105763
[fdo#106612]: https://bugs.freedesktop.org/show_bug.cgi?id=106612
[fdo#106885]: https://bugs.freedesktop.org/show_bug.cgi?id=106885
[fdo#107383]: https://bugs.freedesktop.org/show_bug.cgi?id=107383
[fdo#107807]: https://bugs.freedesktop.org/show_bug.cgi?id=107807
[fdo#107815]: https://bugs.freedesktop.org/show_bug.cgi?id=107815
[fdo#107956]: https://bugs.freedesktop.org/show_bug.cgi?id=107956
[fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
[fdo#108147]: https://bugs.freedesktop.org/show_bug.cgi?id=108147
[fdo#108948]: https://bugs.freedesktop.org/show_bug.cgi?id=108948
[fdo#109052]: https://bugs.freedesktop.org/show_bug.cgi?id=109052
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
[fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
[fdo#109277]: https://bugs.freedesktop.org/show_bug.cgi?id=109277
[fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
[fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279
[fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
[fdo#109283]: https://bugs.freedesktop.org/show_bug.cgi?id=109283
[fdo#109284]: https://bugs.freedesktop.org/show_bug.cgi?id=109284
[fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
[fdo#109287]: https://bugs.freedesktop.org/show_bug.cgi?id=109287
[fdo#109288]: https://bugs.freedesktop.org/show_bug.cgi?id=109288
[fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
[fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
[fdo#109301]: https://bugs.freedesktop.org/show_bug.cgi?id=109301
[fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
[fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
[fdo#109350]: https://bugs.freedesktop.org/show_bug.cgi?id=109350
[fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
[fdo#109502]: https://bugs.freedesktop.org/show_bug.cgi?id=109502
[fdo#109507]: https://bugs.freedesktop.org/show_bug.cgi?id=109507
[fdo#109559]: https://bugs.freedesktop.org/show_bug.cgi?id=109559
[fdo#109633]: https://bugs.freedesktop.org/show_bug.cgi?id=109633
[fdo#109673]: https://bugs.freedesktop.org/show_bug.cgi?id=109673
[fdo#109677]: https://bugs.freedesktop.org/show_bug.cgi?id=109677
[fdo#109766]: https://bugs.freedesktop.org/show_bug.cgi?id=109766
[fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912
[k.org#198133]: https://bugzilla.kernel.org/show_bug.cgi?id=198133
Participating hosts (7 -> 7)
------------------------------
No changes in participating hosts
Build changes
-------------
* Linux: CI_DRM_5728 -> Patchwork_12424
CI_DRM_5728: 78b288a16a32e8828f93c5e2e9eb3c1b73bfdce7 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4877: d15ad69be07a987d5c2ba408201b287adae8ca59 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_12424: ccb2723ec15a18ab1dcbfc69269004e4ce87dd79 @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12424/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST
2019-03-08 19:24 [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST Ville Syrjala
` (6 preceding siblings ...)
2019-03-09 3:49 ` ✓ Fi.CI.IGT: " Patchwork
@ 2019-03-14 13:07 ` Ville Syrjälä
2019-03-26 10:41 ` Jani Nikula
8 siblings, 0 replies; 16+ messages in thread
From: Ville Syrjälä @ 2019-03-14 13:07 UTC (permalink / raw)
To: intel-gfx; +Cc: Ivan Vlk
On Fri, Mar 08, 2019 at 09:24:05PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Add the "Broadcast RGB" property to MST connectors, and implement
> the same logic for it as we have in the SST code.
>
> Cc: Ivan Vlk <ari@adyline.sk>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108821
Tested-by: Ivan Vlk <ari@adyline.sk>
review needed...
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_dp_mst.c | 29 +++++++++++++++++++++++++++--
> 1 file changed, 27 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index fb67cd931117..2b791d67a43f 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -38,6 +38,8 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> struct intel_digital_port *intel_dig_port = intel_mst->primary;
> struct intel_dp *intel_dp = &intel_dig_port->dp;
> struct drm_connector *connector = conn_state->connector;
> + struct intel_digital_connector_state *intel_conn_state =
> + to_intel_digital_connector_state(conn_state);
> void *port = to_intel_connector(connector)->port;
> struct drm_atomic_state *state = pipe_config->base.state;
> struct drm_crtc *crtc = pipe_config->base.crtc;
> @@ -77,6 +79,21 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port))
> pipe_config->has_audio = true;
>
> + if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
> + /*
> + * See:
> + * CEA-861-E - 5.1 Default Encoding Parameters
> + * VESA DisplayPort Ver.1.2a - 5.1.1.1 Video Colorimetry
> + */
> + pipe_config->limited_color_range =
> + pipe_config->pipe_bpp != 18 &&
> + drm_default_rgb_quant_range(adjusted_mode) ==
> + HDMI_QUANTIZATION_RANGE_LIMITED;
> + } else {
> + pipe_config->limited_color_range =
> + intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED;
> + }
> +
> mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
> pipe_config->pbn = mst_pbn;
>
> @@ -117,7 +134,11 @@ intel_dp_mst_atomic_check(struct drm_connector *connector,
> struct drm_crtc *new_crtc = new_conn_state->crtc;
> struct drm_crtc_state *crtc_state;
> struct drm_dp_mst_topology_mgr *mgr;
> - int ret = 0;
> + int ret;
> +
> + ret = intel_digital_connector_atomic_check(connector, new_conn_state);
> + if (ret)
> + return ret;
>
> if (!old_conn_state->crtc)
> return 0;
> @@ -354,11 +375,13 @@ intel_dp_mst_detect(struct drm_connector *connector, bool force)
> static const struct drm_connector_funcs intel_dp_mst_connector_funcs = {
> .detect = intel_dp_mst_detect,
> .fill_modes = drm_helper_probe_single_connector_modes,
> + .atomic_get_property = intel_digital_connector_atomic_get_property,
> + .atomic_set_property = intel_digital_connector_atomic_set_property,
> .late_register = intel_connector_register,
> .early_unregister = intel_connector_unregister,
> .destroy = intel_connector_destroy,
> .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> - .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
> + .atomic_duplicate_state = intel_digital_connector_duplicate_state,
> };
>
> static int intel_dp_mst_get_modes(struct drm_connector *connector)
> @@ -487,6 +510,8 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
> if (ret)
> goto err;
>
> + intel_attach_broadcast_rgb_property(connector);
> +
> return connector;
>
> err:
> --
> 2.19.2
--
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST
2019-03-08 19:24 [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST Ville Syrjala
` (7 preceding siblings ...)
2019-03-14 13:07 ` [PATCH 1/5] " Ville Syrjälä
@ 2019-03-26 10:41 ` Jani Nikula
2019-03-26 13:12 ` Ville Syrjälä
8 siblings, 1 reply; 16+ messages in thread
From: Jani Nikula @ 2019-03-26 10:41 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: Ivan Vlk
On Fri, 08 Mar 2019, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Add the "Broadcast RGB" property to MST connectors, and implement
> the same logic for it as we have in the SST code.
Should we mention the added *other* atomic checks here?
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>
> Cc: Ivan Vlk <ari@adyline.sk>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108821
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_dp_mst.c | 29 +++++++++++++++++++++++++++--
> 1 file changed, 27 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index fb67cd931117..2b791d67a43f 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -38,6 +38,8 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> struct intel_digital_port *intel_dig_port = intel_mst->primary;
> struct intel_dp *intel_dp = &intel_dig_port->dp;
> struct drm_connector *connector = conn_state->connector;
> + struct intel_digital_connector_state *intel_conn_state =
> + to_intel_digital_connector_state(conn_state);
> void *port = to_intel_connector(connector)->port;
> struct drm_atomic_state *state = pipe_config->base.state;
> struct drm_crtc *crtc = pipe_config->base.crtc;
> @@ -77,6 +79,21 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port))
> pipe_config->has_audio = true;
>
> + if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
> + /*
> + * See:
> + * CEA-861-E - 5.1 Default Encoding Parameters
> + * VESA DisplayPort Ver.1.2a - 5.1.1.1 Video Colorimetry
> + */
> + pipe_config->limited_color_range =
> + pipe_config->pipe_bpp != 18 &&
> + drm_default_rgb_quant_range(adjusted_mode) ==
> + HDMI_QUANTIZATION_RANGE_LIMITED;
> + } else {
> + pipe_config->limited_color_range =
> + intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED;
> + }
> +
> mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
> pipe_config->pbn = mst_pbn;
>
> @@ -117,7 +134,11 @@ intel_dp_mst_atomic_check(struct drm_connector *connector,
> struct drm_crtc *new_crtc = new_conn_state->crtc;
> struct drm_crtc_state *crtc_state;
> struct drm_dp_mst_topology_mgr *mgr;
> - int ret = 0;
> + int ret;
> +
> + ret = intel_digital_connector_atomic_check(connector, new_conn_state);
> + if (ret)
> + return ret;
>
> if (!old_conn_state->crtc)
> return 0;
> @@ -354,11 +375,13 @@ intel_dp_mst_detect(struct drm_connector *connector, bool force)
> static const struct drm_connector_funcs intel_dp_mst_connector_funcs = {
> .detect = intel_dp_mst_detect,
> .fill_modes = drm_helper_probe_single_connector_modes,
> + .atomic_get_property = intel_digital_connector_atomic_get_property,
> + .atomic_set_property = intel_digital_connector_atomic_set_property,
> .late_register = intel_connector_register,
> .early_unregister = intel_connector_unregister,
> .destroy = intel_connector_destroy,
> .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> - .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
> + .atomic_duplicate_state = intel_digital_connector_duplicate_state,
> };
>
> static int intel_dp_mst_get_modes(struct drm_connector *connector)
> @@ -487,6 +510,8 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
> if (ret)
> goto err;
>
> + intel_attach_broadcast_rgb_property(connector);
> +
> return connector;
>
> err:
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/5] drm/i915: Expose the force_audio property with DP MST
2019-03-08 19:24 ` [PATCH 2/5] drm/i915: Expose the force_audio property with " Ville Syrjala
@ 2019-03-26 10:41 ` Jani Nikula
0 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2019-03-26 10:41 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx
On Fri, 08 Mar 2019, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> We already expose the force_audio property with SST. Do the same
> with MST.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/intel_dp_mst.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 2b791d67a43f..f9ce9e87d35b 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -64,6 +64,14 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> DRM_DEBUG_KMS("Setting pipe bpp to %d\n",
> bpp);
> }
> +
> + if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
> + pipe_config->has_audio =
> + drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port);
> + else
> + pipe_config->has_audio =
> + intel_conn_state->force_audio == HDMI_AUDIO_ON;
> +
> /*
> * for MST we always configure max link bw - the spec doesn't
> * seem to suggest we should do otherwise.
> @@ -76,9 +84,6 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
>
> pipe_config->port_clock = intel_dp_max_link_rate(intel_dp);
>
> - if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port))
> - pipe_config->has_audio = true;
> -
> if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
> /*
> * See:
> @@ -510,6 +515,7 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
> if (ret)
> goto err;
>
> + intel_attach_force_audio_property(connector);
> intel_attach_broadcast_rgb_property(connector);
>
> return connector;
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/5] drm/i915: Remove the 8bpc shackles from DP MST
2019-03-08 19:24 ` [PATCH 3/5] drm/i915: Remove the 8bpc shackles from " Ville Syrjala
@ 2019-03-26 10:43 ` Jani Nikula
2019-03-26 13:16 ` Ville Syrjälä
0 siblings, 1 reply; 16+ messages in thread
From: Jani Nikula @ 2019-03-26 10:43 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx
On Fri, 08 Mar 2019, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Allow DP MST to output any color depth. This means deep color as
> well as falling back to 6bpc if we would otherwise require too
> much bandwidth.
>
> TODO: We should probably extend bw_contstrained scheme to force
> all streams on the link to 6bpc if we can't fit the new stream(s)
> otherwise.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_dp.c | 8 +-
> drivers/gpu/drm/i915/intel_dp_mst.c | 120 +++++++++++++++++-----------
> drivers/gpu/drm/i915/intel_drv.h | 8 ++
> 3 files changed, 83 insertions(+), 53 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index f40b3342d82a..e1ab50980b83 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1724,12 +1724,6 @@ void intel_dp_compute_rate(struct intel_dp *intel_dp, int port_clock,
> }
> }
>
> -struct link_config_limits {
> - int min_clock, max_clock;
> - int min_lane_count, max_lane_count;
> - int min_bpp, max_bpp;
> -};
> -
> static bool intel_dp_source_supports_fec(struct intel_dp *intel_dp,
> const struct intel_crtc_state *pipe_config)
> {
> @@ -1792,7 +1786,7 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
> }
>
> /* Adjust link config limits based on compliance test requests. */
> -static void
> +void
> intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
> struct intel_crtc_state *pipe_config,
> struct link_config_limits *limits)
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index f9ce9e87d35b..df8b396cbcdc 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -29,41 +29,81 @@
> #include <drm/drm_edid.h>
> #include <drm/drm_probe_helper.h>
>
> +static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder,
> + struct intel_crtc_state *crtc_state,
> + struct drm_connector_state *conn_state,
> + struct link_config_limits *limits)
> +{
> + struct drm_atomic_state *state = crtc_state->base.state;
> + struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
> + struct intel_dp *intel_dp = &intel_mst->primary->dp;
> + struct intel_connector *connector =
> + to_intel_connector(conn_state->connector);
> + const struct drm_display_mode *adjusted_mode =
> + &crtc_state->base.adjusted_mode;
> + void *port = connector->port;
> + bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
> + DP_DPCD_QUIRK_CONSTANT_N);
> + int slots;
> +
> + for (;;) {
I'm not particularly fond of having the loop conditions sprinkled in the
block. But looks correct.
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> + crtc_state->lane_count = limits->max_lane_count;
> + crtc_state->port_clock = limits->max_clock;
> + crtc_state->pipe_bpp = limits->max_bpp;
> +
> + crtc_state->pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock,
> + crtc_state->pipe_bpp);
> +
> + slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp->mst_mgr,
> + port, crtc_state->pbn);
> + if (slots == -EDEADLK)
> + return slots;
> + if (slots >= 0)
> + break;
> +
> + if (limits->max_bpp > limits->min_bpp) {
> + limits->max_bpp -= 2 * 3;
> + continue;
> + }
> +
> + DRM_DEBUG_KMS("failed finding vcpi slots:%d\n", slots);
> +
> + return slots;
> + }
> +
> + intel_link_compute_m_n(crtc_state->pipe_bpp,
> + crtc_state->lane_count,
> + adjusted_mode->crtc_clock,
> + crtc_state->port_clock,
> + &crtc_state->dp_m_n,
> + constant_n);
> + crtc_state->dp_m_n.tu = slots;
> +
> + return 0;
> +}
> +
> static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> struct intel_crtc_state *pipe_config,
> struct drm_connector_state *conn_state)
> {
> struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
> - struct intel_digital_port *intel_dig_port = intel_mst->primary;
> - struct intel_dp *intel_dp = &intel_dig_port->dp;
> - struct drm_connector *connector = conn_state->connector;
> + struct intel_dp *intel_dp = &intel_mst->primary->dp;
> + struct intel_connector *connector =
> + to_intel_connector(conn_state->connector);
> struct intel_digital_connector_state *intel_conn_state =
> to_intel_digital_connector_state(conn_state);
> - void *port = to_intel_connector(connector)->port;
> - struct drm_atomic_state *state = pipe_config->base.state;
> - struct drm_crtc *crtc = pipe_config->base.crtc;
> - struct drm_crtc_state *old_crtc_state =
> - drm_atomic_get_old_crtc_state(state, crtc);
> - int bpp;
> - int lane_count, slots =
> - to_intel_crtc_state(old_crtc_state)->dp_m_n.tu;
> - const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
> - int mst_pbn;
> - bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
> - DP_DPCD_QUIRK_CONSTANT_N);
> + const struct drm_display_mode *adjusted_mode =
> + &pipe_config->base.adjusted_mode;
> + void *port = connector->port;
> + struct link_config_limits limits;
> + int ret;
>
> if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
> return -EINVAL;
>
> pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
> pipe_config->has_pch_encoder = false;
> - bpp = 24;
> - if (intel_dp->compliance.test_data.bpc) {
> - bpp = intel_dp->compliance.test_data.bpc * 3;
> - DRM_DEBUG_KMS("Setting pipe bpp to %d\n",
> - bpp);
> - }
>
> if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
> pipe_config->has_audio =
> @@ -76,13 +116,21 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> * for MST we always configure max link bw - the spec doesn't
> * seem to suggest we should do otherwise.
> */
> - lane_count = intel_dp_max_lane_count(intel_dp);
> + limits.min_clock =
> + limits.max_clock = intel_dp_max_link_rate(intel_dp);
> +
> + limits.min_lane_count =
> + limits.max_lane_count = intel_dp_max_lane_count(intel_dp);
>
> - pipe_config->lane_count = lane_count;
> + limits.min_bpp = 6 * 3;
> + limits.max_bpp = pipe_config->pipe_bpp;
>
> - pipe_config->pipe_bpp = bpp;
> + intel_dp_adjust_compliance_config(intel_dp, pipe_config, &limits);
>
> - pipe_config->port_clock = intel_dp_max_link_rate(intel_dp);
> + ret = intel_dp_mst_compute_link_config(encoder, pipe_config,
> + conn_state, &limits);
> + if (ret)
> + return ret;
>
> if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
> /*
> @@ -99,25 +147,6 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED;
> }
>
> - mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
> - pipe_config->pbn = mst_pbn;
> -
> - slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp->mst_mgr, port,
> - mst_pbn);
> - if (slots < 0) {
> - DRM_DEBUG_KMS("failed finding vcpi slots:%d\n",
> - slots);
> - return slots;
> - }
> -
> - intel_link_compute_m_n(bpp, lane_count,
> - adjusted_mode->crtc_clock,
> - pipe_config->port_clock,
> - &pipe_config->dp_m_n,
> - constant_n);
> -
> - pipe_config->dp_m_n.tu = slots;
> -
> if (IS_GEN9_LP(dev_priv))
> pipe_config->lane_lat_optim_mask =
> bxt_ddi_phy_calc_lane_lat_optim_mask(pipe_config->lane_count);
> @@ -401,7 +430,6 @@ intel_dp_mst_mode_valid(struct drm_connector *connector,
> struct intel_connector *intel_connector = to_intel_connector(connector);
> struct intel_dp *intel_dp = intel_connector->mst_port;
> int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
> - int bpp = 24; /* MST uses fixed bpp */
> int max_rate, mode_rate, max_lanes, max_link_clock;
>
> if (drm_connector_is_unregistered(connector))
> @@ -414,7 +442,7 @@ intel_dp_mst_mode_valid(struct drm_connector *connector,
> max_lanes = intel_dp_max_lane_count(intel_dp);
>
> max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes);
> - mode_rate = intel_dp_link_required(mode->clock, bpp);
> + mode_rate = intel_dp_link_required(mode->clock, 18);
>
> /* TODO - validate mode against available PBN for link */
> if (mode->clock < 10000)
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 40ebc94b2187..fe05ed7ff749 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1904,6 +1904,14 @@ void intel_csr_ucode_suspend(struct drm_i915_private *);
> void intel_csr_ucode_resume(struct drm_i915_private *);
>
> /* intel_dp.c */
> +struct link_config_limits {
> + int min_clock, max_clock;
> + int min_lane_count, max_lane_count;
> + int min_bpp, max_bpp;
> +};
> +void intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
> + struct intel_crtc_state *pipe_config,
> + struct link_config_limits *limits);
> bool intel_dp_port_enabled(struct drm_i915_private *dev_priv,
> i915_reg_t dp_reg, enum port port,
> enum pipe *pipe);
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/5] drm/i915: Add max_bpc property for DP MST
2019-03-08 19:24 ` [PATCH 4/5] drm/i915: Add max_bpc property for " Ville Syrjala
@ 2019-03-26 10:43 ` Jani Nikula
0 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2019-03-26 10:43 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx
On Fri, 08 Mar 2019, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Allow the user to limit the output bpc with DP MST.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index df8b396cbcdc..23ca2ab88fd1 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -545,6 +545,7 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
>
> intel_attach_force_audio_property(connector);
> intel_attach_broadcast_rgb_property(connector);
> + drm_connector_attach_max_bpc_property(connector, 6, 12);
>
> return connector;
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 5/5] drm/i915: Update TRANS_MSA_MISC for fastsets
2019-03-08 19:24 ` [PATCH 5/5] drm/i915: Update TRANS_MSA_MISC for fastsets Ville Syrjala
@ 2019-03-26 10:43 ` Jani Nikula
0 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2019-03-26 10:43 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx
On Fri, 08 Mar 2019, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Update the DP MSA MISC bits for fastsets. This is needed
> when we change between limited and full range RGB output.
>
> On HSW+ changing limited_range does not currently result in a
> full modeset since we have don't have the readout code for it
> (for DP we could, and probably should, readout from TRANS_MSA_MISC
> itself, for HDMI we would have to rely on the infoframe). So
> the PIPE_CONF_CHECK() is only performed for pre-HSW platforms.
> That means any change in the value will result in a fastset
> instead. Fortunately there is no prohibition to changing
> TRANS_MSA_MISC dynamically, so it looks like we can legally do
> fastsets for this.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/intel_ddi.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 7e3b4e8fdf3a..3d9ad4526cf9 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -3556,6 +3556,8 @@ static void intel_ddi_update_pipe_dp(struct intel_encoder *encoder,
> {
> struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
>
> + intel_ddi_set_pipe_settings(crtc_state);
> +
> intel_psr_update(intel_dp, crtc_state);
> intel_edp_drrs_enable(intel_dp, crtc_state);
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST
2019-03-26 10:41 ` Jani Nikula
@ 2019-03-26 13:12 ` Ville Syrjälä
0 siblings, 0 replies; 16+ messages in thread
From: Ville Syrjälä @ 2019-03-26 13:12 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, Ivan Vlk
On Tue, Mar 26, 2019 at 12:41:36PM +0200, Jani Nikula wrote:
> On Fri, 08 Mar 2019, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Add the "Broadcast RGB" property to MST connectors, and implement
> > the same logic for it as we have in the SST code.
>
> Should we mention the added *other* atomic checks here?
We don't have the corresponding properties attached to the connector so
all the rest should be nops.
>
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>
>
> >
> > Cc: Ivan Vlk <ari@adyline.sk>
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108821
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/i915/intel_dp_mst.c | 29 +++++++++++++++++++++++++++--
> > 1 file changed, 27 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> > index fb67cd931117..2b791d67a43f 100644
> > --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> > +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> > @@ -38,6 +38,8 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> > struct intel_digital_port *intel_dig_port = intel_mst->primary;
> > struct intel_dp *intel_dp = &intel_dig_port->dp;
> > struct drm_connector *connector = conn_state->connector;
> > + struct intel_digital_connector_state *intel_conn_state =
> > + to_intel_digital_connector_state(conn_state);
> > void *port = to_intel_connector(connector)->port;
> > struct drm_atomic_state *state = pipe_config->base.state;
> > struct drm_crtc *crtc = pipe_config->base.crtc;
> > @@ -77,6 +79,21 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> > if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port))
> > pipe_config->has_audio = true;
> >
> > + if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
> > + /*
> > + * See:
> > + * CEA-861-E - 5.1 Default Encoding Parameters
> > + * VESA DisplayPort Ver.1.2a - 5.1.1.1 Video Colorimetry
> > + */
> > + pipe_config->limited_color_range =
> > + pipe_config->pipe_bpp != 18 &&
> > + drm_default_rgb_quant_range(adjusted_mode) ==
> > + HDMI_QUANTIZATION_RANGE_LIMITED;
> > + } else {
> > + pipe_config->limited_color_range =
> > + intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED;
> > + }
> > +
> > mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
> > pipe_config->pbn = mst_pbn;
> >
> > @@ -117,7 +134,11 @@ intel_dp_mst_atomic_check(struct drm_connector *connector,
> > struct drm_crtc *new_crtc = new_conn_state->crtc;
> > struct drm_crtc_state *crtc_state;
> > struct drm_dp_mst_topology_mgr *mgr;
> > - int ret = 0;
> > + int ret;
> > +
> > + ret = intel_digital_connector_atomic_check(connector, new_conn_state);
> > + if (ret)
> > + return ret;
> >
> > if (!old_conn_state->crtc)
> > return 0;
> > @@ -354,11 +375,13 @@ intel_dp_mst_detect(struct drm_connector *connector, bool force)
> > static const struct drm_connector_funcs intel_dp_mst_connector_funcs = {
> > .detect = intel_dp_mst_detect,
> > .fill_modes = drm_helper_probe_single_connector_modes,
> > + .atomic_get_property = intel_digital_connector_atomic_get_property,
> > + .atomic_set_property = intel_digital_connector_atomic_set_property,
> > .late_register = intel_connector_register,
> > .early_unregister = intel_connector_unregister,
> > .destroy = intel_connector_destroy,
> > .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> > - .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
> > + .atomic_duplicate_state = intel_digital_connector_duplicate_state,
> > };
> >
> > static int intel_dp_mst_get_modes(struct drm_connector *connector)
> > @@ -487,6 +510,8 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
> > if (ret)
> > goto err;
> >
> > + intel_attach_broadcast_rgb_property(connector);
> > +
> > return connector;
> >
> > err:
>
> --
> Jani Nikula, Intel Open Source Graphics Center
--
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/5] drm/i915: Remove the 8bpc shackles from DP MST
2019-03-26 10:43 ` Jani Nikula
@ 2019-03-26 13:16 ` Ville Syrjälä
0 siblings, 0 replies; 16+ messages in thread
From: Ville Syrjälä @ 2019-03-26 13:16 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Tue, Mar 26, 2019 at 12:43:23PM +0200, Jani Nikula wrote:
> On Fri, 08 Mar 2019, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Allow DP MST to output any color depth. This means deep color as
> > well as falling back to 6bpc if we would otherwise require too
> > much bandwidth.
> >
> > TODO: We should probably extend bw_contstrained scheme to force
> > all streams on the link to 6bpc if we can't fit the new stream(s)
> > otherwise.
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/i915/intel_dp.c | 8 +-
> > drivers/gpu/drm/i915/intel_dp_mst.c | 120 +++++++++++++++++-----------
> > drivers/gpu/drm/i915/intel_drv.h | 8 ++
> > 3 files changed, 83 insertions(+), 53 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index f40b3342d82a..e1ab50980b83 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -1724,12 +1724,6 @@ void intel_dp_compute_rate(struct intel_dp *intel_dp, int port_clock,
> > }
> > }
> >
> > -struct link_config_limits {
> > - int min_clock, max_clock;
> > - int min_lane_count, max_lane_count;
> > - int min_bpp, max_bpp;
> > -};
> > -
> > static bool intel_dp_source_supports_fec(struct intel_dp *intel_dp,
> > const struct intel_crtc_state *pipe_config)
> > {
> > @@ -1792,7 +1786,7 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
> > }
> >
> > /* Adjust link config limits based on compliance test requests. */
> > -static void
> > +void
> > intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
> > struct intel_crtc_state *pipe_config,
> > struct link_config_limits *limits)
> > diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> > index f9ce9e87d35b..df8b396cbcdc 100644
> > --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> > +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> > @@ -29,41 +29,81 @@
> > #include <drm/drm_edid.h>
> > #include <drm/drm_probe_helper.h>
> >
> > +static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder,
> > + struct intel_crtc_state *crtc_state,
> > + struct drm_connector_state *conn_state,
> > + struct link_config_limits *limits)
> > +{
> > + struct drm_atomic_state *state = crtc_state->base.state;
> > + struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
> > + struct intel_dp *intel_dp = &intel_mst->primary->dp;
> > + struct intel_connector *connector =
> > + to_intel_connector(conn_state->connector);
> > + const struct drm_display_mode *adjusted_mode =
> > + &crtc_state->base.adjusted_mode;
> > + void *port = connector->port;
> > + bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
> > + DP_DPCD_QUIRK_CONSTANT_N);
> > + int slots;
> > +
> > + for (;;) {
>
> I'm not particularly fond of having the loop conditions sprinkled in the
> block. But looks correct.
Ah yes, we can make this a regular for loop. I was just going for
an infinite loop originally and didn't think further.
>
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>
>
>
> > + crtc_state->lane_count = limits->max_lane_count;
> > + crtc_state->port_clock = limits->max_clock;
> > + crtc_state->pipe_bpp = limits->max_bpp;
> > +
> > + crtc_state->pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock,
> > + crtc_state->pipe_bpp);
> > +
> > + slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp->mst_mgr,
> > + port, crtc_state->pbn);
> > + if (slots == -EDEADLK)
> > + return slots;
> > + if (slots >= 0)
> > + break;
> > +
> > + if (limits->max_bpp > limits->min_bpp) {
> > + limits->max_bpp -= 2 * 3;
> > + continue;
> > + }
> > +
> > + DRM_DEBUG_KMS("failed finding vcpi slots:%d\n", slots);
> > +
> > + return slots;
> > + }
> > +
> > + intel_link_compute_m_n(crtc_state->pipe_bpp,
> > + crtc_state->lane_count,
> > + adjusted_mode->crtc_clock,
> > + crtc_state->port_clock,
> > + &crtc_state->dp_m_n,
> > + constant_n);
> > + crtc_state->dp_m_n.tu = slots;
> > +
> > + return 0;
> > +}
> > +
> > static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> > struct intel_crtc_state *pipe_config,
> > struct drm_connector_state *conn_state)
> > {
> > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
> > - struct intel_digital_port *intel_dig_port = intel_mst->primary;
> > - struct intel_dp *intel_dp = &intel_dig_port->dp;
> > - struct drm_connector *connector = conn_state->connector;
> > + struct intel_dp *intel_dp = &intel_mst->primary->dp;
> > + struct intel_connector *connector =
> > + to_intel_connector(conn_state->connector);
> > struct intel_digital_connector_state *intel_conn_state =
> > to_intel_digital_connector_state(conn_state);
> > - void *port = to_intel_connector(connector)->port;
> > - struct drm_atomic_state *state = pipe_config->base.state;
> > - struct drm_crtc *crtc = pipe_config->base.crtc;
> > - struct drm_crtc_state *old_crtc_state =
> > - drm_atomic_get_old_crtc_state(state, crtc);
> > - int bpp;
> > - int lane_count, slots =
> > - to_intel_crtc_state(old_crtc_state)->dp_m_n.tu;
> > - const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
> > - int mst_pbn;
> > - bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
> > - DP_DPCD_QUIRK_CONSTANT_N);
> > + const struct drm_display_mode *adjusted_mode =
> > + &pipe_config->base.adjusted_mode;
> > + void *port = connector->port;
> > + struct link_config_limits limits;
> > + int ret;
> >
> > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
> > return -EINVAL;
> >
> > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
> > pipe_config->has_pch_encoder = false;
> > - bpp = 24;
> > - if (intel_dp->compliance.test_data.bpc) {
> > - bpp = intel_dp->compliance.test_data.bpc * 3;
> > - DRM_DEBUG_KMS("Setting pipe bpp to %d\n",
> > - bpp);
> > - }
> >
> > if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
> > pipe_config->has_audio =
> > @@ -76,13 +116,21 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> > * for MST we always configure max link bw - the spec doesn't
> > * seem to suggest we should do otherwise.
> > */
> > - lane_count = intel_dp_max_lane_count(intel_dp);
> > + limits.min_clock =
> > + limits.max_clock = intel_dp_max_link_rate(intel_dp);
> > +
> > + limits.min_lane_count =
> > + limits.max_lane_count = intel_dp_max_lane_count(intel_dp);
> >
> > - pipe_config->lane_count = lane_count;
> > + limits.min_bpp = 6 * 3;
> > + limits.max_bpp = pipe_config->pipe_bpp;
> >
> > - pipe_config->pipe_bpp = bpp;
> > + intel_dp_adjust_compliance_config(intel_dp, pipe_config, &limits);
> >
> > - pipe_config->port_clock = intel_dp_max_link_rate(intel_dp);
> > + ret = intel_dp_mst_compute_link_config(encoder, pipe_config,
> > + conn_state, &limits);
> > + if (ret)
> > + return ret;
> >
> > if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
> > /*
> > @@ -99,25 +147,6 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
> > intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED;
> > }
> >
> > - mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
> > - pipe_config->pbn = mst_pbn;
> > -
> > - slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp->mst_mgr, port,
> > - mst_pbn);
> > - if (slots < 0) {
> > - DRM_DEBUG_KMS("failed finding vcpi slots:%d\n",
> > - slots);
> > - return slots;
> > - }
> > -
> > - intel_link_compute_m_n(bpp, lane_count,
> > - adjusted_mode->crtc_clock,
> > - pipe_config->port_clock,
> > - &pipe_config->dp_m_n,
> > - constant_n);
> > -
> > - pipe_config->dp_m_n.tu = slots;
> > -
> > if (IS_GEN9_LP(dev_priv))
> > pipe_config->lane_lat_optim_mask =
> > bxt_ddi_phy_calc_lane_lat_optim_mask(pipe_config->lane_count);
> > @@ -401,7 +430,6 @@ intel_dp_mst_mode_valid(struct drm_connector *connector,
> > struct intel_connector *intel_connector = to_intel_connector(connector);
> > struct intel_dp *intel_dp = intel_connector->mst_port;
> > int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
> > - int bpp = 24; /* MST uses fixed bpp */
> > int max_rate, mode_rate, max_lanes, max_link_clock;
> >
> > if (drm_connector_is_unregistered(connector))
> > @@ -414,7 +442,7 @@ intel_dp_mst_mode_valid(struct drm_connector *connector,
> > max_lanes = intel_dp_max_lane_count(intel_dp);
> >
> > max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes);
> > - mode_rate = intel_dp_link_required(mode->clock, bpp);
> > + mode_rate = intel_dp_link_required(mode->clock, 18);
> >
> > /* TODO - validate mode against available PBN for link */
> > if (mode->clock < 10000)
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index 40ebc94b2187..fe05ed7ff749 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -1904,6 +1904,14 @@ void intel_csr_ucode_suspend(struct drm_i915_private *);
> > void intel_csr_ucode_resume(struct drm_i915_private *);
> >
> > /* intel_dp.c */
> > +struct link_config_limits {
> > + int min_clock, max_clock;
> > + int min_lane_count, max_lane_count;
> > + int min_bpp, max_bpp;
> > +};
> > +void intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
> > + struct intel_crtc_state *pipe_config,
> > + struct link_config_limits *limits);
> > bool intel_dp_port_enabled(struct drm_i915_private *dev_priv,
> > i915_reg_t dp_reg, enum port port,
> > enum pipe *pipe);
>
> --
> Jani Nikula, Intel Open Source Graphics Center
--
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2019-03-26 13:16 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-08 19:24 [PATCH 1/5] drm/i915: Add broadcast RGB property for DP MST Ville Syrjala
2019-03-08 19:24 ` [PATCH 2/5] drm/i915: Expose the force_audio property with " Ville Syrjala
2019-03-26 10:41 ` Jani Nikula
2019-03-08 19:24 ` [PATCH 3/5] drm/i915: Remove the 8bpc shackles from " Ville Syrjala
2019-03-26 10:43 ` Jani Nikula
2019-03-26 13:16 ` Ville Syrjälä
2019-03-08 19:24 ` [PATCH 4/5] drm/i915: Add max_bpc property for " Ville Syrjala
2019-03-26 10:43 ` Jani Nikula
2019-03-08 19:24 ` [PATCH 5/5] drm/i915: Update TRANS_MSA_MISC for fastsets Ville Syrjala
2019-03-26 10:43 ` Jani Nikula
2019-03-08 20:16 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/5] drm/i915: Add broadcast RGB property for DP MST Patchwork
2019-03-08 20:45 ` ✓ Fi.CI.BAT: success " Patchwork
2019-03-09 3:49 ` ✓ Fi.CI.IGT: " Patchwork
2019-03-14 13:07 ` [PATCH 1/5] " Ville Syrjälä
2019-03-26 10:41 ` Jani Nikula
2019-03-26 13:12 ` Ville Syrjälä
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.