Re: [Intel-gfx] [PATCH] drm/i915: Set alternate aux for DDI-E
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
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
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