[Intel-gfx] [PATCH RESEND 2/4] drm/i915/opregion: try to validate RVDA VBT only if it's there

Bob Paauwe bob.j.paauwe at intel.com
Wed Mar 29 17:53:31 UTC 2017


On Wed, 29 Mar 2017 13:32:56 +0300
Jani Nikula <jani.nikula at intel.com> wrote:

> Seems more sensible this way, and reduces indent for the more common
> case.
> 
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>

Reviewed-by: Bob Paauwe <bob.j.paauwe at intel.com>

> ---
>  drivers/gpu/drm/i915/intel_opregion.c | 41 +++++++++++++++++------------------
>  1 file changed, 20 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_opregion.c b/drivers/gpu/drm/i915/intel_opregion.c
> index 76a39ee6d005..2b64cb6691eb 100644
> --- a/drivers/gpu/drm/i915/intel_opregion.c
> +++ b/drivers/gpu/drm/i915/intel_opregion.c
> @@ -920,8 +920,8 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
>  	char buf[sizeof(OPREGION_SIGNATURE)];
>  	int err = 0;
>  	void *base;
> -	const void *vbt = NULL;
> -	u32 vbt_size = 0;
> +	const void *vbt;
> +	u32 vbt_size;
>  
>  	BUILD_BUG_ON(sizeof(struct opregion_header) != 0x100);
>  	BUILD_BUG_ON(sizeof(struct opregion_acpi) != 0x100);
> @@ -984,30 +984,29 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
>  					  MEMREMAP_WB);
>  		vbt = opregion->rvda;
>  		vbt_size = opregion->asle->rvds;
> +		if (intel_bios_is_valid_vbt(vbt, vbt_size)) {
> +			DRM_DEBUG_KMS("Found valid VBT in ACPI OpRegion (RVDA)\n");
> +			opregion->vbt = vbt;
> +			opregion->vbt_size = vbt_size;
> +			goto out;
> +		}
>  	}
>  
> +	vbt = base + OPREGION_VBT_OFFSET;
> +	/*
> +	 * The VBT specification says that if the ASLE ext mailbox is not used
> +	 * its area is reserved, but on some CHT boards the VBT extends into the
> +	 * ASLE ext area. Allow this even though it is against the spec, so we
> +	 * do not end up rejecting the VBT on those boards (and end up not
> +	 * finding the LCD panel because of this).
> +	 */
> +	vbt_size = (mboxes & MBOX_ASLE_EXT) ?
> +		OPREGION_ASLE_EXT_OFFSET : OPREGION_SIZE;
> +	vbt_size -= OPREGION_VBT_OFFSET;
>  	if (intel_bios_is_valid_vbt(vbt, vbt_size)) {
> -		DRM_DEBUG_KMS("Found valid VBT in ACPI OpRegion (RVDA)\n");
> +		DRM_DEBUG_KMS("Found valid VBT in ACPI OpRegion (Mailbox #4)\n");
>  		opregion->vbt = vbt;
>  		opregion->vbt_size = vbt_size;
> -	} else {
> -		vbt = base + OPREGION_VBT_OFFSET;
> -		/*
> -		 * The VBT specification says that if the ASLE ext mailbox is
> -		 * not used its area is reserved, but on some CHT boards the VBT
> -		 * extends into the ASLE ext area. Allow this even though it is
> -		 * against the spec, so we do not end up rejecting the VBT on
> -		 * those boards (and end up not finding the LCD panel because of
> -		 * this).
> -		 */
> -		vbt_size = (mboxes & MBOX_ASLE_EXT) ?
> -			OPREGION_ASLE_EXT_OFFSET : OPREGION_SIZE;
> -		vbt_size -= OPREGION_VBT_OFFSET;
> -		if (intel_bios_is_valid_vbt(vbt, vbt_size)) {
> -			DRM_DEBUG_KMS("Found valid VBT in ACPI OpRegion (Mailbox #4)\n");
> -			opregion->vbt = vbt;
> -			opregion->vbt_size = vbt_size;
> -		}
>  	}
>  
>  out:



-- 
--
Bob Paauwe                  
Bob.J.Paauwe at intel.com
IOTG / PED Software Organization
Intel Corp.  Folsom, CA
(916) 356-6193    



More information about the Intel-gfx mailing list