All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v14 1/2] drm: Add connector property to limit max bpc
@ 2018-10-12 18:42 Radhakrishna Sripada
  2018-10-12 18:42 ` [PATCH v14 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp Radhakrishna Sripada
                   ` (7 more replies)
  0 siblings, 8 replies; 16+ messages in thread
From: Radhakrishna Sripada @ 2018-10-12 18:42 UTC (permalink / raw)
  To: intel-gfx
  Cc: Stanislav Lisovskiy, Radhakrishna Sripada, Sunpeng Li,
	Daniel Vetter, Kishore Kadiyala, Manasi Navare, dri-devel,
	Rodrigo Vivi

At times 12bpc HDMI cannot be driven due to faulty cables, dongles
level shifters etc. To workaround them we may need to drive the output
at a lower bpc. Currently the user space does not have a way to limit
the bpc. The default bpc to be programmed is decided by the driver and
is run against connector limitations.

Creating a new connector property "max bpc" in order to limit the bpc.
xrandr can make use of this connector property to make sure that bpc does
not exceed the configured value. This property can be used by userspace to
set the bpc.

V2: Initialize max_bpc to satisfy kms_properties
V3: Move the property to drm_connector
V4: Split drm and i915 components(Ville)
V5: Make the property per connector(Ville)
V6: Compare the requested bpc to connector bpc(Daniel)
    Move the attach_property function to core(Ville)
V7: Fix checkpatch warnings
V8: Simplify the connector check code(Ville)
V9: Const display_info(Ville)
V10,V11: Fix CI issues.
V12: Add the Kernel documentation(Daniel)
V14: Crossreference the function name in the doc(Daniel)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Kishore Kadiyala <kishore.kadiyala@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Manasi Navare <manasi.d.navare@intel.com>
Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Cc: Sunpeng Li <sunpeng.li@amd.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
 drivers/gpu/drm/drm_atomic.c        |  5 +++++
 drivers/gpu/drm/drm_atomic_helper.c |  4 ++++
 drivers/gpu/drm/drm_atomic_uapi.c   |  4 ++++
 drivers/gpu/drm/drm_connector.c     | 41 +++++++++++++++++++++++++++++++++++++
 include/drm/drm_connector.h         | 20 ++++++++++++++++++
 5 files changed, 74 insertions(+)

diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 2870ae205237..cd8362dc4f74 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -390,6 +390,11 @@ static int drm_atomic_connector_check(struct drm_connector *connector,
 {
 	struct drm_crtc_state *crtc_state;
 	struct drm_writeback_job *writeback_job = state->writeback_job;
+	const struct drm_display_info *info = &connector->display_info;
+
+	state->max_bpc = info->bpc ? info->bpc : 8;
+	if (connector->max_bpc_property)
+		state->max_bpc = min(state->max_bpc, state->max_requested_bpc);
 
 	if ((connector->connector_type != DRM_MODE_CONNECTOR_WRITEBACK) || !writeback_job)
 		return 0;
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 6f66777dca4b..d61a74b254f5 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -650,6 +650,10 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
 			if (old_connector_state->link_status !=
 			    new_connector_state->link_status)
 				new_crtc_state->connectors_changed = true;
+
+			if (old_connector_state->max_requested_bpc !=
+			    new_connector_state->max_requested_bpc)
+				new_crtc_state->connectors_changed = true;
 		}
 
 		if (funcs->atomic_check)
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index a22d6f269b07..7492819c81ce 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -761,6 +761,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
 
 		return set_out_fence_for_connector(state->state, connector,
 						   fence_ptr);
+	} else if (property == connector->max_bpc_property) {
+		state->max_requested_bpc = val;
 	} else if (connector->funcs->atomic_set_property) {
 		return connector->funcs->atomic_set_property(connector,
 				state, property, val);
@@ -825,6 +827,8 @@ drm_atomic_connector_get_property(struct drm_connector *connector,
 		*val = 0;
 	} else if (property == config->writeback_out_fence_ptr_property) {
 		*val = 0;
+	} else if (property == connector->max_bpc_property) {
+		*val = state->max_requested_bpc;
 	} else if (connector->funcs->atomic_get_property) {
 		return connector->funcs->atomic_get_property(connector,
 				state, property, val);
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 5d01414ec9f7..bdaa29e530d4 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -932,6 +932,13 @@ DRM_ENUM_NAME_FN(drm_get_content_protection_name, drm_cp_enum_list)
  *	  is no longer protected and userspace should take appropriate action
  *	  (whatever that might be).
  *
+ * max bpc:
+ *	This range property is used by userspace to limit the bit depth. When
+ *	used the driver would limit the bpc in accordance with the valid range
+ *	supported by the hardware and sink. Drivers to use the function
+ *	drm_connector_attach_max_bpc_property() to create and attach the
+ *	property to the connector during initialization.
+ *
  * Connectors also have one standardized atomic property:
  *
  * CRTC_ID:
@@ -1600,6 +1607,40 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
 EXPORT_SYMBOL(drm_connector_set_link_status_property);
 
 /**
+ * drm_connector_attach_max_bpc_property - attach "max bpc" property
+ * @connector: connector to attach max bpc property on.
+ * @min: The minimum bit depth supported by the connector.
+ * @max: The maximum bit depth supported by the connector.
+ *
+ * This is used to add support for limiting the bit depth on a connector.
+ *
+ * Returns:
+ * Zero on success, negative errno on failure.
+ */
+int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
+					  int min, int max)
+{
+	struct drm_device *dev = connector->dev;
+	struct drm_property *prop;
+
+	prop = connector->max_bpc_property;
+	if (!prop) {
+		prop = drm_property_create_range(dev, 0, "max bpc", min, max);
+		if (!prop)
+			return -ENOMEM;
+
+		connector->max_bpc_property = prop;
+	}
+
+	drm_object_attach_property(&connector->base, prop, max);
+	connector->state->max_requested_bpc = max;
+	connector->state->max_bpc = max;
+
+	return 0;
+}
+EXPORT_SYMBOL(drm_connector_attach_max_bpc_property);
+
+/**
  * drm_connector_init_panel_orientation_property -
  *	initialize the connecters panel_orientation property
  * @connector: connector for which to init the panel-orientation property.
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 5b3cf909fd5e..a402d16427a1 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -461,6 +461,18 @@ struct drm_connector_state {
 	 * drm_writeback_signal_completion()
 	 */
 	struct drm_writeback_job *writeback_job;
+
+	/**
+	 * @max_requested_bpc: Connector property to limit the maximum bit
+	 * depth of the pixels.
+	 */
+	u8 max_requested_bpc;
+
+	/**
+	 * @max_bpc: Connector max_bpc based on the requested max_bpc property
+	 * and the connector bpc limitations obtained from edid.
+	 */
+	u8 max_bpc;
 };
 
 /**
@@ -924,6 +936,12 @@ struct drm_connector {
 	 */
 	struct drm_property_blob *path_blob_ptr;
 
+	/**
+	 * @max_bpc_property: Default connector property for the max bpc to be
+	 * driven out of the connector.
+	 */
+	struct drm_property *max_bpc_property;
+
 #define DRM_CONNECTOR_POLL_HPD (1 << 0)
 #define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
 #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
@@ -1202,6 +1220,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
 					    uint64_t link_status);
 int drm_connector_init_panel_orientation_property(
 	struct drm_connector *connector, int width, int height);
+int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
+					  int min, int max);
 
 /**
  * struct drm_tile_group - Tile group metadata
-- 
2.9.3

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v14 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp
  2018-10-12 18:42 [PATCH v14 1/2] drm: Add connector property to limit max bpc Radhakrishna Sripada
@ 2018-10-12 18:42 ` Radhakrishna Sripada
  2018-10-15  7:54   ` Lisovskiy, Stanislav
  2018-10-23  1:44   ` [PATCH v15 " Manasi Navare
  2018-10-12 18:54 ` ✗ Fi.CI.SPARSE: warning for series starting with [v14,1/2] drm: Add connector property to limit max bpc Patchwork
                   ` (6 subsequent siblings)
  7 siblings, 2 replies; 16+ messages in thread
From: Radhakrishna Sripada @ 2018-10-12 18:42 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Kishore Kadiyala, dri-devel, Rodrigo Vivi

Use the newly added "max bpc" connector property to limit pipe bpp.

V3: Use drm_connector_state to access the "max bpc" property
V4: Initialize the drm property, add suuport to DP(Ville)
V5: Use the property in the connector and fix CI failure(Ville)
V6: Use the core function to attach max_bpc property, remove the redundant
    clamping of pipe bpp based on connector info
V7: Fix Checkpatch warnings
V9: Cleanup connected_sink_max_bpp and fix initial value in DP(Ville)
V12: Fix debug message(Ville)
V13: Remove the redundant check and simplify the check logic(Stan)
V14: Fix the check in connected_sink_max_bpp(Stan)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Kishore Kadiyala <kishore.kadiyala@intel.com>
Cc: Manasi Navare <manasi.d.navare@intel.com>
Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 49 ++++++++++++++++++++----------------
 drivers/gpu/drm/i915/intel_dp.c      |  4 +++
 drivers/gpu/drm/i915/intel_hdmi.c    |  5 ++++
 3 files changed, 37 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 980f4ea68e48..ddcb7da3a4e1 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -10791,30 +10791,37 @@ static void intel_modeset_update_connector_atomic_state(struct drm_device *dev)
 	drm_connector_list_iter_end(&conn_iter);
 }
 
-static void
-connected_sink_compute_bpp(struct intel_connector *connector,
-			   struct intel_crtc_state *pipe_config)
+static int
+connected_sink_max_bpp(const struct drm_connector_state *conn_state,
+		       struct intel_crtc_state *pipe_config)
 {
-	const struct drm_display_info *info = &connector->base.display_info;
-	int bpp = pipe_config->pipe_bpp;
+	int bpp;
+	struct drm_display_info *info = &conn_state->connector->display_info;
 
-	DRM_DEBUG_KMS("[CONNECTOR:%d:%s] checking for sink bpp constrains\n",
-		      connector->base.base.id,
-		      connector->base.name);
-
-	/* Don't use an invalid EDID bpc value */
-	if (info->bpc != 0 && info->bpc * 3 < bpp) {
-		DRM_DEBUG_KMS("clamping display bpp (was %d) to EDID reported max of %d\n",
-			      bpp, info->bpc * 3);
-		pipe_config->pipe_bpp = info->bpc * 3;
+	switch (conn_state->max_bpc) {
+	case 6 ... 7:
+		bpp = 6 * 3;
+	case 8 ... 9:
+		bpp = 8 * 3;
+		break;
+	case 10 ... 11:
+		bpp = 10 * 3;
+		break;
+	case 12:
+		bpp = 12 * 3;
+		break;
+	default:
+		return -EINVAL;
 	}
 
-	/* Clamp bpp to 8 on screens without EDID 1.4 */
-	if (info->bpc == 0 && bpp > 24) {
-		DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of 24\n",
-			      bpp);
-		pipe_config->pipe_bpp = 24;
+	if (bpp < pipe_config->pipe_bpp) {
+		DRM_DEBUG_KMS("Limiting display bpp to %d instead of Edid bpp "
+			      "%d, requested bpp %d, max platform bpp %d\n", bpp,
+			      3 * info->bpc, 3 * conn_state->max_requested_bpc,
+			      pipe_config->pipe_bpp);
+		pipe_config->pipe_bpp = bpp;
 	}
+	return 0;
 }
 
 static int
@@ -10845,8 +10852,8 @@ compute_baseline_pipe_bpp(struct intel_crtc *crtc,
 		if (connector_state->crtc != &crtc->base)
 			continue;
 
-		connected_sink_compute_bpp(to_intel_connector(connector),
-					   pipe_config);
+		if (connected_sink_max_bpp(connector_state, pipe_config) < 0)
+			return -EINVAL;
 	}
 
 	return bpp;
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 13ff89be6ad6..5f594430b2a4 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -5735,6 +5735,10 @@ intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connect
 		intel_attach_force_audio_property(connector);
 
 	intel_attach_broadcast_rgb_property(connector);
