drm/i915: move "no VBT in opregion" quirk to intel_opregion_setup()
authorJani Nikula <jani.nikula@intel.com>
Mon, 14 Dec 2015 10:50:46 +0000 (12:50 +0200)
committerJani Nikula <jani.nikula@intel.com>
Wed, 16 Dec 2015 09:21:02 +0000 (11:21 +0200)
Check the quirk in intel_opregion_setup(), and don't initialize
opregion->vbt at all if the quirk says it's not present, hiding the
quirk from the rest of the driver.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/7cdc86eb441f8b7075142445a800b07ecf8c76cb.1450089383.git.jani.nikula@intel.com
drivers/gpu/drm/i915/intel_bios.c
drivers/gpu/drm/i915/intel_opregion.c

index 070470fe9a91e396960f5f5550691dae46713163..401e1141f55f70c1570a4587a2d2ea136721a904 100644 (file)
@@ -24,7 +24,7 @@
  *    Eric Anholt <eric@anholt.net>
  *
  */
-#include <linux/dmi.h>
+
 #include <drm/drm_dp_helper.h>
 #include <drm/drmP.h>
 #include <drm/i915_drm.h>
@@ -1214,26 +1214,6 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)
        }
 }
 
-static int intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
-{
-       DRM_DEBUG_KMS("Falling back to manually reading VBT from "
-                     "VBIOS ROM for %s\n",
-                     id->ident);
-       return 1;
-}
-
-static const struct dmi_system_id intel_no_opregion_vbt[] = {
-       {
-               .callback = intel_no_opregion_vbt_callback,
-               .ident = "ThinkCentre A57",
-               .matches = {
-                       DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
-                       DMI_MATCH(DMI_PRODUCT_NAME, "97027RG"),
-               },
-       },
-       { }
-};
-
 static const struct bdb_header *validate_vbt(const void *base,
                                             size_t size,
                                             const void *_vbt,
@@ -1317,7 +1297,7 @@ intel_parse_bios(struct drm_device *dev)
        init_vbt_defaults(dev_priv);
 
        /* XXX Should this validation be moved to intel_opregion.c? */
-       if (!dmi_check_system(intel_no_opregion_vbt) && dev_priv->opregion.vbt)
+       if (dev_priv->opregion.vbt)
                bdb = validate_vbt(dev_priv->opregion.header, OPREGION_SIZE,
                                   dev_priv->opregion.vbt, "OpRegion");
 
index cd97b9a5df57cc592b402fa1b823ae4cb6af5616..5b9fc790d30089733fa40483db6a9a5ad1b8b2d6 100644 (file)
@@ -26,6 +26,7 @@
  */
 
 #include <linux/acpi.h>
+#include <linux/dmi.h>
 #include <acpi/video.h>
 
 #include <drm/drmP.h>
@@ -904,6 +905,25 @@ static void swsci_setup(struct drm_device *dev)
 static inline void swsci_setup(struct drm_device *dev) {}
 #endif  /* CONFIG_ACPI */
 
+static int intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
+{
+       DRM_DEBUG_KMS("Falling back to manually reading VBT from "
+                     "VBIOS ROM for %s\n", id->ident);
+       return 1;
+}
+
+static const struct dmi_system_id intel_no_opregion_vbt[] = {
+       {
+               .callback = intel_no_opregion_vbt_callback,
+               .ident = "ThinkCentre A57",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "97027RG"),
+               },
+       },
+       { }
+};
+
 int intel_opregion_setup(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
@@ -942,8 +962,6 @@ int intel_opregion_setup(struct drm_device *dev)
                goto err_out;
        }
        opregion->header = base;
-       opregion->vbt = base + OPREGION_VBT_OFFSET;
-
        opregion->lid_state = base + ACPI_CLID;
 
        mboxes = opregion->header->mboxes;
@@ -968,6 +986,9 @@ int intel_opregion_setup(struct drm_device *dev)
        if (mboxes & MBOX_ASLE_EXT)
                DRM_DEBUG_DRIVER("ASLE extension supported\n");
 
+       if (!dmi_check_system(intel_no_opregion_vbt))
+               opregion->vbt = base + OPREGION_VBT_OFFSET;
+
        return 0;
 
 err_out: