All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] Add lspcon support
@ 2016-03-22 14:25 Shashank Sharma
  2016-03-22 14:25 ` [PATCH 1/7] drm/i915: add lspcon vbt bit parsing Shashank Sharma
                   ` (8 more replies)
  0 siblings, 9 replies; 18+ messages in thread
From: Shashank Sharma @ 2016-03-22 14:25 UTC (permalink / raw)
  To: intel-gfx, daniel.vetter; +Cc: akashdeep.sharma

LSPCON is essentially an active DP-HDMI convertor. It has
two modes of operations:
- ls mode (for upto HDMI 1.4 outputs, 4k@30 resoution / 297MHz) 
- pcon mode (for upto HDMI 2.0 outputs, 4k@60 resolution / 600 MHz)

This patch set adds support for LS mode of operation for GEN9
platforms. It adds a new connector for lspcon, whcih is a mix
and match of DP and HDMI connectors, matching dual personality
of lspcon devices.

Notes:
- Daniel Vetter gave a review comment on LSPCON design, to make
  it a separate encoder. This patch set tries to match that expectations
  with a separate connector, as DDI encoder already fulfills all the
  requirements of a lspcon_encoder.
- This patch set tagrets LS mode of operations only.
- PCON mode of operation will be added later, based on the requirements.
  This is to primarily unbloc Linux devices with LSPCON port.
- This patch set is tested with BXT RVP + drm-nightly
- As we redesigned this code, to meet the review comments, this is a working
  patch set, but not upto commercial quality yet.

Shashank Sharma (7):
  drm/i915: add lspcon vbt bit parsing
  drm/i915: Add lspcon data structures
  drm/i915: Add new lspcon file
  drm/i915: Add and initialize lspcon connector
  drm/i915: Add and register lspcon connector functions
  drm/i915: Add lspcon core functions
  drm/i915: Add lspcon hpd handler

 drivers/gpu/drm/i915/Makefile         |   3 +-
 drivers/gpu/drm/i915/i915_drv.h       |   1 +
 drivers/gpu/drm/i915/intel_bios.c     |  42 +++
 drivers/gpu/drm/i915/intel_ddi.c      |   6 +
 drivers/gpu/drm/i915/intel_dp.c       |  31 ++
 drivers/gpu/drm/i915/intel_drv.h      |  35 +-
 drivers/gpu/drm/i915/intel_hdmi.c     |  25 +-
 drivers/gpu/drm/i915/intel_hotplug.c  |   2 +-
 drivers/gpu/drm/i915/intel_lspcon.c   | 620 ++++++++++++++++++++++++++++++++++
 drivers/gpu/drm/i915/intel_vbt_defs.h |   1 +
 10 files changed, 759 insertions(+), 7 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/intel_lspcon.c

-- 
1.9.1

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

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

* [PATCH 1/7] drm/i915: add lspcon vbt bit parsing
  2016-03-22 14:25 [PATCH 0/7] Add lspcon support Shashank Sharma
@ 2016-03-22 14:25 ` Shashank Sharma
  2016-03-22 15:54   ` Jani Nikula
  2016-03-22 14:25 ` [PATCH 2/7] drm/i915: Add lspcon data structures Shashank Sharma
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Shashank Sharma @ 2016-03-22 14:25 UTC (permalink / raw)
  To: intel-gfx, daniel.vetter; +Cc: akashdeep.sharma

LSPCON can be configured on a port using VBT entry.
This patch adds code to parse VBT and detect presence of
LSPCON for a ddi port.

Signed-off-by: Akashdeep Sharma <akashdeep.sharma@intel.com>
Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h       |  1 +
 drivers/gpu/drm/i915/intel_bios.c     | 42 +++++++++++++++++++++++++++++++++++
 drivers/gpu/drm/i915/intel_vbt_defs.h |  1 +
 3 files changed, 44 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index f330a53..cbd40de 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -3373,6 +3373,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
 bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
 bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port);
 bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port);
+bool intel_bios_is_lspcon_preset(struct drm_device *dev, enum port port);
 
 /* intel_opregion.c */
 #ifdef CONFIG_ACPI
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 083003b..a04ab5c 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1588,3 +1588,45 @@ bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv,
 
 	return false;
 }
+
+bool
+intel_bios_is_lspcon_preset(struct drm_device *dev, enum port port)
+{
+	unsigned char i;
+	enum port dvo_port = 0;
+	struct drm_i915_private *dev_priv = dev->dev_private;
+
+	/* LSPCON is supported only for GEN 9 */
+	if (!IS_GEN9(dev))
+		return false;
+
+	/* Check if lspcon is supported in VBT */
+	for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
+		if (!dev_priv->vbt.child_dev[i].common.lspcon)
+			continue;
+
+		switch (dev_priv->vbt.child_dev[i].common.dvo_port) {
+		case DVO_PORT_DPB:
+			dvo_port = PORT_B;
+			break;
+
+		case DVO_PORT_DPC:
+			dvo_port = PORT_C;
+			break;
+
+		case DVO_PORT_DPD:
+			dvo_port = PORT_D;
+			break;
+
+		default:
+			continue;
+		}
+
+		if (dvo_port == port) {
+			DRM_DEBUG_DRIVER("LSPCON configured on port %c\n",
+			port_name(port));
+			return true;
+		}
+	}
+	return false;
+}
diff --git a/drivers/gpu/drm/i915/intel_vbt_defs.h b/drivers/gpu/drm/i915/intel_vbt_defs.h
index 749dcea..0066b24 100644
--- a/drivers/gpu/drm/i915/intel_vbt_defs.h
+++ b/drivers/gpu/drm/i915/intel_vbt_defs.h
@@ -276,6 +276,7 @@ struct common_child_dev_config {
 	u8 flags_1;
 	u8 not_common3[13];
 	u8 iboost_level;
+	u8 lspcon:1;
 } __packed;
 
 
-- 
1.9.1

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

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

* [PATCH 2/7] drm/i915: Add lspcon data structures
  2016-03-22 14:25 [PATCH 0/7] Add lspcon support Shashank Sharma
  2016-03-22 14:25 ` [PATCH 1/7] drm/i915: add lspcon vbt bit parsing Shashank Sharma
@ 2016-03-22 14:25 ` Shashank Sharma
  2016-03-22 14:25 ` [PATCH 3/7] drm/i915: Add new lspcon file Shashank Sharma
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Shashank Sharma @ 2016-03-22 14:25 UTC (permalink / raw)
  To: intel-gfx, daniel.vetter; +Cc: akashdeep.sharma

This patch adds lspcon structure in intel_dig_port.
These strucres will be used to check runtime status
of LSPCON device.

Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
Signed-off-by: Akashdeep Sharma <akashdeep.sharma@intel.com>
---
 drivers/gpu/drm/i915/intel_drv.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 5136eef..f3e7e52 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -855,12 +855,28 @@ struct intel_dp {
 	bool compliance_test_active;
 };
 