+	if (HAS_GMCH_DISPLAY(dev_priv))
+		drm_connector_attach_max_bpc_property(connector, 6, 10);
+	else if (INTEL_GEN(dev_priv) >= 5)
+		drm_connector_attach_max_bpc_property(connector, 6, 12);
 
 	if (intel_dp_is_edp(intel_dp)) {
 		u32 allowed_scalers;
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 2c53efc463e6..3158ab085a30 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -2103,11 +2103,16 @@ static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
 static void
 intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *connector)
 {
+	struct drm_i915_private *dev_priv = to_i915(connector->dev);
+
 	intel_attach_force_audio_property(connector);
 	intel_attach_broadcast_rgb_property(connector);
 	intel_attach_aspect_ratio_property(connector);
 	drm_connector_attach_content_type_property(connector);
 	connector->state->picture_aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
+
+	if (!HAS_GMCH_DISPLAY(dev_priv))
+		drm_connector_attach_max_bpc_property(connector, 8, 12);
 }
 
 /*
-- 
2.9.3

_______________________________________________
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.SPARSE: warning for series starting with [v14,1/2] drm: Add connector property to limit max bpc
  2018-10-12 18:42 [PATCH v14 1/2] drm: Add connector property to limit max bpc Radhakrishna Sripada
  2018-10-12 18:42 ` [PATCH v14 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp Radhakrishna Sripada
@ 2018-10-12 18:54 ` Patchwork
  2018-10-12 19:14 ` ✓ Fi.CI.BAT: success " Patchwork
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2018-10-12 18:54 UTC (permalink / raw)
  To: Radhakrishna Sripada; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v14,1/2] drm: Add connector property to limit max bpc
URL   : https://patchwork.freedesktop.org/series/50951/
State : warning

== Summary ==

$ dim sparse origin/drm-tip
Sparse version: v0.5.2
Commit: drm: Add connector property to limit max bpc
+drivers/gpu/drm/drm_atomic.c:397:34: warning: expression using sizeof(void)
+drivers/gpu/drm/drm_atomic.c:397:34: warning: expression using sizeof(void)

Commit: drm/i915: Allow "max bpc" property to limit pipe_bpp
Okay!

_______________________________________________
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 [v14,1/2] drm: Add connector property to limit max bpc
  2018-10-12 18:42 [PATCH v14 1/2] drm: Add connector property to limit max bpc Radhakrishna Sripada
  2018-10-12 18:42 ` [PATCH v14 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp Radhakrishna Sripada
  2018-10-12 18:54 ` ✗ Fi.CI.SPARSE: warning for series starting with [v14,1/2] drm: Add connector property to limit max bpc Patchwork
@ 2018-10-12 19:14 ` Patchwork
  2018-10-12 21:54 ` ✓ Fi.CI.IGT: " Patchwork
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2018-10-12 19:14 UTC (permalink / raw)
  To: Radhakrishna Sripada; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v14,1/2] drm: Add connector property to limit max bpc
URL   : https://patchwork.freedesktop.org/series/50951/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4978 -> Patchwork_10446 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/50951/revisions/1/mbox/

== Known issues ==

  Here are the changes found in Patchwork_10446 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@kms_flip@basic-flip-vs-modeset:
      fi-glk-j4005:       PASS -> DMESG-WARN (fdo#106000)

    igt@pm_rpm@module-reload:
      fi-glk-j4005:       PASS -> DMESG-WARN (fdo#107726, fdo#106097)

    
    ==== Possible fixes ====

    igt@drv_module_reload@basic-reload:
      fi-blb-e6850:       INCOMPLETE (fdo#107718) -> PASS

    igt@kms_frontbuffer_tracking@basic:
      fi-byt-clapper:     FAIL (fdo#103167) -> PASS

    igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b-frame-sequence:
      fi-byt-clapper:     FAIL (fdo#103191, fdo#107362) -> PASS +1

    
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#106000 https://bugs.freedesktop.org/show_bug.cgi?id=106000
  fdo#106097 https://bugs.freedesktop.org/show_bug.cgi?id=106097
  fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
  fdo#107718 https://bugs.freedesktop.org/show_bug.cgi?id=107718
  fdo#107726 https://bugs.freedesktop.org/show_bug.cgi?id=107726


== Participating hosts (44 -> 41) ==

  Missing    (3): fi-ilk-m540 fi-byt-squawks fi-bsw-cyan 


== Build changes ==

    * Linux: CI_DRM_4978 -> Patchwork_10446

  CI_DRM_4978: ca98b2681a49a1417f8157af2d94a4f2d0bd0e47 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4674: 93871c6fb3c25e5d350c9faf36ded917174214de @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_10446: 0ad86ac395cac307eadfb3dd938d9cdee039ea4e @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

0ad86ac395ca drm/i915: Allow "max bpc" property to limit pipe_bpp
882b2bf79265 drm: Add connector property to limit max bpc

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10446/issues.html
_______________________________________________
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 [v14,1/2] drm: Add connector property to limit max bpc
  2018-10-12 18:42 [PATCH v14 1/2] drm: Add connector property to limit max bpc Radhakrishna Sripada
                   ` (2 preceding siblings ...)
  2018-10-12 19:14 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2018-10-12 21:54 ` Patchwork
  2018-10-23  1:59 ` ✗ Fi.CI.SPARSE: warning for series starting with [v14,1/2] drm: Add connector property to limit max bpc (rev2) Patchwork
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2018-10-12 21:54 UTC (permalink / raw)
  To: Radhakrishna Sripada; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v14,1/2] drm: Add connector property to limit max bpc
URL   : https://patchwork.freedesktop.org/series/50951/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4978_full -> Patchwork_10446_full =

== Summary - SUCCESS ==

  No regressions found.

  

== Known issues ==

  Here are the changes found in Patchwork_10446_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@drv_suspend@fence-restore-tiled2untiled:
      shard-skl:          PASS -> INCOMPLETE (fdo#104108, fdo#107773)

    igt@gem_ppgtt@blt-vs-render-ctx0:
      shard-skl:          NOTRUN -> TIMEOUT (fdo#108039) +1

    igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-a:
      shard-skl:          NOTRUN -> DMESG-WARN (fdo#107956)

    igt@kms_cursor_crc@cursor-256x85-onscreen:
      shard-apl:          PASS -> FAIL (fdo#103232) +1

    igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy:
      shard-hsw:          PASS -> FAIL (fdo#105767)

    igt@kms_fbcon_fbt@fbc:
      shard-skl:          NOTRUN -> FAIL (fdo#105682, fdo#103833)

    igt@kms_fbcon_fbt@psr:
      shard-skl:          NOTRUN -> FAIL (fdo#107882)

    igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max:
      shard-skl:          NOTRUN -> FAIL (fdo#108145) +2

    igt@kms_plane_multiple@atomic-pipe-c-tiling-x:
      shard-glk:          PASS -> FAIL (fdo#103166) +1

    igt@kms_plane_multiple@atomic-pipe-c-tiling-yf:
      shard-apl:          PASS -> FAIL (fdo#103166) +1

    igt@pm_rpm@i2c:
      shard-skl:          NOTRUN -> INCOMPLETE (fdo#107807)

    igt@prime_vgem@basic-busy-default:
      shard-glk:          PASS -> DMESG-WARN (fdo#105763, fdo#106538)

    
    ==== Possible fixes ====

    igt@debugfs_test@read_all_entries_display_off:
      shard-skl:          INCOMPLETE (fdo#104108) -> PASS

    igt@gem_softpin@noreloc-s3:
      shard-skl:          INCOMPLETE (fdo#104108, fdo#107773) -> PASS

    igt@kms_cursor_crc@cursor-128x42-onscreen:
      shard-apl:          FAIL (fdo#103232) -> PASS +4

    igt@kms_cursor_crc@cursor-64x64-suspend:
      shard-apl:          FAIL (fdo#103232, fdo#103191) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt:
      shard-apl:          FAIL (fdo#103167) -> PASS

    igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-render:
      shard-skl:          FAIL (fdo#105682) -> PASS +1

    igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-mmap-gtt:
      shard-skl:          FAIL (fdo#103167) -> PASS

    igt@kms_frontbuffer_tracking@psr-rgb565-draw-render:
      shard-skl:          FAIL (fdo#103167) -> SKIP

    igt@kms_plane_alpha_blend@pipe-a-coverage-7efc:
      shard-skl:          FAIL (fdo#108145) -> PASS

    igt@pm_rpm@modeset-non-lpsp:
      shard-skl:          INCOMPLETE (fdo#107807) -> SKIP

    
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103833 https://bugs.freedesktop.org/show_bug.cgi?id=103833
  fdo#104108 https://bugs.freedesktop.org/show_bug.cgi?id=104108
  fdo#105682 https://bugs.freedesktop.org/show_bug.cgi?id=105682
  fdo#105763 https://bugs.freedesktop.org/show_bug.cgi?id=105763
  fdo#105767 https://bugs.freedesktop.org/show_bug.cgi?id=105767
  fdo#106538 https://bugs.freedesktop.org/show_bug.cgi?id=106538
  fdo#107773 https://bugs.freedesktop.org/show_bug.cgi?id=107773
  fdo#107807 https://bugs.freedesktop.org/show_bug.cgi?id=107807
  fdo#107882 https://bugs.freedesktop.org/show_bug.cgi?id=107882
  fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
  fdo#108039 https://bugs.freedesktop.org/show_bug.cgi?id=108039
  fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145


== Participating hosts (6 -> 6) ==

  No changes in participating hosts


== Build changes ==

    * Linux: CI_DRM_4978 -> Patchwork_10446

  CI_DRM_4978: ca98b2681a49a1417f8157af2d94a4f2d0bd0e47 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4674: 93871c6fb3c25e5d350c9faf36ded917174214de @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_10446: 0ad86ac395cac307eadfb3dd938d9cdee039ea4e @ 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_10446/shards.html
_______________________________________________
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 v14 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp
  2018-10-12 18:42 ` [PATCH v14 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp Radhakrishna Sripada
@ 2018-10-15  7:54   ` Lisovskiy, Stanislav
  2018-10-23  1:44   ` [PATCH v15 " Manasi Navare
  1 sibling, 0 replies; 16+ messages in thread
From: Lisovskiy, Stanislav @ 2018-10-15  7:54 UTC (permalink / raw)
  To: Sripada, Radhakrishna, intel-gfx
  Cc: daniel.vetter, Kadiyala, Kishore, dri-devel, Vivi, Rodrigo

On Fri, 2018-10-12 at 11:42 -0700, Radhakrishna Sripada wrote:
> Use the newly added "max bpc" connector property to limit pipe bpp.
> 
> V3: Use drm_connector_state to access the "max bpc" property
> V4: Initialize the drm property, add suuport to DP(Ville)
> V5: Use the property in the connector and fix CI failure(Ville)
> V6: Use the core function to attach max_bpc property, remove the
> redundant
>     clamping of pipe bpp based on connector info
> V7: Fix Checkpatch warnings
> V9: Cleanup connected_sink_max_bpp and fix initial value in DP(Ville)
> V12: Fix debug message(Ville)
> V13: Remove the redundant check and simplify the check logic(Stan)
> V14: Fix the check in connected_sink_max_bpp(Stan)
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Kishore Kadiyala <kishore.kadiyala@intel.com>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 49 ++++++++++++++++++++----
> ------------
>  drivers/gpu/drm/i915/intel_dp.c      |  4 +++
>  drivers/gpu/drm/i915/intel_hdmi.c    |  5 ++++
>  3 files changed, 37 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c
> b/drivers/gpu/drm/i915/intel_display.c
> index 980f4ea68e48..ddcb7da3a4e1 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -10791,30 +10791,37 @@ static void
> intel_modeset_update_connector_atomic_state(struct drm_device *dev)
>  	drm_connector_list_iter_end(&conn_iter);
>  }
>  
> -static void
> -connected_sink_compute_bpp(struct intel_connector *connector,
> -			   struct intel_crtc_state *pipe_config)
> +static int
> +connected_sink_max_bpp(const struct drm_connector_state *conn_state,
> +		       struct intel_crtc_state *pipe_config)
>  {
> -	const struct drm_display_info *info = &connector-
> >base.display_info;
> -	int bpp = pipe_config->pipe_bpp;
> +	int bpp;
> +	struct drm_display_info *info = &conn_state->connector-
> >display_info;
>  
> -	DRM_DEBUG_KMS("[CONNECTOR:%d:%s] checking for sink bpp
> constrains\n",
> -		      connector->base.base.id,
> -		      connector->base.name);
> -
> -	/* Don't use an invalid EDID bpc value */
> -	if (info->bpc != 0 && info->bpc * 3 < bpp) {
> -		DRM_DEBUG_KMS("clamping display bpp (was %d) to EDID
> reported max of %d\n",
> -			      bpp, info->bpc * 3);
> -		pipe_config->pipe_bpp = info->bpc * 3;
> +	switch (conn_state->max_bpc) {
> +	case 6 ... 7:
> +		bpp = 6 * 3;
> +	case 8 ... 9:
> +		bpp = 8 * 3;
> +		break;
> +	case 10 ... 11:
> +		bpp = 10 * 3;
> +		break;
> +	case 12:
> +		bpp = 12 * 3;
> +		break;
> +	default:
> +		return -EINVAL;
>  	}

Sorry, but one more comment(just wanted to give "reviewed-by" and
noticed this): there is missing break here, after case 6 .. 7.

>  
> -	/* Clamp bpp to 8 on screens without EDID 1.4 */
> -	if (info->bpc == 0 && bpp > 24) {
> -		DRM_DEBUG_KMS("clamping display bpp (was %d) to
> default limit of 24\n",
> -			      bpp);
> -		pipe_config->pipe_bpp = 24;
> +	if (bpp < pipe_config->pipe_bpp) {
> +		DRM_DEBUG_KMS("Limiting display bpp to %d instead of
> Edid bpp "
> +			      "%d, requested bpp %d, max platform
> bpp %d\n", bpp,
> +			      3 * info->bpc, 3 * conn_state-
> >max_requested_bpc,
> +			      pipe_config->pipe_bpp);
> +		pipe_config->pipe_bpp = bpp;
>  	}
> +	return 0;
>  }
>  
>  static int
> @@ -10845,8 +10852,8 @@ compute_baseline_pipe_bpp(struct intel_crtc
> *crtc,
>  		if (connector_state->crtc != &crtc->base)
>  			continue;
>  
> -		connected_sink_compute_bpp(to_intel_connector(connec
> tor),
> -					   pipe_config);
> +		if (connected_sink_max_bpp(connector_state,
> pipe_config) < 0)
> +			return -EINVAL;
>  	}
>  
>  	return bpp;
> diff --git a/drivers/gpu/drm/i915/intel_dp.c
> b/drivers/gpu/drm/i915/intel_dp.c
> index 13ff89be6ad6..5f594430b2a4 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -5735,6 +5735,10 @@ intel_dp_add_properties(struct intel_dp
> *intel_dp, struct drm_connector *connect
>  		intel_attach_force_audio_property(connector);
>  
>  	intel_attach_broadcast_rgb_property(connector);
> +	if (HAS_GMCH_DISPLAY(dev_priv))
> +		drm_connector_attach_max_bpc_property(connector, 6,
> 10);
> +	else if (INTEL_GEN(dev_priv) >= 5)
> +		drm_connector_attach_max_bpc_property(connector, 6,
> 12);
>  
>  	if (intel_dp_is_edp(intel_dp)) {
>  		u32 allowed_scalers;
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> b/drivers/gpu/drm/i915/intel_hdmi.c
> index 2c53efc463e6..3158ab085a30 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -2103,11 +2103,16 @@ static const struct drm_encoder_funcs
> intel_hdmi_enc_funcs = {
>  static void
>  intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct
> drm_connector *connector)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> +
>  	intel_attach_force_audio_property(connector);
>  	intel_attach_broadcast_rgb_property(connector);
>  	intel_attach_aspect_ratio_property(connector);
>  	drm_connector_attach_content_type_property(connector);
>  	connector->state->picture_aspect_ratio =
> HDMI_PICTURE_ASPECT_NONE;
> +
> +	if (!HAS_GMCH_DISPLAY(dev_priv))
> +		drm_connector_attach_max_bpc_property(connector, 8,
> 12);
>  }
>  
>  /*
-- 
Best Regards,

Lisovskiy Stanislav
_______________________________________________
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

* [PATCH v15 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp
  2018-10-12 18:42 ` [PATCH v14 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp Radhakrishna Sripada
  2018-10-15  7:54   ` Lisovskiy, Stanislav
@ 2018-10-23  1:44   ` Manasi Navare
  2018-10-23 12:00     ` Lisovskiy, Stanislav
  1 sibling, 1 reply; 16+ messages in thread
From: Manasi Navare @ 2018-10-23  1:44 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Kishore Kadiyala, Rodrigo Vivi

From: Radhakrishna Sripada <radhakrishna.sripada@intel.com>

Use the newly added "max bpc" connector property to limit pipe bpp.

V3: Use drm_connector_state to access the "max bpc" property
V4: Initialize the drm property, add suuport to DP(Ville)
V5: Use the property in the connector and fix CI failure(Ville)
V6: Use the core function to attach max_bpc property, remove the redundant
    clamping of pipe bpp based on connector info
V7: Fix Checkpatch warnings
V9: Cleanup connected_sink_max_bpp and fix initial value in DP(Ville)
V12: Fix debug message(Ville)
V13: Remove the redundant check and simplify the check logic(Stan)
V14: Fix the check in connected_sink_max_bpp(Stan)
v15 (From Manasi): Add missing break (Stan)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Kishore Kadiyala <kishore.kadiyala@intel.com>
Cc: Manasi Navare <manasi.d.navare@intel.com>
Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 50 ++++++++++++++++------------
 drivers/gpu/drm/i915/intel_dp.c      |  4 +++
 drivers/gpu/drm/i915/intel_hdmi.c    |  5 +++
 3 files changed, 38 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index fc7e3b0bd95c..2bbcb382770d 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -10856,30 +10856,38 @@ static void intel_modeset_update_connector_atomic_state(struct drm_device *dev)
 	drm_connector_list_iter_end(&conn_iter);
 }
 
-static void
-connected_sink_compute_bpp(struct intel_connector *connector,
-			   struct intel_crtc_state *pipe_config)
+static int
+connected_sink_max_bpp(const struct drm_connector_state *conn_state,
+		       struct intel_crtc_state *pipe_config)
 {
-	const struct drm_display_info *info = &connector->base.display_info;
-	int bpp = pipe_config->pipe_bpp;
-
-	DRM_DEBUG_KMS("[CONNECTOR:%d:%s] checking for sink bpp constrains\n",
-		      connector->base.base.id,
-		      connector->base.name);
+	int bpp;
+	struct drm_display_info *info = &conn_state->connector->display_info;
 
-	/* Don't use an invalid EDID bpc value */
-	if (info->bpc != 0 && info->bpc * 3 < bpp) {
-		DRM_DEBUG_KMS("clamping display bpp (was %d) to EDID reported max of %d\n",
-			      bpp, info->bpc * 3);
-		pipe_config->pipe_bpp = info->bpc * 3;
+	switch (conn_state->max_bpc) {
+	case 6 ... 7:
+		bpp = 6 * 3;
+		break;
+	case 8 ... 9:
+		bpp = 8 * 3;
+		break;
+	case 10 ... 11:
+		bpp = 10 * 3;
+		break;
+	case 12:
+		bpp = 12 * 3;
+		break;
+	default:
+		return -EINVAL;
 	}
 
-	/* Clamp bpp to 8 on screens without EDID 1.4 */
-	if (info->bpc == 0 && bpp > 24) {
-		DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of 24\n",
-			      bpp);
-		pipe_config->pipe_bpp = 24;
+	if (bpp < pipe_config->pipe_bpp) {
+		DRM_DEBUG_KMS("Limiting display bpp to %d instead of Edid bpp "
+			      "%d, requested bpp %d, max platform bpp %d\n", bpp,
+			      3 * info->bpc, 3 * conn_state->max_requested_bpc,
+			      pipe_config->pipe_bpp);
+		pipe_config->pipe_bpp = bpp;
 	}
+	return 0;
 }
 
 static int
@@ -10910,8 +10918,8 @@ compute_baseline_pipe_bpp(struct intel_crtc *crtc,
 		if (connector_state->crtc != &crtc->base)
 			continue;
 
-		connected_sink_compute_bpp(to_intel_connector(connector),
-					   pipe_config);
+		if (connected_sink_max_bpp(connector_state, pipe_config) < 0)
+			return -EINVAL;
 	}
 
 	return bpp;
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 3384a9bbdafd..54efa0478ba0 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -5735,6 +5735,10 @@ intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connect
 		intel_attach_force_audio_property(connector);
 
 	intel_attach_broadcast_rgb_property(connector);
+	if (HAS_GMCH_DISPLAY(dev_priv))
+		drm_connector_attach_max_bpc_property(connector, 6, 10);
+	else if (INTEL_GEN(dev_priv) >= 5)
+		drm_connector_attach_max_bpc_property(connector, 6, 12);
 
 	if (intel_dp_is_edp(intel_dp)) {
 		u32 allowed_scalers;
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 89d5e3984452..ca82aedb401e 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -2106,11 +2106,16 @@ static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
 static void
 intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *connector)
 {
+	struct drm_i915_private *dev_priv = to_i915(connector->dev);
+
 	intel_attach_force_audio_property(connector);
 	intel_attach_broadcast_rgb_property(connector);
 	intel_attach_aspect_ratio_property(connector);
 	drm_connector_attach_content_type_property(connector);
 	connector->state->picture_aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
+
+	if (!HAS_GMCH_DISPLAY(dev_priv))
+		drm_connector_attach_max_bpc_property(connector, 8, 12);
 }
 
 /*
-- 
2.18.0

_______________________________________________
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.SPARSE: warning for series starting with [v14,1/2] drm: Add connector property to limit max bpc (rev2)
  2018-10-12 18:42 [PATCH v14 1/2] drm: Add connector property to limit max bpc Radhakrishna Sripada
                   ` (3 preceding siblings ...)
  2018-10-12 21:54 ` ✓ Fi.CI.IGT: " Patchwork
@ 2018-10-23  1:59 ` Patchwork
  2018-10-23  2:22 ` ✓ Fi.CI.BAT: success " Patchwork
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2018-10-23  1:59 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v14,1/2] drm: Add connector property to limit max bpc (rev2)
URL   : https://patchwork.freedesktop.org/series/50951/
State : warning

== Summary ==

$ dim sparse origin/drm-tip
Sparse version: v0.5.2
Commit: drm: Add connector property to limit max bpc
+drivers/gpu/drm/drm_atomic.c:402:34: warning: expression using sizeof(void)
+drivers/gpu/drm/drm_atomic.c:402:34: warning: expression using sizeof(void)

Commit: drm/i915: Allow "max bpc" property to limit pipe_bpp
Okay!

_______________________________________________
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 [v14,1/2] drm: Add connector property to limit max bpc (rev2)
  2018-10-12 18:42 [PATCH v14 1/2] drm: Add connector property to limit max bpc Radhakrishna Sripada
                   ` (4 preceding siblings ...)
  2018-10-23  1:59 ` ✗ Fi.CI.SPARSE: warning for series starting with [v14,1/2] drm: Add connector property to limit max bpc (rev2) Patchwork
@ 2018-10-23  2:22 ` Patchwork
  2018-10-23  4:10 ` ✓ Fi.CI.IGT: " Patchwork
  2018-10-24 22:49 ` [PATCH v14 1/2] drm: Add connector property to limit max bpc Rodrigo Vivi
  7 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2018-10-23  2:22 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v14,1/2] drm: Add connector property to limit max bpc (rev2)
URL   : https://patchwork.freedesktop.org/series/50951/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_5018 -> Patchwork_10533 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/50951/revisions/2/mbox/

== Known issues ==

  Here are the changes found in Patchwork_10533 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@drv_selftest@live_evict:
      fi-bsw-kefka:       PASS -> DMESG-WARN (fdo#107709)

    igt@gem_exec_suspend@basic-s4-devices:
      fi-icl-u2:          NOTRUN -> DMESG-WARN (fdo#108070, fdo#107732) +1

    igt@gem_flink_basic@flink-lifetime:
      fi-icl-u2:          NOTRUN -> DMESG-WARN (fdo#107732) +8

    igt@kms_flip@basic-flip-vs-modeset:
      fi-skl-6700hq:      PASS -> DMESG-WARN (fdo#105998)

    
    ==== Possible fixes ====

    igt@gem_cpu_reloc@basic:
      fi-kbl-7560u:       INCOMPLETE -> PASS

    igt@kms_frontbuffer_tracking@basic:
      fi-byt-clapper:     FAIL (fdo#103167) -> PASS

    igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b-frame-sequence:
      fi-skl-6700hq:      DMESG-WARN (fdo#105998) -> PASS

    igt@pm_rpm@module-reload:
      fi-glk-j4005:       DMESG-WARN (fdo#106000) -> PASS

    
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#105998 https://bugs.freedesktop.org/show_bug.cgi?id=105998
  fdo#106000 https://bugs.freedesktop.org/show_bug.cgi?id=106000
  fdo#107709 https://bugs.freedesktop.org/show_bug.cgi?id=107709
  fdo#107732 https://bugs.freedesktop.org/show_bug.cgi?id=107732
  fdo#108070 https://bugs.freedesktop.org/show_bug.cgi?id=108070


== Participating hosts (51 -> 46) ==

  Additional (1): fi-icl-u2 
  Missing    (6): fi-ilk-m540 fi-skl-guc fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-icl-u 


== Build changes ==

    * Linux: CI_DRM_5018 -> Patchwork_10533

  CI_DRM_5018: ae98bc614f3a2f29f3c48ed799d6fd863d200d3e @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4685: 78619fde4008424c472906041edb1d204e014f7c @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_10533: 901973afa5ce022de18b4d973438f68f6ccf1b90 @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

901973afa5ce drm/i915: Allow "max bpc" property to limit pipe_bpp
90484569efe3 drm: Add connector property to limit max bpc

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10533/issues.html
_______________________________________________
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 [v14,1/2] drm: Add connector property to limit max bpc (rev2)
  2018-10-12 18:42 [PATCH v14 1/2] drm: Add connector property to limit max bpc Radhakrishna Sripada
                   ` (5 preceding siblings ...)
  2018-10-23  2:22 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2018-10-23  4:10 ` Patchwork
  2018-10-24 22:49 ` [PATCH v14 1/2] drm: Add connector property to limit max bpc Rodrigo Vivi
  7 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2018-10-23  4:10 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v14,1/2] drm: Add connector property to limit max bpc (rev2)
URL   : https://patchwork.freedesktop.org/series/50951/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_5018_full -> Patchwork_10533_full =

== Summary - WARNING ==

  Minor unknown changes coming with Patchwork_10533_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_10533_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

== Possible new issues ==

  Here are the unknown changes that may have been introduced in Patchwork_10533_full:

  === IGT changes ===

    ==== Warnings ====

    igt@pm_rc6_residency@rc6-accuracy:
      shard-kbl:          PASS -> SKIP

    
== Known issues ==

  Here are the changes found in Patchwork_10533_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@drv_suspend@fence-restore-untiled:
      shard-snb:          PASS -> DMESG-WARN (fdo#102365)

    igt@gem_exec_await@wide-contexts:
      shard-kbl:          PASS -> FAIL (fdo#106680)

    igt@gem_workarounds@suspend-resume:
      shard-kbl:          PASS -> INCOMPLETE (fdo#103665)

    igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-b:
      shard-hsw:          PASS -> DMESG-WARN (fdo#107956)

    igt@kms_color@pipe-a-legacy-gamma:
      shard-skl:          PASS -> FAIL (fdo#108145, fdo#104782)

    igt@kms_cursor_crc@cursor-128x128-suspend:
      shard-kbl:          PASS -> FAIL (fdo#103191, fdo#103232)

    igt@kms_cursor_crc@cursor-256x256-sliding:
      shard-glk:          PASS -> FAIL (fdo#103232) +1

    igt@kms_cursor_crc@cursor-size-change:
      shard-apl:          PASS -> FAIL (fdo#103232)

    igt@kms_draw_crc@draw-method-rgb565-pwrite-xtiled:
      shard-skl:          PASS -> FAIL (fdo#103184)

    igt@kms_flip@flip-vs-expired-vblank:
      shard-kbl:          PASS -> FAIL (fdo#105363, fdo#102887)

    igt@kms_flip@plain-flip-ts-check:
      shard-kbl:          PASS -> DMESG-WARN (fdo#105602, fdo#103558) +15

    igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-blt:
      shard-skl:          PASS -> FAIL (fdo#105682)

    igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-indfb-draw-render:
      shard-skl:          PASS -> FAIL (fdo#103167) +2

    igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes:
      shard-skl:          PASS -> FAIL (fdo#103166)

    igt@kms_plane_alpha_blend@pipe-a-alpha-transparant-fb:
      shard-kbl:          NOTRUN -> FAIL (fdo#108145)

    igt@kms_plane_alpha_blend@pipe-a-coverage-7efc:
      shard-skl:          PASS -> FAIL (fdo#108145, fdo#107815)

    igt@kms_plane_alpha_blend@pipe-b-alpha-opaque-fb:
      shard-apl:          PASS -> FAIL (fdo#108145)

    igt@kms_plane_multiple@atomic-pipe-a-tiling-y:
      shard-glk:          PASS -> FAIL (fdo#103166) +1

    igt@kms_setmode@basic:
      shard-apl:          PASS -> FAIL (fdo#99912)

    igt@kms_sysfs_edid_timing:
      shard-kbl:          NOTRUN -> FAIL (fdo#100047)

    igt@kms_vblank@pipe-a-ts-continuation-dpms-suspend:
      shard-skl:          PASS -> INCOMPLETE (fdo#104108)

    igt@pm_rps@reset:
      shard-apl:          PASS -> FAIL (fdo#102250)

    igt@syncobj_wait@wait-all-for-submit-snapshot:
      shard-snb:          NOTRUN -> INCOMPLETE (fdo#105411)

    igt@syncobj_wait@wait-for-submit-complex:
      shard-skl:          NOTRUN -> INCOMPLETE (fdo#108490)

    
    ==== Possible fixes ====

    igt@gem_ctx_isolation@bcs0-s3:
      shard-kbl:          INCOMPLETE (fdo#103665) -> PASS

    igt@gem_ppgtt@blt-vs-render-ctx0:
      shard-kbl:          INCOMPLETE (fdo#103665, fdo#106023) -> PASS

    igt@kms_ccs@pipe-b-crc-sprite-planes-basic:
      shard-glk:          FAIL (fdo#108145) -> PASS

    igt@kms_cursor_crc@cursor-64x64-onscreen:
      shard-glk:          FAIL (fdo#103232) -> PASS +1

    igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
      shard-glk:          FAIL (fdo#104873) -> PASS

    igt@kms_flip@flip-vs-expired-vblank:
      shard-skl:          FAIL (fdo#105363) -> PASS

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-wc:
      shard-glk:          FAIL (fdo#103167) -> PASS +2

    igt@kms_plane@plane-position-covered-pipe-a-planes:
      shard-apl:          FAIL (fdo#103166) -> PASS

    igt@kms_plane_multiple@atomic-pipe-b-tiling-x:
      shard-glk:          FAIL (fdo#103166) -> PASS

    
  fdo#100047 https://bugs.freedesktop.org/show_bug.cgi?id=100047
  fdo#102250 https://bugs.freedesktop.org/show_bug.cgi?id=102250
  fdo#102365 https://bugs.freedesktop.org/show_bug.cgi?id=102365
  fdo#102887 https://bugs.freedesktop.org/show_bug.cgi?id=102887
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103184 https://bugs.freedesktop.org/show_bug.cgi?id=103184
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
  fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
  fdo#104108 https://bugs.freedesktop.org/show_bug.cgi?id=104108
  fdo#104782 https://bugs.freedesktop.org/show_bug.cgi?id=104782
  fdo#104873 https://bugs.freedesktop.org/show_bug.cgi?id=104873
  fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
  fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
  fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
  fdo#105682 https://bugs.freedesktop.org/show_bug.cgi?id=105682
  fdo#106023 https://bugs.freedesktop.org/show_bug.cgi?id=106023
  fdo#106680 https://bugs.freedesktop.org/show_bug.cgi?id=106680
  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#108490 https://bugs.freedesktop.org/show_bug.cgi?id=108490
  fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912


== Participating hosts (6 -> 6) ==

  No changes in participating hosts


== Build changes ==

    * Linux: CI_DRM_5018 -> Patchwork_10533

  CI_DRM_5018: ae98bc614f3a2f29f3c48ed799d6fd863d200d3e @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4685: 78619fde4008424c472906041edb1d204e014f7c @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_10533: 901973afa5ce022de18b4d973438f68f6ccf1b90 @ 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_10533/shards.html
_______________________________________________
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 v15 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp
  2018-10-23  1:44   ` [PATCH v15 " Manasi Navare
@ 2018-10-23 12:00     ` Lisovskiy, Stanislav
  2018-11-02 16:18       ` Rodrigo Vivi
  0 siblings, 1 reply; 16+ messages in thread
From: Lisovskiy, Stanislav @ 2018-10-23 12:00 UTC (permalink / raw)
  To: intel-gfx, Navare, Manasi D
  Cc: daniel.vetter, Vivi, Rodrigo, Kadiyala, Kishore

On Mon, 2018-10-22 at 18:44 -0700, Manasi Navare wrote:
> From: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
> 
> Use the newly added "max bpc" connector property to limit pipe bpp.
> 
> V3: Use drm_connector_state to access the "max bpc" property
> V4: Initialize the drm property, add suuport to DP(Ville)
> V5: Use the property in the connector and fix CI failure(Ville)
> V6: Use the core function to attach max_bpc property, remove the
> redundant
>     clamping of pipe bpp based on connector info
> V7: Fix Checkpatch warnings
> V9: Cleanup connected_sink_max_bpp and fix initial value in DP(Ville)
> V12: Fix debug message(Ville)
> V13: Remove the redundant check and simplify the check logic(Stan)
> V14: Fix the check in connected_sink_max_bpp(Stan)
> v15 (From Manasi): Add missing break (Stan)
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Kishore Kadiyala <kishore.kadiyala@intel.com>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 50 ++++++++++++++++--------
> ----
>  drivers/gpu/drm/i915/intel_dp.c      |  4 +++
>  drivers/gpu/drm/i915/intel_hdmi.c    |  5 +++
>  3 files changed, 38 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c
> b/drivers/gpu/drm/i915/intel_display.c
> index fc7e3b0bd95c..2bbcb382770d 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -10856,30 +10856,38 @@ static void
> intel_modeset_update_connector_atomic_state(struct drm_device *dev)
>  	drm_connector_list_iter_end(&conn_iter);
>  }
>  
> -static void
> -connected_sink_compute_bpp(struct intel_connector *connector,
> -			   struct intel_crtc_state *pipe_config)
> +static int
> +connected_sink_max_bpp(const struct drm_connector_state *conn_state,
> +		       struct intel_crtc_state *pipe_config)
>  {
> -	const struct drm_display_info *info = &connector-
> >base.display_info;
> -	int bpp = pipe_config->pipe_bpp;
> -
> -	DRM_DEBUG_KMS("[CONNECTOR:%d:%s] checking for sink bpp
> constrains\n",
> -		      connector->base.base.id,
> -		      connector->base.name);
> +	int bpp;
> +	struct drm_display_info *info = &conn_state->connector-
> >display_info;
>  
> -	/* Don't use an invalid EDID bpc value */
> -	if (info->bpc != 0 && info->bpc * 3 < bpp) {
> -		DRM_DEBUG_KMS("clamping display bpp (was %d) to EDID
> reported max of %d\n",
> -			      bpp, info->bpc * 3);
> -		pipe_config->pipe_bpp = info->bpc * 3;
> +	switch (conn_state->max_bpc) {
> +	case 6 ... 7:
> +		bpp = 6 * 3;
> +		break;
> +	case 8 ... 9:
> +		bpp = 8 * 3;
> +		break;
> +	case 10 ... 11:
> +		bpp = 10 * 3;
> +		break;
> +	case 12:
> +		bpp = 12 * 3;
> +		break;
> +	default:
> +		return -EINVAL;
>  	}
>  
> -	/* Clamp bpp to 8 on screens without EDID 1.4 */
> -	if (info->bpc == 0 && bpp > 24) {
> -		DRM_DEBUG_KMS("clamping display bpp (was %d) to
> default limit of 24\n",
> -			      bpp);
> -		pipe_config->pipe_bpp = 24;
> +	if (bpp < pipe_config->pipe_bpp) {
> +		DRM_DEBUG_KMS("Limiting display bpp to %d instead of
> Edid bpp "
> +			      "%d, requested bpp %d, max platform
> bpp %d\n", bpp,
> +			      3 * info->bpc, 3 * conn_state-
> >max_requested_bpc,
> +			      pipe_config->pipe_bpp);
> +		pipe_config->pipe_bpp = bpp;
>  	}
> +	return 0;
>  }
>  
>  static int
> @@ -10910,8 +10918,8 @@ compute_baseline_pipe_bpp(struct intel_crtc
> *crtc,
>  		if (connector_state->crtc != &crtc->base)
>  			continue;
>  
> -		connected_sink_compute_bpp(to_intel_connector(connec
> tor),
> -					   pipe_config);
> +		if (connected_sink_max_bpp(connector_state,
> pipe_config) < 0)
> +			return -EINVAL;
>  	}
>  
>  	return bpp;
> diff --git a/drivers/gpu/drm/i915/intel_dp.c
> b/drivers/gpu/drm/i915/intel_dp.c
> index 3384a9bbdafd..54efa0478ba0 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -5735,6 +5735,10 @@ intel_dp_add_properties(struct intel_dp
> *intel_dp, struct drm_connector *connect
>  		intel_attach_force_audio_property(connector);
>  
>  	intel_attach_broadcast_rgb_property(connector);
> +	if (HAS_GMCH_DISPLAY(dev_priv))
> +		drm_connector_attach_max_bpc_property(connector, 6,
> 10);
> +	else if (INTEL_GEN(dev_priv) >= 5)
> +		drm_connector_attach_max_bpc_property(connector, 6,
> 12);
>  
>  	if (intel_dp_is_edp(intel_dp)) {
>  		u32 allowed_scalers;
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> b/drivers/gpu/drm/i915/intel_hdmi.c
> index 89d5e3984452..ca82aedb401e 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -2106,11 +2106,16 @@ static const struct drm_encoder_funcs
> intel_hdmi_enc_funcs = {
>  static void
>  intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct
> drm_connector *connector)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> +
>  	intel_attach_force_audio_property(connector);
>  	intel_attach_broadcast_rgb_property(connector);
>  	intel_attach_aspect_ratio_property(connector);
>  	drm_connector_attach_content_type_property(connector);
>  	connector->state->picture_aspect_ratio =
> HDMI_PICTURE_ASPECT_NONE;
> +
> +	if (!HAS_GMCH_DISPLAY(dev_priv))
> +		drm_connector_attach_max_bpc_property(connector, 8,
> 12);
>  }
>  
>  /*

Looks good to me.
Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>

-- 
Best Regards,

Lisovskiy Stanislav
_______________________________________________
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 v14 1/2] drm: Add connector property to limit max bpc
  2018-10-12 18:42 [PATCH v14 1/2] drm: Add connector property to limit max bpc Radhakrishna Sripada
                   ` (6 preceding siblings ...)
  2018-10-23  4:10 ` ✓ Fi.CI.IGT: " Patchwork
@ 2018-10-24 22:49 ` Rodrigo Vivi
  2018-11-07 16:56   ` [Intel-gfx] " Kazlauskas, Nicholas
  7 siblings, 1 reply; 16+ messages in thread
From: Rodrigo Vivi @ 2018-10-24 22:49 UTC (permalink / raw)
  To: Radhakrishna Sripada
  Cc: Sunpeng Li, Daniel Vetter, intel-gfx, dri-devel, Kishore Kadiyala

On Fri, Oct 12, 2018 at 11:42:32AM -0700, Radhakrishna Sripada wrote:
> At times 12bpc HDMI cannot be driven due to faulty cables, dongles
> level shifters etc. To workaround them we may need to drive the output
> at a lower bpc. Currently the user space does not have a way to limit
> the bpc. The default bpc to be programmed is decided by the driver and
> is run against connector limitations.
> 
> Creating a new connector property "max bpc" in order to limit the bpc.
> xrandr can make use of this connector property to make sure that bpc does
> not exceed the configured value. This property can be used by userspace to
> set the bpc.
> 
> V2: Initialize max_bpc to satisfy kms_properties
> V3: Move the property to drm_connector
> V4: Split drm and i915 components(Ville)
> V5: Make the property per connector(Ville)
> V6: Compare the requested bpc to connector bpc(Daniel)
>     Move the attach_property function to core(Ville)
> V7: Fix checkpatch warnings
> V8: Simplify the connector check code(Ville)
> V9: Const display_info(Ville)
> V10,V11: Fix CI issues.
> V12: Add the Kernel documentation(Daniel)
> V14: Crossreference the function name in the doc(Daniel)
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Kishore Kadiyala <kishore.kadiyala@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> Cc: Sunpeng Li <sunpeng.li@amd.com>
> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>

This patch looks right to me:

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

but we probably need to hold on merge while we wait clarifications
and final rv-b on igt tests....

> ---
>  drivers/gpu/drm/drm_atomic.c        |  5 +++++
>  drivers/gpu/drm/drm_atomic_helper.c |  4 ++++
>  drivers/gpu/drm/drm_atomic_uapi.c   |  4 ++++
>  drivers/gpu/drm/drm_connector.c     | 41 +++++++++++++++++++++++++++++++++++++
>  include/drm/drm_connector.h         | 20 ++++++++++++++++++
>  5 files changed, 74 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> index 2870ae205237..cd8362dc4f74 100644
> --- a/drivers/gpu/drm/drm_atomic.c
> +++ b/drivers/gpu/drm/drm_atomic.c
> @@ -390,6 +390,11 @@ static int drm_atomic_connector_check(struct drm_connector *connector,
>  {
>  	struct drm_crtc_state *crtc_state;
>  	struct drm_writeback_job *writeback_job = state->writeback_job;
> +	const struct drm_display_info *info = &connector->display_info;
> +
> +	state->max_bpc = info->bpc ? info->bpc : 8;
> +	if (connector->max_bpc_property)
> +		state->max_bpc = min(state->max_bpc, state->max_requested_bpc);
>  
>  	if ((connector->connector_type != DRM_MODE_CONNECTOR_WRITEBACK) || !writeback_job)
>  		return 0;
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 6f66777dca4b..d61a74b254f5 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -650,6 +650,10 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
>  			if (old_connector_state->link_status !=
>  			    new_connector_state->link_status)
>  				new_crtc_state->connectors_changed = true;
> +
> +			if (old_connector_state->max_requested_bpc !=
> +			    new_connector_state->max_requested_bpc)
> +				new_crtc_state->connectors_changed = true;
>  		}
>  
>  		if (funcs->atomic_check)
> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
> index a22d6f269b07..7492819c81ce 100644
> --- a/drivers/gpu/drm/drm_atomic_uapi.c
> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> @@ -761,6 +761,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
>  
>  		return set_out_fence_for_connector(state->state, connector,
>  						   fence_ptr);
> +	} else if (property == connector->max_bpc_property) {
> +		state->max_requested_bpc = val;
>  	} else if (connector->funcs->atomic_set_property) {
>  		return connector->funcs->atomic_set_property(connector,
>  				state, property, val);
> @@ -825,6 +827,8 @@ drm_atomic_connector_get_property(struct drm_connector *connector,
>  		*val = 0;
>  	} else if (property == config->writeback_out_fence_ptr_property) {
>  		*val = 0;
> +	} else if (property == connector->max_bpc_property) {
> +		*val = state->max_requested_bpc;
>  	} else if (connector->funcs->atomic_get_property) {
>  		return connector->funcs->atomic_get_property(connector,
>  				state, property, val);
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index 5d01414ec9f7..bdaa29e530d4 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -932,6 +932,13 @@ DRM_ENUM_NAME_FN(drm_get_content_protection_name, drm_cp_enum_list)
>   *	  is no longer protected and userspace should take appropriate action
>   *	  (whatever that might be).
>   *
> + * max bpc:
> + *	This range property is used by userspace to limit the bit depth. When
> + *	used the driver would limit the bpc in accordance with the valid range
> + *	supported by the hardware and sink. Drivers to use the function
> + *	drm_connector_attach_max_bpc_property() to create and attach the
> + *	property to the connector during initialization.
> + *
>   * Connectors also have one standardized atomic property:
>   *
>   * CRTC_ID:
> @@ -1600,6 +1607,40 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
>  EXPORT_SYMBOL(drm_connector_set_link_status_property);
>  
>  /**
> + * drm_connector_attach_max_bpc_property - attach "max bpc" property
> + * @connector: connector to attach max bpc property on.
> + * @min: The minimum bit depth supported by the connector.
> + * @max: The maximum bit depth supported by the connector.
> + *
> + * This is used to add support for limiting the bit depth on a connector.
> + *
> + * Returns:
> + * Zero on success, negative errno on failure.
> + */
> +int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
> +					  int min, int max)
> +{
> +	struct drm_device *dev = connector->dev;
> +	struct drm_property *prop;
> +
> +	prop = connector->max_bpc_property;
> +	if (!prop) {
> +		prop = drm_property_create_range(dev, 0, "max bpc", min, max);
> +		if (!prop)
> +			return -ENOMEM;
> +
> +		connector->max_bpc_property = prop;
> +	}
> +
> +	drm_object_attach_property(&connector->base, prop, max);
> +	connector->state->max_requested_bpc = max;
> +	connector->state->max_bpc = max;
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL(drm_connector_attach_max_bpc_property);
> +
> +/**
>   * drm_connector_init_panel_orientation_property -
>   *	initialize the connecters panel_orientation property
>   * @connector: connector for which to init the panel-orientation property.
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index 5b3cf909fd5e..a402d16427a1 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -461,6 +461,18 @@ struct drm_connector_state {
>  	 * drm_writeback_signal_completion()
>  	 */
>  	struct drm_writeback_job *writeback_job;
> +
> +	/**
> +	 * @max_requested_bpc: Connector property to limit the maximum bit
> +	 * depth of the pixels.
> +	 */
> +	u8 max_requested_bpc;
> +
> +	/**
> +	 * @max_bpc: Connector max_bpc based on the requested max_bpc property
> +	 * and the connector bpc limitations obtained from edid.
> +	 */
> +	u8 max_bpc;
>  };
>  
>  /**
> @@ -924,6 +936,12 @@ struct drm_connector {
>  	 */
>  	struct drm_property_blob *path_blob_ptr;
>  
> +	/**
> +	 * @max_bpc_property: Default connector property for the max bpc to be
> +	 * driven out of the connector.
> +	 */
> +	struct drm_property *max_bpc_property;
> +
>  #define DRM_CONNECTOR_POLL_HPD (1 << 0)
>  #define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
>  #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
> @@ -1202,6 +1220,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
>  					    uint64_t link_status);
>  int drm_connector_init_panel_orientation_property(
>  	struct drm_connector *connector, int width, int height);
> +int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
> +					  int min, int max);
>  
>  /**
>   * struct drm_tile_group - Tile group metadata
> -- 
> 2.9.3
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
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 v15 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp
  2018-10-23 12:00     ` Lisovskiy, Stanislav
@ 2018-11-02 16:18       ` Rodrigo Vivi
  0 siblings, 0 replies; 16+ messages in thread
From: Rodrigo Vivi @ 2018-11-02 16:18 UTC (permalink / raw)
  To: Lisovskiy, Stanislav; +Cc: daniel.vetter, intel-gfx, Kadiyala, Kishore

On Tue, Oct 23, 2018 at 12:00:35PM +0000, Lisovskiy, Stanislav wrote:
> On Mon, 2018-10-22 at 18:44 -0700, Manasi Navare wrote:
> > From: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
> > 
> > Use the newly added "max bpc" connector property to limit pipe bpp.
> > 
> > V3: Use drm_connector_state to access the "max bpc" property
> > V4: Initialize the drm property, add suuport to DP(Ville)
> > V5: Use the property in the connector and fix CI failure(Ville)
> > V6: Use the core function to attach max_bpc property, remove the
> > redundant
> >     clamping of pipe bpp based on connector info
> > V7: Fix Checkpatch warnings
> > V9: Cleanup connected_sink_max_bpp and fix initial value in DP(Ville)
> > V12: Fix debug message(Ville)
> > V13: Remove the redundant check and simplify the check logic(Stan)
> > V14: Fix the check in connected_sink_max_bpp(Stan)
> > v15 (From Manasi): Add missing break (Stan)
> > 
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > Cc: Kishore Kadiyala <kishore.kadiyala@intel.com>
> > Cc: Manasi Navare <manasi.d.navare@intel.com>
> > Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> > Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_display.c | 50 ++++++++++++++++--------
> > ----
> >  drivers/gpu/drm/i915/intel_dp.c      |  4 +++
> >  drivers/gpu/drm/i915/intel_hdmi.c    |  5 +++
> >  3 files changed, 38 insertions(+), 21 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_display.c
> > b/drivers/gpu/drm/i915/intel_display.c
> > index fc7e3b0bd95c..2bbcb382770d 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -10856,30 +10856,38 @@ static void
> > intel_modeset_update_connector_atomic_state(struct drm_device *dev)
> >  	drm_connector_list_iter_end(&conn_iter);
> >  }
> >  
> > -static void
> > -connected_sink_compute_bpp(struct intel_connector *connector,
> > -			   struct intel_crtc_state *pipe_config)
> > +static int
> > +connected_sink_max_bpp(const struct drm_connector_state *conn_state,
> > +		       struct intel_crtc_state *pipe_config)
> >  {
> > -	const struct drm_display_info *info = &connector-
> > >base.display_info;
> > -	int bpp = pipe_config->pipe_bpp;
> > -
> > -	DRM_DEBUG_KMS("[CONNECTOR:%d:%s] checking for sink bpp
> > constrains\n",
> > -		      connector->base.base.id,
> > -		      connector->base.name);
> > +	int bpp;
> > +	struct drm_display_info *info = &conn_state->connector-
> > >display_info;
> >  
> > -	/* Don't use an invalid EDID bpc value */
> > -	if (info->bpc != 0 && info->bpc * 3 < bpp) {
> > -		DRM_DEBUG_KMS("clamping display bpp (was %d) to EDID
> > reported max of %d\n",
> > -			      bpp, info->bpc * 3);
> > -		pipe_config->pipe_bpp = info->bpc * 3;
> > +	switch (conn_state->max_bpc) {
> > +	case 6 ... 7:
> > +		bpp = 6 * 3;
> > +		break;
> > +	case 8 ... 9:
> > +		bpp = 8 * 3;
> > +		break;
> > +	case 10 ... 11:
> > +		bpp = 10 * 3;
> > +		break;
> > +	case 12:
> > +		bpp = 12 * 3;
> > +		break;
> > +	default:
> > +		return -EINVAL;
> >  	}
> >  
> > -	/* Clamp bpp to 8 on screens without EDID 1.4 */
> > -	if (info->bpc == 0 && bpp > 24) {
> > -		DRM_DEBUG_KMS("clamping display bpp (was %d) to
> > default limit of 24\n",
> > -			      bpp);
> > -		pipe_config->pipe_bpp = 24;
> > +	if (bpp < pipe_config->pipe_bpp) {
> > +		DRM_DEBUG_KMS("Limiting display bpp to %d instead of
> > Edid bpp "
> > +			      "%d, requested bpp %d, max platform
> > bpp %d\n", bpp,
> > +			      3 * info->bpc, 3 * conn_state-
> > >max_requested_bpc,
> > +			      pipe_config->pipe_bpp);
> > +		pipe_config->pipe_bpp = bpp;
> >  	}
> > +	return 0;
> >  }
> >  
> >  static int
> > @@ -10910,8 +10918,8 @@ compute_baseline_pipe_bpp(struct intel_crtc
> > *crtc,
> >  		if (connector_state->crtc != &crtc->base)
> >  			continue;
> >  
> > -		connected_sink_compute_bpp(to_intel_connector(connec
> > tor),
> > -					   pipe_config);
> > +		if (connected_sink_max_bpp(connector_state,
> > pipe_config) < 0)
> > +			return -EINVAL;
> >  	}
> >  
> >  	return bpp;
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c
> > b/drivers/gpu/drm/i915/intel_dp.c
> > index 3384a9bbdafd..54efa0478ba0 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -5735,6 +5735,10 @@ intel_dp_add_properties(struct intel_dp
> > *intel_dp, struct drm_connector *connect
> >  		intel_attach_force_audio_property(connector);
> >  
> >  	intel_attach_broadcast_rgb_property(connector);
> > +	if (HAS_GMCH_DISPLAY(dev_priv))
> > +		drm_connector_attach_max_bpc_property(connector, 6,
> > 10);
> > +	else if (INTEL_GEN(dev_priv) >= 5)
> > +		drm_connector_attach_max_bpc_property(connector, 6,
> > 12);
> >  
> >  	if (intel_dp_is_edp(intel_dp)) {
> >  		u32 allowed_scalers;
> > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> > b/drivers/gpu/drm/i915/intel_hdmi.c
> > index 89d5e3984452..ca82aedb401e 100644
> > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > @@ -2106,11 +2106,16 @@ static const struct drm_encoder_funcs
> > intel_hdmi_enc_funcs = {
> >  static void
> >  intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct
> > drm_connector *connector)
> >  {
> > +	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> > +
> >  	intel_attach_force_audio_property(connector);
> >  	intel_attach_broadcast_rgb_property(connector);
> >  	intel_attach_aspect_ratio_property(connector);
> >  	drm_connector_attach_content_type_property(connector);
> >  	connector->state->picture_aspect_ratio =
> > HDMI_PICTURE_ASPECT_NONE;
> > +
> > +	if (!HAS_GMCH_DISPLAY(dev_priv))
> > +		drm_connector_attach_max_bpc_property(connector, 8,
> > 12);
> >  }
> >  
> >  /*
> 
> Looks good to me.
> Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>

pushed to dinq.

thanks for patches and reviews

> 
> -- 
> Best Regards,
> 
> Lisovskiy Stanislav
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
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: [Intel-gfx] [PATCH v14 1/2] drm: Add connector property to limit max bpc
  2018-10-24 22:49 ` [PATCH v14 1/2] drm: Add connector property to limit max bpc Rodrigo Vivi
@ 2018-11-07 16:56   ` Kazlauskas, Nicholas
  2018-11-07 18:10     ` Rodrigo Vivi
  0 siblings, 1 reply; 16+ messages in thread
From: Kazlauskas, Nicholas @ 2018-11-07 16:56 UTC (permalink / raw)
  To: Rodrigo Vivi, Radhakrishna Sripada
  Cc: Li, Sun peng (Leo),
	Daniel Vetter, intel-gfx, Kishore Kadiyala, dri-devel

On 10/24/18 6:49 PM, Rodrigo Vivi wrote:
> On Fri, Oct 12, 2018 at 11:42:32AM -0700, Radhakrishna Sripada wrote:
>> At times 12bpc HDMI cannot be driven due to faulty cables, dongles
>> level shifters etc. To workaround them we may need to drive the output
>> at a lower bpc. Currently the user space does not have a way to limit
>> the bpc. The default bpc to be programmed is decided by the driver and
>> is run against connector limitations.
>>
>> Creating a new connector property "max bpc" in order to limit the bpc.
>> xrandr can make use of this connector property to make sure that bpc does
>> not exceed the configured value. This property can be used by userspace to
>> set the bpc.
>>
>> V2: Initialize max_bpc to satisfy kms_properties
>> V3: Move the property to drm_connector
>> V4: Split drm and i915 components(Ville)
>> V5: Make the property per connector(Ville)
>> V6: Compare the requested bpc to connector bpc(Daniel)
>>      Move the attach_property function to core(Ville)
>> V7: Fix checkpatch warnings
>> V8: Simplify the connector check code(Ville)
>> V9: Const display_info(Ville)
>> V10,V11: Fix CI issues.
>> V12: Add the Kernel documentation(Daniel)
>> V14: Crossreference the function name in the doc(Daniel)
>>
>> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Cc: Kishore Kadiyala <kishore.kadiyala@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Manasi Navare <manasi.d.navare@intel.com>
>> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
>> Cc: Sunpeng Li <sunpeng.li@amd.com>
>> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>

Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>

Looks good to me. We're seeing similar issues with > 8bpc that this 
would help with.

> 
> This patch looks right to me:
> 
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> 
> but we probably need to hold on merge while we wait clarifications
> and final rv-b on igt tests....

Any updates on the igt tests?

> 
>> ---
>>   drivers/gpu/drm/drm_atomic.c        |  5 +++++
>>   drivers/gpu/drm/drm_atomic_helper.c |  4 ++++
>>   drivers/gpu/drm/drm_atomic_uapi.c   |  4 ++++
>>   drivers/gpu/drm/drm_connector.c     | 41 +++++++++++++++++++++++++++++++++++++
>>   include/drm/drm_connector.h         | 20 ++++++++++++++++++
>>   5 files changed, 74 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
>> index 2870ae205237..cd8362dc4f74 100644
>> --- a/drivers/gpu/drm/drm_atomic.c
>> +++ b/drivers/gpu/drm/drm_atomic.c
>> @@ -390,6 +390,11 @@ static int drm_atomic_connector_check(struct drm_connector *connector,
>>   {
>>   	struct drm_crtc_state *crtc_state;
>>   	struct drm_writeback_job *writeback_job = state->writeback_job;
>> +	const struct drm_display_info *info = &connector->display_info;
>> +
>> +	state->max_bpc = info->bpc ? info->bpc : 8;
>> +	if (connector->max_bpc_property)
>> +		state->max_bpc = min(state->max_bpc, state->max_requested_bpc);
>>   
>>   	if ((connector->connector_type != DRM_MODE_CONNECTOR_WRITEBACK) || !writeback_job)
>>   		return 0;
>> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
>> index 6f66777dca4b..d61a74b254f5 100644
>> --- a/drivers/gpu/drm/drm_atomic_helper.c
>> +++ b/drivers/gpu/drm/drm_atomic_helper.c
>> @@ -650,6 +650,10 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
>>   			if (old_connector_state->link_status !=
>>   			    new_connector_state->link_status)
>>   				new_crtc_state->connectors_changed = true;
>> +
>> +			if (old_connector_state->max_requested_bpc !=
>> +			    new_connector_state->max_requested_bpc)
>> +				new_crtc_state->connectors_changed = true;
>>   		}
>>   
>>   		if (funcs->atomic_check)
>> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
>> index a22d6f269b07..7492819c81ce 100644
>> --- a/drivers/gpu/drm/drm_atomic_uapi.c
>> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
>> @@ -761,6 +761,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
>>   
>>   		return set_out_fence_for_connector(state->state, connector,
>>   						   fence_ptr);
>> +	} else if (property == connector->max_bpc_property) {
>> +		state->max_requested_bpc = val;
>>   	} else if (connector->funcs->atomic_set_property) {
>>   		return connector->funcs->atomic_set_property(connector,
>>   				state, property, val);
>> @@ -825,6 +827,8 @@ drm_atomic_connector_get_property(struct drm_connector *connector,
>>   		*val = 0;
>>   	} else if (property == config->writeback_out_fence_ptr_property) {
>>   		*val = 0;
>> +	} else if (property == connector->max_bpc_property) {
>> +		*val = state->max_requested_bpc;
>>   	} else if (connector->funcs->atomic_get_property) {
>>   		return connector->funcs->atomic_get_property(connector,
>>   				state, property, val);
>> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
>> index 5d01414ec9f7..bdaa29e530d4 100644
>> --- a/drivers/gpu/drm/drm_connector.c
>> +++ b/drivers/gpu/drm/drm_connector.c
>> @@ -932,6 +932,13 @@ DRM_ENUM_NAME_FN(drm_get_content_protection_name, drm_cp_enum_list)
>>    *	  is no longer protected and userspace should take appropriate action
>>    *	  (whatever that might be).
>>    *
>> + * max bpc:
>> + *	This range property is used by userspace to limit the bit depth. When
>> + *	used the driver would limit the bpc in accordance with the valid range
>> + *	supported by the hardware and sink. Drivers to use the function
>> + *	drm_connector_attach_max_bpc_property() to create and attach the
>> + *	property to the connector during initialization.
>> + *
>>    * Connectors also have one standardized atomic property:
>>    *
>>    * CRTC_ID:
>> @@ -1600,6 +1607,40 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
>>   EXPORT_SYMBOL(drm_connector_set_link_status_property);
>>   
>>   /**
>> + * drm_connector_attach_max_bpc_property - attach "max bpc" property
>> + * @connector: connector to attach max bpc property on.
>> + * @min: The minimum bit depth supported by the connector.
>> + * @max: The maximum bit depth supported by the connector.
>> + *
>> + * This is used to add support for limiting the bit depth on a connector.
>> + *
>> + * Returns:
>> + * Zero on success, negative errno on failure.
>> + */
>> +int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
>> +					  int min, int max)
>> +{
>> +	struct drm_device *dev = connector->dev;
>> +	struct drm_property *prop;
>> +
>> +	prop = connector->max_bpc_property;
>> +	if (!prop) {
>> +		prop = drm_property_create_range(dev, 0, "max bpc", min, max);
>> +		if (!prop)
>> +			return -ENOMEM;
>> +
>> +		connector->max_bpc_property = prop;
>> +	}
>> +
>> +	drm_object_attach_property(&connector->base, prop, max);
>> +	connector->state->max_requested_bpc = max;
>> +	connector->state->max_bpc = max;
>> +
>> +	return 0;
>> +}
>> +EXPORT_SYMBOL(drm_connector_attach_max_bpc_property);
>> +
>> +/**
>>    * drm_connector_init_panel_orientation_property -
>>    *	initialize the connecters panel_orientation property
>>    * @connector: connector for which to init the panel-orientation property.
>> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
>> index 5b3cf909fd5e..a402d16427a1 100644
>> --- a/include/drm/drm_connector.h
>> +++ b/include/drm/drm_connector.h
>> @@ -461,6 +461,18 @@ struct drm_connector_state {
>>   	 * drm_writeback_signal_completion()
>>   	 */
>>   	struct drm_writeback_job *writeback_job;
>> +
>> +	/**
>> +	 * @max_requested_bpc: Connector property to limit the maximum bit
>> +	 * depth of the pixels.
>> +	 */
>> +	u8 max_requested_bpc;
>> +
>> +	/**
>> +	 * @max_bpc: Connector max_bpc based on the requested max_bpc property
>> +	 * and the connector bpc limitations obtained from edid.
>> +	 */
>> +	u8 max_bpc;
>>   };
>>   
>>   /**
>> @@ -924,6 +936,12 @@ struct drm_connector {
>>   	 */
>>   	struct drm_property_blob *path_blob_ptr;
>>   
>> +	/**
>> +	 * @max_bpc_property: Default connector property for the max bpc to be
>> +	 * driven out of the connector.
>> +	 */
>> +	struct drm_property *max_bpc_property;
>> +
>>   #define DRM_CONNECTOR_POLL_HPD (1 << 0)
>>   #define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
>>   #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
>> @@ -1202,6 +1220,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
>>   					    uint64_t link_status);
>>   int drm_connector_init_panel_orientation_property(
>>   	struct drm_connector *connector, int width, int height);
>> +int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
>> +					  int min, int max);
>>   
>>   /**
>>    * struct drm_tile_group - Tile group metadata
>> -- 
>> 2.9.3
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 

Nicholas Kazlauskas
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v14 1/2] drm: Add connector property to limit max bpc
  2018-11-07 16:56   ` [Intel-gfx] " Kazlauskas, Nicholas
@ 2018-11-07 18:10     ` Rodrigo Vivi
  2018-11-07 18:15       ` [Intel-gfx] " Kazlauskas, Nicholas
  0 siblings, 1 reply; 16+ messages in thread
From: Rodrigo Vivi @ 2018-11-07 18:10 UTC (permalink / raw)
  To: Kazlauskas, Nicholas
  Cc: Li, Sun peng (Leo),
	Daniel Vetter, intel-gfx, Kishore Kadiyala, dri-devel

On Wed, Nov 07, 2018 at 04:56:00PM +0000, Kazlauskas, Nicholas wrote:
> On 10/24/18 6:49 PM, Rodrigo Vivi wrote:
> > On Fri, Oct 12, 2018 at 11:42:32AM -0700, Radhakrishna Sripada wrote:
> >> At times 12bpc HDMI cannot be driven due to faulty cables, dongles
> >> level shifters etc. To workaround them we may need to drive the output
> >> at a lower bpc. Currently the user space does not have a way to limit
> >> the bpc. The default bpc to be programmed is decided by the driver and
> >> is run against connector limitations.
> >>
> >> Creating a new connector property "max bpc" in order to limit the bpc.
> >> xrandr can make use of this connector property to make sure that bpc does
> >> not exceed the configured value. This property can be used by userspace to
> >> set the bpc.
> >>
> >> V2: Initialize max_bpc to satisfy kms_properties
> >> V3: Move the property to drm_connector
> >> V4: Split drm and i915 components(Ville)
> >> V5: Make the property per connector(Ville)
> >> V6: Compare the requested bpc to connector bpc(Daniel)
> >>      Move the attach_property function to core(Ville)
> >> V7: Fix checkpatch warnings
> >> V8: Simplify the connector check code(Ville)
> >> V9: Const display_info(Ville)
> >> V10,V11: Fix CI issues.
> >> V12: Add the Kernel documentation(Daniel)
> >> V14: Crossreference the function name in the doc(Daniel)
> >>
> >> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> >> Cc: Kishore Kadiyala <kishore.kadiyala@intel.com>
> >> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> >> Cc: Manasi Navare <manasi.d.navare@intel.com>
> >> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> >> Cc: Sunpeng Li <sunpeng.li@amd.com>
> >> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> >> Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
> 
> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>

Thanks. Although I had pushed through drm-intel-next-queued (dinq) already.

> 
> Looks good to me. We're seeing similar issues with > 8bpc that this 
> would help with.

hm... I hope that pushing to dinq doesn't cause any trouble for you :(

> 
> > 
> > This patch looks right to me:
> > 
> > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > 
> > but we probably need to hold on merge while we wait clarifications
> > and final rv-b on igt tests....
> 
> Any updates on the igt tests?

yeap, RK added the property tests. got reviewed and
merged to igt already as well

Thanks,
Rodrigo.

> 
> > 
> >> ---
> >>   drivers/gpu/drm/drm_atomic.c        |  5 +++++
> >>   drivers/gpu/drm/drm_atomic_helper.c |  4 ++++
> >>   drivers/gpu/drm/drm_atomic_uapi.c   |  4 ++++
> >>   drivers/gpu/drm/drm_connector.c     | 41 +++++++++++++++++++++++++++++++++++++
> >>   include/drm/drm_connector.h         | 20 ++++++++++++++++++
> >>   5 files changed, 74 insertions(+)
> >>
> >> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> >> index 2870ae205237..cd8362dc4f74 100644
> >> --- a/drivers/gpu/drm/drm_atomic.c
> >> +++ b/drivers/gpu/drm/drm_atomic.c
> >> @@ -390,6 +390,11 @@ static int drm_atomic_connector_check(struct drm_connector *connector,
> >>   {
> >>   	struct drm_crtc_state *crtc_state;
> >>   	struct drm_writeback_job *writeback_job = state->writeback_job;
> >> +	const struct drm_display_info *info = &connector->display_info;
> >> +
> >> +	state->max_bpc = info->bpc ? info->bpc : 8;
> >> +	if (connector->max_bpc_property)
> >> +		state->max_bpc = min(state->max_bpc, state->max_requested_bpc);
> >>   
> >>   	if ((connector->connector_type != DRM_MODE_CONNECTOR_WRITEBACK) || !writeback_job)
> >>   		return 0;
> >> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> >> index 6f66777dca4b..d61a74b254f5 100644
> >> --- a/drivers/gpu/drm/drm_atomic_helper.c
> >> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> >> @@ -650,6 +650,10 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
> >>   			if (old_connector_state->link_status !=
> >>   			    new_connector_state->link_status)
> >>   				new_crtc_state->connectors_changed = true;
> >> +
> >> +			if (old_connector_state->max_requested_bpc !=
> >> +			    new_connector_state->max_requested_bpc)
> >> +				new_crtc_state->connectors_changed = true;
> >>   		}
> >>   
> >>   		if (funcs->atomic_check)
> >> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
> >> index a22d6f269b07..7492819c81ce 100644
> >> --- a/drivers/gpu/drm/drm_atomic_uapi.c
> >> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> >> @@ -761,6 +761,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
> >>   
> >>   		return set_out_fence_for_connector(state->state, connector,
> >>   						   fence_ptr);
> >> +	} else if (property == connector->max_bpc_property) {
> >> +		state->max_requested_bpc = val;
> >>   	} else if (connector->funcs->atomic_set_property) {
> >>   		return connector->funcs->atomic_set_property(connector,
> >>   				state, property, val);
> >> @@ -825,6 +827,8 @@ drm_atomic_connector_get_property(struct drm_connector *connector,
> >>   		*val = 0;
> >>   	} else if (property == config->writeback_out_fence_ptr_property) {
> >>   		*val = 0;
> >> +	} else if (property == connector->max_bpc_property) {
> >> +		*val = state->max_requested_bpc;
> >>   	} else if (connector->funcs->atomic_get_property) {
> >>   		return connector->funcs->atomic_get_property(connector,
> >>   				state, property, val);
> >> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> >> index 5d01414ec9f7..bdaa29e530d4 100644
> >> --- a/drivers/gpu/drm/drm_connector.c
> >> +++ b/drivers/gpu/drm/drm_connector.c
> >> @@ -932,6 +932,13 @@ DRM_ENUM_NAME_FN(drm_get_content_protection_name, drm_cp_enum_list)
> >>    *	  is no longer protected and userspace should take appropriate action
> >>    *	  (whatever that might be).
> >>    *
> >> + * max bpc:
> >> + *	This range property is used by userspace to limit the bit depth. When
> >> + *	used the driver would limit the bpc in accordance with the valid range
> >> + *	supported by the hardware and sink. Drivers to use the function
> >> + *	drm_connector_attach_max_bpc_property() to create and attach the
> >> + *	property to the connector during initialization.
> >> + *
> >>    * Connectors also have one standardized atomic property:
> >>    *
> >>    * CRTC_ID:
> >> @@ -1600,6 +1607,40 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
> >>   EXPORT_SYMBOL(drm_connector_set_link_status_property);
> >>   
> >>   /**
> >> + * drm_connector_attach_max_bpc_property - attach "max bpc" property
> >> + * @connector: connector to attach max bpc property on.
> >> + * @min: The minimum bit depth supported by the connector.
> >> + * @max: The maximum bit depth supported by the connector.
> >> + *
> >> + * This is used to add support for limiting the bit depth on a connector.
> >> + *
> >> + * Returns:
> >> + * Zero on success, negative errno on failure.
> >> + */
> >> +int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
> >> +					  int min, int max)
> >> +{
> >> +	struct drm_device *dev = connector->dev;
> >> +	struct drm_property *prop;
> >> +
> >> +	prop = connector->max_bpc_property;
> >> +	if (!prop) {
> >> +		prop = drm_property_create_range(dev, 0, "max bpc", min, max);
> >> +		if (!prop)
> >> +			return -ENOMEM;
> >> +
> >> +		connector->max_bpc_property = prop;
> >> +	}
> >> +
> >> +	drm_object_attach_property(&connector->base, prop, max);
> >> +	connector->state->max_requested_bpc = max;
> >> +	connector->state->max_bpc = max;
> >> +
> >> +	return 0;
> >> +}
> >> +EXPORT_SYMBOL(drm_connector_attach_max_bpc_property);
> >> +
> >> +/**
> >>    * drm_connector_init_panel_orientation_property -
> >>    *	initialize the connecters panel_orientation property
> >>    * @connector: connector for which to init the panel-orientation property.
> >> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> >> index 5b3cf909fd5e..a402d16427a1 100644
> >> --- a/include/drm/drm_connector.h
> >> +++ b/include/drm/drm_connector.h
> >> @@ -461,6 +461,18 @@ struct drm_connector_state {
> >>   	 * drm_writeback_signal_completion()
> >>   	 */
> >>   	struct drm_writeback_job *writeback_job;
> >> +
> >> +	/**
> >> +	 * @max_requested_bpc: Connector property to limit the maximum bit
> >> +	 * depth of the pixels.
> >> +	 */
> >> +	u8 max_requested_bpc;
> >> +
> >> +	/**
> >> +	 * @max_bpc: Connector max_bpc based on the requested max_bpc property
> >> +	 * and the connector bpc limitations obtained from edid.
> >> +	 */
> >> +	u8 max_bpc;
> >>   };
> >>   
> >>   /**
> >> @@ -924,6 +936,12 @@ struct drm_connector {
> >>   	 */
> >>   	struct drm_property_blob *path_blob_ptr;
> >>   
> >> +	/**
> >> +	 * @max_bpc_property: Default connector property for the max bpc to be
> >> +	 * driven out of the connector.
> >> +	 */
> >> +	struct drm_property *max_bpc_property;
> >> +
> >>   #define DRM_CONNECTOR_POLL_HPD (1 << 0)
> >>   #define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
> >>   #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
> >> @@ -1202,6 +1220,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
> >>   					    uint64_t link_status);
> >>   int drm_connector_init_panel_orientation_property(
> >>   	struct drm_connector *connector, int width, int height);
> >> +int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
> >> +					  int min, int max);
> >>   
> >>   /**
> >>    * struct drm_tile_group - Tile group metadata
> >> -- 
> >> 2.9.3
> >>
> >> _______________________________________________
> >> Intel-gfx mailing list
> >> Intel-gfx@lists.freedesktop.org
> >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > 
> 
> Nicholas Kazlauskas
_______________________________________________
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: [Intel-gfx] [PATCH v14 1/2] drm: Add connector property to limit max bpc
  2018-11-07 18:10     ` Rodrigo Vivi
@ 2018-11-07 18:15       ` Kazlauskas, Nicholas
  0 siblings, 0 replies; 16+ messages in thread
From: Kazlauskas, Nicholas @ 2018-11-07 18:15 UTC (permalink / raw)
  To: Rodrigo Vivi
  Cc: Radhakrishna Sripada, Li, Sun peng (Leo),
	Daniel Vetter, intel-gfx, Kishore Kadiyala, dri-devel

On 11/7/18 1:10 PM, Rodrigo Vivi wrote:
> On Wed, Nov 07, 2018 at 04:56:00PM +0000, Kazlauskas, Nicholas wrote:
>> On 10/24/18 6:49 PM, Rodrigo Vivi wrote:
>>> On Fri, Oct 12, 2018 at 11:42:32AM -0700, Radhakrishna Sripada wrote:
>>>> At times 12bpc HDMI cannot be driven due to faulty cables, dongles
>>>> level shifters etc. To workaround them we may need to drive the output
>>>> at a lower bpc. Currently the user space does not have a way to limit
>>>> the bpc. The default bpc to be programmed is decided by the driver and
>>>> is run against connector limitations.
>>>>
>>>> Creating a new connector property "max bpc" in order to limit the bpc.
>>>> xrandr can make use of this connector property to make sure that bpc does
>>>> not exceed the configured value. This property can be used by userspace to
>>>> set the bpc.
>>>>
>>>> V2: Initialize max_bpc to satisfy kms_properties
>>>> V3: Move the property to drm_connector
>>>> V4: Split drm and i915 components(Ville)
>>>> V5: Make the property per connector(Ville)
>>>> V6: Compare the requested bpc to connector bpc(Daniel)
>>>>       Move the attach_property function to core(Ville)
>>>> V7: Fix checkpatch warnings
>>>> V8: Simplify the connector check code(Ville)
>>>> V9: Const display_info(Ville)
>>>> V10,V11: Fix CI issues.
>>>> V12: Add the Kernel documentation(Daniel)
>>>> V14: Crossreference the function name in the doc(Daniel)
>>>>
>>>> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
>>>> Cc: Kishore Kadiyala <kishore.kadiyala@intel.com>
>>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>> Cc: Manasi Navare <manasi.d.navare@intel.com>
>>>> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
>>>> Cc: Sunpeng Li <sunpeng.li@amd.com>
>>>> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>>>> Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
>>
>> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
> 
> Thanks. Although I had pushed through drm-intel-next-queued (dinq) already.
> 
>>
>> Looks good to me. We're seeing similar issues with > 8bpc that this
>> would help with.
> 
> hm... I hope that pushing to dinq doesn't cause any trouble for you :(
> 
>>
>>>
>>> This patch looks right to me:
>>>
>>> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>
>>> but we probably need to hold on merge while we wait clarifications
>>> and final rv-b on igt tests....
>>
>> Any updates on the igt tests?
> 
> yeap, RK added the property tests. got reviewed and
> merged to igt already as well
> 
> Thanks,
> Rodrigo.

Thanks for the update.

I think in the meantime while waiting for this to land in drm we'll make 
use of a driver specific property with the same name and swap it out 
later for the common property.

Nicholas Kazlauskas

> 
>>
>>>
>>>> ---
>>>>    drivers/gpu/drm/drm_atomic.c        |  5 +++++
>>>>    drivers/gpu/drm/drm_atomic_helper.c |  4 ++++
>>>>    drivers/gpu/drm/drm_atomic_uapi.c   |  4 ++++
>>>>    drivers/gpu/drm/drm_connector.c     | 41 +++++++++++++++++++++++++++++++++++++
>>>>    include/drm/drm_connector.h         | 20 ++++++++++++++++++
>>>>    5 files changed, 74 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
>>>> index 2870ae205237..cd8362dc4f74 100644
>>>> --- a/drivers/gpu/drm/drm_atomic.c
>>>> +++ b/drivers/gpu/drm/drm_atomic.c
>>>> @@ -390,6 +390,11 @@ static int drm_atomic_connector_check(struct drm_connector *connector,
>>>>    {
>>>>    	struct drm_crtc_state *crtc_state;
>>>>    	struct drm_writeback_job *writeback_job = state->writeback_job;
>>>> +	const struct drm_display_info *info = &connector->display_info;
>>>> +
>>>> +	state->max_bpc = info->bpc ? info->bpc : 8;
>>>> +	if (connector->max_bpc_property)
>>>> +		state->max_bpc = min(state->max_bpc, state->max_requested_bpc);
>>>>    
>>>>    	if ((connector->connector_type != DRM_MODE_CONNECTOR_WRITEBACK) || !writeback_job)
>>>>    		return 0;
>>>> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
>>>> index 6f66777dca4b..d61a74b254f5 100644
>>>> --- a/drivers/gpu/drm/drm_atomic_helper.c
>>>> +++ b/drivers/gpu/drm/drm_atomic_helper.c
>>>> @@ -650,6 +650,10 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
>>>>    			if (old_connector_state->link_status !=
>>>>    			    new_connector_state->link_status)
>>>>    				new_crtc_state->connectors_changed = true;
>>>> +
>>>> +			if (old_connector_state->max_requested_bpc !=
>>>> +			    new_connector_state->max_requested_bpc)
>>>> +				new_crtc_state->connectors_changed = true;
>>>>    		}
>>>>    
>>>>    		if (funcs->atomic_check)
>>>> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
>>>> index a22d6f269b07..7492819c81ce 100644
>>>> --- a/drivers/gpu/drm/drm_atomic_uapi.c
>>>> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
>>>> @@ -761,6 +761,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
>>>>    
>>>>    		return set_out_fence_for_connector(state->state, connector,
>>>>    						   fence_ptr);
>>>> +	} else if (property == connector->max_bpc_property) {
>>>> +		state->max_requested_bpc = val;
>>>>    	} else if (connector->funcs->atomic_set_property) {
>>>>    		return connector->funcs->atomic_set_property(connector,
>>>>    				state, property, val);
>>>> @@ -825,6 +827,8 @@ drm_atomic_connector_get_property(struct drm_connector *connector,
>>>>    		*val = 0;
>>>>    	} else if (property == config->writeback_out_fence_ptr_property) {
>>>>    		*val = 0;
>>>> +	} else if (property == connector->max_bpc_property) {
>>>> +		*val = state->max_requested_bpc;
>>>>    	} else if (connector->funcs->atomic_get_property) {
>>>>    		return connector->funcs->atomic_get_property(connector,
>>>>    				state, property, val);
>>>> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
>>>> index 5d01414ec9f7..bdaa29e530d4 100644
>>>> --- a/drivers/gpu/drm/drm_connector.c
>>>> +++ b/drivers/gpu/drm/drm_connector.c
>>>> @@ -932,6 +932,13 @@ DRM_ENUM_NAME_FN(drm_get_content_protection_name, drm_cp_enum_list)
>>>>     *	  is no longer protected and userspace should take appropriate action
>>>>     *	  (whatever that might be).
>>>>     *
>>>> + * max bpc:
>>>> + *	This range property is used by userspace to limit the bit depth. When
>>>> + *	used the driver would limit the bpc in accordance with the valid range
>>>> + *	supported by the hardware and sink. Drivers to use the function
>>>> + *	drm_connector_attach_max_bpc_property() to create and attach the
>>>> + *	property to the connector during initialization.
>>>> + *
>>>>     * Connectors also have one standardized atomic property:
>>>>     *
>>>>     * CRTC_ID:
>>>> @@ -1600,6 +1607,40 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
>>>>    EXPORT_SYMBOL(drm_connector_set_link_status_property);
>>>>    
>>>>    /**
>>>> + * drm_connector_attach_max_bpc_property - attach "max bpc" property
>>>> + * @connector: connector to attach max bpc property on.
>>>> + * @min: The minimum bit depth supported by the connector.
>>>> + * @max: The maximum bit depth supported by the connector.
>>>> + *
>>>> + * This is used to add support for limiting the bit depth on a connector.
>>>> + *
>>>> + * Returns:
>>>> + * Zero on success, negative errno on failure.
>>>> + */
>>>> +int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
>>>> +					  int min, int max)
>>>> +{
>>>> +	struct drm_device *dev = connector->dev;
>>>> +	struct drm_property *prop;
>>>> +
>>>> +	prop = connector->max_bpc_property;
>>>> +	if (!prop) {
>>>> +		prop = drm_property_create_range(dev, 0, "max bpc", min, max);
>>>> +		if (!prop)
>>>> +			return -ENOMEM;
>>>> +
>>>> +		connector->max_bpc_property = prop;
>>>> +	}
>>>> +
>>>> +	drm_object_attach_property(&connector->base, prop, max);
>>>> +	connector->state->max_requested_bpc = max;
>>>> +	connector->state->max_bpc = max;
>>>> +
>>>> +	return 0;
>>>> +}
>>>> +EXPORT_SYMBOL(drm_connector_attach_max_bpc_property);
>>>> +
>>>> +/**
>>>>     * drm_connector_init_panel_orientation_property -
>>>>     *	initialize the connecters panel_orientation property
>>>>     * @connector: connector for which to init the panel-orientation property.
>>>> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
>>>> index 5b3cf909fd5e..a402d16427a1 100644
>>>> --- a/include/drm/drm_connector.h
>>>> +++ b/include/drm/drm_connector.h
>>>> @@ -461,6 +461,18 @@ struct drm_connector_state {
>>>>    	 * drm_writeback_signal_completion()
>>>>    	 */
>>>>    	struct drm_writeback_job *writeback_job;
>>>> +
>>>> +	/**
>>>> +	 * @max_requested_bpc: Connector property to limit the maximum bit
>>>> +	 * depth of the pixels.
>>>> +	 */
>>>> +	u8 max_requested_bpc;
>>>> +
>>>> +	/**
>>>> +	 * @max_bpc: Connector max_bpc based on the requested max_bpc property
>>>> +	 * and the connector bpc limitations obtained from edid.
>>>> +	 */
>>>> +	u8 max_bpc;
>>>>    };
>>>>    
>>>>    /**
>>>> @@ -924,6 +936,12 @@ struct drm_connector {
>>>>    	 */
>>>>    	struct drm_property_blob *path_blob_ptr;
>>>>    
>>>> +	/**
>>>> +	 * @max_bpc_property: Default connector property for the max bpc to be
>>>> +	 * driven out of the connector.
>>>> +	 */
>>>> +	struct drm_property *max_bpc_property;
>>>> +
>>>>    #define DRM_CONNECTOR_POLL_HPD (1 << 0)
>>>>    #define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
>>>>    #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
>>>> @@ -1202,6 +1220,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
>>>>    					    uint64_t link_status);
>>>>    int drm_connector_init_panel_orientation_property(
>>>>    	struct drm_connector *connector, int width, int height);
>>>> +int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
>>>> +					  int min, int max);
>>>>    
>>>>    /**
>>>>     * struct drm_tile_group - Tile group metadata
>>>> -- 
>>>> 2.9.3
>>>>
>>>> _______________________________________________
>>>> Intel-gfx mailing list
>>>> Intel-gfx@lists.freedesktop.org
>>>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>> _______________________________________________
>>> dri-devel mailing list
>>> dri-devel@lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>>>
>>
>> Nicholas Kazlauska
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2018-11-07 18:15 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-12 18:42 [PATCH v14 1/2] drm: Add connector property to limit max bpc Radhakrishna Sripada
2018-10-12 18:42 ` [PATCH v14 2/2] drm/i915: Allow "max bpc" property to limit pipe_bpp Radhakrishna Sripada
2018-10-15  7:54   ` Lisovskiy, Stanislav
2018-10-23  1:44   ` [PATCH v15 " Manasi Navare
2018-10-23 12:00     ` Lisovskiy, Stanislav
2018-11-02 16:18       ` Rodrigo Vivi
2018-10-12 18:54 ` ✗ Fi.CI.SPARSE: warning for series starting with [v14,1/2] drm: Add connector property to limit max bpc Patchwork
2018-10-12 19:14 ` ✓ Fi.CI.BAT: success " Patchwork
2018-10-12 21:54 ` ✓ Fi.CI.IGT: " Patchwork
2018-10-23  1:59 ` ✗ Fi.CI.SPARSE: warning for series starting with [v14,1/2] drm: Add connector property to limit max bpc (rev2) Patchwork
2018-10-23  2:22 ` ✓ Fi.CI.BAT: success " Patchwork
2018-10-23  4:10 ` ✓ Fi.CI.IGT: " Patchwork
2018-10-24 22:49 ` [PATCH v14 1/2] drm: Add connector property to limit max bpc Rodrigo Vivi
2018-11-07 16:56   ` [Intel-gfx] " Kazlauskas, Nicholas
2018-11-07 18:10     ` Rodrigo Vivi
2018-11-07 18:15       ` [Intel-gfx] " Kazlauskas, Nicholas

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.