Re: [Intel-gfx] [PATCH] drm/i915: Set alternate aux for DDI-E

2015-08-13 Thread shuang . he
Tested-By: Intel Graphics QA PRTS (Patch Regression Test System Contact: 
shuang...@intel.com)
Task id: 7119
-Summary-
Platform  Delta  drm-intel-nightly  Series Applied
ILK -1  302/302  301/302
SNB  315/315  315/315
IVB -11  336/336  325/336
BYT -1  283/283  282/283
HSW  378/378  378/378
-Detailed-
Platform  Testdrm-intel-nightly  Series 
Applied
*ILK  igt@kms_flip@flip-vs-dpms-interruptible  PASS(1)  DMESG_WARN(1)
*IVB  igt@kms_cursor_crc@cursor-128x128-onscreen  PASS(1)  FAIL(1)
*IVB  igt@kms_cursor_crc@cursor-128x128-random  PASS(1)  FAIL(1)
*IVB  igt@kms_cursor_crc@cursor-128x128-sliding  PASS(1)  FAIL(1)
*IVB  igt@kms_cursor_crc@cursor-256x256-offscreen  PASS(1)  FAIL(1)
*IVB  igt@kms_cursor_crc@cursor-256x256-onscreen  PASS(1)  FAIL(1)
*IVB  igt@kms_cursor_crc@cursor-256x256-sliding  PASS(1)  FAIL(1)
*IVB  igt@kms_cursor_crc@cursor-64x64-offscreen  PASS(1)  FAIL(1)
*IVB  igt@kms_cursor_crc@cursor-64x64-onscreen  PASS(1)  FAIL(1)
*IVB  igt@kms_cursor_crc@cursor-64x64-random  PASS(1)  FAIL(1)
*IVB  igt@kms_cursor_crc@cursor-64x64-sliding  PASS(1)  FAIL(1)
*IVB  igt@kms_cursor_crc@cursor-size-change  PASS(1)  FAIL(1)
*BYT  igt@gem_tiled_partial_pwrite_pread@reads  PASS(1)  FAIL(1)
Note: You need to pay more attention to line start with '*'
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH] drm/i915: Set alternate aux for DDI-E

2015-08-11 Thread Zhang, Xiong Y
Reviewed-by: Xiong Zhang xiong.y.zh...@intel.com

thanks

From: Intel-gfx [intel-gfx-boun...@lists.freedesktop.org] on behalf of Rodrigo 
Vivi [rodrigo.v...@intel.com]
Sent: Saturday, August 08, 2015 8:01 AM
To: intel-gfx@lists.freedesktop.org
Cc: Vivi, Rodrigo
Subject: [Intel-gfx] [PATCH] drm/i915: Set alternate aux for DDI-E

There is no correspondent Aux channel for DDI-E.

So we need to rely on VBT to let us know witch one
is being used instead.

v2: Removing some trailing spaces and giving proper
credit to Xiong that added a nice way to avoid port
conflicts by setting supports_dp = 0 when using
equivalent aux for DDI-E.

Credits-to: Xiong Zhang xiong.y.zh...@intel.com
Signed-off-by: Rodrigo Vivi rodrigo.v...@intel.com
---
 drivers/gpu/drm/i915/i915_drv.h   |  7 +++
 drivers/gpu/drm/i915/intel_bios.c | 23 +++
 drivers/gpu/drm/i915/intel_ddi.c  |  5 ++---
 drivers/gpu/drm/i915/intel_dp.c   | 29 -
 4 files changed, 56 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 4932d29..3ffd962 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1409,6 +1409,11 @@ enum modeset_restore {
MODESET_SUSPENDED,
 };

+#define DP_AUX_A 0x40
+#define DP_AUX_B 0x10
+#define DP_AUX_C 0x20
+#define DP_AUX_D 0x30
+
 struct ddi_vbt_port_info {
/*
 * This is an index in the HDMI/DVI DDI buffer translation table.
@@ -1421,6 +1426,8 @@ struct ddi_vbt_port_info {
uint8_t supports_dvi:1;
uint8_t supports_hdmi:1;
uint8_t supports_dp:1;
+
+   uint8_t alternate_aux_channel;
 };

 enum psr_lines_to_wait {
diff --git a/drivers/gpu/drm/i915/intel_bios.c 
b/drivers/gpu/drm/i915/intel_bios.c
index 31b1079..990acc2 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -968,13 +968,28 @@ static void parse_ddi_port(struct drm_i915_private 
*dev_priv, enum port port,
}

if (is_dp) {
-   if (aux_channel == 0x40  port != PORT_A)
+   if (port == PORT_E) {
+   info-alternate_aux_channel = aux_channel;
+   /* if DDIE share aux channel with other port, then
+* DP couldn't exist on the shared port. Otherwise
+* they share the same aux channel and system
+* couldn't communicate with them seperately. */
+   if (aux_channel == DP_AUX_A)
+   dev_priv-vbt.ddi_port_info[PORT_A].supports_dp 
= 0;
+   else if (aux_channel == DP_AUX_B)
+   dev_priv-vbt.ddi_port_info[PORT_B].supports_dp 
= 0;
+   else if (aux_channel == DP_AUX_C)
+   dev_priv-vbt.ddi_port_info[PORT_C].supports_dp 
= 0;
+   else if (aux_channel == DP_AUX_D)
+   dev_priv-vbt.ddi_port_info[PORT_D].supports_dp 
= 0;
+   }
+   else if (aux_channel == DP_AUX_A  port != PORT_A)
DRM_DEBUG_KMS(Unexpected AUX channel for port A\n);
-   if (aux_channel == 0x10  port != PORT_B)
+   else if (aux_channel == DP_AUX_B  port != PORT_B)
DRM_DEBUG_KMS(Unexpected AUX channel for port B\n);
-   if (aux_channel == 0x20  port != PORT_C)
+   else if (aux_channel == DP_AUX_C  port != PORT_C)
DRM_DEBUG_KMS(Unexpected AUX channel for port C\n);
-   if (aux_channel == 0x30  port != PORT_D)
+   else if (aux_channel == DP_AUX_D  port != PORT_D)
DRM_DEBUG_KMS(Unexpected AUX channel for port D\n);
}

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 9a40bfb..110d546 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -3184,10 +3184,9 @@ void intel_ddi_init(struct drm_device *dev, enum port 
port)
 dev_priv-vbt.ddi_port_info[port].supports_hdmi);
init_dp = dev_priv-vbt.ddi_port_info[port].supports_dp;
if (!init_dp  !init_hdmi) {
-   DRM_DEBUG_KMS(VBT says port %c is not DVI/HDMI/DP compatible, 
assuming it is\n,
+   DRM_DEBUG_KMS(VBT says port %c is not DVI/HDMI/DP compatible, 
respect it\n,
  port_name(port));
-   init_hdmi = true;
-   init_dp = true;
+   return;
}

intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL);
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 15f0d72..601a12a 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1033,11 +1033,34 @@ static void
 intel_dp_aux_init(struct intel_dp *intel_dp, struct

[Intel-gfx] [PATCH] drm/i915: Set alternate aux for DDI-E

2015-08-07 Thread Rodrigo Vivi
There is no correspondent Aux channel for DDI-E.

So we need to rely on VBT to let us know witch one
is being used instead.

v2: Removing some trailing spaces and giving proper
credit to Xiong that added a nice way to avoid port
conflicts by setting supports_dp = 0 when using
equivalent aux for DDI-E.

Credits-to: Xiong Zhang xiong.y.zh...@intel.com
Signed-off-by: Rodrigo Vivi rodrigo.v...@intel.com
---
 drivers/gpu/drm/i915/i915_drv.h   |  7 +++
 drivers/gpu/drm/i915/intel_bios.c | 23 +++
 drivers/gpu/drm/i915/intel_ddi.c  |  5 ++---
 drivers/gpu/drm/i915/intel_dp.c   | 29 -
 4 files changed, 56 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 4932d29..3ffd962 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1409,6 +1409,11 @@ enum modeset_restore {
MODESET_SUSPENDED,
 };
 
+#define DP_AUX_A 0x40
+#define DP_AUX_B 0x10
+#define DP_AUX_C 0x20
+#define DP_AUX_D 0x30
+
 struct ddi_vbt_port_info {
/*
 * This is an index in the HDMI/DVI DDI buffer translation table.
@@ -1421,6 +1426,8 @@ struct ddi_vbt_port_info {
uint8_t supports_dvi:1;
uint8_t supports_hdmi:1;
uint8_t supports_dp:1;
+
+   uint8_t alternate_aux_channel;
 };
 
 enum psr_lines_to_wait {
diff --git a/drivers/gpu/drm/i915/intel_bios.c 
b/drivers/gpu/drm/i915/intel_bios.c
index 31b1079..990acc2 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -968,13 +968,28 @@ static void parse_ddi_port(struct drm_i915_private 
*dev_priv, enum port port,
}
 
if (is_dp) {
-   if (aux_channel == 0x40  port != PORT_A)
+   if (port == PORT_E) {
+   info-alternate_aux_channel = aux_channel;
+   /* if DDIE share aux channel with other port, then
+* DP couldn't exist on the shared port. Otherwise
+* they share the same aux channel and system
+* couldn't communicate with them seperately. */
+   if (aux_channel == DP_AUX_A)
+   dev_priv-vbt.ddi_port_info[PORT_A].supports_dp 
= 0;
+   else if (aux_channel == DP_AUX_B)
+   dev_priv-vbt.ddi_port_info[PORT_B].supports_dp 
= 0;
+   else if (aux_channel == DP_AUX_C)
+   dev_priv-vbt.ddi_port_info[PORT_C].supports_dp 
= 0;
+   else if (aux_channel == DP_AUX_D)
+   dev_priv-vbt.ddi_port_info[PORT_D].supports_dp 
= 0;
+   }
+   else if (aux_channel == DP_AUX_A  port != PORT_A)
DRM_DEBUG_KMS(Unexpected AUX channel for port A\n);
-   if (aux_channel == 0x10  port != PORT_B)
+   else if (aux_channel == DP_AUX_B  port != PORT_B)
DRM_DEBUG_KMS(Unexpected AUX channel for port B\n);
-   if (aux_channel == 0x20  port != PORT_C)
+   else if (aux_channel == DP_AUX_C  port != PORT_C)
DRM_DEBUG_KMS(Unexpected AUX channel for port C\n);
-   if (aux_channel == 0x30  port != PORT_D)
+   else if (aux_channel == DP_AUX_D  port != PORT_D)
DRM_DEBUG_KMS(Unexpected AUX channel for port D\n);
}
 
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 9a40bfb..110d546 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -3184,10 +3184,9 @@ void intel_ddi_init(struct drm_device *dev, enum port 
port)
 dev_priv-vbt.ddi_port_info[port].supports_hdmi);
init_dp = dev_priv-vbt.ddi_port_info[port].supports_dp;
if (!init_dp  !init_hdmi) {
-   DRM_DEBUG_KMS(VBT says port %c is not DVI/HDMI/DP compatible, 
assuming it is\n,
+   DRM_DEBUG_KMS(VBT says port %c is not DVI/HDMI/DP compatible, 
respect it\n,
  port_name(port));
-   init_hdmi = true;
-   init_dp = true;
+   return;
}
 
intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL);
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 15f0d72..601a12a 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1033,11 +1033,34 @@ static void
 intel_dp_aux_init(struct intel_dp *intel_dp, struct intel_connector *connector)
 {
struct drm_device *dev = intel_dp_to_dev(intel_dp);
+   struct drm_i915_private *dev_priv = dev-dev_private;
struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
enum port port = intel_dig_port-port;
+   struct ddi_vbt_port_info *info = dev_priv-vbt.ddi_port_info[port];
const char *name