+/* LSPCON possibe modes of operation */
+enum lspcon_mode {
+	/* Invalid */
+	lspcon_mode_invalid,
+	/* level shifter mode */
+	lspcon_mode_ls,
+	/* protocol converter mode */
+	lspcon_mode_pcon,
+};
+
+struct intel_lspcon {
+	bool active;
+	enum lspcon_mode mode_of_op;
+};
+
 struct intel_digital_port {
 	struct intel_encoder base;
 	enum port port;
 	u32 saved_port_bits;
 	struct intel_dp dp;
 	struct intel_hdmi hdmi;
+	struct intel_lspcon lspcon;
 	enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
 	bool release_cl2_override;
 	uint8_t max_lanes;
-- 
1.9.1

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

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

* [PATCH 3/7] drm/i915: Add new lspcon file
  2016-03-22 14:25 [PATCH 0/7] Add lspcon support Shashank Sharma
  2016-03-22 14:25 ` [PATCH 1/7] drm/i915: add lspcon vbt bit parsing Shashank Sharma
  2016-03-22 14:25 ` [PATCH 2/7] drm/i915: Add lspcon data structures Shashank Sharma
@ 2016-03-22 14:25 ` Shashank Sharma
  2016-03-22 14:25 ` [PATCH 4/7] drm/i915: Add and initialize lspcon connector Shashank Sharma
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Shashank Sharma @ 2016-03-22 14:25 UTC (permalink / raw)
  To: intel-gfx, daniel.vetter; +Cc: akashdeep.sharma

This patch adds a new file for lspcon with
some basic stuff like:
- Some read/wrire addresses for lspcon device
- Basic read/write functions, using i2c over aux channel
- Utility functions to get lspcon/encoder/connector

Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
Signed-off-by: Akashdeep Sharma <akashdeep.sharma@intel.com>
---
 drivers/gpu/drm/i915/Makefile       |   3 +-
 drivers/gpu/drm/i915/intel_lspcon.c | 114 ++++++++++++++++++++++++++++++++++++
 2 files changed, 116 insertions(+), 1 deletion(-)
 create mode 100644 drivers/gpu/drm/i915/intel_lspcon.c

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 5558a03..00a531a 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -90,7 +90,8 @@ i915-y += dvo_ch7017.o \
 	  intel_lvds.o \
 	  intel_panel.o \
 	  intel_sdvo.o \
-	  intel_tv.o
+	  intel_tv.o \
+	  intel_lspcon.o
 
 # virtual gpu code
 i915-y += i915_vgpu.o
diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
new file mode 100644
index 0000000..f5c91db
--- /dev/null
+++ b/drivers/gpu/drm/i915/intel_lspcon.c
@@ -0,0 +1,114 @@
+/*
+ * Copyright © 2016 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ * Shashank Sharma <shashank.sharma@intel.com>
+ * Akashdeep Sharma <akashdeep.sharma@intel.com>
+ *
+ */
+#include <drm/drm_edid.h>
+#include <drm/drm_atomic_helper.h>
+#include "intel_drv.h"
+
+#define LSPCON_I2C_ADDRESS			0x80
+#define LSPCON_MODE_CHANGE_OFFSET		0x40
+#define LSPCON_MODE_CHECK_OFFSET		0x41
+#define LSPCON_ADAPTER_SIGN_OFFSET		0x00
+#define LSPCON_IDENTIFIER_OFFSET		0x10
+#define LSPCON_IDENTIFIER_LENGTH		0x10
+#define LSPCON_ADAPTER				0xA8
+#define DP_TYPE2_ADAPTER			0xA0
+#define ADAPTER_TYPE_MASK			0xF0
+#define LSPCON_MODE_MASK			0x1
+
+struct intel_digital_port *lspcon_to_dig_port(struct intel_lspcon *lspcon)
+{
+	return container_of(lspcon, struct intel_digital_port, lspcon);
+}
+
+struct intel_hdmi *lspcon_to_hdmi(struct intel_lspcon *lspcon)
+{
+	return &lspcon_to_dig_port(lspcon)->hdmi;
+}
+
+struct intel_lspcon *enc_to_lspcon(struct drm_encoder *encoder)
+{
+	struct intel_digital_port *intel_dig_port =
+		container_of(encoder, struct intel_digital_port, base.base);
+	return &intel_dig_port->lspcon;
+}
+
+int lspcon_ioa_read(struct i2c_adapter *adapter, u8 *buffer,
+		u8 address, u8 offset, u8 no_of_bytes)
+{
+	int err = 0;
+
+	struct i2c_msg msgs[] = {
+			{
+				.addr	= address >> 1,
+				.flags	= 0,
+				.len	= 1,
+				.buf	= &offset,
+			}, {
+				.addr	= address >> 1,
+				.flags	= I2C_M_RD,
+				.len	= no_of_bytes,
+				.buf	= buffer,
+			}
+	};
+
+	/* I2C over AUX here */
+	err = adapter->algo->master_xfer(adapter, msgs, 2);
+	if (err < 0)
+		DRM_ERROR("LSPCON: Failed I2C over Aux read(addr=0x%x)\n",
+				(unsigned int)offset);
+
+	return err;
+}
+
+int lspcon_ioa_write(struct i2c_adapter *adapter, u8 *buffer,
+		u8 address, u8 offset, u8 no_of_bytes)
+{
+	int err = 0;
+
+	struct i2c_msg msgs[] = {
+			{
+				.addr   = address >> 1,
+				.flags  = 0,
+				.len    = 1,
+				.buf    = &offset,
+			}, {
+				.addr   = address >> 1,
+				.flags  = 0,
+				.len    = no_of_bytes,
+				.buf    = buffer,
+			}
+	};
+
+	/* I2C over AUX here */
+	err = adapter->algo->master_xfer(adapter, msgs, 2);
+	if (err < 0)
+		DRM_ERROR("LSPCON: Failed I2C over Aux write(addr=0x%x)\n",
+				(unsigned int)offset);
+
+	return err;
+}
-- 
1.9.1

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

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

* [PATCH 4/7] drm/i915: Add and initialize lspcon connector
  2016-03-22 14:25 [PATCH 0/7] Add lspcon support Shashank Sharma
                   ` (2 preceding siblings ...)
  2016-03-22 14:25 ` [PATCH 3/7] drm/i915: Add new lspcon file Shashank Sharma
@ 2016-03-22 14:25 ` Shashank Sharma
  2016-03-22 14:25 ` [PATCH 5/7] drm/i915: Add and register lspcon connector functions Shashank Sharma
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Shashank Sharma @ 2016-03-22 14:25 UTC (permalink / raw)
  To: intel-gfx, daniel.vetter; +Cc: akashdeep.sharma

lspcon is a tricky device which acts as DP in some cases
and as HDMI in some. Here is how:
- lspcon needs DP for all the i2c_ove_aux read/write transitions
  so it needs to have some DP level initializations
- lspcon is detected by userspace/sink as HDMI device, so
  it needs to be detectd as HDMI device.

This patch adds a custom connector for lspcon device, which
can pick and chose what it wants from existing functionality.

This patch also adds functions to init dp and hdmi to the
minimum need, and then play around with them.

Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
---
 drivers/gpu/drm/i915/intel_ddi.c    |  6 ++++
 drivers/gpu/drm/i915/intel_dp.c     | 31 ++++++++++++++++
 drivers/gpu/drm/i915/intel_drv.h    |  8 +++++
 drivers/gpu/drm/i915/intel_hdmi.c   | 17 +++++++++
 drivers/gpu/drm/i915/intel_lspcon.c | 72 +++++++++++++++++++++++++++++++++++++
 5 files changed, 134 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 91654ff..f68c257 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2169,6 +2169,12 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
 	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
 	intel_encoder->cloneable = 0;
 
+	/* Check if LSPCON is configured on this port */
+	if (intel_bios_is_lspcon_preset(dev, intel_dig_port->port)) {
+		intel_lspcon_init_connector(intel_dig_port);
+		return;
+	}
+
 	if (init_dp) {
 		if (!intel_ddi_init_dp_connector(intel_dig_port))
 			goto err;
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 3ff8f1d..6005c26 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -5895,6 +5895,37 @@ fail:
 	return false;
 }
 
+int intel_dp_init_minimum(struct intel_digital_port *intel_dig_port,
+	struct intel_connector *intel_connector)
+{
+	int ret;
+	enum port port = intel_dig_port->port;
+	struct intel_dp *intel_dp = &intel_dig_port->dp;
+	struct drm_device *dev = intel_dig_port->base.base.dev;
+	struct drm_i915_private *dev_priv = dev->dev_private;
+
+	intel_dig_port->dp.output_reg = DDI_BUF_CTL(port);
+	if (WARN(intel_dig_port->max_lanes < 1,
+		 "Not enough lanes (%d) for DP on port %c\n",
+		 intel_dig_port->max_lanes, port_name(port)))
+		return -EINVAL;
+
+	intel_dp->pps_pipe = INVALID_PIPE;
+	intel_dp->get_aux_clock_divider = skl_get_aux_clock_divider;
+	intel_dp->get_aux_send_ctl = skl_get_aux_send_ctl;
+	intel_dp->prepare_link_retrain = intel_ddi_prepare_link_retrain;
+	intel_dp->DP = I915_READ(intel_dp->output_reg);
+	intel_dp->attached_connector = intel_connector;
+	INIT_DELAYED_WORK(&intel_dp->panel_vdd_work,
+			  edp_panel_vdd_work);
+
+	ret = intel_dp_aux_init(intel_dp, intel_connector);
+	if (ret)
+		DRM_ERROR("Aux init for LSPCON failed\n");
+
+	return ret;
+}
+
 void
 intel_dp_init(struct drm_device *dev,
 	      i915_reg_t output_reg, enum port port)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index f3e7e52..09273d5 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1327,6 +1327,9 @@ void intel_dp_compute_rate(struct intel_dp *intel_dp, int port_clock,
 bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp);
 bool
 intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE]);
+int intel_dp_init_minimum(struct intel_digital_port *intel_dig_port,
+		struct intel_connector *intel_connector);
+
 
 /* intel_dp_mst.c */
 int intel_dp_mst_encoder_init(struct intel_digital_port *intel_dig_port, int conn_id);
@@ -1339,6 +1342,9 @@ void intel_dsi_init(struct drm_device *dev);
 void intel_dvo_init(struct drm_device *dev);
 
 
+/* intel_lspcon.c */
+void intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port);
+
 /* legacy fbdev emulation in intel_fbdev.c */
 #ifdef CONFIG_DRM_FBDEV_EMULATION
 extern int intel_fbdev_init(struct drm_device *dev);
@@ -1392,6 +1398,8 @@ void intel_fbc_cleanup_cfb(struct drm_i915_private *dev_priv);
 void intel_hdmi_init(struct drm_device *dev, i915_reg_t hdmi_reg, enum port port);
 void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
 			       struct intel_connector *intel_connector);
+int intel_hdmi_init_minimum(struct intel_digital_port *intel_dig_port,
+				struct intel_connector *intel_connector);
 struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder);
 bool intel_hdmi_compute_config(struct intel_encoder *encoder,
 			       struct intel_crtc_state *pipe_config);
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index e2dab48..9fcbbdf 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -2035,6 +2035,23 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c
 	intel_hdmi->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
 }
 
+int intel_hdmi_init_minimum(struct intel_digital_port *intel_dig_port,
+			       struct intel_connector *intel_connector)
+{
+	struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi;
+
+	if (WARN(intel_dig_port->max_lanes < 4,
+		"Not enough lanes (%d) for HDMI on port %c\n",
+		intel_dig_port->max_lanes, port_name(intel_dig_port->port)))
+		return -EINVAL;
+
+	intel_hdmi->write_infoframe = hsw_write_infoframe;
+	intel_hdmi->set_infoframes = hsw_set_infoframes;
+	intel_hdmi->infoframe_enabled = hsw_infoframe_enabled;
+	intel_hdmi->attached_connector = intel_connector;
+	return 0;
+}
+
 void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
 			       struct intel_connector *intel_connector)
 {
diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
index f5c91db..9d5ed0c 100644
--- a/drivers/gpu/drm/i915/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/intel_lspcon.c
@@ -112,3 +112,75 @@ int lspcon_ioa_write(struct i2c_adapter *adapter, u8 *buffer,
 
 	return err;
 }
+
+void intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port)
+{
+	struct intel_encoder *intel_encoder = &intel_dig_port->base;
+	struct drm_device *dev = intel_encoder->base.dev;
+	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct intel_connector *intel_connector;
+	struct drm_connector *connector;
+	enum port port = intel_dig_port->port;
+
+	intel_connector = intel_connector_alloc();
+	if (!intel_connector)
+		return;
+
+	connector = &intel_connector->base;
+	connector->interlace_allowed = true;
+	connector->doublescan_allowed = 0;
+
+	/* init DP */
+	if (intel_dp_init_minimum(intel_dig_port, intel_connector)) {
+		DRM_ERROR("DP init for LSPCON failed\n");
+		return;
+	}
+
+	/* init HDMI */
+	if (intel_hdmi_init_minimum(intel_dig_port, intel_connector)) {
+		DRM_ERROR("HDMI init for LSPCON failed\n");
+		return;
+	}
+
+	/* Set up the hotplug pin. */
+	switch (port) {
+	case PORT_A:
+		intel_encoder->hpd_pin = HPD_PORT_A;
+		break;
+	case PORT_B:
+		intel_encoder->hpd_pin = HPD_PORT_B;
+		if (IS_BXT_REVID(dev, 0, BXT_REVID_A1))
+			intel_encoder->hpd_pin = HPD_PORT_A;
+		break;
+	case PORT_C:
+		intel_encoder->hpd_pin = HPD_PORT_C;
+		break;
+	case PORT_D:
+		intel_encoder->hpd_pin = HPD_PORT_D;
+		break;
+	case PORT_E:
+		intel_encoder->hpd_pin = HPD_PORT_E;
+		break;
+	default:
+		BUG();
+	}
+
+	/*
+	 * On BXT A0/A1, sw needs to activate DDIA HPD logic and
+	 * interrupts to check the external panel connection.
+	 */
+	if (IS_BXT_REVID(dev, 0, BXT_REVID_A1) && port == PORT_B)
+		dev_priv->hotplug.irq_port[PORT_A] = intel_dig_port;
+	else
+		dev_priv->hotplug.irq_port[port] = intel_dig_port;
+
+	/* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written
+	 * 0xd.  Failure to do so will result in spurious interrupts being
+	 * generated on the port when a cable is not attached.
+	 */
+	if (IS_G4X(dev) && !IS_GM45(dev)) {
+		u32 temp = I915_READ(PEG_BAND_GAP_DATA);
+
+		I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd);
+	}
+}
-- 
1.9.1

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

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

* [PATCH 5/7] drm/i915: Add and register lspcon connector functions
  2016-03-22 14:25 [PATCH 0/7] Add lspcon support Shashank Sharma
                   ` (3 preceding siblings ...)
  2016-03-22 14:25 ` [PATCH 4/7] drm/i915: Add and initialize lspcon connector Shashank Sharma
@ 2016-03-22 14:25 ` Shashank Sharma
  2016-03-22 14:25 ` [PATCH 6/7] drm/i915: Add lspcon core functions Shashank Sharma
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Shashank Sharma @ 2016-03-22 14:25 UTC (permalink / raw)
  To: intel-gfx, daniel.vetter; +Cc: akashdeep.sharma

This patch adds various lspcon connector functions. Some
of the functions are newly written, to meet the specific
needs of lspcon HW, whereas few of them are just an
abstraction layer on existing HDMI connector functions.

Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
---
 drivers/gpu/drm/i915/intel_drv.h     |  11 +-
 drivers/gpu/drm/i915/intel_hdmi.c    |   8 +-
 drivers/gpu/drm/i915/intel_hotplug.c |   2 +-
 drivers/gpu/drm/i915/intel_lspcon.c  | 238 ++++++++++++++++++++++++++++++++++-
 4 files changed, 251 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 09273d5..7b19a2c 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1403,7 +1403,12 @@ int intel_hdmi_init_minimum(struct intel_digital_port *intel_dig_port,
 struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder);
 bool intel_hdmi_compute_config(struct intel_encoder *encoder,
 			       struct intel_crtc_state *pipe_config);
-
+int intel_hdmi_get_modes(struct drm_connector *connector);
+int intel_hdmi_set_property(struct drm_connector *connector,
+		struct drm_property *property, uint64_t val);
+void intel_hdmi_destroy(struct drm_connector *connector);
+void intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi,
+		struct drm_connector *connector);
 
 /* intel_lvds.c */
 void intel_lvds_init(struct drm_device *dev);
@@ -1492,6 +1497,10 @@ bool intel_display_power_get_if_enabled(struct drm_i915_private *dev_priv,
 void intel_display_power_put(struct drm_i915_private *dev_priv,
 			     enum intel_display_power_domain domain);
 
+/* intel_hotplug.c */
+bool intel_hpd_irq_event(struct drm_device *dev,
+		struct drm_connector *connector);
+
 static inline void
 assert_rpm_device_not_suspended(struct drm_i915_private *dev_priv)
 {
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 9fcbbdf..b67bb30 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1447,7 +1447,7 @@ intel_hdmi_force(struct drm_connector *connector)
 	hdmi_to_dig_port(intel_hdmi)->base.type = INTEL_OUTPUT_HDMI;
 }
 
-static int intel_hdmi_get_modes(struct drm_connector *connector)
+int intel_hdmi_get_modes(struct drm_connector *connector)
 {
 	struct edid *edid;
 
@@ -1471,7 +1471,7 @@ intel_hdmi_detect_audio(struct drm_connector *connector)
 	return has_audio;
 }
 
-static int
+int
 intel_hdmi_set_property(struct drm_connector *connector,
 			struct drm_property *property,
 			uint64_t val)
@@ -1996,7 +1996,7 @@ static void chv_hdmi_pre_enable(struct intel_encoder *encoder)
 	}
 }
 
-static void intel_hdmi_destroy(struct drm_connector *connector)
+void intel_hdmi_destroy(struct drm_connector *connector)
 {
 	kfree(to_intel_connector(connector)->detect_edid);
 	drm_connector_cleanup(connector);
@@ -2025,7 +2025,7 @@ static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
 	.destroy = intel_encoder_destroy,
 };
 
-static void
+void
 intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *connector)
 {
 	intel_attach_force_audio_property(connector);
diff --git a/drivers/gpu/drm/i915/intel_hotplug.c b/drivers/gpu/drm/i915/intel_hotplug.c
index bee6730..11a3e02 100644
--- a/drivers/gpu/drm/i915/intel_hotplug.c
+++ b/drivers/gpu/drm/i915/intel_hotplug.c
@@ -226,7 +226,7 @@ static void intel_hpd_irq_storm_reenable_work(struct work_struct *work)
 	intel_runtime_pm_put(dev_priv);
 }
 
-static bool intel_hpd_irq_event(struct drm_device *dev,
+bool intel_hpd_irq_event(struct drm_device *dev,
 				struct drm_connector *connector)
 {
 	enum drm_connector_status old_status;
diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
index 9d5ed0c..e64abd3 100644
--- a/drivers/gpu/drm/i915/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/intel_lspcon.c
@@ -39,6 +39,8 @@
 #define DP_TYPE2_ADAPTER			0xA0
 #define ADAPTER_TYPE_MASK			0xF0
 #define LSPCON_MODE_MASK			0x1
+#define DDC_SEGMENT_ADDR			0x30
+#define DDC_ADDR				0x50
 
 struct intel_digital_port *lspcon_to_dig_port(struct intel_lspcon *lspcon)
 {
@@ -57,6 +59,11 @@ struct intel_lspcon *enc_to_lspcon(struct drm_encoder *encoder)
 	return &intel_dig_port->lspcon;
 }
 
+struct intel_lspcon *intel_attached_lspcon(struct drm_connector *connector)
+{
+	return enc_to_lspcon(&intel_attached_encoder(connector)->base);
+}
+
 int lspcon_ioa_read(struct i2c_adapter *adapter, u8 *buffer,
 		u8 address, u8 offset, u8 no_of_bytes)
 {
@@ -113,6 +120,214 @@ int lspcon_ioa_write(struct i2c_adapter *adapter, u8 *buffer,
 	return err;
 }
 
+static int lspcon_get_edid_over_aux(void *data,
+	u8 *buf, unsigned int block, size_t len)
+{
+	struct i2c_adapter *adapter = data;
+	unsigned char start = block * EDID_LENGTH;
+	unsigned char segment = block >> 1;
+	unsigned char xfers = segment ? 3 : 2;
+	int ret, retries = 5;
+
+	do {
+		struct i2c_msg msgs[] = {
+			{
+				.addr   = DDC_SEGMENT_ADDR,
+				.flags  = 0,
+				.len    = 1,
+				.buf    = &segment,
+			}, {
+				.addr   = DDC_ADDR,
+				.flags  = 0,
+				.len    = 1,
+				.buf    = &start,
+			}, {
+				.addr   = DDC_ADDR,
+				.flags  = I2C_M_RD,
+				.len    = len,
+				.buf    = buf,
+			}
+		};
+
+		ret = adapter->algo->master_xfer(adapter, &msgs[3 - xfers],
+						xfers);
+
+		if (ret == -ENXIO) {
+			DRM_ERROR("Non-existent adapter %s\n",
+				adapter->name);
+			break;
+		}
+	} while (ret != xfers && --retries);
+
+	return ret == xfers ? 0 : -1;
+}
+
+struct edid *lspcon_get_edid(struct intel_lspcon *lspcon, struct drm_connector
+						*connector)
+{
+	struct edid *edid = NULL;
+	struct intel_digital_port *dig_port = lspcon_to_dig_port(lspcon);
+	struct i2c_adapter *adapter = &dig_port->dp.aux.ddc;
+
+	if (lspcon->mode_of_op != lspcon_mode_ls) {
+		DRM_ERROR("Cant read EDID without current mode info\n");
+		return false;
+	}
+
+	/* LS mode, getting EDID using I2C over Aux */
+	edid = drm_do_get_edid(connector, lspcon_get_edid_over_aux,
+			(void *)adapter);
+	return edid;
+}
+
+static void
+lspcon_unset_edid(struct drm_connector *connector)
+{
+	struct intel_lspcon *lspcon = intel_attached_lspcon(connector);
+	struct intel_hdmi *intel_hdmi = lspcon_to_hdmi(lspcon);
+
+	intel_hdmi->has_hdmi_sink = false;
+	intel_hdmi->has_audio = false;
+	intel_hdmi->rgb_quant_range_selectable = false;
+
+	kfree(to_intel_connector(connector)->detect_edid);
+	to_intel_connector(connector)->detect_edid = NULL;
+}
+
+static bool
+lspcon_set_edid(struct drm_connector *connector, bool force)
+{
+	struct drm_i915_private *dev_priv = to_i915(connector->dev);
+	struct intel_lspcon *lspcon = intel_attached_lspcon(connector);
+	struct intel_hdmi *intel_hdmi = lspcon_to_hdmi(lspcon);
+	struct edid *edid = NULL;
+	bool connected = false;
+
+	if (force) {
+		intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
+		edid = lspcon_get_edid(lspcon, connector);
+		intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);
+	}
+
+	to_intel_connector(connector)->detect_edid = edid;
+	if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) {
+		intel_hdmi->rgb_quant_range_selectable =
+			drm_rgb_quant_range_selectable(edid);
+
+		intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
+		if (intel_hdmi->force_audio != HDMI_AUDIO_AUTO)
+			intel_hdmi->has_audio =
+				intel_hdmi->force_audio == HDMI_AUDIO_ON;
+
+		if (intel_hdmi->force_audio != HDMI_AUDIO_OFF_DVI)
+			intel_hdmi->has_hdmi_sink =
+				drm_detect_hdmi_monitor(edid);
+
+		connected = true;
+	}
+	return connected;
+}
+
+static enum drm_connector_status
+lspcon_detect(struct drm_connector *connector, bool force)
+{
+	enum drm_connector_status status;
+	struct drm_i915_private *dev_priv = to_i915(connector->dev);
+	struct intel_lspcon *lspcon = intel_attached_lspcon(connector);
+	struct intel_hdmi *intel_hdmi = lspcon_to_hdmi(lspcon);
+
+	DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
+		      connector->base.id, connector->name);
+	intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
+
+	lspcon_unset_edid(connector);
+	if (lspcon_set_edid(connector, true)) {
+		DRM_DEBUG_DRIVER("HDMI connected\n");
+		hdmi_to_dig_port(intel_hdmi)->base.type = INTEL_OUTPUT_HDMI;
+		status = connector_status_connected;
+	} else {
+		DRM_DEBUG_DRIVER("HDMI disconnected\n");
+		status = connector_status_disconnected;
+	}
+	intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);
+	return status;
+}
+
+static int
+lspcon_set_property(struct drm_connector *connector,
+			struct drm_property *property,
+			uint64_t val)
+{
+	return intel_hdmi_set_property(connector, property, val);
+}
+
+static int
+lspcon_get_modes(struct drm_connector *connector)
+{
+	return intel_hdmi_get_modes(connector);
+}
+
+static void
+lspcon_destroy(struct drm_connector *connector)
+{
+	intel_hdmi_destroy(connector);
+}
+
+static enum drm_mode_status
+lspcon_mode_valid(struct drm_connector *connector,
+		      struct drm_display_mode *mode)
+{
+	int clock = mode->clock;
+	int max_dotclk = 675000; /* 4k@60 */
+	struct drm_device *dev = connector->dev;
+
+	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
+		return MODE_NO_DBLESCAN;
+
+	if ((mode->flags & DRM_MODE_FLAG_3D_MASK) ==
+		DRM_MODE_FLAG_3D_FRAME_PACKING)
+		clock *= 2;
+
+	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
+		clock *= 2;
+
+	if (clock < 25000)
+		return MODE_CLOCK_LOW;
+
+	if (clock > max_dotclk)
+		return MODE_CLOCK_HIGH;
+
+	/* BXT DPLL can't generate 223-240 MHz */
+	if (IS_BROXTON(dev) && clock > 223333 && clock < 240000)
+		return MODE_CLOCK_RANGE;
+
+	/* todo: check for 12bpc here */
+	return MODE_OK;
+}
+
+void lspcon_add_properties(struct intel_digital_port *dig_port,
+		struct drm_connector *connector)
+{
+	intel_hdmi_add_properties(&dig_port->hdmi, connector);
+}
+
+static const struct drm_connector_funcs lspcon_connector_funcs = {
+	.dpms = drm_atomic_helper_connector_dpms,
+	.detect = lspcon_detect,
+	.fill_modes = drm_helper_probe_single_connector_modes,
+	.set_property = lspcon_set_property,
+	.atomic_get_property = intel_connector_atomic_get_property,
+	.destroy = lspcon_destroy,
+	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
+	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+};
+
+static const struct drm_connector_helper_funcs lspcon_connector_helper_funcs = {
+	.get_modes = lspcon_get_modes,
+	.mode_valid = lspcon_mode_valid,
+	.best_encoder = intel_best_encoder,
+};
+
 void intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port)
 {
 	struct intel_encoder *intel_encoder = &intel_dig_port->base;
@@ -130,16 +345,28 @@ void intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port)
 	connector->interlace_allowed = true;
 	connector->doublescan_allowed = 0;
 
+	/* Load connector */
+	drm_connector_init(dev, connector, &lspcon_connector_funcs,
+			DRM_MODE_CONNECTOR_DisplayPort);
+	drm_connector_helper_add(connector, &lspcon_connector_helper_funcs);
+	intel_connector_attach_encoder(intel_connector, intel_encoder);
+	drm_connector_register(connector);
+
+	/* Add properties and functions */
+	lspcon_add_properties(intel_dig_port, connector);
+	intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
+	i915_debugfs_connector_add(connector);
+
 	/* init DP */
 	if (intel_dp_init_minimum(intel_dig_port, intel_connector)) {
 		DRM_ERROR("DP init for LSPCON failed\n");
-		return;
+		goto fail;
 	}
 
 	/* init HDMI */
 	if (intel_hdmi_init_minimum(intel_dig_port, intel_connector)) {
 		DRM_ERROR("HDMI init for LSPCON failed\n");
-		return;
+		goto fail;
 	}
 
 	/* Set up the hotplug pin. */
