drm/i915/opregion: try to validate RVDA VBT only if it's there
authorJani Nikula <jani.nikula@intel.com>
Wed, 29 Mar 2017 10:32:56 +0000 (13:32 +0300)
committerJani Nikula <jani.nikula@intel.com>
Thu, 30 Mar 2017 06:11:34 +0000 (09:11 +0300)
Seems more sensible this way, and reduces indent for the more common
case.

Reviewed-by: Bob Paauwe <bob.j.paauwe@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1490783578-6065-2-git-send-email-jani.nikula@intel.com
drivers/gpu/drm/i915/intel_opregion.c

index 76a39ee6d005428cdb8fc1e547bfb7ff7295fb5e..2b64cb6691eba37a9ec970bc734968d571f2e4d8 100644 (file)
@@ -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: