.enable_ppgtt = -1,
        .enable_psr = 0,
        .preliminary_hw_support = IS_ENABLED(CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT),
-       .disable_power_well = 1,
+       .disable_power_well = -1,
        .enable_ips = 1,
        .prefault_disable = 0,
        .load_detect_test = 0,
 
 module_param_named_unsafe(disable_power_well, i915.disable_power_well, int, 0600);
 MODULE_PARM_DESC(disable_power_well,
-       "Disable the power well when possible (default: true)");
+       "Disable display power wells when possible "
+       "(-1=auto [default], 0=power wells always on, 1=power wells disabled when possible)");
 
 module_param_named_unsafe(enable_ips, i915.enable_ips, int, 0600);
 MODULE_PARM_DESC(enable_ips, "Enable IPS (default: true)");
 
        }
 };
 
+static int
+sanitize_disable_power_well_option(const struct drm_i915_private *dev_priv,
+                                  int disable_power_well)
+{
+       if (disable_power_well >= 0)
+               return !!disable_power_well;
+
+       if (IS_SKYLAKE(dev_priv)) {
+               DRM_DEBUG_KMS("Disabling display power well support\n");
+               return 0;
+       }
+
+       return 1;
+}
+
 #define set_power_wells(power_domains, __power_wells) ({               \
        (power_domains)->power_wells = (__power_wells);                 \
        (power_domains)->power_well_count = ARRAY_SIZE(__power_wells);  \
 {
        struct i915_power_domains *power_domains = &dev_priv->power_domains;
 
+       i915.disable_power_well = sanitize_disable_power_well_option(dev_priv,
+                                                    i915.disable_power_well);
+
        mutex_init(&power_domains->lock);
 
        /*