@@ -183,4 +410,11 @@ void intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port)
 
 		I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd);
 	}
+
+	DRM_DEBUG_DRIVER("LSPCON connector init done\n");
+	return;
+
+fail:
+	drm_connector_unregister(connector);
+	drm_connector_cleanup(connector);
 }
-- 
1.9.1

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

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

* [PATCH 6/7] drm/i915: Add lspcon core functions
  2016-03-22 14:25 [PATCH 0/7] Add lspcon support Shashank Sharma
                   ` (4 preceding siblings ...)
  2016-03-22 14:25 ` [PATCH 5/7] drm/i915: Add and register lspcon connector functions Shashank Sharma
@ 2016-03-22 14:25 ` Shashank Sharma
  2016-03-22 14:25 ` [PATCH 7/7] drm/i915: Add lspcon hpd handler Shashank Sharma
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Shashank Sharma @ 2016-03-22 14:25 UTC (permalink / raw)
  To: intel-gfx, daniel.vetter; +Cc: akashdeep.sharma

This patch adds lspcon's internal functions, which work
on the probe layer, and indicate the working status of
lspcon, which are mostly:

probe: A lspcon device is probed only once, during boot
time, as its always present with the device, next to port.
So the i2c_over_aux channel is alwyas read/writeable if DC is
powered on. If VBT says that this port contains lspcon, we
check and probe the HW to verify and initialize it.

get_mode: This function indicates the current mode of operation
of lspcon (ls or pcon mode)

change_mode: This function can change the lspcon's mode of
operation to desired mode.

Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
Signed-off-by: Akashdeep Sharma <Akashdeep.sharma@intel.com>
---
 drivers/gpu/drm/i915/intel_lspcon.c | 165 ++++++++++++++++++++++++++++++++++++
 1 file changed, 165 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
index e64abd3..6ef320b 100644
--- a/drivers/gpu/drm/i915/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/intel_lspcon.c
@@ -120,6 +120,164 @@ int lspcon_ioa_write(struct i2c_adapter *adapter, u8 *buffer,
 	return err;
 }
 
+enum lspcon_mode lspcon_get_current_mode(struct intel_lspcon *lspcon)
+{
+	u8 data;
+	int err = 0;
+	struct intel_digital_port *dig_port = lspcon_to_dig_port(lspcon);
+	struct i2c_adapter *adapter = &dig_port->dp.aux.ddc;
+
+	/* Read Status: i2c over aux */
+	err = lspcon_ioa_read(adapter, &data, LSPCON_I2C_ADDRESS,
+			LSPCON_MODE_CHECK_OFFSET, 1);
+	if (err < 0) {
+		DRM_ERROR("LSPCON read mode ioa (0x80, 0x41) failed\n");
+		return lspcon_mode_invalid;
+	}
+
+	DRM_DEBUG_DRIVER("LSPCON mode (0x80, 0x41) = %x\n", (unsigned int)data);
+	return data & LSPCON_MODE_MASK ? lspcon_mode_pcon : lspcon_mode_ls;
+}
+
+int lspcon_change_mode(struct intel_lspcon *lspcon,
+	enum lspcon_mode mode, bool force)
+{
+	u8 data;
+	int err;
+	int time_out = 200;
+	enum lspcon_mode current_mode;
+	struct intel_digital_port *dig_port = lspcon_to_dig_port(lspcon);
+
+	current_mode = lspcon_get_current_mode(lspcon);
+	if (current_mode == lspcon_mode_invalid) {
+		DRM_ERROR("Failed to get current LSPCON mode\n");
+		return -EFAULT;
+	}
+
+	if (current_mode == mode && !force) {
+		DRM_DEBUG_DRIVER("Current mode = desired LSPCON mode\n");
+		return 0;
+	}
+
+	if (mode == lspcon_mode_ls)
+		data = ~LSPCON_MODE_MASK;
+	else
+		data = LSPCON_MODE_MASK;
+
+	/* Change mode */
+	err = lspcon_ioa_write(&dig_port->dp.aux.ddc, &data, LSPCON_I2C_ADDRESS,
+			LSPCON_MODE_CHANGE_OFFSET, 1);
+	if (err < 0) {
+		DRM_ERROR("LSPCON mode change failed\n");
+		return err;
+	}
+
+	/*
+	* Confirm mode change by reading the status bit.
+	* Sometimes, it takes a while to change the mode,
+	* so wait and retry until time out or done.
+	*/
+	while (time_out) {
+		current_mode = lspcon_get_current_mode(lspcon);
+		if (current_mode != mode) {
+			mdelay(10);
+			time_out -= 10;
+		} else {
+			lspcon->mode_of_op = mode;
+			DRM_DEBUG_DRIVER("LSPCON mode changed to %s\n",
+				mode == lspcon_mode_ls ? "LS" : "PCON");
+			return 0;
+		}
+	}
+
+	DRM_ERROR("LSPCON mode change timed out\n");
+	return -EFAULT;
+}
+
+bool lspcon_detect_identifier(struct intel_lspcon *lspcon)
+{
+	int err = 0;
+	u8 sign[LSPCON_IDENTIFIER_LENGTH + 1] = {'\0', };
+	struct intel_digital_port *dig_port = lspcon_to_dig_port(lspcon);
+	struct i2c_adapter *adapter = &dig_port->dp.aux.ddc;
+
+	/*
+	 * Identifier: First 15 bytes are ascii for "DP-HDMI ADAPTOR". The 16th
+	 * byte defines if thats a LSPCON or any other dongle. If byte 16 =0xa8
+	 * its LSPCON
+	 */
+
+	/* Read 16 bytes from I2C reg 0x80, offset 0x0 I2C-over-aux */
+	err = lspcon_ioa_read(adapter, sign, LSPCON_I2C_ADDRESS,
+			LSPCON_ADAPTER_SIGN_OFFSET, LSPCON_IDENTIFIER_LENGTH);
+	if (err < 0) {
+		DRM_ERROR("Error reading lspcon sign (0x80, 0x0)\n");
+		return false;
+	}
+
+	/* Check sign */
+	if (strncmp((void *)sign, "DP-HDMI ADAPTOR",
+		LSPCON_IDENTIFIER_LENGTH - 1)) {
+		DRM_ERROR("Cant detect adaptor sign, its %s\n", sign);
+		return false;
+	}
+
+	/* Identify LSPCON */
+	if (sign[LSPCON_IDENTIFIER_OFFSET] != LSPCON_ADAPTER) {
+		DRM_ERROR("Found non LSPCON adaptor\n");
+		return false;
+	}
+
+	/* yay ... found a LSPCON */
+	DRM_DEBUG_DRIVER("LSPCON adaptor detected\n");
+	return true;
+}
+
+enum lspcon_mode lspcon_probe(struct intel_lspcon *lspcon)
+{
+	enum lspcon_mode current_mode;
+
+	/* Detect a valid lspcon */
+	if (!lspcon_detect_identifier(lspcon)) {
+		DRM_DEBUG_DRIVER("Failed to find LSPCON identifier\n");
+		return false;
+	}
+
+	/* LSPCON's mode of operation */
+	current_mode = lspcon_get_current_mode(lspcon);
+	if (current_mode == lspcon_mode_invalid) {
+		DRM_ERROR("Failed to read LSPCON mode\n");
+		return false;
+	}
+
+	/* All is well */
+	lspcon->mode_of_op = current_mode;
+	lspcon->active = true;
+	return current_mode;
+}
+
+bool lspcon_device_init(struct intel_lspcon *lspcon)
+{
+
+	/* Lets check LSPCON now, probe the HW status */
+	lspcon->active = false;
+	lspcon->mode_of_op = lspcon_mode_invalid;
+	if (!lspcon_probe(lspcon)) {
+		DRM_ERROR("Failed to probe lspcon");
+		return false;
+	}
+
+	/* We wish to keep LSPCON in LS mode */
+	if (lspcon->active && lspcon->mode_of_op != lspcon_mode_ls) {
+		if (lspcon_change_mode(lspcon, lspcon_mode_ls, true) < 0) {
+			DRM_ERROR("LSPCON mode change to LS failed\n");
+			return false;
+		}
+	}
+	DRM_DEBUG_DRIVER("LSPCON init success\n");
+	return true;
+}
+
 static int lspcon_get_edid_over_aux(void *data,
 	u8 *buf, unsigned int block, size_t len)
 {
@@ -333,6 +491,7 @@ void intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port)
 	struct intel_encoder *intel_encoder = &intel_dig_port->base;
 	struct drm_device *dev = intel_encoder->base.dev;
 	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct intel_lspcon *lspcon = &intel_dig_port->lspcon;
 	struct intel_connector *intel_connector;
 	struct drm_connector *connector;
 	enum port port = intel_dig_port->port;
@@ -411,6 +570,12 @@ void intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port)
 		I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd);
 	}
 
+	/* Now initialize the LSPCON device */
+	if (!lspcon_device_init(lspcon)) {
+		DRM_ERROR("LSPCON device init failed\n");
+		goto fail;
+	}
+
 	DRM_DEBUG_DRIVER("LSPCON connector init done\n");
 	return;
 
-- 
1.9.1

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

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

* [PATCH 7/7] drm/i915: Add lspcon hpd handler
  2016-03-22 14:25 [PATCH 0/7] Add lspcon support Shashank Sharma
                   ` (5 preceding siblings ...)
  2016-03-22 14:25 ` [PATCH 6/7] drm/i915: Add lspcon core functions Shashank Sharma
@ 2016-03-22 14:25 ` Shashank Sharma
  2016-03-22 16:20 ` [PATCH 0/7] Add lspcon support Ville Syrjälä
  2016-03-22 16:32 ` ✗ Fi.CI.BAT: warning for " Patchwork
  8 siblings, 0 replies; 18+ messages in thread
From: Shashank Sharma @ 2016-03-22 14:25 UTC (permalink / raw)
  To: intel-gfx, daniel.vetter; +Cc: akashdeep.sharma

This patch adds a new hpd handler for lspcon.
As lspcon has its own way of reading EDID and detecting
the device, it wont be efficient to use the existing hpd
functions to handle the hot_plug scenarios. This new function
reads the EDID and checks the status of the sink device.

Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
---
 drivers/gpu/drm/i915/intel_lspcon.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
index 6ef320b..0c064b9 100644
--- a/drivers/gpu/drm/i915/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/intel_lspcon.c
@@ -278,6 +278,38 @@ bool lspcon_device_init(struct intel_lspcon *lspcon)
 	return true;
 }
 
+enum irqreturn
+lspcon_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
+{
+	struct drm_device *dev = intel_dig_port->base.base.dev;
+	struct intel_encoder *intel_encoder = &intel_dig_port->base;
+	struct intel_connector *intel_connector;
+	bool changed = false;
+
+	mutex_lock(&dev->mode_config.mutex);
+	if (intel_encoder->hot_plug)
+		intel_encoder->hot_plug(intel_encoder);
+
+	for_each_intel_connector(dev, intel_connector) {
+		if (intel_connector->encoder == intel_encoder) {
+			struct drm_connector *connector =
+				&intel_connector->base;
+
+			DRM_DEBUG_DRIVER("Hptplug: Connector %s (pin %i).\n",
+				connector->name, intel_encoder->hpd_pin);
+			if (intel_hpd_irq_event(dev, connector))
+				changed = true;
+		}
+	}
+	mutex_unlock(&dev->mode_config.mutex);
+
+	if (changed) {
+		DRM_DEBUG_DRIVER("Sending event for change\n");
+		drm_kms_helper_hotplug_event(dev);
+	}
+	return IRQ_HANDLED;
+}
+
 static int lspcon_get_edid_over_aux(void *data,
 	u8 *buf, unsigned int block, size_t len)
 {
@@ -516,6 +548,9 @@ void intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port)
 	intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
 	i915_debugfs_connector_add(connector);
 
+	/* HPD handler */
+	intel_dig_port->hpd_pulse = lspcon_hpd_pulse;
+
 	/* init DP */
 	if (intel_dp_init_minimum(intel_dig_port, intel_connector)) {
 		DRM_ERROR("DP init for LSPCON failed\n");
-- 
1.9.1

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

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

* Re: [PATCH 1/7] drm/i915: add lspcon vbt bit parsing
  2016-03-22 14:25 ` [PATCH 1/7] drm/i915: add lspcon vbt bit parsing Shashank Sharma
