vlv eDP BIOS Compatiblity to EMGD generated BIOS
diff mbox

Message ID 1435041390-24136-1-git-send-email-lampersperger.andreas@heidenhain.de
State New
Headers show

Commit Message

Lampersperger Andreas June 23, 2015, 6:36 a.m. UTC
When the i915.ko identify an eDP output on a valleyview
board, it should be more slackly. The reason for that is,
that BIOS DATA TABLES generated with intel BMP (Binary
Modification Program) do not set bits for NOT_HDMI or
DIGITAL_OUTPUT on the device type. Due to Adolfo
Sanchez from Intel EMGD, this is not possible.
To solve this problem and enable i915.ko on embedded
vlv boards with eDP, we ignore this two bits.

Signed-off-by: Andreas Lampersperger <lampersperger.andreas@heidenhain.de>
---
 drivers/gpu/drm/i915/intel_bios.h | 10 ++++++++++
 drivers/gpu/drm/i915/intel_dp.c   | 10 ++++++++--
 2 files changed, 18 insertions(+), 2 deletions(-)

Comments

Ville Syrjala June 29, 2015, 12:38 p.m. UTC | #1
On Tue, Jun 23, 2015 at 08:36:30AM +0200, Andreas Lampersperger wrote:
> When the i915.ko identify an eDP output on a valleyview
> board, it should be more slackly. The reason for that is,
> that BIOS DATA TABLES generated with intel BMP (Binary
> Modification Program) do not set bits for NOT_HDMI or
> DIGITAL_OUTPUT on the device type. Due to Adolfo
> Sanchez from Intel EMGD, this is not possible.
> To solve this problem and enable i915.ko on embedded
> vlv boards with eDP, we ignore this two bits.
> 
> Signed-off-by: Andreas Lampersperger <lampersperger.andreas@heidenhain.de>
> ---
>  drivers/gpu/drm/i915/intel_bios.h | 10 ++++++++++
>  drivers/gpu/drm/i915/intel_dp.c   | 10 ++++++++--
>  2 files changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h
> index af0b476..c42161f 100644
> --- a/drivers/gpu/drm/i915/intel_bios.h
> +++ b/drivers/gpu/drm/i915/intel_bios.h
> @@ -742,6 +742,16 @@ int intel_parse_bios(struct drm_device *dev);
>  	 DEVICE_TYPE_DIGITAL_OUTPUT | \
>  	 DEVICE_TYPE_ANALOG_OUTPUT)
>  
> +/*
> + * We dont look on DEVICE_TYPE_NOT_HDMI_OUTPUT an DEVICE_TYPE_DIGITAL_OUTPUT
> + * on valleyview, because intels BMP-generated BIOS don't sets these 
> + * BITS for eDP ports
> + */ 
> +#define DEVICE_TYPE_eDP_BITS_VLV \
> +	(DEVICE_TYPE_eDP_BITS &\
> +	 (~ DEVICE_TYPE_NOT_HDMI_OUTPUT ) &\
> +	 (~ DEVICE_TYPE_DIGITAL_OUTPUT ) )

I would suggest just dropping those bits from DEVICE_TYPE_eDP_BITS and
see what happens. We still have DP + internal in there, so it should be
enough.

> +	   
>  /* define the DVO port for HDMI output type */
>  #define		DVO_B		1
>  #define		DVO_C		2
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index f52eef1..51c753f 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -5036,6 +5036,7 @@ bool intel_dp_is_edp(struct drm_device *dev, enum port port)
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	union child_device_config *p_child;
>  	int i;
> +	u16 eDP_bits;
>  	static const short port_mapping[] = {
>  		[PORT_B] = PORT_IDPB,
>  		[PORT_C] = PORT_IDPC,
> @@ -5047,13 +5048,18 @@ bool intel_dp_is_edp(struct drm_device *dev, enum port port)
>  
>  	if (!dev_priv->vbt.child_dev_num)
>  		return false;
> +	
> +	if (IS_VALLEYVIEW(dev))
> +	  eDP_bits = DEVICE_TYPE_eDP_BITS_VLV;
> +	else
> +	  eDP_bits = DEVICE_TYPE_eDP_BITS;
>  
>  	for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
>  		p_child = dev_priv->vbt.child_dev + i;
>  
>  		if (p_child->common.dvo_port == port_mapping[port] &&
> -		    (p_child->common.device_type & DEVICE_TYPE_eDP_BITS) ==
> -		    (DEVICE_TYPE_eDP & DEVICE_TYPE_eDP_BITS))
> +		    (p_child->common.device_type & eDP_bits) ==
> +		    (DEVICE_TYPE_eDP & eDP_bits))
>  			return true;
>  	}
>  	return false;
> -- 
> 2.1.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Jani Nikula Oct. 13, 2015, 12:15 p.m. UTC | #2
On Tue, 23 Jun 2015, Andreas Lampersperger <lampersperger.andreas@heidenhain.de> wrote:
> When the i915.ko identify an eDP output on a valleyview
> board, it should be more slackly. The reason for that is,
> that BIOS DATA TABLES generated with intel BMP (Binary
> Modification Program) do not set bits for NOT_HDMI or
> DIGITAL_OUTPUT on the device type. Due to Adolfo
> Sanchez from Intel EMGD, this is not possible.
> To solve this problem and enable i915.ko on embedded
> vlv boards with eDP, we ignore this two bits.

Going through some old patches, this should be fixed by

