diff mbox

drm/i915: Handle PipeC fused off on HSW

Message ID 1450699042-12671-1-git-send-email-gabriel.feceoru@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Feceoru, Gabriel Dec. 21, 2015, 11:57 a.m. UTC
On some HSW boards all pipeC tests fail with various dmesg errors.
This seems to be caused by Pipe C beeing disabled in FUSE_STRAP and
thus reading back the PIPECONF register is always zero.

Fixed by adjusting pipe_count to 2 and thus the pipeC igt tests will
be skipped.

Signed-off-by: Gabriel Feceoru <gabriel.feceoru@intel.com>
---
 drivers/gpu/drm/i915/i915_dma.c | 3 +++
 drivers/gpu/drm/i915/i915_reg.h | 1 +
 2 files changed, 4 insertions(+)

Comments

Ville Syrjälä Jan. 11, 2016, 5:56 p.m. UTC | #1
On Mon, Dec 21, 2015 at 01:57:22PM +0200, Gabriel Feceoru wrote:
> On some HSW boards all pipeC tests fail with various dmesg errors.
> This seems to be caused by Pipe C beeing disabled in FUSE_STRAP and
> thus reading back the PIPECONF register is always zero.
> 
> Fixed by adjusting pipe_count to 2 and thus the pipeC igt tests will
> be skipped.
> 
> Signed-off-by: Gabriel Feceoru <gabriel.feceoru@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_dma.c | 3 +++
>  drivers/gpu/drm/i915/i915_reg.h | 1 +
>  2 files changed, 4 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> index 988a380..130a496 100644
> --- a/drivers/gpu/drm/i915/i915_dma.c
> +++ b/drivers/gpu/drm/i915/i915_dma.c
> @@ -813,6 +813,9 @@ static void intel_device_info_runtime_init(struct drm_device *dev)
>  		     !(sfuse_strap & SFUSE_STRAP_FUSE_LOCK))) {
>  			DRM_INFO("Display fused off, disabling\n");
>  			info->num_pipes = 0;
> +		} else if (I915_READ(FUSE_STRAP) & HSW_PIPE_C_DISABLE) {
> +			DRM_INFO("PipeC fused off\n");
> +			info->num_pipes = 2;
>  		}
>  	}
>  
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 007ae83..0432a5f 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -5940,6 +5940,7 @@ enum skl_disp_power_wells {
>  #define  ILK_INTERNAL_GRAPHICS_DISABLE	(1 << 31)
>  #define  ILK_INTERNAL_DISPLAY_DISABLE	(1 << 30)
>  #define  ILK_DISPLAY_DEBUG_DISABLE	(1 << 29)
> +#define  HSW_PIPE_C_DISABLE		(1 << 28)

According to Bspec the bit is already present on IVB.

>  #define  ILK_HDCP_DISABLE		(1 << 25)
>  #define  ILK_eDP_A_DISABLE		(1 << 24)
>  #define  HSW_CDCLK_LIMIT		(1 << 24)
> -- 
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Feceoru, Gabriel Jan. 12, 2016, 3 p.m. UTC | #2
On 11.01.2016 19:56, Ville Syrjälä wrote:
> On Mon, Dec 21, 2015 at 01:57:22PM +0200, Gabriel Feceoru wrote:
>> On some HSW boards all pipeC tests fail with various dmesg errors.
>> This seems to be caused by Pipe C beeing disabled in FUSE_STRAP and
>> thus reading back the PIPECONF register is always zero.
>>
>> Fixed by adjusting pipe_count to 2 and thus the pipeC igt tests will
>> be skipped.
>>
>> Signed-off-by: Gabriel Feceoru <gabriel.feceoru@intel.com>
>> ---
>>   drivers/gpu/drm/i915/i915_dma.c | 3 +++
>>   drivers/gpu/drm/i915/i915_reg.h | 1 +
>>   2 files changed, 4 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
>> index 988a380..130a496 100644
>> --- a/drivers/gpu/drm/i915/i915_dma.c
>> +++ b/drivers/gpu/drm/i915/i915_dma.c
>> @@ -813,6 +813,9 @@ static void intel_device_info_runtime_init(struct drm_device *dev)
>>   		     !(sfuse_strap & SFUSE_STRAP_FUSE_LOCK))) {
>>   			DRM_INFO("Display fused off, disabling\n");
>>   			info->num_pipes = 0;
>> +		} else if (I915_READ(FUSE_STRAP) & HSW_PIPE_C_DISABLE) {
>> +			DRM_INFO("PipeC fused off\n");
>> +			info->num_pipes = 2;
>>   		}
>>   	}
>>
>> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
>> index 007ae83..0432a5f 100644
>> --- a/drivers/gpu/drm/i915/i915_reg.h
>> +++ b/drivers/gpu/drm/i915/i915_reg.h
>> @@ -5940,6 +5940,7 @@ enum skl_disp_power_wells {
>>   #define  ILK_INTERNAL_GRAPHICS_DISABLE	(1 << 31)
>>   #define  ILK_INTERNAL_DISPLAY_DISABLE	(1 << 30)
>>   #define  ILK_DISPLAY_DEBUG_DISABLE	(1 << 29)
>> +#define  HSW_PIPE_C_DISABLE		(1 << 28)
>
> According to Bspec the bit is already present on IVB.
IVB and HSW are both Gen7. Are you suggesting it should be named 
IVB_PIPE_C_DISABLE instead?
>
>>   #define  ILK_HDCP_DISABLE		(1 << 25)
>>   #define  ILK_eDP_A_DISABLE		(1 << 24)
>>   #define  HSW_CDCLK_LIMIT		(1 << 24)
>> --
>> 1.9.1
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
Ville Syrjälä Jan. 12, 2016, 3:08 p.m. UTC | #3
On Tue, Jan 12, 2016 at 05:00:16PM +0200, Gabriel Feceoru wrote:
> 
> 
> On 11.01.2016 19:56, Ville Syrjälä wrote:
> > On Mon, Dec 21, 2015 at 01:57:22PM +0200, Gabriel Feceoru wrote:
> >> On some HSW boards all pipeC tests fail with various dmesg errors.
> >> This seems to be caused by Pipe C beeing disabled in FUSE_STRAP and
> >> thus reading back the PIPECONF register is always zero.
> >>
> >> Fixed by adjusting pipe_count to 2 and thus the pipeC igt tests will
> >> be skipped.
> >>
> >> Signed-off-by: Gabriel Feceoru <gabriel.feceoru@intel.com>
> >> ---
> >>   drivers/gpu/drm/i915/i915_dma.c | 3 +++
> >>   drivers/gpu/drm/i915/i915_reg.h | 1 +
> >>   2 files changed, 4 insertions(+)
> >>
> >> diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> >> index 988a380..130a496 100644
> >> --- a/drivers/gpu/drm/i915/i915_dma.c
> >> +++ b/drivers/gpu/drm/i915/i915_dma.c
> >> @@ -813,6 +813,9 @@ static void intel_device_info_runtime_init(struct drm_device *dev)
> >>   		     !(sfuse_strap & SFUSE_STRAP_FUSE_LOCK))) {
> >>   			DRM_INFO("Display fused off, disabling\n");
> >>   			info->num_pipes = 0;
> >> +		} else if (I915_READ(FUSE_STRAP) & HSW_PIPE_C_DISABLE) {
> >> +			DRM_INFO("PipeC fused off\n");
> >> +			info->num_pipes = 2;
> >>   		}
> >>   	}
> >>
> >> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> >> index 007ae83..0432a5f 100644
> >> --- a/drivers/gpu/drm/i915/i915_reg.h
> >> +++ b/drivers/gpu/drm/i915/i915_reg.h
> >> @@ -5940,6 +5940,7 @@ enum skl_disp_power_wells {
> >>   #define  ILK_INTERNAL_GRAPHICS_DISABLE	(1 << 31)
> >>   #define  ILK_INTERNAL_DISPLAY_DISABLE	(1 << 30)
> >>   #define  ILK_DISPLAY_DEBUG_DISABLE	(1 << 29)
> >> +#define  HSW_PIPE_C_DISABLE		(1 << 28)
> >
> > According to Bspec the bit is already present on IVB.
> IVB and HSW are both Gen7. Are you suggesting it should be named 
> IVB_PIPE_C_DISABLE instead?

Yes.

> >
> >>   #define  ILK_HDCP_DISABLE		(1 << 25)
> >>   #define  ILK_eDP_A_DISABLE		(1 << 24)
> >>   #define  HSW_CDCLK_LIMIT		(1 << 24)
> >> --
> >> 1.9.1
> >>
> >> _______________________________________________
> >> Intel-gfx mailing list
> >> Intel-gfx@lists.freedesktop.org
> >> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> >
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 988a380..130a496 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -813,6 +813,9 @@  static void intel_device_info_runtime_init(struct drm_device *dev)
 		     !(sfuse_strap & SFUSE_STRAP_FUSE_LOCK))) {
 			DRM_INFO("Display fused off, disabling\n");
 			info->num_pipes = 0;
+		} else if (I915_READ(FUSE_STRAP) & HSW_PIPE_C_DISABLE) {
+			DRM_INFO("PipeC fused off\n");
+			info->num_pipes = 2;
 		}
 	}
 
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 007ae83..0432a5f 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -5940,6 +5940,7 @@  enum skl_disp_power_wells {
 #define  ILK_INTERNAL_GRAPHICS_DISABLE	(1 << 31)
 #define  ILK_INTERNAL_DISPLAY_DISABLE	(1 << 30)
 #define  ILK_DISPLAY_DEBUG_DISABLE	(1 << 29)
+#define  HSW_PIPE_C_DISABLE		(1 << 28)
 #define  ILK_HDCP_DISABLE		(1 << 25)
 #define  ILK_eDP_A_DISABLE		(1 << 24)
 #define  HSW_CDCLK_LIMIT		(1 << 24)