@ 2016-03-22 15:54   ` Jani Nikula
  2016-03-22 16:50     ` Sharma, Shashank
  0 siblings, 1 reply; 18+ messages in thread
From: Jani Nikula @ 2016-03-22 15:54 UTC (permalink / raw)
  To: Shashank Sharma, intel-gfx, daniel.vetter; +Cc: akashdeep.sharma

On Tue, 22 Mar 2016, Shashank Sharma <shashank.sharma@intel.com> wrote:
> LSPCON can be configured on a port using VBT entry.
> This patch adds code to parse VBT and detect presence of
> LSPCON for a ddi port.
>
> Signed-off-by: Akashdeep Sharma <akashdeep.sharma@intel.com>
> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h       |  1 +
>  drivers/gpu/drm/i915/intel_bios.c     | 42 +++++++++++++++++++++++++++++++++++
>  drivers/gpu/drm/i915/intel_vbt_defs.h |  1 +
>  3 files changed, 44 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index f330a53..cbd40de 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -3373,6 +3373,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
>  bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
>  bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port);
>  bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port);
> +bool intel_bios_is_lspcon_preset(struct drm_device *dev, enum port port);
>  
>  /* intel_opregion.c */
>  #ifdef CONFIG_ACPI
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index 083003b..a04ab5c 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -1588,3 +1588,45 @@ bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv,
>  
>  	return false;
>  }
> +

Please add kernel-doc comment like all the other intel_bios_is_*
functions have.

> +bool
> +intel_bios_is_lspcon_preset(struct drm_device *dev, enum port port)

You mean is *present*?

Please pass struct drm_i915_private *dev_priv instead of dev.

> +{
> +	unsigned char i;
> +	enum port dvo_port = 0;
> +	struct drm_i915_private *dev_priv = dev->dev_private;
> +
> +	/* LSPCON is supported only for GEN 9 */
> +	if (!IS_GEN9(dev))
> +		return false;
> +
> +	/* Check if lspcon is supported in VBT */
> +	for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
> +		if (!dev_priv->vbt.child_dev[i].common.lspcon)

I think to be defensive we should also check for bdb version >=
192. That we could check before the loop along with the gen check.

> +			continue;
> +
> +		switch (dev_priv->vbt.child_dev[i].common.dvo_port) {
> +		case DVO_PORT_DPB:
> +			dvo_port = PORT_B;
> +			break;
> +
> +		case DVO_PORT_DPC:
> +			dvo_port = PORT_C;
> +			break;
> +
> +		case DVO_PORT_DPD:
> +			dvo_port = PORT_D;
> +			break;
> +
> +		default:
> +			continue;
> +		}
> +
> +		if (dvo_port == port) {
> +			DRM_DEBUG_DRIVER("LSPCON configured on port %c\n",
> +			port_name(port));
> +			return true;
> +		}
> +	}
> +	return false;
> +}
> diff --git a/drivers/gpu/drm/i915/intel_vbt_defs.h b/drivers/gpu/drm/i915/intel_vbt_defs.h
> index 749dcea..0066b24 100644
> --- a/drivers/gpu/drm/i915/intel_vbt_defs.h
> +++ b/drivers/gpu/drm/i915/intel_vbt_defs.h
> @@ -276,6 +276,7 @@ struct common_child_dev_config {
>  	u8 flags_1;
>  	u8 not_common3[13];
>  	u8 iboost_level;
> +	u8 lspcon:1;

Huh? AFAICT from the spec, lspcon is bit 2 in flags_1. You could define
flags_1 in terms of bitfields, including IBOOST_ENABLE.

>  } __packed;

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 0/7] Add lspcon support
  2016-03-22 14:25 [PATCH 0/7] Add lspcon support Shashank Sharma
                   ` (6 preceding siblings ...)
  2016-03-22 14:25 ` [PATCH 7/7] drm/i915: Add lspcon hpd handler Shashank Sharma
@ 2016-03-22 16:20 ` Ville Syrjälä
  2016-03-22 16:47   ` Sharma, Shashank
  2016-03-22 16:32 ` ✗ Fi.CI.BAT: warning for " Patchwork
  8 siblings, 1 reply; 18+ messages in thread
From: Ville Syrjälä @ 2016-03-22 16:20 UTC (permalink / raw)
  To: Shashank Sharma; +Cc: daniel.vetter, intel-gfx, akashdeep.sharma

On Tue, Mar 22, 2016 at 07:55:01PM +0530, Shashank Sharma wrote:
> LSPCON is essentially an active DP-HDMI convertor. It has
> two modes of operations:
> - ls mode (for upto HDMI 1.4 outputs, 4k@30 resoution / 297MHz) 
> - pcon mode (for upto HDMI 2.0 outputs, 4k@60 resolution / 600 MHz)
> 
> This patch set adds support for LS mode of operation for GEN9
> platforms. It adds a new connector for lspcon, whcih is a mix
> and match of DP and HDMI connectors, matching dual personality
> of lspcon devices.
> 
> Notes:
> - Daniel Vetter gave a review comment on LSPCON design, to make
>   it a separate encoder. This patch set tries to match that expectations
>   with a separate connector, as DDI encoder already fulfills all the
>   requirements of a lspcon_encoder.
> - This patch set tagrets LS mode of operations only.
> - PCON mode of operation will be added later, based on the requirements.
>   This is to primarily unbloc Linux devices with LSPCON port.
> - This patch set is tested with BXT RVP + drm-nightly
> - As we redesigned this code, to meet the review comments, this is a working
>   patch set, but not upto commercial quality yet.

Quick glance tells me this is more or less just an in driver implementation
of the DP dual mode standard at this point. I recently posted some patches [1]
that implement dual mode support as a helper. So you should check it out
and try to layer whatever lspcon specifics on top of that.

The only thing missing from my patches was basically using i2c-over-aux
instead of gmbus for type2 adapters, but that's mostly just a matter of
passing the right i2c adapter to places.

[1] https://lists.freedesktop.org/archives/dri-devel/2016-February/101494.html

> 
> Shashank Sharma (7):
>   drm/i915: add lspcon vbt bit parsing
>   drm/i915: Add lspcon data structures
>   drm/i915: Add new lspcon file
>   drm/i915: Add and initialize lspcon connector
>   drm/i915: Add and register lspcon connector functions
>   drm/i915: Add lspcon core functions
>   drm/i915: Add lspcon hpd handler
> 
>  drivers/gpu/drm/i915/Makefile         |   3 +-
>  drivers/gpu/drm/i915/i915_drv.h       |   1 +
>  drivers/gpu/drm/i915/intel_bios.c     |  42 +++
>  drivers/gpu/drm/i915/intel_ddi.c      |   6 +
>  drivers/gpu/drm/i915/intel_dp.c       |  31 ++
>  drivers/gpu/drm/i915/intel_drv.h      |  35 +-
>  drivers/gpu/drm/i915/intel_hdmi.c     |  25 +-
>  drivers/gpu/drm/i915/intel_hotplug.c  |   2 +-
>  drivers/gpu/drm/i915/intel_lspcon.c   | 620 ++++++++++++++++++++++++++++++++++
>  drivers/gpu/drm/i915/intel_vbt_defs.h |   1 +
>  10 files changed, 759 insertions(+), 7 deletions(-)
>  create mode 100644 drivers/gpu/drm/i915/intel_lspcon.c
> 
> -- 
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✗ Fi.CI.BAT: warning for Add lspcon support
  2016-03-22 14:25 [PATCH 0/7] Add lspcon support Shashank Sharma
                   ` (7 preceding siblings ...)
  2016-03-22 16:20 ` [PATCH 0/7] Add lspcon support Ville Syrjälä
@ 2016-03-22 16:32 ` Patchwork
  8 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2016-03-22 16:32 UTC (permalink / raw)
  To: Shashank Sharma; +Cc: intel-gfx

== Series Details ==

Series: Add lspcon support
URL   : https://patchwork.freedesktop.org/series/4756/
State : warning

== Summary ==

Series 4756v1 Add lspcon support
http://patchwork.freedesktop.org/api/1.0/series/4756/revisions/1/mbox/

Test kms_force_connector_basic:
        Subgroup force-load-detect:
                pass       -> SKIP       (snb-x220t)
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-c:
                dmesg-warn -> PASS       (bsw-nuc-2)
Test pm_rpm:
        Subgroup basic-pci-d3-state:
                dmesg-warn -> PASS       (bsw-nuc-2)
                dmesg-warn -> PASS       (byt-nuc)
        Subgroup basic-rte:
                pass       -> DMESG-WARN (bsw-nuc-2)

bdw-nuci7        total:192  pass:180  dwarn:0   dfail:0   fail:0   skip:12 
bdw-ultra        total:192  pass:171  dwarn:0   dfail:0   fail:0   skip:21 
bsw-nuc-2        total:192  pass:154  dwarn:1   dfail:0   fail:0   skip:37 
byt-nuc          total:192  pass:157  dwarn:0   dfail:0   fail:0   skip:35 
hsw-brixbox      total:192  pass:170  dwarn:0   dfail:0   fail:0   skip:22 
hsw-gt2          total:192  pass:175  dwarn:0   dfail:0   fail:0   skip:17 
ivb-t430s        total:192  pass:167  dwarn:0   dfail:0   fail:0   skip:25 
skl-i5k-2        total:192  pass:169  dwarn:0   dfail:0   fail:0   skip:23 
skl-i7k-2        total:192  pass:169  dwarn:0   dfail:0   fail:0   skip:23 
skl-nuci5        total:192  pass:181  dwarn:0   dfail:0   fail:0   skip:11 
snb-dellxps      total:192  pass:158  dwarn:0   dfail:0   fail:0   skip:34 
snb-x220t        total:192  pass:157  dwarn:0   dfail:0   fail:1   skip:34 

Results at /archive/results/CI_IGT_test/Patchwork_1678/

83ed25fa1b956275542da63eb98dc8fd2291329d drm-intel-nightly: 2016y-03m-22d-15h-20m-55s UTC integration manifest
64d449abc86294f211a783404fb465e9f0bff70a drm/i915: Add lspcon hpd handler
fdb8600c1166c8470954b518290cd35e08b02ae4 drm/i915: Add lspcon core functions
84fa946647056c440ab3197af2ad4c0a23e4c8c7 drm/i915: Add and register lspcon connector functions
507927d0999eb123b75abf62e302d53c63bf7e52 drm/i915: Add and initialize lspcon connector
db55bf34f70937801eddd1279de9500f95477035 drm/i915: Add new lspcon file
dab4018dab24476b7b50d131af2eaf4a7fe51fc3 drm/i915: Add lspcon data structures
2f098d39591a36161629e7cc8359bc88c1cbe033 drm/i915: add lspcon vbt bit parsing

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

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

* Re: [PATCH 0/7] Add lspcon support
  2016-03-22 16:20 ` [PATCH 0/7] Add lspcon support Ville Syrjälä
@ 2016-03-22 16:47   ` Sharma, Shashank
  2016-03-23  9:03     ` Daniel Vetter
  0 siblings, 1 reply; 18+ messages in thread
From: Sharma, Shashank @ 2016-03-22 16:47 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: daniel.vetter, intel-gfx, akashdeep.sharma

Thanks Ville.
I will have a look at the series you posted, and if that's the case, 
will try to merge this implementation on top of yours.

Regards
Shashank

On 3/22/2016 9:50 PM, Ville Syrjälä wrote:
> On Tue, Mar 22, 2016 at 07:55:01PM +0530, Shashank Sharma wrote:
>> LSPCON is essentially an active DP-HDMI convertor. It has
>> two modes of operations:
>> - ls mode (for upto HDMI 1.4 outputs, 4k@30 resoution / 297MHz)
>> - pcon mode (for upto HDMI 2.0 outputs, 4k@60 resolution / 600 MHz)
>>
>> This patch set adds support for LS mode of operation for GEN9
>> platforms. It adds a new connector for lspcon, whcih is a mix
>> and match of DP and HDMI connectors, matching dual personality
>> of lspcon devices.
>>
>> Notes:
>> - Daniel Vetter gave a review comment on LSPCON design, to make
>>    it a separate encoder. This patch set tries to match that expectations
>>    with a separate connector, as DDI encoder already fulfills all the
>>    requirements of a lspcon_encoder.
>> - This patch set tagrets LS mode of operations only.
>> - PCON mode of operation will be added later, based on the requirements.
>>    This is to primarily unbloc Linux devices with LSPCON port.
>> - This patch set is tested with BXT RVP + drm-nightly
>> - As we redesigned this code, to meet the review comments, this is a working
>>    patch set, but not upto commercial quality yet.
>
> Quick glance tells me this is more or less just an in driver implementation
> of the DP dual mode standard at this point. I recently posted some patches [1]
> that implement dual mode support as a helper. So you should check it out
> and try to layer whatever lspcon specifics on top of that.
>
> The only thing missing from my patches was basically using i2c-over-aux
> instead of gmbus for type2 adapters, but that's mostly just a matter of
> passing the right i2c adapter to places.
>
> [1] https://lists.freedesktop.org/archives/dri-devel/2016-February/101494.html
>
>>
>> Shashank Sharma (7):
>>    drm/i915: add lspcon vbt bit parsing
>>    drm/i915: Add lspcon data structures
>>    drm/i915: Add new lspcon file
>>    drm/i915: Add and initialize lspcon connector
>>    drm/i915: Add and register lspcon connector functions
>>    drm/i915: Add lspcon core functions
>>    drm/i915: Add lspcon hpd handler
>>
>>   drivers/gpu/drm/i915/Makefile         |   3 +-
>>   drivers/gpu/drm/i915/i915_drv.h       |   1 +
>>   drivers/gpu/drm/i915/intel_bios.c     |  42 +++
>>   drivers/gpu/drm/i915/intel_ddi.c      |   6 +
>>   drivers/gpu/drm/i915/intel_dp.c       |  31 ++
>>   drivers/gpu/drm/i915/intel_drv.h      |  35 +-
>>   drivers/gpu/drm/i915/intel_hdmi.c     |  25 +-
>>   drivers/gpu/drm/i915/intel_hotplug.c  |   2 +-
>>   drivers/gpu/drm/i915/intel_lspcon.c   | 620 ++++++++++++++++++++++++++++++++++
>>   drivers/gpu/drm/i915/intel_vbt_defs.h |   1 +
>>   10 files changed, 759 insertions(+), 7 deletions(-)
>>   create mode 100644 drivers/gpu/drm/i915/intel_lspcon.c
>>
>> --
>> 1.9.1
>>
>> _______________________________________________
>> 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] 18+ messages in thread

* Re: [PATCH 1/7] drm/i915: add lspcon vbt bit parsing
  2016-03-22 15:54   ` Jani Nikula
@ 2016-03-22 16:50     ` Sharma, Shashank
  2016-03-22 17:05       ` Ville Syrjälä
  0 siblings, 1 reply; 18+ messages in thread
From: Sharma, Shashank @ 2016-03-22 16:50 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx, daniel.vetter; +Cc: akashdeep.sharma

Thanks for the review, Jani.

Regards
Shashank

On 3/22/2016 9:24 PM, Jani Nikula wrote:
> On Tue, 22 Mar 2016, Shashank Sharma <shashank.sharma@intel.com> wrote:
>> LSPCON can be configured on a port using VBT entry.
>> This patch adds code to parse VBT and detect presence of
>> LSPCON for a ddi port.
>>
>> Signed-off-by: Akashdeep Sharma <akashdeep.sharma@intel.com>
>> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
>> ---
>>   drivers/gpu/drm/i915/i915_drv.h       |  1 +
>>   drivers/gpu/drm/i915/intel_bios.c     | 42 +++++++++++++++++++++++++++++++++++
>>   drivers/gpu/drm/i915/intel_vbt_defs.h |  1 +
>>   3 files changed, 44 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>> index f330a53..cbd40de 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.h
>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> @@ -3373,6 +3373,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
>>   bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
>>   bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port);
>>   bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port);
>> +bool intel_bios_is_lspcon_preset(struct drm_device *dev, enum port port);
>>
>>   /* intel_opregion.c */
>>   #ifdef CONFIG_ACPI
>> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
>> index 083003b..a04ab5c 100644
>> --- a/drivers/gpu/drm/i915/intel_bios.c
>> +++ b/drivers/gpu/drm/i915/intel_bios.c
>> @@ -1588,3 +1588,45 @@ bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv,
>>
>>   	return false;
>>   }
>> +
>
> Please add kernel-doc comment like all the other intel_bios_is_*
> functions have.
>
Ok,
>> +bool
>> +intel_bios_is_lspcon_preset(struct drm_device *dev, enum port port)
>
> You mean is *present*?
>
Well, this is embarrassing :) yes it was supposed to be present.
> Please pass struct drm_i915_private *dev_priv instead of dev.
>
Ok
>> +{
>> +	unsigned char i;
>> +	enum port dvo_port = 0;
>> +	struct drm_i915_private *dev_priv = dev->dev_private;
>> +
>> +	/* LSPCON is supported only for GEN 9 */
>> +	if (!IS_GEN9(dev))
>> +		return false;
>> +
>> +	/* Check if lspcon is supported in VBT */
>> +	for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
>> +		if (!dev_priv->vbt.child_dev[i].common.lspcon)
>
> I think to be defensive we should also check for bdb version >=
> 192. That we could check before the loop along with the gen check.
>
Yes, this can be done.
>> +			continue;
>> +
>> +		switch (dev_priv->vbt.child_dev[i].common.dvo_port) {
>> +		case DVO_PORT_DPB:
>> +			dvo_port = PORT_B;
>> +			break;
>> +
>> +		case DVO_PORT_DPC:
>> +			dvo_port = PORT_C;
>> +			break;
>> +
>> +		case DVO_PORT_DPD:
>> +			dvo_port = PORT_D;
>> +			break;
>> +
>> +		default:
>> +			continue;
>> +		}
>> +
>> +		if (dvo_port == port) {
>> +			DRM_DEBUG_DRIVER("LSPCON configured on port %c\n",
>> +			port_name(port));
>> +			return true;
>> +		}
>> +	}
>> +	return false;
>> +}
>> diff --git a/drivers/gpu/drm/i915/intel_vbt_defs.h b/drivers/gpu/drm/i915/intel_vbt_defs.h
>> index 749dcea..0066b24 100644
>> --- a/drivers/gpu/drm/i915/intel_vbt_defs.h
>> +++ b/drivers/gpu/drm/i915/intel_vbt_defs.h
>> @@ -276,6 +276,7 @@ struct common_child_dev_config {
>>   	u8 flags_1;
>>   	u8 not_common3[13];
>>   	u8 iboost_level;
>> +	u8 lspcon:1;
>
> Huh? AFAICT from the spec, lspcon is bit 2 in flags_1. You could define
> flags_1 in terms of bitfields, including IBOOST_ENABLE.
>
I am not sure about this, let me go to VBT spec again, if there is a 
recent change. Will update you on this.
>>   } __packed;
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 1/7] drm/i915: add lspcon vbt bit parsing
  2016-03-22 16:50     ` Sharma, Shashank
@ 2016-03-22 17:05       ` Ville Syrjälä
  2016-03-22 17:10         ` Sharma, Shashank
  0 siblings, 1 reply; 18+ messages in thread
From: Ville Syrjälä @ 2016-03-22 17:05 UTC (permalink / raw)
  To: Sharma, Shashank; +Cc: daniel.vetter, intel-gfx, akashdeep.sharma

On Tue, Mar 22, 2016 at 10:20:33PM +0530, Sharma, Shashank wrote:
> Thanks for the review, Jani.
> 
> Regards
> Shashank
> 
> On 3/22/2016 9:24 PM, Jani Nikula wrote:
> > On Tue, 22 Mar 2016, Shashank Sharma <shashank.sharma@intel.com> wrote:
> >> LSPCON can be configured on a port using VBT entry.
> >> This patch adds code to parse VBT and detect presence of
> >> LSPCON for a ddi port.
> >>
> >> Signed-off-by: Akashdeep Sharma <akashdeep.sharma@intel.com>
> >> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
> >> ---
> >>   drivers/gpu/drm/i915/i915_drv.h       |  1 +
> >>   drivers/gpu/drm/i915/intel_bios.c     | 42 +++++++++++++++++++++++++++++++++++
> >>   drivers/gpu/drm/i915/intel_vbt_defs.h |  1 +
> >>   3 files changed, 44 insertions(+)
> >>
> >> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> >> index f330a53..cbd40de 100644
> >> --- a/drivers/gpu/drm/i915/i915_drv.h
> >> +++ b/drivers/gpu/drm/i915/i915_drv.h
> >> @@ -3373,6 +3373,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
> >>   bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
> >>   bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port);
> >>   bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port);
> >> +bool intel_bios_is_lspcon_preset(struct drm_device *dev, enum port port);
> >>
> >>   /* intel_opregion.c */
> >>   #ifdef CONFIG_ACPI
> >> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> >> index 083003b..a04ab5c 100644
> >> --- a/drivers/gpu/drm/i915/intel_bios.c
> >> +++ b/drivers/gpu/drm/i915/intel_bios.c
> >> @@ -1588,3 +1588,45 @@ bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv,
> >>
> >>   	return false;
> >>   }
> >> +
> >
> > Please add kernel-doc comment like all the other intel_bios_is_*
> > functions have.
> >
> Ok,
> >> +bool
> >> +intel_bios_is_lspcon_preset(struct drm_device *dev, enum port port)
> >
> > You mean is *present*?
> >
> Well, this is embarrassing :) yes it was supposed to be present.
> > Please pass struct drm_i915_private *dev_priv instead of dev.
> >
> Ok
> >> +{
> >> +	unsigned char i;
> >> +	enum port dvo_port = 0;
> >> +	struct drm_i915_private *dev_priv = dev->dev_private;
> >> +
> >> +	/* LSPCON is supported only for GEN 9 */
> >> +	if (!IS_GEN9(dev))
> >> +		return false;
> >> +
> >> +	/* Check if lspcon is supported in VBT */
> >> +	for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
> >> +		if (!dev_priv->vbt.child_dev[i].common.lspcon)
> >
> > I think to be defensive we should also check for bdb version >=
> > 192. That we could check before the loop along with the gen check.
> >
> Yes, this can be done.
> >> +			continue;
> >> +
> >> +		switch (dev_priv->vbt.child_dev[i].common.dvo_port) {
> >> +		case DVO_PORT_DPB:
> >> +			dvo_port = PORT_B;
> >> +			break;
> >> +
> >> +		case DVO_PORT_DPC:
> >> +			dvo_port = PORT_C;
> >> +			break;
> >> +
> >> +		case DVO_PORT_DPD:
> >> +			dvo_port = PORT_D;
> >> +			break;
> >> +
> >> +		default:
> >> +			continue;
> >> +		}
> >> +
> >> +		if (dvo_port == port) {
> >> +			DRM_DEBUG_DRIVER("LSPCON configured on port %c\n",
> >> +			port_name(port));
> >> +			return true;
> >> +		}
> >> +	}
> >> +	return false;
> >> +}
> >> diff --git a/drivers/gpu/drm/i915/intel_vbt_defs.h b/drivers/gpu/drm/i915/intel_vbt_defs.h
> >> index 749dcea..0066b24 100644
> >> --- a/drivers/gpu/drm/i915/intel_vbt_defs.h
> >> +++ b/drivers/gpu/drm/i915/intel_vbt_defs.h
> >> @@ -276,6 +276,7 @@ struct common_child_dev_config {
> >>   	u8 flags_1;
> >>   	u8 not_common3[13];
> >>   	u8 iboost_level;
> >> +	u8 lspcon:1;
> >
> > Huh? AFAICT from the spec, lspcon is bit 2 in flags_1. You could define
> > flags_1 in terms of bitfields, including IBOOST_ENABLE.
> >
> I am not sure about this, let me go to VBT spec again, if there is a 
> recent change. Will update you on this.

There was a patch [1] posted recently which added the lspcon bit and others,
and that at least matches the spec at the time when I looked at it (or I
made a mistake). The patch just needs a rebase and it should be good to
go I think, though someone else double checking wouldn't hurt.

[1] https://lists.freedesktop.org/archives/intel-gfx/2016-March/089759.html


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

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 1/7] drm/i915: add lspcon vbt bit parsing
  2016-03-22 17:05       ` Ville Syrjälä
