All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v9 0/2] Enabling content-type setting for HDMI displays.
@ 2018-05-07 13:16 StanLis
  2018-05-07 13:16 ` [PATCH v9 1/2] drm: content-type property for HDMI connector StanLis
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: StanLis @ 2018-05-07 13:16 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

From: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>

Added content type setting property to drm_connector(part 1)
and enabled transmitting it with HDMI AVI infoframes
for i915(part 2).

Stanislav Lisovskiy (2):
  drm: content-type property for HDMI connector
  i915: content-type property for HDMI connector

 Documentation/gpu/drm-kms.rst        |  6 +++
 Documentation/gpu/kms-properties.csv |  1 +
 drivers/gpu/drm/drm_atomic.c         |  4 ++
 drivers/gpu/drm/drm_connector.c      | 74 ++++++++++++++++++++++++++++
 drivers/gpu/drm/drm_edid.c           | 55 +++++++++++++++++++++
 drivers/gpu/drm/i915/intel_atomic.c  |  1 +
 drivers/gpu/drm/i915/intel_hdmi.c    | 24 ++++++---
 include/drm/drm_connector.h          | 12 +++++
 include/drm/drm_edid.h               |  6 +++
 include/drm/drm_mode_config.h        |  5 ++
 include/uapi/drm/drm_mode.h          |  7 +++
 11 files changed, 189 insertions(+), 6 deletions(-)

-- 
2.17.0

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

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

* [PATCH v9 1/2] drm: content-type property for HDMI connector
  2018-05-07 13:16 [PATCH v9 0/2] Enabling content-type setting for HDMI displays StanLis
@ 2018-05-07 13:16 ` StanLis
  2018-05-07 14:05   ` [Intel-gfx] " Daniel Vetter
  2018-05-07 13:16 ` [PATCH v9 2/2] i915: " StanLis
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: StanLis @ 2018-05-07 13:16 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

From: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>

Added content_type property to drm_connector_state
in order to properly handle external HDMI TV content-type setting.

v2:
 * Moved helper function which attaches content type property
   to the drm core, as was suggested.
   Removed redundant connector state initialization.

v3:
 * Removed caps in drm_content_type_enum_list.
   After some discussion it turned out that HDMI Spec 1.4
   was wrongly assuming that IT Content(itc) bit doesn't affect
   Content type states, however itc bit needs to be manupulated
   as well. In order to not expose additional property for itc,
   for sake of simplicity it was decided to bind those together
   in same "content type" property.

v4:
 * Added it_content checking in intel_digital_connector_atomic_check.
   Fixed documentation for new content type enum.

v5:
 * Moved patch revision's description to commit messages.

v6:
 * Minor naming fix for the content type enumeration string.

v7:
 * Fix parameter name for documentation and parameter alignment
   in order not to get warning. Added Content Type description to
   new HDMI connector properties section.

v8:
 * Thrown away unneeded numbers from HDMI content-type property
   description. Switch to strings desription instead of plain
   definitions.

v9:
 * Moved away hdmi specific content-type enum from
   drm_connector_state. Content type property should probably not
   be bound to any specific connector interface in
   drm_connector_state.
   Same probably should be done to hdmi_picture_aspect_ration enum
   which is also contained in drm_connector_state. Added special
   helper function to get derive hdmi specific relevant infoframe
   fields.

Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
---
 Documentation/gpu/drm-kms.rst        |  6 +++
 Documentation/gpu/kms-properties.csv |  1 +
 drivers/gpu/drm/drm_atomic.c         |  4 ++
 drivers/gpu/drm/drm_connector.c      | 74 ++++++++++++++++++++++++++++
 drivers/gpu/drm/drm_edid.c           | 55 +++++++++++++++++++++
 include/drm/drm_connector.h          | 12 +++++
 include/drm/drm_edid.h               |  6 +++
 include/drm/drm_mode_config.h        |  5 ++
 include/uapi/drm/drm_mode.h          |  7 +++
 9 files changed, 170 insertions(+)

diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst
index 1dffd1ac4cd4..e233c2626bd0 100644
--- a/Documentation/gpu/drm-kms.rst
+++ b/Documentation/gpu/drm-kms.rst
@@ -517,6 +517,12 @@ Standard Connector Properties
 .. kernel-doc:: drivers/gpu/drm/drm_connector.c
    :doc: standard connector properties
 
+HDMI Specific Connector Properties
+-----------------------------
+
+.. kernel-doc:: drivers/gpu/drm/drm_connector.c
+   :doc: HDMI connector properties
+
 Plane Composition Properties
 ----------------------------
 
diff --git a/Documentation/gpu/kms-properties.csv b/Documentation/gpu/kms-properties.csv
index 07ed22ea3bd6..bfde04eddd14 100644
--- a/Documentation/gpu/kms-properties.csv
+++ b/Documentation/gpu/kms-properties.csv
@@ -17,6 +17,7 @@ Owner Module/Drivers,Group,Property Name,Type,Property Values,Object attached,De
 ,Virtual GPU,“suggested X”,RANGE,"Min=0, Max=0xffffffff",Connector,property to suggest an X offset for a connector
 ,,“suggested Y”,RANGE,"Min=0, Max=0xffffffff",Connector,property to suggest an Y offset for a connector
 ,Optional,"""aspect ratio""",ENUM,"{ ""None"", ""4:3"", ""16:9"" }",Connector,TDB
+,Optional,"""content type""",ENUM,"{ ""No Data"", ""Graphics"", ""Photo"", ""Cinema"", ""Game"" }",Connector,TBD
 i915,Generic,"""Broadcast RGB""",ENUM,"{ ""Automatic"", ""Full"", ""Limited 16:235"" }",Connector,"When this property is set to Limited 16:235 and CTM is set, the hardware will be programmed with the result of the multiplication of CTM by the limited range matrix to ensure the pixels normaly in the range 0..1.0 are remapped to the range 16/255..235/255."
 ,,“audio”,ENUM,"{ ""force-dvi"", ""off"", ""auto"", ""on"" }",Connector,TBD
 ,SDVO-TV,“mode”,ENUM,"{ ""NTSC_M"", ""NTSC_J"", ""NTSC_443"", ""PAL_B"" } etc.",Connector,TBD
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 3d9ae057a6cd..6c1e1e774517 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1270,6 +1270,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
 			state->link_status = val;
 	} else if (property == config->aspect_ratio_property) {
 		state->picture_aspect_ratio = val;
+	} else if (property == config->content_type_property) {
+		state->content_type = val;
 	} else if (property == connector->scaling_mode_property) {
 		state->scaling_mode = val;
 	} else if (property == connector->content_protection_property) {
@@ -1355,6 +1357,8 @@ drm_atomic_connector_get_property(struct drm_connector *connector,
 		*val = state->link_status;
 	} else if (property == config->aspect_ratio_property) {
 		*val = state->picture_aspect_ratio;
+	} else if (property == config->content_type_property) {
+		*val = state->content_type;
 	} else if (property == connector->scaling_mode_property) {
 		*val = state->scaling_mode;
 	} else if (property == connector->content_protection_property) {
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index b3cde897cd80..fe63395f159d 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -720,6 +720,14 @@ static const struct drm_prop_enum_list drm_aspect_ratio_enum_list[] = {
 	{ DRM_MODE_PICTURE_ASPECT_16_9, "16:9" },
 };
 
+static const struct drm_prop_enum_list drm_content_type_enum_list[] = {
+	{ DRM_MODE_CONTENT_TYPE_NO_DATA, "No Data" },
+	{ DRM_MODE_CONTENT_TYPE_GRAPHICS, "Graphics" },
+	{ DRM_MODE_CONTENT_TYPE_PHOTO, "Photo" },
+	{ DRM_MODE_CONTENT_TYPE_CINEMA, "Cinema" },
+	{ DRM_MODE_CONTENT_TYPE_GAME, "Game" },
+};
+
 static const struct drm_prop_enum_list drm_panel_orientation_enum_list[] = {
 	{ DRM_MODE_PANEL_ORIENTATION_NORMAL,	"Normal"	},
 	{ DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP,	"Upside Down"	},
@@ -996,6 +1004,45 @@ int drm_mode_create_dvi_i_properties(struct drm_device *dev)
 }
 EXPORT_SYMBOL(drm_mode_create_dvi_i_properties);
 
+
+/**
+ * DOC: HDMI connector properties
+ *
+ * content type (HDMI specific):
+ *	Indicates content type setting to be used in HDMI infoframes to indicate
+ *	content type for the external device, so that it adjusts it's display
+ *	settings accordingly.
+ *
+ *	The value of this property can be one of the following:
+ *
+ *	No Data:
+ *		Content type is unknown
+ *	Graphics:
+ *		Content type is graphics
+ *	Photo:
+ *		Content type is photo
+ *	Cinema:
+ *		Content type is cinema
+ *	Game:
+ *		Content type is game
+ */
+
+/**
+ * drm_connector_attach_content_type_property - attach content-type property
+ * @connector: connector to attach content type property on.
+ *
+ * Called by a driver the first time a HDMI connector is made.
+ */
+int drm_connector_attach_content_type_property(struct drm_connector *connector)
+{
+	if (!drm_mode_create_content_type_property(connector->dev))
+		drm_object_attach_property(&connector->base,
+					   connector->dev->mode_config.content_type_property,
+					   DRM_MODE_CONTENT_TYPE_NO_DATA);
+	return 0;
+}
+EXPORT_SYMBOL(drm_connector_attach_content_type_property);
+
 /**
  * drm_create_tv_properties - create TV specific connector properties
  * @dev: DRM device
@@ -1260,6 +1307,33 @@ int drm_mode_create_aspect_ratio_property(struct drm_device *dev)
 }
 EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
 
+/**
+ * drm_mode_create_content_type_property - create content type property
+ * @dev: DRM device
+ *
+ * Called by a driver the first time it's needed, must be attached to desired
+ * connectors.
+ *
+ * Returns:
+ * Zero on success, negative errno on failure.
+ */
+int drm_mode_create_content_type_property(struct drm_device *dev)
+{
+	if (dev->mode_config.content_type_property)
+		return 0;
+
+	dev->mode_config.content_type_property =
+		drm_property_create_enum(dev, 0, "content type",
+					 drm_content_type_enum_list,
+					 ARRAY_SIZE(drm_content_type_enum_list));
+
+	if (dev->mode_config.content_type_property == NULL)
+		return -ENOMEM;
+
+	return 0;
+}
+EXPORT_SYMBOL(drm_mode_create_content_type_property);
+
 /**
  * drm_mode_create_suggested_offset_properties - create suggests offset properties
  * @dev: DRM device
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 134069f36482..9ecda0b2a4d8 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -4868,6 +4868,14 @@ drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
 
 	frame->picture_aspect = HDMI_PICTURE_ASPECT_NONE;
 
+	/*
+	 * As some drivers don't support atomic, we can't use connector state.
+	 * So just initialize the frame with default values, just the same way
+	 * as it's done with other properties here.
+	 */
+	frame->content_type = HDMI_CONTENT_TYPE_GRAPHICS;
+	frame->itc = 0;
+
 	/*
 	 * Populate picture aspect ratio from either
 	 * user input (if specified) or from the CEA mode list.
@@ -4886,6 +4894,53 @@ drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
 }
 EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode);
 
+/**
+ * drm_hdmi_get_itc_bit_from_property() - get the HDMI IT content bit
+ *                                        from content type property.
+ * content_type: Content type DRM property value
+ *
+ */
+bool
+drm_hdmi_get_itc_bit_from_property(unsigned int content_type)
+{
+	/* Whenever something else than "No Data", IT Content bit must be set */
+	return content_type != DRM_MODE_CONTENT_TYPE_NO_DATA ? true : false;
+}
+EXPORT_SYMBOL(drm_hdmi_get_itc_bit_from_property);
+
+/**
+ * drm_hdmi_get_content_type_from_property() - get the HDMI content type bits
+ *                                             from content type property.
+ * content_type: Content type DRM property value
+ *
+ */
+enum hdmi_content_type
+drm_hdmi_get_content_type_from_property(unsigned int content_type)
+{
+	enum hdmi_content_type ret;
+
+	switch (content_type) {
+	case DRM_MODE_CONTENT_TYPE_GRAPHICS:
+		ret = HDMI_CONTENT_TYPE_GRAPHICS;
+		break;
+	case DRM_MODE_CONTENT_TYPE_CINEMA:
+		ret = HDMI_CONTENT_TYPE_CINEMA;
+		break;
+	case DRM_MODE_CONTENT_TYPE_GAME:
+		ret = HDMI_CONTENT_TYPE_GAME;
+		break;
+	case DRM_MODE_CONTENT_TYPE_PHOTO:
+		ret = HDMI_CONTENT_TYPE_PHOTO;
+		break;
+	default:
+		/* Graphics is the default(0) */
+		ret = HDMI_CONTENT_TYPE_GRAPHICS;
+	}
+	return ret;
+}
+EXPORT_SYMBOL(drm_hdmi_get_content_type_from_property);
+
+
 /**
  * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI infoframe
  *                                        quantization range information
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 675cc3f8cf85..178fa3f3f5f7 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -418,6 +418,16 @@ struct drm_connector_state {
 	 */
 	enum hdmi_picture_aspect picture_aspect_ratio;
 
+
+	/**
+	 * @content_type: Connector property to control the
+	 * HDMI infoframe content type setting.
+	 * The %DRM_MODE_CONTENT_TYPE_\* values much
+	 * match the values.
+	 */
+	unsigned int content_type;
+
+
 	/**
 	 * @scaling_mode: Connector property to control the
 	 * upscaling, mostly used for built-in panels.
@@ -1089,11 +1099,13 @@ int drm_mode_create_tv_properties(struct drm_device *dev,
 				  unsigned int num_modes,
 				  const char * const modes[]);
 int drm_mode_create_scaling_mode_property(struct drm_device *dev);
+int drm_connector_attach_content_type_property(struct drm_connector *dev);
 int drm_connector_attach_scaling_mode_property(struct drm_connector *connector,
 					       u32 scaling_mode_mask);
 int drm_connector_attach_content_protection_property(
 		struct drm_connector *connector);
 int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
+int drm_mode_create_content_type_property(struct drm_device *dev);
 int drm_mode_create_suggested_offset_properties(struct drm_device *dev);
 
 int drm_mode_connector_set_path_property(struct drm_connector *connector,
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
index 8d89a9c3748d..4e264c4d8a9b 100644
--- a/include/drm/drm_edid.h
+++ b/include/drm/drm_edid.h
@@ -350,6 +350,12 @@ drm_load_edid_firmware(struct drm_connector *connector)
 }
 #endif
 
+bool
+drm_hdmi_get_itc_bit_from_property(unsigned int content_type);
+
+enum hdmi_content_type
+drm_hdmi_get_content_type_from_property(unsigned int content_type);
+
 int
 drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
 					 const struct drm_display_mode *mode,
diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
index 33b3a96d66d0..fb45839179dd 100644
--- a/include/drm/drm_mode_config.h
+++ b/include/drm/drm_mode_config.h
@@ -726,6 +726,11 @@ struct drm_mode_config {
 	 * HDMI infoframe aspect ratio setting.
 	 */
 	struct drm_property *aspect_ratio_property;
+	/**
+	 * @content_type_property: Optional connector property to control the
+	 * HDMI infoframe content type setting.
+	 */
+	struct drm_property *content_type_property;
 	/**
 	 * @degamma_lut_property: Optional CRTC property to set the LUT used to
 	 * convert the framebuffer's colors to linear gamma.
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
index 50bcf4214ff9..cad9e09ffaee 100644
--- a/include/uapi/drm/drm_mode.h
+++ b/include/uapi/drm/drm_mode.h
@@ -94,6 +94,13 @@ extern "C" {
 #define DRM_MODE_PICTURE_ASPECT_4_3		1
 #define DRM_MODE_PICTURE_ASPECT_16_9		2
 
+/* Content type options */
+#define DRM_MODE_CONTENT_TYPE_NO_DATA		0
+#define DRM_MODE_CONTENT_TYPE_GRAPHICS		1
+#define DRM_MODE_CONTENT_TYPE_PHOTO		2
+#define DRM_MODE_CONTENT_TYPE_CINEMA		3
+#define DRM_MODE_CONTENT_TYPE_GAME		4
+
 /* Aspect ratio flag bitmask (4 bits 22:19) */
 #define DRM_MODE_FLAG_PIC_AR_MASK		(0x0F<<19)
 #define  DRM_MODE_FLAG_PIC_AR_NONE \
-- 
2.17.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH v9 2/2] i915: content-type property for HDMI connector
  2018-05-07 13:16 [PATCH v9 0/2] Enabling content-type setting for HDMI displays StanLis
  2018-05-07 13:16 ` [PATCH v9 1/2] drm: content-type property for HDMI connector StanLis
@ 2018-05-07 13:16 ` StanLis
  2018-05-07 13:39 ` ✗ Fi.CI.CHECKPATCH: warning for Enabling content-type setting for HDMI displays. (rev8) Patchwork
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: StanLis @ 2018-05-07 13:16 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

From: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>

Added encoding of drm content_type property from drm_connector_state
within AVI infoframe in order to properly handle external HDMI TV
content-type setting.

This requires also manipulationg ITC bit, as stated in
HDMI spec.

v2:
 * Moved helper function which attaches content type property
   to the drm core, as was suggested.
   Removed redundant connector state initialization.

v3:
 * Removed caps in drm_content_type_enum_list.
   After some discussion it turned out that HDMI Spec 1.4
   was wrongly assuming that IT Content(itc) bit doesn't affect
   Content type states, however itc bit needs to be manupulated
   as well. In order to not expose additional property for itc,
   for sake of simplicity it was decided to bind those together
   in same "content type" property.

v4:
 * Added it_content checking in intel_digital_connector_atomic_check.
   Fixed documentation for new content type enum.

v5:
 * Moved patch revision's description to commit messages.

v6:
 * Minor naming fix for the content type enumeration string.

v7:
 * Fix parameter name for documentation and parameter alignment
   in order not to get warning. Added Content Type description to
   new HDMI connector properties section.

v8:
 * Thrown away unneeded numbers from HDMI content-type property
   description. Switch to strings desription instead of plain
   definitions.

v9:
 * Moved away hdmi specific content-type enum from
   drm_connector_state. Content type property should probably not
   be bound to any specific connector interface in
   drm_connector_state.
   Same probably should be done to hdmi_picture_aspect_ration enum
   which is also contained in drm_connector_state. Added special
   helper function to get derive hdmi specific relevant infoframe
   fields.

Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
---
 drivers/gpu/drm/i915/intel_atomic.c |  1 +
 drivers/gpu/drm/i915/intel_hdmi.c   | 24 ++++++++++++++++++------
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c
index 40285d1b91b7..61ddb5871d8a 100644
--- a/drivers/gpu/drm/i915/intel_atomic.c
+++ b/drivers/gpu/drm/i915/intel_atomic.c
@@ -124,6 +124,7 @@ int intel_digital_connector_atomic_check(struct drm_connector *conn,
 	if (new_conn_state->force_audio != old_conn_state->force_audio ||
 	    new_conn_state->broadcast_rgb != old_conn_state->broadcast_rgb ||
 	    new_conn_state->base.picture_aspect_ratio != old_conn_state->base.picture_aspect_ratio ||
+	    new_conn_state->base.content_type != old_conn_state->base.content_type ||
 	    new_conn_state->base.scaling_mode != old_conn_state->base.scaling_mode)
 		crtc_state->mode_changed = true;
 
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index ee929f31f7db..1080254a578b 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -460,8 +460,10 @@ static void intel_write_infoframe(struct drm_encoder *encoder,
 	intel_dig_port->write_infoframe(encoder, crtc_state, frame->any.type, buffer, len);
 }
 
+
 static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
-					 const struct intel_crtc_state *crtc_state)
+					 const struct intel_crtc_state *crtc_state,
+					 const struct drm_connector_state *conn_state)
 {
 	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
 	const struct drm_display_mode *adjusted_mode =
@@ -469,6 +471,8 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
 	struct drm_connector *connector = &intel_hdmi->attached_connector->base;
 	bool is_hdmi2_sink = connector->display_info.hdmi.scdc.supported;
 	union hdmi_infoframe frame;
+	enum hdmi_content_type content_type;
+	bool itc;
 	int ret;
 
 	ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
@@ -491,6 +495,13 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
 					   intel_hdmi->rgb_quant_range_selectable,
 					   is_hdmi2_sink);
 
+	/* convert generic content type property to HDMI specific */
+	itc = drm_hdmi_get_itc_bit_from_property(conn_state->content_type);
+	content_type = drm_hdmi_get_content_type_from_property(conn_state->content_type);
+
+	frame.avi.itc = itc;
+	frame.avi.content_type = content_type;
+
 	/* TODO: handle pixel repetition for YCBCR420 outputs */
 	intel_write_infoframe(encoder, crtc_state, &frame);
 }
@@ -586,7 +597,7 @@ static void g4x_set_infoframes(struct drm_encoder *encoder,
 	I915_WRITE(reg, val);
 	POSTING_READ(reg);
 
-	intel_hdmi_set_avi_infoframe(encoder, crtc_state);
+	intel_hdmi_set_avi_infoframe(encoder, crtc_state, conn_state);
 	intel_hdmi_set_spd_infoframe(encoder, crtc_state);
 	intel_hdmi_set_hdmi_infoframe(encoder, crtc_state, conn_state);
 }
@@ -727,7 +738,7 @@ static void ibx_set_infoframes(struct drm_encoder *encoder,
 	I915_WRITE(reg, val);
 	POSTING_READ(reg);
 
-	intel_hdmi_set_avi_infoframe(encoder, crtc_state);
+	intel_hdmi_set_avi_infoframe(encoder, crtc_state, conn_state);
 	intel_hdmi_set_spd_infoframe(encoder, crtc_state);
 	intel_hdmi_set_hdmi_infoframe(encoder, crtc_state, conn_state);
 }
@@ -770,7 +781,7 @@ static void cpt_set_infoframes(struct drm_encoder *encoder,
 	I915_WRITE(reg, val);
 	POSTING_READ(reg);
 
-	intel_hdmi_set_avi_infoframe(encoder, crtc_state);
+	intel_hdmi_set_avi_infoframe(encoder, crtc_state, conn_state);
 	intel_hdmi_set_spd_infoframe(encoder, crtc_state);
 	intel_hdmi_set_hdmi_infoframe(encoder, crtc_state, conn_state);
 }
@@ -823,7 +834,7 @@ static void vlv_set_infoframes(struct drm_encoder *encoder,
 	I915_WRITE(reg, val);
 	POSTING_READ(reg);
 
-	intel_hdmi_set_avi_infoframe(encoder, crtc_state);
+	intel_hdmi_set_avi_infoframe(encoder, crtc_state, conn_state);
 	intel_hdmi_set_spd_infoframe(encoder, crtc_state);
 	intel_hdmi_set_hdmi_infoframe(encoder, crtc_state, conn_state);
 }
@@ -856,7 +867,7 @@ static void hsw_set_infoframes(struct drm_encoder *encoder,
 	I915_WRITE(reg, val);
 	POSTING_READ(reg);
 
-	intel_hdmi_set_avi_infoframe(encoder, crtc_state);
+	intel_hdmi_set_avi_infoframe(encoder, crtc_state, conn_state);
 	intel_hdmi_set_spd_infoframe(encoder, crtc_state);
 	intel_hdmi_set_hdmi_infoframe(encoder, crtc_state, conn_state);
 }
@@ -2065,6 +2076,7 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c
 	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;
 }
 
-- 
2.17.0

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

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

* ✗ Fi.CI.CHECKPATCH: warning for Enabling content-type setting for HDMI displays. (rev8)
  2018-05-07 13:16 [PATCH v9 0/2] Enabling content-type setting for HDMI displays StanLis
  2018-05-07 13:16 ` [PATCH v9 1/2] drm: content-type property for HDMI connector StanLis
  2018-05-07 13:16 ` [PATCH v9 2/2] i915: " StanLis
@ 2018-05-07 13:39 ` Patchwork
  2018-05-07 13:56 ` ✓ Fi.CI.BAT: success " Patchwork
  2018-05-07 15:18 ` ✓ Fi.CI.IGT: " Patchwork
  4 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2018-05-07 13:39 UTC (permalink / raw)
  To: StanLis; +Cc: intel-gfx

== Series Details ==

Series: Enabling content-type setting for HDMI displays. (rev8)
URL   : https://patchwork.freedesktop.org/series/41876/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
fbbcc8d1f453 drm: content-type property for HDMI connector
-:129: CHECK:LINE_SPACING: Please don't use multiple blank lines
#129: FILE: drivers/gpu/drm/drm_connector.c:1007:
 
+

-:195: CHECK:COMPARISON_TO_NULL: Comparison to NULL could be written "!dev->mode_config.content_type_property"
#195: FILE: drivers/gpu/drm/drm_connector.c:1330:
+	if (dev->mode_config.content_type_property == NULL)

-:274: CHECK:LINE_SPACING: Please don't use multiple blank lines
#274: FILE: drivers/gpu/drm/drm_edid.c:4936:
+
+

-:286: CHECK:LINE_SPACING: Please don't use multiple blank lines
#286: FILE: include/drm/drm_connector.h:421:
 
+

-:295: CHECK:LINE_SPACING: Please don't use multiple blank lines
#295: FILE: include/drm/drm_connector.h:430:
+
+

total: 0 errors, 0 warnings, 5 checks, 259 lines checked
279113b4c78f i915: content-type property for HDMI connector
-:79: CHECK:LINE_SPACING: Please don't use multiple blank lines
#79: FILE: drivers/gpu/drm/i915/intel_hdmi.c:463:
 
+

total: 0 errors, 0 warnings, 1 checks, 86 lines checked

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✓ Fi.CI.BAT: success for Enabling content-type setting for HDMI displays. (rev8)
  2018-05-07 13:16 [PATCH v9 0/2] Enabling content-type setting for HDMI displays StanLis
                   ` (2 preceding siblings ...)
  2018-05-07 13:39 ` ✗ Fi.CI.CHECKPATCH: warning for Enabling content-type setting for HDMI displays. (rev8) Patchwork
@ 2018-05-07 13:56 ` Patchwork
  2018-05-07 15:18 ` ✓ Fi.CI.IGT: " Patchwork
  4 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2018-05-07 13:56 UTC (permalink / raw)
  To: StanLis; +Cc: intel-gfx

== Series Details ==

Series: Enabling content-type setting for HDMI displays. (rev8)
URL   : https://patchwork.freedesktop.org/series/41876/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4150 -> Patchwork_8926 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/41876/revisions/8/mbox/

== Known issues ==

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

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_exec_suspend@basic-s4-devices:
      fi-skl-guc:         PASS -> FAIL (fdo#105900, fdo#104699) +1

    igt@gem_ringfill@basic-default-hang:
      fi-pnv-d510:        NOTRUN -> DMESG-WARN (fdo#101600)

    
    ==== Possible fixes ====

    igt@kms_flip@basic-flip-vs-wf_vblank:
      fi-skl-guc:         FAIL (fdo#103928) -> PASS

    igt@kms_frontbuffer_tracking@basic:
      fi-hsw-4200u:       DMESG-FAIL (fdo#102614, fdo#106103) -> PASS

    igt@kms_pipe_crc_basic@read-crc-pipe-b:
      fi-skl-6700k2:      FAIL (fdo#103191, fdo#104724) -> PASS

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      fi-glk-j4005:       DMESG-WARN (fdo#106097) -> PASS

    
  fdo#101600 https://bugs.freedesktop.org/show_bug.cgi?id=101600
  fdo#102614 https://bugs.freedesktop.org/show_bug.cgi?id=102614
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103928 https://bugs.freedesktop.org/show_bug.cgi?id=103928
  fdo#104699 https://bugs.freedesktop.org/show_bug.cgi?id=104699
  fdo#104724 https://bugs.freedesktop.org/show_bug.cgi?id=104724
  fdo#105900 https://bugs.freedesktop.org/show_bug.cgi?id=105900
  fdo#106097 https://bugs.freedesktop.org/show_bug.cgi?id=106097
  fdo#106103 https://bugs.freedesktop.org/show_bug.cgi?id=106103


== Participating hosts (38 -> 37) ==

  Additional (2): fi-kbl-7560u fi-pnv-d510 
  Missing    (3): fi-ctg-p8600 fi-ilk-m540 fi-skl-6700hq 


== Build changes ==

    * Linux: CI_DRM_4150 -> Patchwork_8926

  CI_DRM_4150: 93d32416ba4b1dae9451fec28aaa71915d770f51 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4463: 91b5a3ef5516b29584ea4567b0f5ffa18219b29f @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_8926: 279113b4c78fe777697aaeb801ec4aeb407b56f4 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4463: 33e58d5583eb7ed3966a1b905f875a1dfa959f6b @ git://anongit.freedesktop.org/piglit


== Linux commits ==

279113b4c78f i915: content-type property for HDMI connector
fbbcc8d1f453 drm: content-type property for HDMI connector

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_8926/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Intel-gfx] [PATCH v9 1/2] drm: content-type property for HDMI connector
  2018-05-07 13:16 ` [PATCH v9 1/2] drm: content-type property for HDMI connector StanLis
@ 2018-05-07 14:05   ` Daniel Vetter
  2018-05-08  7:18     ` Lisovskiy, Stanislav
  0 siblings, 1 reply; 9+ messages in thread
From: Daniel Vetter @ 2018-05-07 14:05 UTC (permalink / raw)
  To: StanLis; +Cc: intel-gfx, dri-devel

On Mon, May 07, 2018 at 04:16:40PM +0300, StanLis wrote:
> From: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> 
> Added content_type property to drm_connector_state
> in order to properly handle external HDMI TV content-type setting.
> 
> v2:
>  * Moved helper function which attaches content type property
>    to the drm core, as was suggested.
>    Removed redundant connector state initialization.
> 
> v3:
>  * Removed caps in drm_content_type_enum_list.
>    After some discussion it turned out that HDMI Spec 1.4
>    was wrongly assuming that IT Content(itc) bit doesn't affect
>    Content type states, however itc bit needs to be manupulated
>    as well. In order to not expose additional property for itc,
>    for sake of simplicity it was decided to bind those together
>    in same "content type" property.
> 
> v4:
>  * Added it_content checking in intel_digital_connector_atomic_check.
>    Fixed documentation for new content type enum.
> 
> v5:
>  * Moved patch revision's description to commit messages.
> 
> v6:
>  * Minor naming fix for the content type enumeration string.
> 
> v7:
>  * Fix parameter name for documentation and parameter alignment
>    in order not to get warning. Added Content Type description to
>    new HDMI connector properties section.
> 
> v8:
>  * Thrown away unneeded numbers from HDMI content-type property
>    description. Switch to strings desription instead of plain
>    definitions.
> 
> v9:
>  * Moved away hdmi specific content-type enum from
>    drm_connector_state. Content type property should probably not
>    be bound to any specific connector interface in
>    drm_connector_state.
>    Same probably should be done to hdmi_picture_aspect_ration enum
>    which is also contained in drm_connector_state. Added special
>    helper function to get derive hdmi specific relevant infoframe
>    fields.
> 
> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>

> ---
>  Documentation/gpu/drm-kms.rst        |  6 +++
>  Documentation/gpu/kms-properties.csv |  1 +
>  drivers/gpu/drm/drm_atomic.c         |  4 ++
>  drivers/gpu/drm/drm_connector.c      | 74 ++++++++++++++++++++++++++++
>  drivers/gpu/drm/drm_edid.c           | 55 +++++++++++++++++++++
>  include/drm/drm_connector.h          | 12 +++++
>  include/drm/drm_edid.h               |  6 +++
>  include/drm/drm_mode_config.h        |  5 ++
>  include/uapi/drm/drm_mode.h          |  7 +++
>  9 files changed, 170 insertions(+)
> 
> diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst
> index 1dffd1ac4cd4..e233c2626bd0 100644
> --- a/Documentation/gpu/drm-kms.rst
> +++ b/Documentation/gpu/drm-kms.rst
> @@ -517,6 +517,12 @@ Standard Connector Properties
>  .. kernel-doc:: drivers/gpu/drm/drm_connector.c
>     :doc: standard connector properties
>  
> +HDMI Specific Connector Properties
> +-----------------------------
> +
> +.. kernel-doc:: drivers/gpu/drm/drm_connector.c
> +   :doc: HDMI connector properties
> +
>  Plane Composition Properties
>  ----------------------------
>  
> diff --git a/Documentation/gpu/kms-properties.csv b/Documentation/gpu/kms-properties.csv
> index 07ed22ea3bd6..bfde04eddd14 100644
> --- a/Documentation/gpu/kms-properties.csv
> +++ b/Documentation/gpu/kms-properties.csv
> @@ -17,6 +17,7 @@ Owner Module/Drivers,Group,Property Name,Type,Property Values,Object attached,De
>  ,Virtual GPU,“suggested X”,RANGE,"Min=0, Max=0xffffffff",Connector,property to suggest an X offset for a connector
>  ,,“suggested Y”,RANGE,"Min=0, Max=0xffffffff",Connector,property to suggest an Y offset for a connector
>  ,Optional,"""aspect ratio""",ENUM,"{ ""None"", ""4:3"", ""16:9"" }",Connector,TDB
> +,Optional,"""content type""",ENUM,"{ ""No Data"", ""Graphics"", ""Photo"", ""Cinema"", ""Game"" }",Connector,TBD
>  i915,Generic,"""Broadcast RGB""",ENUM,"{ ""Automatic"", ""Full"", ""Limited 16:235"" }",Connector,"When this property is set to Limited 16:235 and CTM is set, the hardware will be programmed with the result of the multiplication of CTM by the limited range matrix to ensure the pixels normaly in the range 0..1.0 are remapped to the range 16/255..235/255."
>  ,,“audio”,ENUM,"{ ""force-dvi"", ""off"", ""auto"", ""on"" }",Connector,TBD
>  ,SDVO-TV,“mode”,ENUM,"{ ""NTSC_M"", ""NTSC_J"", ""NTSC_443"", ""PAL_B"" } etc.",Connector,TBD
> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> index 3d9ae057a6cd..6c1e1e774517 100644
> --- a/drivers/gpu/drm/drm_atomic.c
> +++ b/drivers/gpu/drm/drm_atomic.c
> @@ -1270,6 +1270,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
>  			state->link_status = val;
>  	} else if (property == config->aspect_ratio_property) {
>  		state->picture_aspect_ratio = val;
> +	} else if (property == config->content_type_property) {
> +		state->content_type = val;
>  	} else if (property == connector->scaling_mode_property) {
>  		state->scaling_mode = val;
>  	} else if (property == connector->content_protection_property) {
> @@ -1355,6 +1357,8 @@ drm_atomic_connector_get_property(struct drm_connector *connector,
>  		*val = state->link_status;
>  	} else if (property == config->aspect_ratio_property) {
>  		*val = state->picture_aspect_ratio;
> +	} else if (property == config->content_type_property) {
> +		*val = state->content_type;
>  	} else if (property == connector->scaling_mode_property) {
>  		*val = state->scaling_mode;
>  	} else if (property == connector->content_protection_property) {
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index b3cde897cd80..fe63395f159d 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -720,6 +720,14 @@ static const struct drm_prop_enum_list drm_aspect_ratio_enum_list[] = {
>  	{ DRM_MODE_PICTURE_ASPECT_16_9, "16:9" },
>  };
>  
> +static const struct drm_prop_enum_list drm_content_type_enum_list[] = {
> +	{ DRM_MODE_CONTENT_TYPE_NO_DATA, "No Data" },
> +	{ DRM_MODE_CONTENT_TYPE_GRAPHICS, "Graphics" },
> +	{ DRM_MODE_CONTENT_TYPE_PHOTO, "Photo" },
> +	{ DRM_MODE_CONTENT_TYPE_CINEMA, "Cinema" },
> +	{ DRM_MODE_CONTENT_TYPE_GAME, "Game" },
> +};
> +
>  static const struct drm_prop_enum_list drm_panel_orientation_enum_list[] = {
>  	{ DRM_MODE_PANEL_ORIENTATION_NORMAL,	"Normal"	},
>  	{ DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP,	"Upside Down"	},
> @@ -996,6 +1004,45 @@ int drm_mode_create_dvi_i_properties(struct drm_device *dev)
>  }
>  EXPORT_SYMBOL(drm_mode_create_dvi_i_properties);
>  
> +
> +/**
> + * DOC: HDMI connector properties
> + *
> + * content type (HDMI specific):
> + *	Indicates content type setting to be used in HDMI infoframes to indicate
> + *	content type for the external device, so that it adjusts it's display
> + *	settings accordingly.
> + *
> + *	The value of this property can be one of the following:
> + *
> + *	No Data:
> + *		Content type is unknown
> + *	Graphics:
> + *		Content type is graphics
> + *	Photo:
> + *		Content type is photo
> + *	Cinema:
> + *		Content type is cinema
> + *	Game:
> + *		Content type is game

Links to the function that set up/use the property would be good here.
I.e.

	"Drivers can set up this property by calling
	drm_connector_attach_content_type_property(). Decoding to
	infoframe values is done through
	drm_hdmi_get_content_type_from_property() and
	drm_hdmi_get_itc_bit_from_property()."

Aside: A simple helper that computes the correct infoframes from the
drm_connector_state and drm_display_info, without forcing drivers to call
a gazillion individual helper functions would be real nice. But that's for
someone else I think - all the verbosity here simply annoys me a bit.

With the above kerneldoc polish:

Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-Daniel
> + */
> +
> +/**
> + * drm_connector_attach_content_type_property - attach content-type property
> + * @connector: connector to attach content type property on.
> + *
> + * Called by a driver the first time a HDMI connector is made.
> + */
> +int drm_connector_attach_content_type_property(struct drm_connector *connector)
> +{
> +	if (!drm_mode_create_content_type_property(connector->dev))
> +		drm_object_attach_property(&connector->base,
> +					   connector->dev->mode_config.content_type_property,
> +					   DRM_MODE_CONTENT_TYPE_NO_DATA);
> +	return 0;
> +}
> +EXPORT_SYMBOL(drm_connector_attach_content_type_property);
> +
>  /**
>   * drm_create_tv_properties - create TV specific connector properties
>   * @dev: DRM device
> @@ -1260,6 +1307,33 @@ int drm_mode_create_aspect_ratio_property(struct drm_device *dev)
>  }
>  EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
>  
> +/**
> + * drm_mode_create_content_type_property - create content type property
> + * @dev: DRM device
> + *
> + * Called by a driver the first time it's needed, must be attached to desired
> + * connectors.
> + *
> + * Returns:
> + * Zero on success, negative errno on failure.
> + */
> +int drm_mode_create_content_type_property(struct drm_device *dev)
> +{
> +	if (dev->mode_config.content_type_property)
> +		return 0;
> +
> +	dev->mode_config.content_type_property =
> +		drm_property_create_enum(dev, 0, "content type",
> +					 drm_content_type_enum_list,
> +					 ARRAY_SIZE(drm_content_type_enum_list));
> +
> +	if (dev->mode_config.content_type_property == NULL)
> +		return -ENOMEM;
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL(drm_mode_create_content_type_property);

Do we really need to export this? Drivers should only call
drm_connector_attach_content_type_property() I think ...

> +
>  /**
>   * drm_mode_create_suggested_offset_properties - create suggests offset properties
>   * @dev: DRM device
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index 134069f36482..9ecda0b2a4d8 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -4868,6 +4868,14 @@ drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
>  
>  	frame->picture_aspect = HDMI_PICTURE_ASPECT_NONE;
>  
> +	/*
> +	 * As some drivers don't support atomic, we can't use connector state.
> +	 * So just initialize the frame with default values, just the same way
> +	 * as it's done with other properties here.
> +	 */
> +	frame->content_type = HDMI_CONTENT_TYPE_GRAPHICS;
> +	frame->itc = 0;
> +
>  	/*
>  	 * Populate picture aspect ratio from either
>  	 * user input (if specified) or from the CEA mode list.
> @@ -4886,6 +4894,53 @@ drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
>  }
>  EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode);
>  
> +/**
> + * drm_hdmi_get_itc_bit_from_property() - get the HDMI IT content bit
> + *                                        from content type property.
> + * content_type: Content type DRM property value
> + *
> + */
> +bool
> +drm_hdmi_get_itc_bit_from_property(unsigned int content_type)
> +{
> +	/* Whenever something else than "No Data", IT Content bit must be set */
> +	return content_type != DRM_MODE_CONTENT_TYPE_NO_DATA ? true : false;
> +}
> +EXPORT_SYMBOL(drm_hdmi_get_itc_bit_from_property);
> +
> +/**
> + * drm_hdmi_get_content_type_from_property() - get the HDMI content type bits
> + *                                             from content type property.
> + * content_type: Content type DRM property value
> + *
> + */
> +enum hdmi_content_type
> +drm_hdmi_get_content_type_from_property(unsigned int content_type)
> +{
> +	enum hdmi_content_type ret;
> +
> +	switch (content_type) {
> +	case DRM_MODE_CONTENT_TYPE_GRAPHICS:
> +		ret = HDMI_CONTENT_TYPE_GRAPHICS;
> +		break;
> +	case DRM_MODE_CONTENT_TYPE_CINEMA:
> +		ret = HDMI_CONTENT_TYPE_CINEMA;
> +		break;
> +	case DRM_MODE_CONTENT_TYPE_GAME:
> +		ret = HDMI_CONTENT_TYPE_GAME;
> +		break;
> +	case DRM_MODE_CONTENT_TYPE_PHOTO:
> +		ret = HDMI_CONTENT_TYPE_PHOTO;
> +		break;
> +	default:
> +		/* Graphics is the default(0) */
> +		ret = HDMI_CONTENT_TYPE_GRAPHICS;
> +	}
> +	return ret;
> +}
> +EXPORT_SYMBOL(drm_hdmi_get_content_type_from_property);
> +
> +
>  /**
>   * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI infoframe
>   *                                        quantization range information
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index 675cc3f8cf85..178fa3f3f5f7 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -418,6 +418,16 @@ struct drm_connector_state {
>  	 */
>  	enum hdmi_picture_aspect picture_aspect_ratio;
>  
> +
> +	/**
> +	 * @content_type: Connector property to control the
> +	 * HDMI infoframe content type setting.
> +	 * The %DRM_MODE_CONTENT_TYPE_\* values much
> +	 * match the values.
> +	 */
> +	unsigned int content_type;
> +
> +
>  	/**
>  	 * @scaling_mode: Connector property to control the
>  	 * upscaling, mostly used for built-in panels.
> @@ -1089,11 +1099,13 @@ int drm_mode_create_tv_properties(struct drm_device *dev,
>  				  unsigned int num_modes,
>  				  const char * const modes[]);
>  int drm_mode_create_scaling_mode_property(struct drm_device *dev);
> +int drm_connector_attach_content_type_property(struct drm_connector *dev);
>  int drm_connector_attach_scaling_mode_property(struct drm_connector *connector,
>  					       u32 scaling_mode_mask);
>  int drm_connector_attach_content_protection_property(
>  		struct drm_connector *connector);
>  int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
> +int drm_mode_create_content_type_property(struct drm_device *dev);
>  int drm_mode_create_suggested_offset_properties(struct drm_device *dev);
>  
>  int drm_mode_connector_set_path_property(struct drm_connector *connector,
> diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
> index 8d89a9c3748d..4e264c4d8a9b 100644
> --- a/include/drm/drm_edid.h
> +++ b/include/drm/drm_edid.h
> @@ -350,6 +350,12 @@ drm_load_edid_firmware(struct drm_connector *connector)
>  }
>  #endif
>  
> +bool
> +drm_hdmi_get_itc_bit_from_property(unsigned int content_type);
> +
> +enum hdmi_content_type
> +drm_hdmi_get_content_type_from_property(unsigned int content_type);
> +
>  int
>  drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
>  					 const struct drm_display_mode *mode,
> diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> index 33b3a96d66d0..fb45839179dd 100644
> --- a/include/drm/drm_mode_config.h
> +++ b/include/drm/drm_mode_config.h
> @@ -726,6 +726,11 @@ struct drm_mode_config {
>  	 * HDMI infoframe aspect ratio setting.
>  	 */
>  	struct drm_property *aspect_ratio_property;
> +	/**
> +	 * @content_type_property: Optional connector property to control the
> +	 * HDMI infoframe content type setting.
> +	 */
> +	struct drm_property *content_type_property;
>  	/**
>  	 * @degamma_lut_property: Optional CRTC property to set the LUT used to
>  	 * convert the framebuffer's colors to linear gamma.
> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> index 50bcf4214ff9..cad9e09ffaee 100644
> --- a/include/uapi/drm/drm_mode.h
> +++ b/include/uapi/drm/drm_mode.h
> @@ -94,6 +94,13 @@ extern "C" {
>  #define DRM_MODE_PICTURE_ASPECT_4_3		1
>  #define DRM_MODE_PICTURE_ASPECT_16_9		2
>  
> +/* Content type options */
> +#define DRM_MODE_CONTENT_TYPE_NO_DATA		0
> +#define DRM_MODE_CONTENT_TYPE_GRAPHICS		1
> +#define DRM_MODE_CONTENT_TYPE_PHOTO		2
> +#define DRM_MODE_CONTENT_TYPE_CINEMA		3
> +#define DRM_MODE_CONTENT_TYPE_GAME		4
> +
>  /* Aspect ratio flag bitmask (4 bits 22:19) */
>  #define DRM_MODE_FLAG_PIC_AR_MASK		(0x0F<<19)
>  #define  DRM_MODE_FLAG_PIC_AR_NONE \
> -- 
> 2.17.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* ✓ Fi.CI.IGT: success for Enabling content-type setting for HDMI displays. (rev8)
  2018-05-07 13:16 [PATCH v9 0/2] Enabling content-type setting for HDMI displays StanLis
                   ` (3 preceding siblings ...)
  2018-05-07 13:56 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2018-05-07 15:18 ` Patchwork
  4 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2018-05-07 15:18 UTC (permalink / raw)
  To: StanLis; +Cc: intel-gfx

== Series Details ==

Series: Enabling content-type setting for HDMI displays. (rev8)
URL   : https://patchwork.freedesktop.org/series/41876/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4150_full -> Patchwork_8926_full =

== Summary - WARNING ==

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

  External URL: https://patchwork.freedesktop.org/api/1.0/series/41876/revisions/8/mbox/

== Possible new issues ==

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

  === IGT changes ===

    ==== Warnings ====

    igt@gem_mocs_settings@mocs-rc6-render:
      shard-kbl:          SKIP -> PASS +1

    igt@gem_mocs_settings@mocs-rc6-vebox:
      shard-kbl:          PASS -> SKIP

    
== Known issues ==

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

  === IGT changes ===

    ==== Issues hit ====

    igt@drv_selftest@live_contexts:
      shard-kbl:          PASS -> INCOMPLETE (fdo#103665)

    igt@kms_flip@2x-dpms-vs-vblank-race-interruptible:
      shard-hsw:          PASS -> FAIL (fdo#103060)

    igt@kms_flip@wf_vblank-ts-check-interruptible:
      shard-hsw:          PASS -> FAIL (fdo#103928) +1

    
    ==== Possible fixes ====

    igt@gem_eio@in-flight-suspend:
      shard-kbl:          INCOMPLETE (fdo#103665) -> PASS

    igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible:
      shard-kbl:          FAIL (fdo#100368) -> PASS

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

    igt@kms_flip@plain-flip-fb-recreate:
      shard-glk:          FAIL (fdo#100368) -> PASS +2

    igt@kms_frontbuffer_tracking@fbc-farfromfence:
      shard-kbl:          DMESG-WARN (fdo#103558, fdo#105602) -> PASS +13

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

    igt@kms_rotation_crc@primary-rotation-90:
      shard-apl:          FAIL (fdo#104724, fdo#103925) -> PASS

    
  fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
  fdo#103060 https://bugs.freedesktop.org/show_bug.cgi?id=103060
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
  fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
  fdo#103925 https://bugs.freedesktop.org/show_bug.cgi?id=103925
  fdo#103928 https://bugs.freedesktop.org/show_bug.cgi?id=103928
  fdo#104724 https://bugs.freedesktop.org/show_bug.cgi?id=104724
  fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
  fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602


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

  No changes in participating hosts


== Build changes ==

    * Linux: CI_DRM_4150 -> Patchwork_8926

  CI_DRM_4150: 93d32416ba4b1dae9451fec28aaa71915d770f51 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4463: 91b5a3ef5516b29584ea4567b0f5ffa18219b29f @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_8926: 279113b4c78fe777697aaeb801ec4aeb407b56f4 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4463: 33e58d5583eb7ed3966a1b905f875a1dfa959f6b @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_8926/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Intel-gfx] [PATCH v9 1/2] drm: content-type property for HDMI connector
  2018-05-07 14:05   ` [Intel-gfx] " Daniel Vetter
@ 2018-05-08  7:18     ` Lisovskiy, Stanislav
  2018-05-08  8:01       ` Daniel Vetter
  0 siblings, 1 reply; 9+ messages in thread
From: Lisovskiy, Stanislav @ 2018-05-08  7:18 UTC (permalink / raw)
  To: daniel; +Cc: intel-gfx, dri-devel

On Mon, 2018-05-07 at 16:05 +0200, Daniel Vetter wrote:
> On Mon, May 07, 2018 at 04:16:40PM +0300, StanLis wrote:
> > From: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> > 
> > Added content_type property to drm_connector_state
> > in order to properly handle external HDMI TV content-type setting.
> > 
> > v2:
> >  * Moved helper function which attaches content type property
> >    to the drm core, as was suggested.
> >    Removed redundant connector state initialization.
> > 
> > v3:
> >  * Removed caps in drm_content_type_enum_list.
> >    After some discussion it turned out that HDMI Spec 1.4
> >    was wrongly assuming that IT Content(itc) bit doesn't affect
> >    Content type states, however itc bit needs to be manupulated
> >    as well. In order to not expose additional property for itc,
> >    for sake of simplicity it was decided to bind those together
> >    in same "content type" property.
> > 
> > v4:
> >  * Added it_content checking in
> > intel_digital_connector_atomic_check.
> >    Fixed documentation for new content type enum.
> > 
> > v5:
> >  * Moved patch revision's description to commit messages.
> > 
> > v6:
> >  * Minor naming fix for the content type enumeration string.
> > 
> > v7:
> >  * Fix parameter name for documentation and parameter alignment
> >    in order not to get warning. Added Content Type description to
> >    new HDMI connector properties section.
> > 
> > v8:
> >  * Thrown away unneeded numbers from HDMI content-type property
> >    description. Switch to strings desription instead of plain
> >    definitions.
> > 
> > v9:
> >  * Moved away hdmi specific content-type enum from
> >    drm_connector_state. Content type property should probably not
> >    be bound to any specific connector interface in
> >    drm_connector_state.
> >    Same probably should be done to hdmi_picture_aspect_ration enum
> >    which is also contained in drm_connector_state. Added special
> >    helper function to get derive hdmi specific relevant infoframe
> >    fields.
> > 
> > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> > ---
> >  Documentation/gpu/drm-kms.rst        |  6 +++
> >  Documentation/gpu/kms-properties.csv |  1 +
> >  drivers/gpu/drm/drm_atomic.c         |  4 ++
> >  drivers/gpu/drm/drm_connector.c      | 74
> > ++++++++++++++++++++++++++++
> >  drivers/gpu/drm/drm_edid.c           | 55 +++++++++++++++++++++
> >  include/drm/drm_connector.h          | 12 +++++
> >  include/drm/drm_edid.h               |  6 +++
> >  include/drm/drm_mode_config.h        |  5 ++
> >  include/uapi/drm/drm_mode.h          |  7 +++
> >  9 files changed, 170 insertions(+)
> > 
> > diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-
> > kms.rst
> > index 1dffd1ac4cd4..e233c2626bd0 100644
> > --- a/Documentation/gpu/drm-kms.rst
> > +++ b/Documentation/gpu/drm-kms.rst
> > @@ -517,6 +517,12 @@ Standard Connector Properties
> >  .. kernel-doc:: drivers/gpu/drm/drm_connector.c
> >     :doc: standard connector properties
> >  
> > +HDMI Specific Connector Properties
> > +-----------------------------
> > +
> > +.. kernel-doc:: drivers/gpu/drm/drm_connector.c
> > +   :doc: HDMI connector properties
> > +
> >  Plane Composition Properties
> >  ----------------------------
> >  
> > diff --git a/Documentation/gpu/kms-properties.csv
> > b/Documentation/gpu/kms-properties.csv
> > index 07ed22ea3bd6..bfde04eddd14 100644
> > --- a/Documentation/gpu/kms-properties.csv
> > +++ b/Documentation/gpu/kms-properties.csv
> > @@ -17,6 +17,7 @@ Owner Module/Drivers,Group,Property
> > Name,Type,Property Values,Object attached,De
> >  ,Virtual GPU,“suggested X”,RANGE,"Min=0,
> > Max=0xffffffff",Connector,property to suggest an X offset for a
> > connector
> >  ,,“suggested Y”,RANGE,"Min=0, Max=0xffffffff",Connector,property
> > to suggest an Y offset for a connector
> >  ,Optional,"""aspect ratio""",ENUM,"{ ""None"", ""4:3"", ""16:9""
> > }",Connector,TDB
> > +,Optional,"""content type""",ENUM,"{ ""No Data"", ""Graphics"",
> > ""Photo"", ""Cinema"", ""Game"" }",Connector,TBD
> >  i915,Generic,"""Broadcast RGB""",ENUM,"{ ""Automatic"", ""Full"",
> > ""Limited 16:235"" }",Connector,"When this property is set to
> > Limited 16:235 and CTM is set, the hardware will be programmed with
> > the result of the multiplication of CTM by the limited range matrix
> > to ensure the pixels normaly in the range 0..1.0 are remapped to
> > the range 16/255..235/255."
> >  ,,“audio”,ENUM,"{ ""force-dvi"", ""off"", ""auto"", ""on""
> > }",Connector,TBD
> >  ,SDVO-TV,“mode”,ENUM,"{ ""NTSC_M"", ""NTSC_J"", ""NTSC_443"",
> > ""PAL_B"" } etc.",Connector,TBD
> > diff --git a/drivers/gpu/drm/drm_atomic.c
> > b/drivers/gpu/drm/drm_atomic.c
> > index 3d9ae057a6cd..6c1e1e774517 100644
> > --- a/drivers/gpu/drm/drm_atomic.c
> > +++ b/drivers/gpu/drm/drm_atomic.c
> > @@ -1270,6 +1270,8 @@ static int
> > drm_atomic_connector_set_property(struct drm_connector *connector,
> >  			state->link_status = val;
> >  	} else if (property == config->aspect_ratio_property) {
> >  		state->picture_aspect_ratio = val;
> > +	} else if (property == config->content_type_property) {
> > +		state->content_type = val;
> >  	} else if (property == connector->scaling_mode_property) {
> >  		state->scaling_mode = val;
> >  	} else if (property == connector-
> > >content_protection_property) {
> > @@ -1355,6 +1357,8 @@ drm_atomic_connector_get_property(struct
> > drm_connector *connector,
> >  		*val = state->link_status;
> >  	} else if (property == config->aspect_ratio_property) {
> >  		*val = state->picture_aspect_ratio;
> > +	} else if (property == config->content_type_property) {
> > +		*val = state->content_type;
> >  	} else if (property == connector->scaling_mode_property) {
> >  		*val = state->scaling_mode;
> >  	} else if (property == connector-
> > >content_protection_property) {
> > diff --git a/drivers/gpu/drm/drm_connector.c
> > b/drivers/gpu/drm/drm_connector.c
> > index b3cde897cd80..fe63395f159d 100644
> > --- a/drivers/gpu/drm/drm_connector.c
> > +++ b/drivers/gpu/drm/drm_connector.c
> > @@ -720,6 +720,14 @@ static const struct drm_prop_enum_list
> > drm_aspect_ratio_enum_list[] = {
> >  	{ DRM_MODE_PICTURE_ASPECT_16_9, "16:9" },
> >  };
> >  
> > +static const struct drm_prop_enum_list
> > drm_content_type_enum_list[] = {
> > +	{ DRM_MODE_CONTENT_TYPE_NO_DATA, "No Data" },
> > +	{ DRM_MODE_CONTENT_TYPE_GRAPHICS, "Graphics" },
> > +	{ DRM_MODE_CONTENT_TYPE_PHOTO, "Photo" },
> > +	{ DRM_MODE_CONTENT_TYPE_CINEMA, "Cinema" },
> > +	{ DRM_MODE_CONTENT_TYPE_GAME, "Game" },
> > +};
> > +
> >  static const struct drm_prop_enum_list
> > drm_panel_orientation_enum_list[] = {
> >  	{ DRM_MODE_PANEL_ORIENTATION_NORMAL,	"Normal"	
> > },
> >  	{ DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP,	"Upside
> > Down"	},
> > @@ -996,6 +1004,45 @@ int drm_mode_create_dvi_i_properties(struct
> > drm_device *dev)
> >  }
> >  EXPORT_SYMBOL(drm_mode_create_dvi_i_properties);
> >  
> > +
> > +/**
> > + * DOC: HDMI connector properties
> > + *
> > + * content type (HDMI specific):
> > + *	Indicates content type setting to be used in HDMI
> > infoframes to indicate
> > + *	content type for the external device, so that it adjusts
> > it's display
> > + *	settings accordingly.
> > + *
> > + *	The value of this property can be one of the following:
> > + *
> > + *	No Data:
> > + *		Content type is unknown
> > + *	Graphics:
> > + *		Content type is graphics
> > + *	Photo:
> > + *		Content type is photo
> > + *	Cinema:
> > + *		Content type is cinema
> > + *	Game:
> > + *		Content type is game
> 
> Links to the function that set up/use the property would be good
> here.
> I.e.
> 
> 	"Drivers can set up this property by calling
> 	drm_connector_attach_content_type_property(). Decoding to
> 	infoframe values is done through
> 	drm_hdmi_get_content_type_from_property() and
> 	drm_hdmi_get_itc_bit_from_property()."
> 
> Aside: A simple helper that computes the correct infoframes from the
> drm_connector_state and drm_display_info, without forcing drivers to
> call
> a gazillion individual helper functions would be real nice. But
> that's for
> someone else I think - all the verbosity here simply annoys me a bit.
> 
> With the above kerneldoc polish:
> 
> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> -Daniel

Yep, I suggested that, adding some single function could be more proper
approach - there is even already a function called
drm_hdmi_avi_infoframe_from_display_mode, I initially suggested that
it would be convenient to add it there, however as I understood from
discussion with Ville, not all drivers support atomic properties,
otherwise certainly it would be much easier to have it in a single
function.

> > + */
> > +
> > +/**
> > + * drm_connector_attach_content_type_property - attach content-
> > type property
> > + * @connector: connector to attach content type property on.
> > + *
> > + * Called by a driver the first time a HDMI connector is made.
> > + */
> > +int drm_connector_attach_content_type_property(struct
> > drm_connector *connector)
> > +{
> > +	if (!drm_mode_create_content_type_property(connector-
> > >dev))
> > +		drm_object_attach_property(&connector->base,
> > +					   connector->dev-
> > >mode_config.content_type_property,
> > +					   DRM_MODE_CONTENT_TYPE_N
> > O_DATA);
> > +	return 0;
> > +}
> > +EXPORT_SYMBOL(drm_connector_attach_content_type_property);
> > +
> >  /**
> >   * drm_create_tv_properties - create TV specific connector
> > properties
> >   * @dev: DRM device
> > @@ -1260,6 +1307,33 @@ int
> > drm_mode_create_aspect_ratio_property(struct drm_device *dev)
> >  }
> >  EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
> >  
> > +/**
> > + * drm_mode_create_content_type_property - create content type
> > property
> > + * @dev: DRM device
> > + *
> > + * Called by a driver the first time it's needed, must be attached
> > to desired
> > + * connectors.
> > + *
> > + * Returns:
> > + * Zero on success, negative errno on failure.
> > + */
> > +int drm_mode_create_content_type_property(struct drm_device *dev)
> > +{
> > +	if (dev->mode_config.content_type_property)
> > +		return 0;
> > +
> > +	dev->mode_config.content_type_property =
> > +		drm_property_create_enum(dev, 0, "content type",
> > +					 drm_content_type_enum_lis
> > t,
> > +					 ARRAY_SIZE(drm_content_ty
> > pe_enum_list));
> > +
> > +	if (dev->mode_config.content_type_property == NULL)
> > +		return -ENOMEM;
> > +
> > +	return 0;
> > +}
> > +EXPORT_SYMBOL(drm_mode_create_content_type_property);
> 
> Do we really need to export this? Drivers should only call
> drm_connector_attach_content_type_property() I think ...

All of those property creation functions are exported, I was 
just following those as example:

EXPORT_SYMBOL(drm_mode_create_tv_properties);
EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);

and so on. 

> 
> > +
> >  /**
> >   * drm_mode_create_suggested_offset_properties - create suggests
> > offset properties
> >   * @dev: DRM device
> > diff --git a/drivers/gpu/drm/drm_edid.c
> > b/drivers/gpu/drm/drm_edid.c
> > index 134069f36482..9ecda0b2a4d8 100644
> > --- a/drivers/gpu/drm/drm_edid.c
> > +++ b/drivers/gpu/drm/drm_edid.c
> > @@ -4868,6 +4868,14 @@
> > drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe
> > *frame,
> >  
> >  	frame->picture_aspect = HDMI_PICTURE_ASPECT_NONE;
> >  
> > +	/*
> > +	 * As some drivers don't support atomic, we can't use
> > connector state.
> > +	 * So just initialize the frame with default values, just
> > the same way
> > +	 * as it's done with other properties here.
> > +	 */
> > +	frame->content_type = HDMI_CONTENT_TYPE_GRAPHICS;
> > +	frame->itc = 0;
> > +
> >  	/*
> >  	 * Populate picture aspect ratio from either
> >  	 * user input (if specified) or from the CEA mode list.
> > @@ -4886,6 +4894,53 @@
> > drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe
> > *frame,
> >  }
> >  EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode);
> >  
> > +/**
> > + * drm_hdmi_get_itc_bit_from_property() - get the HDMI IT content
> > bit
> > + *                                        from content type
> > property.
> > + * content_type: Content type DRM property value
> > + *
> > + */
> > +bool
> > +drm_hdmi_get_itc_bit_from_property(unsigned int content_type)
> > +{
> > +	/* Whenever something else than "No Data", IT Content bit
> > must be set */
> > +	return content_type != DRM_MODE_CONTENT_TYPE_NO_DATA ?
> > true : false;
> > +}
> > +EXPORT_SYMBOL(drm_hdmi_get_itc_bit_from_property);
> > +
> > +/**
> > + * drm_hdmi_get_content_type_from_property() - get the HDMI
> > content type bits
> > + *                                             from content type
> > property.
> > + * content_type: Content type DRM property value
> > + *
> > + */
> > +enum hdmi_content_type
> > +drm_hdmi_get_content_type_from_property(unsigned int content_type)
> > +{
> > +	enum hdmi_content_type ret;
> > +
> > +	switch (content_type) {
> > +	case DRM_MODE_CONTENT_TYPE_GRAPHICS:
> > +		ret = HDMI_CONTENT_TYPE_GRAPHICS;
> > +		break;
> > +	case DRM_MODE_CONTENT_TYPE_CINEMA:
> > +		ret = HDMI_CONTENT_TYPE_CINEMA;
> > +		break;
> > +	case DRM_MODE_CONTENT_TYPE_GAME:
> > +		ret = HDMI_CONTENT_TYPE_GAME;
> > +		break;
> > +	case DRM_MODE_CONTENT_TYPE_PHOTO:
> > +		ret = HDMI_CONTENT_TYPE_PHOTO;
> > +		break;
> > +	default:
> > +		/* Graphics is the default(0) */
> > +		ret = HDMI_CONTENT_TYPE_GRAPHICS;
> > +	}
> > +	return ret;
> > +}
> > +EXPORT_SYMBOL(drm_hdmi_get_content_type_from_property);
> > +
> > +
> >  /**
> >   * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI
> > infoframe
> >   *                                        quantization range
> > information
> > diff --git a/include/drm/drm_connector.h
> > b/include/drm/drm_connector.h
> > index 675cc3f8cf85..178fa3f3f5f7 100644
> > --- a/include/drm/drm_connector.h
> > +++ b/include/drm/drm_connector.h
> > @@ -418,6 +418,16 @@ struct drm_connector_state {
> >  	 */
> >  	enum hdmi_picture_aspect picture_aspect_ratio;
> >  
> > +
> > +	/**
> > +	 * @content_type: Connector property to control the
> > +	 * HDMI infoframe content type setting.
> > +	 * The %DRM_MODE_CONTENT_TYPE_\* values much
> > +	 * match the values.
> > +	 */
> > +	unsigned int content_type;
> > +
> > +
> >  	/**
> >  	 * @scaling_mode: Connector property to control the
> >  	 * upscaling, mostly used for built-in panels.
> > @@ -1089,11 +1099,13 @@ int drm_mode_create_tv_properties(struct
> > drm_device *dev,
> >  				  unsigned int num_modes,
> >  				  const char * const modes[]);
> >  int drm_mode_create_scaling_mode_property(struct drm_device *dev);
> > +int drm_connector_attach_content_type_property(struct
> > drm_connector *dev);
> >  int drm_connector_attach_scaling_mode_property(struct
> > drm_connector *connector,
> >  					       u32
> > scaling_mode_mask);
> >  int drm_connector_attach_content_protection_property(
> >  		struct drm_connector *connector);
> >  int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
> > +int drm_mode_create_content_type_property(struct drm_device *dev);
> >  int drm_mode_create_suggested_offset_properties(struct drm_device
> > *dev);
> >  
> >  int drm_mode_connector_set_path_property(struct drm_connector
> > *connector,
> > diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
> > index 8d89a9c3748d..4e264c4d8a9b 100644
> > --- a/include/drm/drm_edid.h
> > +++ b/include/drm/drm_edid.h
> > @@ -350,6 +350,12 @@ drm_load_edid_firmware(struct drm_connector
> > *connector)
> >  }
> >  #endif
> >  
> > +bool
> > +drm_hdmi_get_itc_bit_from_property(unsigned int content_type);
> > +
> > +enum hdmi_content_type
> > +drm_hdmi_get_content_type_from_property(unsigned int
> > content_type);
> > +
> >  int
> >  drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe
> > *frame,
> >  					 const struct
> > drm_display_mode *mode,
> > diff --git a/include/drm/drm_mode_config.h
> > b/include/drm/drm_mode_config.h
> > index 33b3a96d66d0..fb45839179dd 100644
> > --- a/include/drm/drm_mode_config.h
> > +++ b/include/drm/drm_mode_config.h
> > @@ -726,6 +726,11 @@ struct drm_mode_config {
> >  	 * HDMI infoframe aspect ratio setting.
> >  	 */
> >  	struct drm_property *aspect_ratio_property;
> > +	/**
> > +	 * @content_type_property: Optional connector property to
> > control the
> > +	 * HDMI infoframe content type setting.
> > +	 */
> > +	struct drm_property *content_type_property;
> >  	/**
> >  	 * @degamma_lut_property: Optional CRTC property to set
> > the LUT used to
> >  	 * convert the framebuffer's colors to linear gamma.
> > diff --git a/include/uapi/drm/drm_mode.h
> > b/include/uapi/drm/drm_mode.h
> > index 50bcf4214ff9..cad9e09ffaee 100644
> > --- a/include/uapi/drm/drm_mode.h
> > +++ b/include/uapi/drm/drm_mode.h
> > @@ -94,6 +94,13 @@ extern "C" {
> >  #define DRM_MODE_PICTURE_ASPECT_4_3		1
> >  #define DRM_MODE_PICTURE_ASPECT_16_9		2
> >  
> > +/* Content type options */
> > +#define DRM_MODE_CONTENT_TYPE_NO_DATA		0
> > +#define DRM_MODE_CONTENT_TYPE_GRAPHICS		1
> > +#define DRM_MODE_CONTENT_TYPE_PHOTO		2
> > +#define DRM_MODE_CONTENT_TYPE_CINEMA		3
> > +#define DRM_MODE_CONTENT_TYPE_GAME		4
> > +
> >  /* Aspect ratio flag bitmask (4 bits 22:19) */
> >  #define DRM_MODE_FLAG_PIC_AR_MASK		(0x0F<<19)
> >  #define  DRM_MODE_FLAG_PIC_AR_NONE \
> > -- 
> > 2.17.0
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> 
-- 
Best Regards,

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

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

* Re: [PATCH v9 1/2] drm: content-type property for HDMI connector
  2018-05-08  7:18     ` Lisovskiy, Stanislav
@ 2018-05-08  8:01       ` Daniel Vetter
  0 siblings, 0 replies; 9+ messages in thread
From: Daniel Vetter @ 2018-05-08  8:01 UTC (permalink / raw)
  To: Lisovskiy, Stanislav; +Cc: intel-gfx, dri-devel

On Tue, May 08, 2018 at 07:18:20AM +0000, Lisovskiy, Stanislav wrote:
> On Mon, 2018-05-07 at 16:05 +0200, Daniel Vetter wrote:
> > On Mon, May 07, 2018 at 04:16:40PM +0300, StanLis wrote:
> > > From: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> > > 
> > > Added content_type property to drm_connector_state
> > > in order to properly handle external HDMI TV content-type setting.
> > > 
> > > v2:
> > >  * Moved helper function which attaches content type property
> > >    to the drm core, as was suggested.
> > >    Removed redundant connector state initialization.
> > > 
> > > v3:
> > >  * Removed caps in drm_content_type_enum_list.
> > >    After some discussion it turned out that HDMI Spec 1.4
> > >    was wrongly assuming that IT Content(itc) bit doesn't affect
> > >    Content type states, however itc bit needs to be manupulated
> > >    as well. In order to not expose additional property for itc,
> > >    for sake of simplicity it was decided to bind those together
> > >    in same "content type" property.
> > > 
> > > v4:
> > >  * Added it_content checking in
> > > intel_digital_connector_atomic_check.
> > >    Fixed documentation for new content type enum.
> > > 
> > > v5:
> > >  * Moved patch revision's description to commit messages.
> > > 
> > > v6:
> > >  * Minor naming fix for the content type enumeration string.
> > > 
> > > v7:
> > >  * Fix parameter name for documentation and parameter alignment
> > >    in order not to get warning. Added Content Type description to
> > >    new HDMI connector properties section.
> > > 
> > > v8:
> > >  * Thrown away unneeded numbers from HDMI content-type property
> > >    description. Switch to strings desription instead of plain
> > >    definitions.
> > > 
> > > v9:
> > >  * Moved away hdmi specific content-type enum from
> > >    drm_connector_state. Content type property should probably not
> > >    be bound to any specific connector interface in
> > >    drm_connector_state.
> > >    Same probably should be done to hdmi_picture_aspect_ration enum
> > >    which is also contained in drm_connector_state. Added special
> > >    helper function to get derive hdmi specific relevant infoframe
> > >    fields.
> > > 
> > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> > > ---
> > >  Documentation/gpu/drm-kms.rst        |  6 +++
> > >  Documentation/gpu/kms-properties.csv |  1 +
> > >  drivers/gpu/drm/drm_atomic.c         |  4 ++
> > >  drivers/gpu/drm/drm_connector.c      | 74
> > > ++++++++++++++++++++++++++++
> > >  drivers/gpu/drm/drm_edid.c           | 55 +++++++++++++++++++++
> > >  include/drm/drm_connector.h          | 12 +++++
> > >  include/drm/drm_edid.h               |  6 +++
> > >  include/drm/drm_mode_config.h        |  5 ++
> > >  include/uapi/drm/drm_mode.h          |  7 +++
> > >  9 files changed, 170 insertions(+)
> > > 
> > > diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-
> > > kms.rst
> > > index 1dffd1ac4cd4..e233c2626bd0 100644
> > > --- a/Documentation/gpu/drm-kms.rst
> > > +++ b/Documentation/gpu/drm-kms.rst
> > > @@ -517,6 +517,12 @@ Standard Connector Properties
> > >  .. kernel-doc:: drivers/gpu/drm/drm_connector.c
> > >     :doc: standard connector properties
> > >  
> > > +HDMI Specific Connector Properties
> > > +-----------------------------
> > > +
> > > +.. kernel-doc:: drivers/gpu/drm/drm_connector.c
> > > +   :doc: HDMI connector properties
> > > +
> > >  Plane Composition Properties
> > >  ----------------------------
> > >  
> > > diff --git a/Documentation/gpu/kms-properties.csv
> > > b/Documentation/gpu/kms-properties.csv
> > > index 07ed22ea3bd6..bfde04eddd14 100644
> > > --- a/Documentation/gpu/kms-properties.csv
> > > +++ b/Documentation/gpu/kms-properties.csv
> > > @@ -17,6 +17,7 @@ Owner Module/Drivers,Group,Property
> > > Name,Type,Property Values,Object attached,De
> > >  ,Virtual GPU,“suggested X”,RANGE,"Min=0,
> > > Max=0xffffffff",Connector,property to suggest an X offset for a
> > > connector
> > >  ,,“suggested Y”,RANGE,"Min=0, Max=0xffffffff",Connector,property
> > > to suggest an Y offset for a connector
> > >  ,Optional,"""aspect ratio""",ENUM,"{ ""None"", ""4:3"", ""16:9""
> > > }",Connector,TDB
> > > +,Optional,"""content type""",ENUM,"{ ""No Data"", ""Graphics"",
> > > ""Photo"", ""Cinema"", ""Game"" }",Connector,TBD
> > >  i915,Generic,"""Broadcast RGB""",ENUM,"{ ""Automatic"", ""Full"",
> > > ""Limited 16:235"" }",Connector,"When this property is set to
> > > Limited 16:235 and CTM is set, the hardware will be programmed with
> > > the result of the multiplication of CTM by the limited range matrix
> > > to ensure the pixels normaly in the range 0..1.0 are remapped to
> > > the range 16/255..235/255."
> > >  ,,“audio”,ENUM,"{ ""force-dvi"", ""off"", ""auto"", ""on""
> > > }",Connector,TBD
> > >  ,SDVO-TV,“mode”,ENUM,"{ ""NTSC_M"", ""NTSC_J"", ""NTSC_443"",
> > > ""PAL_B"" } etc.",Connector,TBD
> > > diff --git a/drivers/gpu/drm/drm_atomic.c
> > > b/drivers/gpu/drm/drm_atomic.c
> > > index 3d9ae057a6cd..6c1e1e774517 100644
> > > --- a/drivers/gpu/drm/drm_atomic.c
> > > +++ b/drivers/gpu/drm/drm_atomic.c
> > > @@ -1270,6 +1270,8 @@ static int
> > > drm_atomic_connector_set_property(struct drm_connector *connector,
> > >  			state->link_status = val;
> > >  	} else if (property == config->aspect_ratio_property) {
> > >  		state->picture_aspect_ratio = val;
> > > +	} else if (property == config->content_type_property) {
> > > +		state->content_type = val;
> > >  	} else if (property == connector->scaling_mode_property) {
> > >  		state->scaling_mode = val;
> > >  	} else if (property == connector-
> > > >content_protection_property) {
> > > @@ -1355,6 +1357,8 @@ drm_atomic_connector_get_property(struct
> > > drm_connector *connector,
> > >  		*val = state->link_status;
> > >  	} else if (property == config->aspect_ratio_property) {
> > >  		*val = state->picture_aspect_ratio;
> > > +	} else if (property == config->content_type_property) {
> > > +		*val = state->content_type;
> > >  	} else if (property == connector->scaling_mode_property) {
> > >  		*val = state->scaling_mode;
> > >  	} else if (property == connector-
> > > >content_protection_property) {
> > > diff --git a/drivers/gpu/drm/drm_connector.c
> > > b/drivers/gpu/drm/drm_connector.c
> > > index b3cde897cd80..fe63395f159d 100644
> > > --- a/drivers/gpu/drm/drm_connector.c
> > > +++ b/drivers/gpu/drm/drm_connector.c
> > > @@ -720,6 +720,14 @@ static const struct drm_prop_enum_list
> > > drm_aspect_ratio_enum_list[] = {
> > >  	{ DRM_MODE_PICTURE_ASPECT_16_9, "16:9" },
> > >  };
> > >  
> > > +static const struct drm_prop_enum_list
> > > drm_content_type_enum_list[] = {
> > > +	{ DRM_MODE_CONTENT_TYPE_NO_DATA, "No Data" },
> > > +	{ DRM_MODE_CONTENT_TYPE_GRAPHICS, "Graphics" },
> > > +	{ DRM_MODE_CONTENT_TYPE_PHOTO, "Photo" },
> > > +	{ DRM_MODE_CONTENT_TYPE_CINEMA, "Cinema" },
> > > +	{ DRM_MODE_CONTENT_TYPE_GAME, "Game" },
> > > +};
> > > +
> > >  static const struct drm_prop_enum_list
> > > drm_panel_orientation_enum_list[] = {
> > >  	{ DRM_MODE_PANEL_ORIENTATION_NORMAL,	"Normal"	
> > > },
> > >  	{ DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP,	"Upside
> > > Down"	},
> > > @@ -996,6 +1004,45 @@ int drm_mode_create_dvi_i_properties(struct
> > > drm_device *dev)
> > >  }
> > >  EXPORT_SYMBOL(drm_mode_create_dvi_i_properties);
> > >  
> > > +
> > > +/**
> > > + * DOC: HDMI connector properties
> > > + *
> > > + * content type (HDMI specific):
> > > + *	Indicates content type setting to be used in HDMI
> > > infoframes to indicate
> > > + *	content type for the external device, so that it adjusts
> > > it's display
> > > + *	settings accordingly.
> > > + *
> > > + *	The value of this property can be one of the following:
> > > + *
> > > + *	No Data:
> > > + *		Content type is unknown
> > > + *	Graphics:
> > > + *		Content type is graphics
> > > + *	Photo:
> > > + *		Content type is photo
> > > + *	Cinema:
> > > + *		Content type is cinema
> > > + *	Game:
> > > + *		Content type is game
> > 
> > Links to the function that set up/use the property would be good
> > here.
> > I.e.
> > 
> > 	"Drivers can set up this property by calling
> > 	drm_connector_attach_content_type_property(). Decoding to
> > 	infoframe values is done through
> > 	drm_hdmi_get_content_type_from_property() and
> > 	drm_hdmi_get_itc_bit_from_property()."
> > 
> > Aside: A simple helper that computes the correct infoframes from the
> > drm_connector_state and drm_display_info, without forcing drivers to
> > call
> > a gazillion individual helper functions would be real nice. But
> > that's for
> > someone else I think - all the verbosity here simply annoys me a bit.
> > 
> > With the above kerneldoc polish:
> > 
> > Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > -Daniel
> 
> Yep, I suggested that, adding some single function could be more proper
> approach - there is even already a function called
> drm_hdmi_avi_infoframe_from_display_mode, I initially suggested that
> it would be convenient to add it there, however as I understood from
> discussion with Ville, not all drivers support atomic properties,
> otherwise certainly it would be much easier to have it in a single
> function.

Yes not everything is atomic, but we can pretty much require atomic for
new drivers. We'd need to make a new function though which takes
drm_connector_state into account (so that non-atomic drivers can keep
calling drm_hdmi_avi_infoframe_from_display_mode). For that overall
function we'd probably want:

drm_hdmi_avi_infoframe_from_state(struct hdmi_avi_infoframe *frame,
				  struct drm_connector_state *conn_state,
				  struct drm_crtc_state *crtc_state);

display_info we can get at through conn_state->connector.display_info, and
mode we can reach through crtc_state->adjusted_mode.

But yeah probably better to do that with the next little hdmi infoframe
thing we're going to support, or as a follow-up.
-Daniel

> 
> > > + */
> > > +
> > > +/**
> > > + * drm_connector_attach_content_type_property - attach content-
> > > type property
> > > + * @connector: connector to attach content type property on.
> > > + *
> > > + * Called by a driver the first time a HDMI connector is made.
> > > + */
> > > +int drm_connector_attach_content_type_property(struct
> > > drm_connector *connector)
> > > +{
> > > +	if (!drm_mode_create_content_type_property(connector-
> > > >dev))
> > > +		drm_object_attach_property(&connector->base,
> > > +					   connector->dev-
> > > >mode_config.content_type_property,
> > > +					   DRM_MODE_CONTENT_TYPE_N
> > > O_DATA);
> > > +	return 0;
> > > +}
> > > +EXPORT_SYMBOL(drm_connector_attach_content_type_property);
> > > +
> > >  /**
> > >   * drm_create_tv_properties - create TV specific connector
> > > properties
> > >   * @dev: DRM device
> > > @@ -1260,6 +1307,33 @@ int
> > > drm_mode_create_aspect_ratio_property(struct drm_device *dev)
> > >  }
> > >  EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
> > >  
> > > +/**
> > > + * drm_mode_create_content_type_property - create content type
> > > property
> > > + * @dev: DRM device
> > > + *
> > > + * Called by a driver the first time it's needed, must be attached
> > > to desired
> > > + * connectors.
> > > + *
> > > + * Returns:
> > > + * Zero on success, negative errno on failure.
> > > + */
> > > +int drm_mode_create_content_type_property(struct drm_device *dev)
> > > +{
> > > +	if (dev->mode_config.content_type_property)
> > > +		return 0;
> > > +
> > > +	dev->mode_config.content_type_property =
> > > +		drm_property_create_enum(dev, 0, "content type",
> > > +					 drm_content_type_enum_lis
> > > t,
> > > +					 ARRAY_SIZE(drm_content_ty
> > > pe_enum_list));
> > > +
> > > +	if (dev->mode_config.content_type_property == NULL)
> > > +		return -ENOMEM;
> > > +
> > > +	return 0;
> > > +}
> > > +EXPORT_SYMBOL(drm_mode_create_content_type_property);
> > 
> > Do we really need to export this? Drivers should only call
> > drm_connector_attach_content_type_property() I think ...
> 
> All of those property creation functions are exported, I was 
> just following those as example:
> 
> EXPORT_SYMBOL(drm_mode_create_tv_properties);
> EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
> EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
> 
> and so on. 
> 
> > 
> > > +
> > >  /**
> > >   * drm_mode_create_suggested_offset_properties - create suggests
> > > offset properties
> > >   * @dev: DRM device
> > > diff --git a/drivers/gpu/drm/drm_edid.c
> > > b/drivers/gpu/drm/drm_edid.c
> > > index 134069f36482..9ecda0b2a4d8 100644
> > > --- a/drivers/gpu/drm/drm_edid.c
> > > +++ b/drivers/gpu/drm/drm_edid.c
> > > @@ -4868,6 +4868,14 @@
> > > drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe
> > > *frame,
> > >  
> > >  	frame->picture_aspect = HDMI_PICTURE_ASPECT_NONE;
> > >  
> > > +	/*
> > > +	 * As some drivers don't support atomic, we can't use
> > > connector state.
> > > +	 * So just initialize the frame with default values, just
> > > the same way
> > > +	 * as it's done with other properties here.
> > > +	 */
> > > +	frame->content_type = HDMI_CONTENT_TYPE_GRAPHICS;
> > > +	frame->itc = 0;
> > > +
> > >  	/*
> > >  	 * Populate picture aspect ratio from either
> > >  	 * user input (if specified) or from the CEA mode list.
> > > @@ -4886,6 +4894,53 @@
> > > drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe
> > > *frame,
> > >  }
> > >  EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode);
> > >  
> > > +/**
> > > + * drm_hdmi_get_itc_bit_from_property() - get the HDMI IT content
> > > bit
> > > + *                                        from content type
> > > property.
> > > + * content_type: Content type DRM property value
> > > + *
> > > + */
> > > +bool
> > > +drm_hdmi_get_itc_bit_from_property(unsigned int content_type)
> > > +{
> > > +	/* Whenever something else than "No Data", IT Content bit
> > > must be set */
> > > +	return content_type != DRM_MODE_CONTENT_TYPE_NO_DATA ?
> > > true : false;
> > > +}
> > > +EXPORT_SYMBOL(drm_hdmi_get_itc_bit_from_property);
> > > +
> > > +/**
> > > + * drm_hdmi_get_content_type_from_property() - get the HDMI
> > > content type bits
> > > + *                                             from content type
> > > property.
> > > + * content_type: Content type DRM property value
> > > + *
> > > + */
> > > +enum hdmi_content_type
> > > +drm_hdmi_get_content_type_from_property(unsigned int content_type)
> > > +{
> > > +	enum hdmi_content_type ret;
> > > +
> > > +	switch (content_type) {
> > > +	case DRM_MODE_CONTENT_TYPE_GRAPHICS:
> > > +		ret = HDMI_CONTENT_TYPE_GRAPHICS;
> > > +		break;
> > > +	case DRM_MODE_CONTENT_TYPE_CINEMA:
> > > +		ret = HDMI_CONTENT_TYPE_CINEMA;
> > > +		break;
> > > +	case DRM_MODE_CONTENT_TYPE_GAME:
> > > +		ret = HDMI_CONTENT_TYPE_GAME;
> > > +		break;
> > > +	case DRM_MODE_CONTENT_TYPE_PHOTO:
> > > +		ret = HDMI_CONTENT_TYPE_PHOTO;
> > > +		break;
> > > +	default:
> > > +		/* Graphics is the default(0) */
> > > +		ret = HDMI_CONTENT_TYPE_GRAPHICS;
> > > +	}
> > > +	return ret;
> > > +}
> > > +EXPORT_SYMBOL(drm_hdmi_get_content_type_from_property);
> > > +
> > > +
> > >  /**
> > >   * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI
> > > infoframe
> > >   *                                        quantization range
> > > information
> > > diff --git a/include/drm/drm_connector.h
> > > b/include/drm/drm_connector.h
> > > index 675cc3f8cf85..178fa3f3f5f7 100644
> > > --- a/include/drm/drm_connector.h
> > > +++ b/include/drm/drm_connector.h
> > > @@ -418,6 +418,16 @@ struct drm_connector_state {
> > >  	 */
> > >  	enum hdmi_picture_aspect picture_aspect_ratio;
> > >  
> > > +
> > > +	/**
> > > +	 * @content_type: Connector property to control the
> > > +	 * HDMI infoframe content type setting.
> > > +	 * The %DRM_MODE_CONTENT_TYPE_\* values much
> > > +	 * match the values.
> > > +	 */
> > > +	unsigned int content_type;
> > > +
> > > +
> > >  	/**
> > >  	 * @scaling_mode: Connector property to control the
> > >  	 * upscaling, mostly used for built-in panels.
> > > @@ -1089,11 +1099,13 @@ int drm_mode_create_tv_properties(struct
> > > drm_device *dev,
> > >  				  unsigned int num_modes,
> > >  				  const char * const modes[]);
> > >  int drm_mode_create_scaling_mode_property(struct drm_device *dev);
> > > +int drm_connector_attach_content_type_property(struct
> > > drm_connector *dev);
> > >  int drm_connector_attach_scaling_mode_property(struct
> > > drm_connector *connector,
> > >  					       u32
> > > scaling_mode_mask);
> > >  int drm_connector_attach_content_protection_property(
> > >  		struct drm_connector *connector);
> > >  int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
> > > +int drm_mode_create_content_type_property(struct drm_device *dev);
> > >  int drm_mode_create_suggested_offset_properties(struct drm_device
> > > *dev);
> > >  
> > >  int drm_mode_connector_set_path_property(struct drm_connector
> > > *connector,
> > > diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
> > > index 8d89a9c3748d..4e264c4d8a9b 100644
> > > --- a/include/drm/drm_edid.h
> > > +++ b/include/drm/drm_edid.h
> > > @@ -350,6 +350,12 @@ drm_load_edid_firmware(struct drm_connector
> > > *connector)
> > >  }
> > >  #endif
> > >  
> > > +bool
> > > +drm_hdmi_get_itc_bit_from_property(unsigned int content_type);
> > > +
> > > +enum hdmi_content_type
> > > +drm_hdmi_get_content_type_from_property(unsigned int
> > > content_type);
> > > +
> > >  int
> > >  drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe
> > > *frame,
> > >  					 const struct
> > > drm_display_mode *mode,
> > > diff --git a/include/drm/drm_mode_config.h
> > > b/include/drm/drm_mode_config.h
> > > index 33b3a96d66d0..fb45839179dd 100644
> > > --- a/include/drm/drm_mode_config.h
> > > +++ b/include/drm/drm_mode_config.h
> > > @@ -726,6 +726,11 @@ struct drm_mode_config {
> > >  	 * HDMI infoframe aspect ratio setting.
> > >  	 */
> > >  	struct drm_property *aspect_ratio_property;
> > > +	/**
> > > +	 * @content_type_property: Optional connector property to
> > > control the
> > > +	 * HDMI infoframe content type setting.
> > > +	 */
> > > +	struct drm_property *content_type_property;
> > >  	/**
> > >  	 * @degamma_lut_property: Optional CRTC property to set
> > > the LUT used to
> > >  	 * convert the framebuffer's colors to linear gamma.
> > > diff --git a/include/uapi/drm/drm_mode.h
> > > b/include/uapi/drm/drm_mode.h
> > > index 50bcf4214ff9..cad9e09ffaee 100644
> > > --- a/include/uapi/drm/drm_mode.h
> > > +++ b/include/uapi/drm/drm_mode.h
> > > @@ -94,6 +94,13 @@ extern "C" {
> > >  #define DRM_MODE_PICTURE_ASPECT_4_3		1
> > >  #define DRM_MODE_PICTURE_ASPECT_16_9		2
> > >  
> > > +/* Content type options */
> > > +#define DRM_MODE_CONTENT_TYPE_NO_DATA		0
> > > +#define DRM_MODE_CONTENT_TYPE_GRAPHICS		1
> > > +#define DRM_MODE_CONTENT_TYPE_PHOTO		2
> > > +#define DRM_MODE_CONTENT_TYPE_CINEMA		3
> > > +#define DRM_MODE_CONTENT_TYPE_GAME		4
> > > +
> > >  /* Aspect ratio flag bitmask (4 bits 22:19) */
> > >  #define DRM_MODE_FLAG_PIC_AR_MASK		(0x0F<<19)
> > >  #define  DRM_MODE_FLAG_PIC_AR_NONE \
> > > -- 
> > > 2.17.0
> > > 
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > 
> > 
> -- 
> Best Regards,
> 
> Lisovskiy Stanislav

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

end of thread, other threads:[~2018-05-08  8:01 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-07 13:16 [PATCH v9 0/2] Enabling content-type setting for HDMI displays StanLis
2018-05-07 13:16 ` [PATCH v9 1/2] drm: content-type property for HDMI connector StanLis
2018-05-07 14:05   ` [Intel-gfx] " Daniel Vetter
2018-05-08  7:18     ` Lisovskiy, Stanislav
2018-05-08  8:01       ` Daniel Vetter
2018-05-07 13:16 ` [PATCH v9 2/2] i915: " StanLis
2018-05-07 13:39 ` ✗ Fi.CI.CHECKPATCH: warning for Enabling content-type setting for HDMI displays. (rev8) Patchwork
2018-05-07 13:56 ` ✓ Fi.CI.BAT: success " Patchwork
2018-05-07 15:18 ` ✓ Fi.CI.IGT: " Patchwork

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.