commit 972e7d71c82ea70100b808695d5cf735c1df5ef8
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Fri Sep 11 21:04:39 2015 +0300

    drm/i915: Ignore "digital output" and "not HDMI output" bits for eDP detection

BR,
Jani.

>
> Signed-off-by: Andreas Lampersperger <lampersperger.andreas@heidenhain.de>
> ---
>  drivers/gpu/drm/i915/intel_bios.h | 10 ++++++++++
>  drivers/gpu/drm/i915/intel_dp.c   | 10 ++++++++--
>  2 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h
> index af0b476..c42161f 100644
> --- a/drivers/gpu/drm/i915/intel_bios.h
> +++ b/drivers/gpu/drm/i915/intel_bios.h
> @@ -742,6 +742,16 @@ int intel_parse_bios(struct drm_device *dev);
>  	 DEVICE_TYPE_DIGITAL_OUTPUT | \
>  	 DEVICE_TYPE_ANALOG_OUTPUT)
>  
> +/*
> + * We dont look on DEVICE_TYPE_NOT_HDMI_OUTPUT an DEVICE_TYPE_DIGITAL_OUTPUT
> + * on valleyview, because intels BMP-generated BIOS don't sets these 
> + * BITS for eDP ports
> + */ 
> +#define DEVICE_TYPE_eDP_BITS_VLV \
> +	(DEVICE_TYPE_eDP_BITS &\
> +	 (~ DEVICE_TYPE_NOT_HDMI_OUTPUT ) &\
> +	 (~ DEVICE_TYPE_DIGITAL_OUTPUT ) )
> +	   
>  /* define the DVO port for HDMI output type */
>  #define		DVO_B		1
>  #define		DVO_C		2
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index f52eef1..51c753f 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -5036,6 +5036,7 @@ bool intel_dp_is_edp(struct drm_device *dev, enum port port)
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	union child_device_config *p_child;
>  	int i;
> +	u16 eDP_bits;
>  	static const short port_mapping[] = {
>  		[PORT_B] = PORT_IDPB,
>  		[PORT_C] = PORT_IDPC,
> @@ -5047,13 +5048,18 @@ bool intel_dp_is_edp(struct drm_device *dev, enum port port)
>  
>  	if (!dev_priv->vbt.child_dev_num)
>  		return false;
> +	
> +	if (IS_VALLEYVIEW(dev))
> +	  eDP_bits = DEVICE_TYPE_eDP_BITS_VLV;
> +	else
> +	  eDP_bits = DEVICE_TYPE_eDP_BITS;
>  
>  	for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
>  		p_child = dev_priv->vbt.child_dev + i;
>  
>  		if (p_child->common.dvo_port == port_mapping[port] &&
> -		    (p_child->common.device_type & DEVICE_TYPE_eDP_BITS) ==
> -		    (DEVICE_TYPE_eDP & DEVICE_TYPE_eDP_BITS))
> +		    (p_child->common.device_type & eDP_bits) ==
> +		    (DEVICE_TYPE_eDP & eDP_bits))
>  			return true;
>  	}
>  	return false;
> -- 
> 2.1.4
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Patch
diff mbox

diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h
index af0b476..c42161f 100644
--- a/drivers/gpu/drm/i915/intel_bios.h
+++ b/drivers/gpu/drm/i915/intel_bios.h
@@ -742,6 +742,16 @@  int intel_parse_bios(struct drm_device *dev);
 	 DEVICE_TYPE_DIGITAL_OUTPUT | \
 	 DEVICE_TYPE_ANALOG_OUTPUT)
 
+/*
+ * We dont look on DEVICE_TYPE_NOT_HDMI_OUTPUT an DEVICE_TYPE_DIGITAL_OUTPUT
+ * on valleyview, because intels BMP-generated BIOS don't sets these 
+ * BITS for eDP ports
+ */ 
+#define DEVICE_TYPE_eDP_BITS_VLV \
+	(DEVICE_TYPE_eDP_BITS &\
+	 (~ DEVICE_TYPE_NOT_HDMI_OUTPUT ) &\
+	 (~ DEVICE_TYPE_DIGITAL_OUTPUT ) )
+	   
 /* define the DVO port for HDMI output type */
 #define		DVO_B		1
 #define		DVO_C		2
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index f52eef1..51c753f 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -5036,6 +5036,7 @@  bool intel_dp_is_edp(struct drm_device *dev, enum port port)
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	union child_device_config *p_child;
 	int i;
+	u16 eDP_bits;
 	static const short port_mapping[] = {
 		[PORT_B] = PORT_IDPB,
 		[PORT_C] = PORT_IDPC,
@@ -5047,13 +5048,18 @@  bool intel_dp_is_edp(struct drm_device *dev, enum port port)
 
 	if (!dev_priv->vbt.child_dev_num)
 		return false;
+	
+	if (IS_VALLEYVIEW(dev))
+	  eDP_bits = DEVICE_TYPE_eDP_BITS_VLV;
+	else
+	  eDP_bits = DEVICE_TYPE_eDP_BITS;
 
 	for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
 		p_child = dev_priv->vbt.child_dev + i;
 
 		if (p_child->common.dvo_port == port_mapping[port] &&
-		    (p_child->common.device_type & DEVICE_TYPE_eDP_BITS) ==
-		    (DEVICE_TYPE_eDP & DEVICE_TYPE_eDP_BITS))
+		    (p_child->common.device_type & eDP_bits) ==
+		    (DEVICE_TYPE_eDP & eDP_bits))
 			return true;
 	}
 	return false;