@ 2016-03-22 17:10         ` Sharma, Shashank
  0 siblings, 0 replies; 18+ messages in thread
From: Sharma, Shashank @ 2016-03-22 17:10 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: daniel.vetter, intel-gfx, akashdeep.sharma

Regards
Shashank

On 3/22/2016 10:35 PM, Ville Syrjälä wrote:
> On Tue, Mar 22, 2016 at 10:20:33PM +0530, Sharma, Shashank wrote:
>> Thanks for the review, Jani.
>>
>> Regards
>> Shashank
>>
>> On 3/22/2016 9:24 PM, Jani Nikula wrote:
>>> On Tue, 22 Mar 2016, Shashank Sharma <shashank.sharma@intel.com> wrote:
>>>> LSPCON can be configured on a port using VBT entry.
>>>> This patch adds code to parse VBT and detect presence of
>>>> LSPCON for a ddi port.
>>>>
>>>> Signed-off-by: Akashdeep Sharma <akashdeep.sharma@intel.com>
>>>> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
>>>> ---
>>>>    drivers/gpu/drm/i915/i915_drv.h       |  1 +
>>>>    drivers/gpu/drm/i915/intel_bios.c     | 42 +++++++++++++++++++++++++++++++++++
>>>>    drivers/gpu/drm/i915/intel_vbt_defs.h |  1 +
>>>>    3 files changed, 44 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>>>> index f330a53..cbd40de 100644
>>>> --- a/drivers/gpu/drm/i915/i915_drv.h
>>>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>>>> @@ -3373,6 +3373,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
>>>>    bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
>>>>    bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port);
>>>>    bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port);
>>>> +bool intel_bios_is_lspcon_preset(struct drm_device *dev, enum port port);
>>>>
>>>>    /* intel_opregion.c */
>>>>    #ifdef CONFIG_ACPI
>>>> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
>>>> index 083003b..a04ab5c 100644
>>>> --- a/drivers/gpu/drm/i915/intel_bios.c
>>>> +++ b/drivers/gpu/drm/i915/intel_bios.c
>>>> @@ -1588,3 +1588,45 @@ bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv,
>>>>
>>>>    	return false;
>>>>    }
>>>> +
>>>
>>> Please add kernel-doc comment like all the other intel_bios_is_*
>>> functions have.
>>>
>> Ok,
>>>> +bool
>>>> +intel_bios_is_lspcon_preset(struct drm_device *dev, enum port port)
>>>
>>> You mean is *present*?
>>>
>> Well, this is embarrassing :) yes it was supposed to be present.
>>> Please pass struct drm_i915_private *dev_priv instead of dev.
>>>
>> Ok
>>>> +{
>>>> +	unsigned char i;
>>>> +	enum port dvo_port = 0;
>>>> +	struct drm_i915_private *dev_priv = dev->dev_private;
>>>> +
>>>> +	/* LSPCON is supported only for GEN 9 */
>>>> +	if (!IS_GEN9(dev))
>>>> +		return false;
>>>> +
>>>> +	/* Check if lspcon is supported in VBT */
>>>> +	for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
>>>> +		if (!dev_priv->vbt.child_dev[i].common.lspcon)
>>>
>>> I think to be defensive we should also check for bdb version >=
>>> 192. That we could check before the loop along with the gen check.
>>>
>> Yes, this can be done.
>>>> +			continue;
>>>> +
>>>> +		switch (dev_priv->vbt.child_dev[i].common.dvo_port) {
>>>> +		case DVO_PORT_DPB:
>>>> +			dvo_port = PORT_B;
>>>> +			break;
>>>> +
>>>> +		case DVO_PORT_DPC:
>>>> +			dvo_port = PORT_C;
>>>> +			break;
>>>> +
>>>> +		case DVO_PORT_DPD:
>>>> +			dvo_port = PORT_D;
>>>> +			break;
>>>> +
>>>> +		default:
>>>> +			continue;
>>>> +		}
>>>> +
>>>> +		if (dvo_port == port) {
>>>> +			DRM_DEBUG_DRIVER("LSPCON configured on port %c\n",
>>>> +			port_name(port));
>>>> +			return true;
>>>> +		}
>>>> +	}
>>>> +	return false;
>>>> +}
>>>> diff --git a/drivers/gpu/drm/i915/intel_vbt_defs.h b/drivers/gpu/drm/i915/intel_vbt_defs.h
>>>> index 749dcea..0066b24 100644
>>>> --- a/drivers/gpu/drm/i915/intel_vbt_defs.h
>>>> +++ b/drivers/gpu/drm/i915/intel_vbt_defs.h
>>>> @@ -276,6 +276,7 @@ struct common_child_dev_config {
>>>>    	u8 flags_1;
>>>>    	u8 not_common3[13];
>>>>    	u8 iboost_level;
>>>> +	u8 lspcon:1;
>>>
>>> Huh? AFAICT from the spec, lspcon is bit 2 in flags_1. You could define
>>> flags_1 in terms of bitfields, including IBOOST_ENABLE.
>>>
>> I am not sure about this, let me go to VBT spec again, if there is a
>> recent change. Will update you on this.
>
> There was a patch [1] posted recently which added the lspcon bit and others,
> and that at least matches the spec at the time when I looked at it (or I
> made a mistake). The patch just needs a rebase and it should be good to
> go I think, though someone else double checking wouldn't hurt.
>
> [1] https://lists.freedesktop.org/archives/intel-gfx/2016-March/089759.html
>
Thanks for pointing this out.
I almost forgot about this patch, which Durga/Siva added.
Will sync up on this patch first, and if a rebase is the only thing 
required, we can proceed on this one.
>
>>>>    } __packed;
>>>
>> _______________________________________________
>> 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] 18+ messages in thread

* Re: [PATCH 0/7] Add lspcon support
  2016-03-22 16:47   ` Sharma, Shashank
@ 2016-03-23  9:03     ` Daniel Vetter
  2016-03-23  9:12       ` Sharma, Shashank
  2016-03-25 16:02       ` Sharma, Shashank
  0 siblings, 2 replies; 18+ messages in thread
From: Daniel Vetter @ 2016-03-23  9:03 UTC (permalink / raw)
  To: Sharma, Shashank; +Cc: daniel.vetter, intel-gfx, akashdeep.sharma

On Tue, Mar 22, 2016 at 10:17:36PM +0530, Sharma, Shashank wrote:
> Thanks Ville.
> I will have a look at the series you posted, and if that's the case, will
> try to merge this implementation on top of yours.

Please try to review Ville's patches either way using the DP specs, so
that we can pull it in. You have to read it carefully anyway to figure out
whether it matches lspcon well enough, so might as well use that time ;-)

Thanks, Daniel

> 
> Regards
> Shashank
> 
> On 3/22/2016 9:50 PM, Ville Syrjälä wrote:
> >On Tue, Mar 22, 2016 at 07:55:01PM +0530, Shashank Sharma wrote:
> >>LSPCON is essentially an active DP-HDMI convertor. It has
> >>two modes of operations:
> >>- ls mode (for upto HDMI 1.4 outputs, 4k@30 resoution / 297MHz)
> >>- pcon mode (for upto HDMI 2.0 outputs, 4k@60 resolution / 600 MHz)
> >>
> >>This patch set adds support for LS mode of operation for GEN9
> >>platforms. It adds a new connector for lspcon, whcih is a mix
> >>and match of DP and HDMI connectors, matching dual personality
> >>of lspcon devices.
> >>
> >>Notes:
> >>- Daniel Vetter gave a review comment on LSPCON design, to make
> >>   it a separate encoder. This patch set tries to match that expectations
> >>   with a separate connector, as DDI encoder already fulfills all the
> >>   requirements of a lspcon_encoder.
> >>- This patch set tagrets LS mode of operations only.
> >>- PCON mode of operation will be added later, based on the requirements.
> >>   This is to primarily unbloc Linux devices with LSPCON port.
> >>- This patch set is tested with BXT RVP + drm-nightly
> >>- As we redesigned this code, to meet the review comments, this is a working
> >>   patch set, but not upto commercial quality yet.
> >
> >Quick glance tells me this is more or less just an in driver implementation
> >of the DP dual mode standard at this point. I recently posted some patches [1]
> >that implement dual mode support as a helper. So you should check it out
> >and try to layer whatever lspcon specifics on top of that.
> >
> >The only thing missing from my patches was basically using i2c-over-aux
> >instead of gmbus for type2 adapters, but that's mostly just a matter of
> >passing the right i2c adapter to places.
> >
> >[1] https://lists.freedesktop.org/archives/dri-devel/2016-February/101494.html
> >
> >>
> >>Shashank Sharma (7):
> >>   drm/i915: add lspcon vbt bit parsing
> >>   drm/i915: Add lspcon data structures
> >>   drm/i915: Add new lspcon file
> >>   drm/i915: Add and initialize lspcon connector
> >>   drm/i915: Add and register lspcon connector functions
> >>   drm/i915: Add lspcon core functions
> >>   drm/i915: Add lspcon hpd handler
> >>
> >>  drivers/gpu/drm/i915/Makefile         |   3 +-
> >>  drivers/gpu/drm/i915/i915_drv.h       |   1 +
> >>  drivers/gpu/drm/i915/intel_bios.c     |  42 +++
> >>  drivers/gpu/drm/i915/intel_ddi.c      |   6 +
> >>  drivers/gpu/drm/i915/intel_dp.c       |  31 ++
> >>  drivers/gpu/drm/i915/intel_drv.h      |  35 +-
> >>  drivers/gpu/drm/i915/intel_hdmi.c     |  25 +-
> >>  drivers/gpu/drm/i915/intel_hotplug.c  |   2 +-
> >>  drivers/gpu/drm/i915/intel_lspcon.c   | 620 ++++++++++++++++++++++++++++++++++
> >>  drivers/gpu/drm/i915/intel_vbt_defs.h |   1 +
> >>  10 files changed, 759 insertions(+), 7 deletions(-)
> >>  create mode 100644 drivers/gpu/drm/i915/intel_lspcon.c
> >>
> >>--
> >>1.9.1
> >>
> >>_______________________________________________
> >>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

-- 
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] 18+ messages in thread

* Re: [PATCH 0/7] Add lspcon support
  2016-03-23  9:03     ` Daniel Vetter
