[Intel-gfx] [PATCH] drm/i915: Add sanity check for LVDS timing from VBT

ykzhao yakui.zhao at intel.com
Fri Jul 10 09:16:25 CEST 2009


On Fri, 2009-07-10 at 14:51 +0800, Zhenyu Wang wrote:
> From: Zhenyu Wang <zhenyu.z.wang at intel.com>
> 
> Some invalid LVDS timing block has been observed.
> It's better to check modeline from VBT instead of
> possible fail later.
> 
> Signed-off-by: Zhenyu Wang <zhenyu.z.wang at intel.com>
> ---
>  drivers/gpu/drm/i915/intel_bios.c |   32 +++++++++++++++++++++-----------
>  1 files changed, 21 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index 7cc4471..30f3df5 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -59,7 +59,7 @@ find_section(struct bdb_header *bdb, int section_id)
>  	return NULL;
>  }
>  
> -static void
> +static bool
>  fill_detail_timing_data(struct drm_display_mode *panel_fixed_mode,
>  			struct lvds_dvo_timing *dvo_timing)
>  {
> @@ -89,7 +89,19 @@ fill_detail_timing_data(struct drm_display_mode *panel_fixed_mode,
>  	if (panel_fixed_mode->vsync_end > panel_fixed_mode->vtotal)
>  		panel_fixed_mode->vtotal = panel_fixed_mode->vsync_end + 1;
>  
> +	/* some sanity check on timing values */
> +	if (panel_fixed_mode->hdisplay == 0 ||
> +		panel_fixed_mode->vdisplay == 0 ||
> +		panel_fixed_mode->htotal == 0 ||
> +		panel_fixed_mode->vtotal == 0) {
> +		DRM_DEBUG_MODE(DRM_NAME,
> +				"Invalid LVDS timing in VBIOS VBT:\n");
Please use the DRM_DEBUG_KMS instead of DRM_DEBUG_MODE.
> +		drm_mode_debug_printmodeline(panel_fixed_mode);
> +		return false;
> +	}
> +
>  	drm_mode_set_name(panel_fixed_mode);
> +	return true;
>  }
>  
>  /* Try to find integrated panel data */
> @@ -144,12 +156,11 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
>  
>  	panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode), GFP_KERNEL);
>  
> -	fill_detail_timing_data(panel_fixed_mode, dvo_timing);
> -
> -	dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode;
> -
> -	DRM_DEBUG("Found panel mode in BIOS VBT tables:\n");
> -	drm_mode_debug_printmodeline(panel_fixed_mode);
> +	if (fill_detail_timing_data(panel_fixed_mode, dvo_timing)) {
> +		dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode;
> +		DRM_DEBUG("Found panel mode in BIOS VBT tables:\n");
Please use the DRM_DEBUG_KMS instead of DRM_DEBUG.
Thanks.
> +		drm_mode_debug_printmodeline(panel_fixed_mode);
> +	}
>  
>  	return;
>  }
> @@ -178,10 +189,9 @@ parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
>  	if (!panel_fixed_mode)
>  		return;
>  
> -	fill_detail_timing_data(panel_fixed_mode,
> -			dvo_timing + sdvo_lvds_options->panel_type);
> -
> -	dev_priv->sdvo_lvds_vbt_mode = panel_fixed_mode;
> +	if (fill_detail_timing_data(panel_fixed_mode,
> +			dvo_timing + sdvo_lvds_options->panel_type))
> +		dev_priv->sdvo_lvds_vbt_mode = panel_fixed_mode;
>  
>  	return;
>  }




More information about the Intel-gfx mailing list