@ 2016-03-23  9:12       ` Sharma, Shashank
  2016-03-25 16:02       ` Sharma, Shashank
  1 sibling, 0 replies; 18+ messages in thread
From: Sharma, Shashank @ 2016-03-23  9:12 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: daniel.vetter, intel-gfx, akashdeep.sharma

Regards
Shashank

On 3/23/2016 2:33 PM, Daniel Vetter wrote:
> On Tue, Mar 22, 2016 at 10:17:36PM +0530, Sharma, Shashank wrote:
>> Thanks Ville.
>> I will have a look at the series you posted, and if that's the case, will
>> try to merge this implementation on top of yours.
>
> Please try to review Ville's patches either way using the DP specs, so
> that we can pull it in. You have to read it carefully anyway to figure out
> whether it matches lspcon well enough, so might as well use that time ;-)
>
> Thanks, Daniel
>
Got it :)
>>
>> Regards
>> Shashank
>>
>> On 3/22/2016 9:50 PM, Ville Syrjälä wrote:
>>> On Tue, Mar 22, 2016 at 07:55:01PM +0530, Shashank Sharma wrote:
>>>> LSPCON is essentially an active DP-HDMI convertor. It has
>>>> two modes of operations:
>>>> - ls mode (for upto HDMI 1.4 outputs, 4k@30 resoution / 297MHz)
>>>> - pcon mode (for upto HDMI 2.0 outputs, 4k@60 resolution / 600 MHz)
>>>>
>>>> This patch set adds support for LS mode of operation for GEN9
>>>> platforms. It adds a new connector for lspcon, whcih is a mix
>>>> and match of DP and HDMI connectors, matching dual personality
>>>> of lspcon devices.
>>>>
>>>> Notes:
>>>> - Daniel Vetter gave a review comment on LSPCON design, to make
>>>>    it a separate encoder. This patch set tries to match that expectations
>>>>    with a separate connector, as DDI encoder already fulfills all the
>>>>    requirements of a lspcon_encoder.
>>>> - This patch set tagrets LS mode of operations only.
>>>> - PCON mode of operation will be added later, based on the requirements.
>>>>    This is to primarily unbloc Linux devices with LSPCON port.
>>>> - This patch set is tested with BXT RVP + drm-nightly
>>>> - As we redesigned this code, to meet the review comments, this is a working
>>>>    patch set, but not upto commercial quality yet.
>>>
>>> Quick glance tells me this is more or less just an in driver implementation
>>> of the DP dual mode standard at this point. I recently posted some patches [1]
>>> that implement dual mode support as a helper. So you should check it out
>>> and try to layer whatever lspcon specifics on top of that.
>>>
>>> The only thing missing from my patches was basically using i2c-over-aux
>>> instead of gmbus for type2 adapters, but that's mostly just a matter of
>>> passing the right i2c adapter to places.
>>>
>>> [1] https://lists.freedesktop.org/archives/dri-devel/2016-February/101494.html
>>>
>>>>
>>>> Shashank Sharma (7):
>>>>    drm/i915: add lspcon vbt bit parsing
>>>>    drm/i915: Add lspcon data structures
>>>>    drm/i915: Add new lspcon file
>>>>    drm/i915: Add and initialize lspcon connector
>>>>    drm/i915: Add and register lspcon connector functions
>>>>    drm/i915: Add lspcon core functions
>>>>    drm/i915: Add lspcon hpd handler
>>>>
>>>>   drivers/gpu/drm/i915/Makefile         |   3 +-
>>>>   drivers/gpu/drm/i915/i915_drv.h       |   1 +
>>>>   drivers/gpu/drm/i915/intel_bios.c     |  42 +++
>>>>   drivers/gpu/drm/i915/intel_ddi.c      |   6 +
>>>>   drivers/gpu/drm/i915/intel_dp.c       |  31 ++
>>>>   drivers/gpu/drm/i915/intel_drv.h      |  35 +-
>>>>   drivers/gpu/drm/i915/intel_hdmi.c     |  25 +-
>>>>   drivers/gpu/drm/i915/intel_hotplug.c  |   2 +-
>>>>   drivers/gpu/drm/i915/intel_lspcon.c   | 620 ++++++++++++++++++++++++++++++++++
>>>>   drivers/gpu/drm/i915/intel_vbt_defs.h |   1 +
>>>>   10 files changed, 759 insertions(+), 7 deletions(-)
>>>>   create mode 100644 drivers/gpu/drm/i915/intel_lspcon.c
>>>>
>>>> --
>>>> 1.9.1
>>>>
>>>> _______________________________________________
>>>> 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
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 0/7] Add lspcon support
  2016-03-23  9:03     ` Daniel Vetter
  2016-03-23  9:12       ` Sharma, Shashank
@ 2016-03-25 16:02       ` Sharma, Shashank
  1 sibling, 0 replies; 18+ messages in thread
From: Sharma, Shashank @ 2016-03-25 16:02 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: Vetter, Daniel, intel-gfx, Sharma, Akashdeep

Hi Daniel, Ville, 
I reviewed Ville's code for dp++ adaptors, and as Ville rightly mentioned, a lot of the code can be reused for LSPCON as it is, as LSPCON is also working as a type2 DP adaptor. 
I need to add i2c-over-aux functionality, and then LSPCON will become one of the consumers of this code. 

How should we proceed on this?
- Should I pull those patches, and re-publish in intel-gfx, get the review done, and then write LSPCON layer on top of it ? 
- Or Should I publish DP++ and modified LSPCON together ?

Please suggest. 

Regards
Shashank
-----Original Message-----
From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of Daniel Vetter
Sent: Wednesday, March 23, 2016 2:33 PM
To: Sharma, Shashank
Cc: Ville Syrjälä; Vetter, Daniel; intel-gfx@lists.freedesktop.org; Sharma, Akashdeep
Subject: Re: [Intel-gfx] [PATCH 0/7] Add lspcon support

On Tue, Mar 22, 2016 at 10:17:36PM +0530, Sharma, Shashank wrote:
> Thanks Ville.
> I will have a look at the series you posted, and if that's the case, 
> will try to merge this implementation on top of yours.

Please try to review Ville's patches either way using the DP specs, so that we can pull it in. You have to read it carefully anyway to figure out whether it matches lspcon well enough, so might as well use that time ;-)

Thanks, Daniel

> 
> Regards
> Shashank
> 
> On 3/22/2016 9:50 PM, Ville Syrjälä wrote:
> >On Tue, Mar 22, 2016 at 07:55:01PM +0530, Shashank Sharma wrote:
> >>LSPCON is essentially an active DP-HDMI convertor. It has two modes 
> >>of operations:
> >>- ls mode (for upto HDMI 1.4 outputs, 4k@30 resoution / 297MHz)
> >>- pcon mode (for upto HDMI 2.0 outputs, 4k@60 resolution / 600 MHz)
> >>
> >>This patch set adds support for LS mode of operation for GEN9 
> >>platforms. It adds a new connector for lspcon, whcih is a mix and 
> >>match of DP and HDMI connectors, matching dual personality of lspcon 
> >>devices.
> >>
> >>Notes:
> >>- Daniel Vetter gave a review comment on LSPCON design, to make
> >>   it a separate encoder. This patch set tries to match that expectations
> >>   with a separate connector, as DDI encoder already fulfills all the
> >>   requirements of a lspcon_encoder.
> >>- This patch set tagrets LS mode of operations only.
> >>- PCON mode of operation will be added later, based on the requirements.
> >>   This is to primarily unbloc Linux devices with LSPCON port.
> >>- This patch set is tested with BXT RVP + drm-nightly
> >>- As we redesigned this code, to meet the review comments, this is a working
> >>   patch set, but not upto commercial quality yet.
> >
> >Quick glance tells me this is more or less just an in driver 
> >implementation of the DP dual mode standard at this point. I recently 
> >posted some patches [1] that implement dual mode support as a helper. 
> >So you should check it out and try to layer whatever lspcon specifics on top of that.
> >
> >The only thing missing from my patches was basically using 
> >i2c-over-aux instead of gmbus for type2 adapters, but that's mostly 
> >just a matter of passing the right i2c adapter to places.
> >
> >[1] 
> >https://lists.freedesktop.org/archives/dri-devel/2016-February/101494
> >.html
> >
> >>
> >>Shashank Sharma (7):
> >>   drm/i915: add lspcon vbt bit parsing
> >>   drm/i915: Add lspcon data structures
> >>   drm/i915: Add new lspcon file
> >>   drm/i915: Add and initialize lspcon connector
> >>   drm/i915: Add and register lspcon connector functions
> >>   drm/i915: Add lspcon core functions
> >>   drm/i915: Add lspcon hpd handler
> >>
> >>  drivers/gpu/drm/i915/Makefile         |   3 +-
> >>  drivers/gpu/drm/i915/i915_drv.h       |   1 +
> >>  drivers/gpu/drm/i915/intel_bios.c     |  42 +++
> >>  drivers/gpu/drm/i915/intel_ddi.c      |   6 +
> >>  drivers/gpu/drm/i915/intel_dp.c       |  31 ++
> >>  drivers/gpu/drm/i915/intel_drv.h      |  35 +-
> >>  drivers/gpu/drm/i915/intel_hdmi.c     |  25 +-
> >>  drivers/gpu/drm/i915/intel_hotplug.c  |   2 +-
> >>  drivers/gpu/drm/i915/intel_lspcon.c   | 620 ++++++++++++++++++++++++++++++++++
> >>  drivers/gpu/drm/i915/intel_vbt_defs.h |   1 +
> >>  10 files changed, 759 insertions(+), 7 deletions(-)  create mode 
> >> 100644 drivers/gpu/drm/i915/intel_lspcon.c
> >>
> >>--
> >>1.9.1
> >>
> >>_______________________________________________
> >>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

--
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] 18+ messages in thread

end of thread, other threads:[~2016-03-25 16:02 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-22 14:25 [PATCH 0/7] Add lspcon support Shashank Sharma
2016-03-22 14:25 ` [PATCH 1/7] drm/i915: add lspcon vbt bit parsing Shashank Sharma
2016-03-22 15:54   ` Jani Nikula
2016-03-22 16:50     ` Sharma, Shashank
2016-03-22 17:05       ` Ville Syrjälä
2016-03-22 17:10         ` Sharma, Shashank
2016-03-22 14:25 ` [PATCH 2/7] drm/i915: Add lspcon data structures Shashank Sharma
2016-03-22 14:25 ` [PATCH 3/7] drm/i915: Add new lspcon file Shashank Sharma
2016-03-22 14:25 ` [PATCH 4/7] drm/i915: Add and initialize lspcon connector Shashank Sharma
2016-03-22 14:25 ` [PATCH 5/7] drm/i915: Add and register lspcon connector functions Shashank Sharma
2016-03-22 14:25 ` [PATCH 6/7] drm/i915: Add lspcon core functions Shashank Sharma
2016-03-22 14:25 ` [PATCH 7/7] drm/i915: Add lspcon hpd handler Shashank Sharma
2016-03-22 16:20 ` [PATCH 0/7] Add lspcon support Ville Syrjälä
2016-03-22 16:47   ` Sharma, Shashank
2016-03-23  9:03     ` Daniel Vetter
2016-03-23  9:12       ` Sharma, Shashank
2016-03-25 16:02       ` Sharma, Shashank
2016-03-22 16:32 ` ✗ Fi.CI.BAT: warning for " 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.