drm/i915: move module parameters into a struct, in a new file
With 20+ module parameters, I think referring to them via a struct improves clarity over just having a bunch of globals. While at it, move the parameter initialization and definitions into a new file i915_params.c to reduce clutter in i915_drv.c. Apart from the ill-named i915_enable_rc6, i915_enable_fbc and i915_enable_ppgtt parameters, for which we lose the "i915_" prefix internally, the module parameters now look the same both on the kernel command line and in code. For example, "i915.modeset". The downsides of the change are losing static on a couple of variables and not having the initialization and module_param_named() right next to each other. On the other hand, all module parameters are now defined in one place at i915_params.c. Plus you can do this to find all module parameter references: $ git grep "i915\." -- drivers/gpu/drm/i915 v2: - move the definitions into a new file - s/i915_params/i915/ - make i915_try_reset i915.reset, for consistency Signed-off-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Родитель
2b7e8082b2
Коммит
d330a9530c
|
@ -14,6 +14,7 @@ i915-y := i915_drv.o i915_dma.o i915_irq.o \
|
||||||
i915_gem_gtt.o \
|
i915_gem_gtt.o \
|
||||||
i915_gem_stolen.o \
|
i915_gem_stolen.o \
|
||||||
i915_gem_tiling.o \
|
i915_gem_tiling.o \
|
||||||
|
i915_params.o \
|
||||||
i915_sysfs.o \
|
i915_sysfs.o \
|
||||||
i915_trace_points.o \
|
i915_trace_points.o \
|
||||||
i915_ums.o \
|
i915_ums.o \
|
||||||
|
|
|
@ -38,120 +38,6 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <drm/drm_crtc_helper.h>
|
#include <drm/drm_crtc_helper.h>
|
||||||
|
|
||||||
static int i915_modeset __read_mostly = -1;
|
|
||||||
module_param_named(modeset, i915_modeset, int, 0400);
|
|
||||||
MODULE_PARM_DESC(modeset,
|
|
||||||
"Use kernel modesetting [KMS] (0=DRM_I915_KMS from .config, "
|
|
||||||
"1=on, -1=force vga console preference [default])");
|
|
||||||
|
|
||||||
int i915_panel_ignore_lid __read_mostly = 1;
|
|
||||||
module_param_named(panel_ignore_lid, i915_panel_ignore_lid, int, 0600);
|
|
||||||
MODULE_PARM_DESC(panel_ignore_lid,
|
|
||||||
"Override lid status (0=autodetect, 1=autodetect disabled [default], "
|
|
||||||
"-1=force lid closed, -2=force lid open)");
|
|
||||||
|
|
||||||
unsigned int i915_powersave __read_mostly = 1;
|
|
||||||
module_param_named(powersave, i915_powersave, int, 0600);
|
|
||||||
MODULE_PARM_DESC(powersave,
|
|
||||||
"Enable powersavings, fbc, downclocking, etc. (default: true)");
|
|
||||||
|
|
||||||
int i915_semaphores __read_mostly = -1;
|
|
||||||
module_param_named(semaphores, i915_semaphores, int, 0400);
|
|
||||||
MODULE_PARM_DESC(semaphores,
|
|
||||||
"Use semaphores for inter-ring sync (default: -1 (use per-chip defaults))");
|
|
||||||
|
|
||||||
int i915_enable_rc6 __read_mostly = -1;
|
|
||||||
module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0400);
|
|
||||||
MODULE_PARM_DESC(i915_enable_rc6,
|
|
||||||
"Enable power-saving render C-state 6. "
|
|
||||||
"Different stages can be selected via bitmask values "
|
|
||||||
"(0 = disable; 1 = enable rc6; 2 = enable deep rc6; 4 = enable deepest rc6). "
|
|
||||||
"For example, 3 would enable rc6 and deep rc6, and 7 would enable everything. "
|
|
||||||
"default: -1 (use per-chip default)");
|
|
||||||
|
|
||||||
int i915_enable_fbc __read_mostly = -1;
|
|
||||||
module_param_named(i915_enable_fbc, i915_enable_fbc, int, 0600);
|
|
||||||
MODULE_PARM_DESC(i915_enable_fbc,
|
|
||||||
"Enable frame buffer compression for power savings "
|
|
||||||
"(default: -1 (use per-chip default))");
|
|
||||||
|
|
||||||
unsigned int i915_lvds_downclock __read_mostly = 0;
|
|
||||||
module_param_named(lvds_downclock, i915_lvds_downclock, int, 0400);
|
|
||||||
MODULE_PARM_DESC(lvds_downclock,
|
|
||||||
"Use panel (LVDS/eDP) downclocking for power savings "
|
|
||||||
"(default: false)");
|
|
||||||
|
|
||||||
int i915_lvds_channel_mode __read_mostly;
|
|
||||||
module_param_named(lvds_channel_mode, i915_lvds_channel_mode, int, 0600);
|
|
||||||
MODULE_PARM_DESC(lvds_channel_mode,
|
|
||||||
"Specify LVDS channel mode "
|
|
||||||
"(0=probe BIOS [default], 1=single-channel, 2=dual-channel)");
|
|
||||||
|
|
||||||
int i915_panel_use_ssc __read_mostly = -1;
|
|
||||||
module_param_named(lvds_use_ssc, i915_panel_use_ssc, int, 0600);
|
|
||||||
MODULE_PARM_DESC(lvds_use_ssc,
|
|
||||||
"Use Spread Spectrum Clock with panels [LVDS/eDP] "
|
|
||||||
"(default: auto from VBT)");
|
|
||||||
|
|
||||||
int i915_vbt_sdvo_panel_type __read_mostly = -1;
|
|
||||||
module_param_named(vbt_sdvo_panel_type, i915_vbt_sdvo_panel_type, int, 0600);
|
|
||||||
MODULE_PARM_DESC(vbt_sdvo_panel_type,
|
|
||||||
"Override/Ignore selection of SDVO panel mode in the VBT "
|
|
||||||
"(-2=ignore, -1=auto [default], index in VBT BIOS table)");
|
|
||||||
|
|
||||||
static bool i915_try_reset __read_mostly = true;
|
|
||||||
module_param_named(reset, i915_try_reset, bool, 0600);
|
|
||||||
MODULE_PARM_DESC(reset, "Attempt GPU resets (default: true)");
|
|
||||||
|
|
||||||
bool i915_enable_hangcheck __read_mostly = true;
|
|
||||||
module_param_named(enable_hangcheck, i915_enable_hangcheck, bool, 0644);
|
|
||||||
MODULE_PARM_DESC(enable_hangcheck,
|
|
||||||
"Periodically check GPU activity for detecting hangs. "
|
|
||||||
"WARNING: Disabling this can cause system wide hangs. "
|
|
||||||
"(default: true)");
|
|
||||||
|
|
||||||
int i915_enable_ppgtt __read_mostly = -1;
|
|
||||||
module_param_named(i915_enable_ppgtt, i915_enable_ppgtt, int, 0400);
|
|
||||||
MODULE_PARM_DESC(i915_enable_ppgtt,
|
|
||||||
"Override PPGTT usage. "
|
|
||||||
"(-1=auto [default], 0=disabled, 1=aliasing, 2=full)");
|
|
||||||
|
|
||||||
int i915_enable_psr __read_mostly = 0;
|
|
||||||
module_param_named(enable_psr, i915_enable_psr, int, 0600);
|
|
||||||
MODULE_PARM_DESC(enable_psr, "Enable PSR (default: false)");
|
|
||||||
|
|
||||||
unsigned int i915_preliminary_hw_support __read_mostly = IS_ENABLED(CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT);
|
|
||||||
module_param_named(preliminary_hw_support, i915_preliminary_hw_support, int, 0600);
|
|
||||||
MODULE_PARM_DESC(preliminary_hw_support,
|
|
||||||
"Enable preliminary hardware support.");
|
|
||||||
|
|
||||||
int i915_disable_power_well __read_mostly = 1;
|
|
||||||
module_param_named(disable_power_well, i915_disable_power_well, int, 0600);
|
|
||||||
MODULE_PARM_DESC(disable_power_well,
|
|
||||||
"Disable the power well when possible (default: true)");
|
|
||||||
|
|
||||||
int i915_enable_ips __read_mostly = 1;
|
|
||||||
module_param_named(enable_ips, i915_enable_ips, int, 0600);
|
|
||||||
MODULE_PARM_DESC(enable_ips, "Enable IPS (default: true)");
|
|
||||||
|
|
||||||
bool i915_fastboot __read_mostly = 0;
|
|
||||||
module_param_named(fastboot, i915_fastboot, bool, 0600);
|
|
||||||
MODULE_PARM_DESC(fastboot, "Try to skip unnecessary mode sets at boot time "
|
|
||||||
"(default: false)");
|
|
||||||
|
|
||||||
int i915_enable_pc8 __read_mostly = 1;
|
|
||||||
module_param_named(enable_pc8, i915_enable_pc8, int, 0600);
|
|
||||||
MODULE_PARM_DESC(enable_pc8, "Enable support for low power package C states (PC8+) (default: true)");
|
|
||||||
|
|
||||||
int i915_pc8_timeout __read_mostly = 5000;
|
|
||||||
module_param_named(pc8_timeout, i915_pc8_timeout, int, 0600);
|
|
||||||
MODULE_PARM_DESC(pc8_timeout, "Number of msecs of idleness required to enter PC8+ (default: 5000)");
|
|
||||||
|
|
||||||
bool i915_prefault_disable __read_mostly;
|
|
||||||
module_param_named(prefault_disable, i915_prefault_disable, bool, 0600);
|
|
||||||
MODULE_PARM_DESC(prefault_disable,
|
|
||||||
"Disable page prefaulting for pread/pwrite/reloc (default:false). For developers only.");
|
|
||||||
|
|
||||||
static struct drm_driver driver;
|
static struct drm_driver driver;
|
||||||
|
|
||||||
static const struct intel_device_info intel_i830_info = {
|
static const struct intel_device_info intel_i830_info = {
|
||||||
|
@ -480,12 +366,12 @@ bool i915_semaphore_is_enabled(struct drm_device *dev)
|
||||||
|
|
||||||
/* Until we get further testing... */
|
/* Until we get further testing... */
|
||||||
if (IS_GEN8(dev)) {
|
if (IS_GEN8(dev)) {
|
||||||
WARN_ON(!i915_preliminary_hw_support);
|
WARN_ON(!i915.preliminary_hw_support);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i915_semaphores >= 0)
|
if (i915.semaphores >= 0)
|
||||||
return i915_semaphores;
|
return i915.semaphores;
|
||||||
|
|
||||||
#ifdef CONFIG_INTEL_IOMMU
|
#ifdef CONFIG_INTEL_IOMMU
|
||||||
/* Enable semaphores on SNB when IO remapping is off */
|
/* Enable semaphores on SNB when IO remapping is off */
|
||||||
|
@ -750,7 +636,7 @@ int i915_reset(struct drm_device *dev)
|
||||||
bool simulated;
|
bool simulated;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!i915_try_reset)
|
if (!i915.reset)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
mutex_lock(&dev->struct_mutex);
|
||||||
|
@ -818,7 +704,7 @@ static int i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
struct intel_device_info *intel_info =
|
struct intel_device_info *intel_info =
|
||||||
(struct intel_device_info *) ent->driver_data;
|
(struct intel_device_info *) ent->driver_data;
|
||||||
|
|
||||||
if (IS_PRELIMINARY_HW(intel_info) && !i915_preliminary_hw_support) {
|
if (IS_PRELIMINARY_HW(intel_info) && !i915.preliminary_hw_support) {
|
||||||
DRM_INFO("This hardware requires preliminary hardware support.\n"
|
DRM_INFO("This hardware requires preliminary hardware support.\n"
|
||||||
"See CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT, and/or modparam preliminary_hw_support\n");
|
"See CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT, and/or modparam preliminary_hw_support\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
@ -1049,14 +935,14 @@ static int __init i915_init(void)
|
||||||
* the default behavior.
|
* the default behavior.
|
||||||
*/
|
*/
|
||||||
#if defined(CONFIG_DRM_I915_KMS)
|
#if defined(CONFIG_DRM_I915_KMS)
|
||||||
if (i915_modeset != 0)
|
if (i915.modeset != 0)
|
||||||
driver.driver_features |= DRIVER_MODESET;
|
driver.driver_features |= DRIVER_MODESET;
|
||||||
#endif
|
#endif
|
||||||
if (i915_modeset == 1)
|
if (i915.modeset == 1)
|
||||||
driver.driver_features |= DRIVER_MODESET;
|
driver.driver_features |= DRIVER_MODESET;
|
||||||
|
|
||||||
#ifdef CONFIG_VGA_CONSOLE
|
#ifdef CONFIG_VGA_CONSOLE
|
||||||
if (vgacon_text_force() && i915_modeset == -1)
|
if (vgacon_text_force() && i915.modeset == -1)
|
||||||
driver.driver_features &= ~DRIVER_MODESET;
|
driver.driver_features &= ~DRIVER_MODESET;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1891,31 +1891,39 @@ struct drm_i915_file_private {
|
||||||
|
|
||||||
extern const struct drm_ioctl_desc i915_ioctls[];
|
extern const struct drm_ioctl_desc i915_ioctls[];
|
||||||
extern int i915_max_ioctl;
|
extern int i915_max_ioctl;
|
||||||
extern int i915_panel_ignore_lid __read_mostly;
|
|
||||||
extern unsigned int i915_powersave __read_mostly;
|
|
||||||
extern int i915_semaphores __read_mostly;
|
|
||||||
extern unsigned int i915_lvds_downclock __read_mostly;
|
|
||||||
extern int i915_lvds_channel_mode __read_mostly;
|
|
||||||
extern int i915_panel_use_ssc __read_mostly;
|
|
||||||
extern int i915_vbt_sdvo_panel_type __read_mostly;
|
|
||||||
extern int i915_enable_rc6 __read_mostly;
|
|
||||||
extern int i915_enable_fbc __read_mostly;
|
|
||||||
extern bool i915_enable_hangcheck __read_mostly;
|
|
||||||
extern int i915_enable_ppgtt __read_mostly;
|
|
||||||
extern int i915_enable_psr __read_mostly;
|
|
||||||
extern unsigned int i915_preliminary_hw_support __read_mostly;
|
|
||||||
extern int i915_disable_power_well __read_mostly;
|
|
||||||
extern int i915_enable_ips __read_mostly;
|
|
||||||
extern bool i915_fastboot __read_mostly;
|
|
||||||
extern int i915_enable_pc8 __read_mostly;
|
|
||||||
extern int i915_pc8_timeout __read_mostly;
|
|
||||||
extern bool i915_prefault_disable __read_mostly;
|
|
||||||
|
|
||||||
extern int i915_suspend(struct drm_device *dev, pm_message_t state);
|
extern int i915_suspend(struct drm_device *dev, pm_message_t state);
|
||||||
extern int i915_resume(struct drm_device *dev);
|
extern int i915_resume(struct drm_device *dev);
|
||||||
extern int i915_master_create(struct drm_device *dev, struct drm_master *master);
|
extern int i915_master_create(struct drm_device *dev, struct drm_master *master);
|
||||||
extern void i915_master_destroy(struct drm_device *dev, struct drm_master *master);
|
extern void i915_master_destroy(struct drm_device *dev, struct drm_master *master);
|
||||||
|
|
||||||
|
/* i915_params.c */
|
||||||
|
struct i915_params {
|
||||||
|
int modeset;
|
||||||
|
int panel_ignore_lid;
|
||||||
|
unsigned int powersave;
|
||||||
|
int semaphores;
|
||||||
|
unsigned int lvds_downclock;
|
||||||
|
int lvds_channel_mode;
|
||||||
|
int panel_use_ssc;
|
||||||
|
int vbt_sdvo_panel_type;
|
||||||
|
int enable_rc6;
|
||||||
|
int enable_fbc;
|
||||||
|
bool enable_hangcheck;
|
||||||
|
int enable_ppgtt;
|
||||||
|
int enable_psr;
|
||||||
|
unsigned int preliminary_hw_support;
|
||||||
|
int disable_power_well;
|
||||||
|
int enable_ips;
|
||||||
|
bool fastboot;
|
||||||
|
int enable_pc8;
|
||||||
|
int pc8_timeout;
|
||||||
|
bool prefault_disable;
|
||||||
|
bool reset;
|
||||||
|
int invert_brightness;
|
||||||
|
};
|
||||||
|
extern struct i915_params i915 __read_mostly;
|
||||||
|
|
||||||
/* i915_dma.c */
|
/* i915_dma.c */
|
||||||
void i915_update_dri1_breadcrumb(struct drm_device *dev);
|
void i915_update_dri1_breadcrumb(struct drm_device *dev);
|
||||||
extern void i915_kernel_lost_context(struct drm_device * dev);
|
extern void i915_kernel_lost_context(struct drm_device * dev);
|
||||||
|
@ -2295,10 +2303,10 @@ static inline void i915_gem_chipset_flush(struct drm_device *dev)
|
||||||
int i915_gem_init_ppgtt(struct drm_device *dev, struct i915_hw_ppgtt *ppgtt);
|
int i915_gem_init_ppgtt(struct drm_device *dev, struct i915_hw_ppgtt *ppgtt);
|
||||||
static inline bool intel_enable_ppgtt(struct drm_device *dev, bool full)
|
static inline bool intel_enable_ppgtt(struct drm_device *dev, bool full)
|
||||||
{
|
{
|
||||||
if (i915_enable_ppgtt == 0 || !HAS_ALIASING_PPGTT(dev))
|
if (i915.enable_ppgtt == 0 || !HAS_ALIASING_PPGTT(dev))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (i915_enable_ppgtt == 1 && full)
|
if (i915.enable_ppgtt == 1 && full)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
#ifdef CONFIG_INTEL_IOMMU
|
#ifdef CONFIG_INTEL_IOMMU
|
||||||
|
|
|
@ -476,7 +476,7 @@ i915_gem_shmem_pread(struct drm_device *dev,
|
||||||
|
|
||||||
mutex_unlock(&dev->struct_mutex);
|
mutex_unlock(&dev->struct_mutex);
|
||||||
|
|
||||||
if (likely(!i915_prefault_disable) && !prefaulted) {
|
if (likely(!i915.prefault_disable) && !prefaulted) {
|
||||||
ret = fault_in_multipages_writeable(user_data, remain);
|
ret = fault_in_multipages_writeable(user_data, remain);
|
||||||
/* Userspace is tricking us, but we've already clobbered
|
/* Userspace is tricking us, but we've already clobbered
|
||||||
* its pages with the prefault and promised to write the
|
* its pages with the prefault and promised to write the
|
||||||
|
@ -868,7 +868,7 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
|
||||||
args->size))
|
args->size))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
if (likely(!i915_prefault_disable)) {
|
if (likely(!i915.prefault_disable)) {
|
||||||
ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
|
ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
|
||||||
args->size);
|
args->size);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
|
@ -896,7 +896,7 @@ validate_exec_list(struct drm_i915_gem_exec_object2 *exec,
|
||||||
if (!access_ok(VERIFY_WRITE, ptr, length))
|
if (!access_ok(VERIFY_WRITE, ptr, length))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
if (likely(!i915_prefault_disable)) {
|
if (likely(!i915.prefault_disable)) {
|
||||||
if (fault_in_multipages_readable(ptr, length))
|
if (fault_in_multipages_readable(ptr, length))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1542,7 +1542,7 @@ static inline unsigned int gen8_get_total_gtt_size(u16 bdw_gmch_ctl)
|
||||||
if (bdw_gmch_ctl)
|
if (bdw_gmch_ctl)
|
||||||
bdw_gmch_ctl = 1 << bdw_gmch_ctl;
|
bdw_gmch_ctl = 1 << bdw_gmch_ctl;
|
||||||
if (bdw_gmch_ctl > 4) {
|
if (bdw_gmch_ctl > 4) {
|
||||||
WARN_ON(!i915_preliminary_hw_support);
|
WARN_ON(!i915.preliminary_hw_support);
|
||||||
return 4<<20;
|
return 4<<20;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2495,7 +2495,7 @@ static void i915_hangcheck_elapsed(unsigned long data)
|
||||||
#define HUNG 20
|
#define HUNG 20
|
||||||
#define FIRE 30
|
#define FIRE 30
|
||||||
|
|
||||||
if (!i915_enable_hangcheck)
|
if (!i915.enable_hangcheck)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for_each_ring(ring, dev_priv, i) {
|
for_each_ring(ring, dev_priv, i) {
|
||||||
|
@ -2597,7 +2597,7 @@ static void i915_hangcheck_elapsed(unsigned long data)
|
||||||
void i915_queue_hangcheck(struct drm_device *dev)
|
void i915_queue_hangcheck(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
if (!i915_enable_hangcheck)
|
if (!i915.enable_hangcheck)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mod_timer(&dev_priv->gpu_error.hangcheck_timer,
|
mod_timer(&dev_priv->gpu_error.hangcheck_timer,
|
||||||
|
|
|
@ -0,0 +1,155 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2014 Intel Corporation
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the
|
||||||
|
* "Software"), to deal in the Software without restriction, including
|
||||||
|
* without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
* distribute, sub license, and/or sell copies of the Software, and to
|
||||||
|
* permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
* the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the
|
||||||
|
* next paragraph) shall be included in all copies or substantial portions
|
||||||
|
* of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
* IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "i915_drv.h"
|
||||||
|
|
||||||
|
struct i915_params i915 __read_mostly = {
|
||||||
|
.modeset = -1,
|
||||||
|
.panel_ignore_lid = 1,
|
||||||
|
.powersave = 1,
|
||||||
|
.semaphores = -1,
|
||||||
|
.lvds_downclock = 0,
|
||||||
|
.lvds_channel_mode = 0,
|
||||||
|
.panel_use_ssc = -1,
|
||||||
|
.vbt_sdvo_panel_type = -1,
|
||||||
|
.enable_rc6 = -1,
|
||||||
|
.enable_fbc = -1,
|
||||||
|
.enable_hangcheck = true,
|
||||||
|
.enable_ppgtt = -1,
|
||||||
|
.enable_psr = 0,
|
||||||
|
.preliminary_hw_support = IS_ENABLED(CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT),
|
||||||
|
.disable_power_well = 1,
|
||||||
|
.enable_ips = 1,
|
||||||
|
.fastboot = 0,
|
||||||
|
.enable_pc8 = 1,
|
||||||
|
.pc8_timeout = 5000,
|
||||||
|
.prefault_disable = 0,
|
||||||
|
.reset = true,
|
||||||
|
.invert_brightness = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
module_param_named(modeset, i915.modeset, int, 0400);
|
||||||
|
MODULE_PARM_DESC(modeset,
|
||||||
|
"Use kernel modesetting [KMS] (0=DRM_I915_KMS from .config, "
|
||||||
|
"1=on, -1=force vga console preference [default])");
|
||||||
|
|
||||||
|
module_param_named(panel_ignore_lid, i915.panel_ignore_lid, int, 0600);
|
||||||
|
MODULE_PARM_DESC(panel_ignore_lid,
|
||||||
|
"Override lid status (0=autodetect, 1=autodetect disabled [default], "
|
||||||
|
"-1=force lid closed, -2=force lid open)");
|
||||||
|
|
||||||
|
module_param_named(powersave, i915.powersave, int, 0600);
|
||||||
|
MODULE_PARM_DESC(powersave,
|
||||||
|
"Enable powersavings, fbc, downclocking, etc. (default: true)");
|
||||||
|
|
||||||
|
module_param_named(semaphores, i915.semaphores, int, 0400);
|
||||||
|
MODULE_PARM_DESC(semaphores,
|
||||||
|
"Use semaphores for inter-ring sync "
|
||||||
|
"(default: -1 (use per-chip defaults))");
|
||||||
|
|
||||||
|
module_param_named(i915_enable_rc6, i915.enable_rc6, int, 0400);
|
||||||
|
MODULE_PARM_DESC(i915_enable_rc6,
|
||||||
|
"Enable power-saving render C-state 6. "
|
||||||
|
"Different stages can be selected via bitmask values "
|
||||||
|
"(0 = disable; 1 = enable rc6; 2 = enable deep rc6; 4 = enable deepest rc6). "
|
||||||
|
"For example, 3 would enable rc6 and deep rc6, and 7 would enable everything. "
|
||||||
|
"default: -1 (use per-chip default)");
|
||||||
|
|
||||||
|
module_param_named(i915_enable_fbc, i915.enable_fbc, int, 0600);
|
||||||
|
MODULE_PARM_DESC(i915_enable_fbc,
|
||||||
|
"Enable frame buffer compression for power savings "
|
||||||
|
"(default: -1 (use per-chip default))");
|
||||||
|
|
||||||
|
module_param_named(lvds_downclock, i915.lvds_downclock, int, 0400);
|
||||||
|
MODULE_PARM_DESC(lvds_downclock,
|
||||||
|
"Use panel (LVDS/eDP) downclocking for power savings "
|
||||||
|
"(default: false)");
|
||||||
|
|
||||||
|
module_param_named(lvds_channel_mode, i915.lvds_channel_mode, int, 0600);
|
||||||
|
MODULE_PARM_DESC(lvds_channel_mode,
|
||||||
|
"Specify LVDS channel mode "
|
||||||
|
"(0=probe BIOS [default], 1=single-channel, 2=dual-channel)");
|
||||||
|
|
||||||
|
module_param_named(lvds_use_ssc, i915.panel_use_ssc, int, 0600);
|
||||||
|
MODULE_PARM_DESC(lvds_use_ssc,
|
||||||
|
"Use Spread Spectrum Clock with panels [LVDS/eDP] "
|
||||||
|
"(default: auto from VBT)");
|
||||||
|
|
||||||
|
module_param_named(vbt_sdvo_panel_type, i915.vbt_sdvo_panel_type, int, 0600);
|
||||||
|
MODULE_PARM_DESC(vbt_sdvo_panel_type,
|
||||||
|
"Override/Ignore selection of SDVO panel mode in the VBT "
|
||||||
|
"(-2=ignore, -1=auto [default], index in VBT BIOS table)");
|
||||||
|
|
||||||
|
module_param_named(reset, i915.reset, bool, 0600);
|
||||||
|
MODULE_PARM_DESC(reset, "Attempt GPU resets (default: true)");
|
||||||
|
|
||||||
|
module_param_named(enable_hangcheck, i915.enable_hangcheck, bool, 0644);
|
||||||
|
MODULE_PARM_DESC(enable_hangcheck,
|
||||||
|
"Periodically check GPU activity for detecting hangs. "
|
||||||
|
"WARNING: Disabling this can cause system wide hangs. "
|
||||||
|
"(default: true)");
|
||||||
|
|
||||||
|
module_param_named(i915_enable_ppgtt, i915.enable_ppgtt, int, 0400);
|
||||||
|
MODULE_PARM_DESC(i915_enable_ppgtt,
|
||||||
|
"Override PPGTT usage. "
|
||||||
|
"(-1=auto [default], 0=disabled, 1=aliasing, 2=full)");
|
||||||
|
|
||||||
|
module_param_named(enable_psr, i915.enable_psr, int, 0600);
|
||||||
|
MODULE_PARM_DESC(enable_psr, "Enable PSR (default: false)");
|
||||||
|
|
||||||
|
module_param_named(preliminary_hw_support, i915.preliminary_hw_support, int, 0600);
|
||||||
|
MODULE_PARM_DESC(preliminary_hw_support,
|
||||||
|
"Enable preliminary hardware support.");
|
||||||
|
|
||||||
|
module_param_named(disable_power_well, i915.disable_power_well, int, 0600);
|
||||||
|
MODULE_PARM_DESC(disable_power_well,
|
||||||
|
"Disable the power well when possible (default: true)");
|
||||||
|
|
||||||
|
module_param_named(enable_ips, i915.enable_ips, int, 0600);
|
||||||
|
MODULE_PARM_DESC(enable_ips, "Enable IPS (default: true)");
|
||||||
|
|
||||||
|
module_param_named(fastboot, i915.fastboot, bool, 0600);
|
||||||
|
MODULE_PARM_DESC(fastboot,
|
||||||
|
"Try to skip unnecessary mode sets at boot time (default: false)");
|
||||||
|
|
||||||
|
module_param_named(enable_pc8, i915.enable_pc8, int, 0600);
|
||||||
|
MODULE_PARM_DESC(enable_pc8,
|
||||||
|
"Enable support for low power package C states (PC8+) (default: true)");
|
||||||
|
|
||||||
|
module_param_named(pc8_timeout, i915.pc8_timeout, int, 0600);
|
||||||
|
MODULE_PARM_DESC(pc8_timeout,
|
||||||
|
"Number of msecs of idleness required to enter PC8+ (default: 5000)");
|
||||||
|
|
||||||
|
module_param_named(prefault_disable, i915.prefault_disable, bool, 0600);
|
||||||
|
MODULE_PARM_DESC(prefault_disable,
|
||||||
|
"Disable page prefaulting for pread/pwrite/reloc (default:false). "
|
||||||
|
"For developers only.");
|
||||||
|
|
||||||
|
module_param_named(invert_brightness, i915.invert_brightness, int, 0600);
|
||||||
|
MODULE_PARM_DESC(invert_brightness,
|
||||||
|
"Invert backlight brightness "
|
||||||
|
"(-1 force normal, 0 machine defaults, 1 force inversion), please "
|
||||||
|
"report PCI device ID, subsystem vendor and subsystem device ID "
|
||||||
|
"to dri-devel@lists.freedesktop.org, if your machine needs it. "
|
||||||
|
"It will then be included in an upcoming module version.");
|
|
@ -259,7 +259,7 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
|
||||||
downclock = dvo_timing->clock;
|
downclock = dvo_timing->clock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (downclock < panel_dvo_timing->clock && i915_lvds_downclock) {
|
if (downclock < panel_dvo_timing->clock && i915.lvds_downclock) {
|
||||||
dev_priv->lvds_downclock_avail = 1;
|
dev_priv->lvds_downclock_avail = 1;
|
||||||
dev_priv->lvds_downclock = downclock * 10;
|
dev_priv->lvds_downclock = downclock * 10;
|
||||||
DRM_DEBUG_KMS("LVDS downclock is found in VBT. "
|
DRM_DEBUG_KMS("LVDS downclock is found in VBT. "
|
||||||
|
@ -318,7 +318,7 @@ parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
|
||||||
struct drm_display_mode *panel_fixed_mode;
|
struct drm_display_mode *panel_fixed_mode;
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
index = i915_vbt_sdvo_panel_type;
|
index = i915.vbt_sdvo_panel_type;
|
||||||
if (index == -2) {
|
if (index == -2) {
|
||||||
DRM_DEBUG_KMS("Ignore SDVO panel mode from BIOS VBT tables.\n");
|
DRM_DEBUG_KMS("Ignore SDVO panel mode from BIOS VBT tables.\n");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -2372,7 +2372,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
|
||||||
* whether the platform allows pfit disable with pipe active, and only
|
* whether the platform allows pfit disable with pipe active, and only
|
||||||
* then update the pipesrc and pfit state, even on the flip path.
|
* then update the pipesrc and pfit state, even on the flip path.
|
||||||
*/
|
*/
|
||||||
if (i915_fastboot) {
|
if (i915.fastboot) {
|
||||||
const struct drm_display_mode *adjusted_mode =
|
const struct drm_display_mode *adjusted_mode =
|
||||||
&intel_crtc->config.adjusted_mode;
|
&intel_crtc->config.adjusted_mode;
|
||||||
|
|
||||||
|
@ -4580,7 +4580,7 @@ retry:
|
||||||
static void hsw_compute_ips_config(struct intel_crtc *crtc,
|
static void hsw_compute_ips_config(struct intel_crtc *crtc,
|
||||||
struct intel_crtc_config *pipe_config)
|
struct intel_crtc_config *pipe_config)
|
||||||
{
|
{
|
||||||
pipe_config->ips_enabled = i915_enable_ips &&
|
pipe_config->ips_enabled = i915.enable_ips &&
|
||||||
hsw_crtc_supports_ips(crtc) &&
|
hsw_crtc_supports_ips(crtc) &&
|
||||||
pipe_config->pipe_bpp <= 24;
|
pipe_config->pipe_bpp <= 24;
|
||||||
}
|
}
|
||||||
|
@ -4781,8 +4781,8 @@ intel_link_compute_m_n(int bits_per_pixel, int nlanes,
|
||||||
|
|
||||||
static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
|
static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
if (i915_panel_use_ssc >= 0)
|
if (i915.panel_use_ssc >= 0)
|
||||||
return i915_panel_use_ssc != 0;
|
return i915.panel_use_ssc != 0;
|
||||||
return dev_priv->vbt.lvds_use_ssc
|
return dev_priv->vbt.lvds_use_ssc
|
||||||
&& !(dev_priv->quirks & QUIRK_LVDS_SSC_DISABLE);
|
&& !(dev_priv->quirks & QUIRK_LVDS_SSC_DISABLE);
|
||||||
}
|
}
|
||||||
|
@ -4841,7 +4841,7 @@ static void i9xx_update_pll_dividers(struct intel_crtc *crtc,
|
||||||
|
|
||||||
crtc->lowfreq_avail = false;
|
crtc->lowfreq_avail = false;
|
||||||
if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_LVDS) &&
|
if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_LVDS) &&
|
||||||
reduced_clock && i915_powersave) {
|
reduced_clock && i915.powersave) {
|
||||||
I915_WRITE(FP1(pipe), fp2);
|
I915_WRITE(FP1(pipe), fp2);
|
||||||
crtc->config.dpll_hw_state.fp1 = fp2;
|
crtc->config.dpll_hw_state.fp1 = fp2;
|
||||||
crtc->lowfreq_avail = true;
|
crtc->lowfreq_avail = true;
|
||||||
|
@ -6345,7 +6345,7 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
|
||||||
if (intel_crtc->config.has_dp_encoder)
|
if (intel_crtc->config.has_dp_encoder)
|
||||||
intel_dp_set_m_n(intel_crtc);
|
intel_dp_set_m_n(intel_crtc);
|
||||||
|
|
||||||
if (is_lvds && has_reduced_clock && i915_powersave)
|
if (is_lvds && has_reduced_clock && i915.powersave)
|
||||||
intel_crtc->lowfreq_avail = true;
|
intel_crtc->lowfreq_avail = true;
|
||||||
else
|
else
|
||||||
intel_crtc->lowfreq_avail = false;
|
intel_crtc->lowfreq_avail = false;
|
||||||
|
@ -6713,7 +6713,7 @@ static void __hsw_enable_package_c8(struct drm_i915_private *dev_priv)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
schedule_delayed_work(&dev_priv->pc8.enable_work,
|
schedule_delayed_work(&dev_priv->pc8.enable_work,
|
||||||
msecs_to_jiffies(i915_pc8_timeout));
|
msecs_to_jiffies(i915.pc8_timeout));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __hsw_disable_package_c8(struct drm_i915_private *dev_priv)
|
static void __hsw_disable_package_c8(struct drm_i915_private *dev_priv)
|
||||||
|
@ -6812,7 +6812,7 @@ static void hsw_update_package_c8(struct drm_device *dev)
|
||||||
if (!HAS_PC8(dev_priv->dev))
|
if (!HAS_PC8(dev_priv->dev))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!i915_enable_pc8)
|
if (!i915.enable_pc8)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mutex_lock(&dev_priv->pc8.lock);
|
mutex_lock(&dev_priv->pc8.lock);
|
||||||
|
@ -8210,7 +8210,7 @@ void intel_mark_idle(struct drm_device *dev)
|
||||||
|
|
||||||
hsw_package_c8_gpu_idle(dev_priv);
|
hsw_package_c8_gpu_idle(dev_priv);
|
||||||
|
|
||||||
if (!i915_powersave)
|
if (!i915.powersave)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
||||||
|
@ -8230,7 +8230,7 @@ void intel_mark_fb_busy(struct drm_i915_gem_object *obj,
|
||||||
struct drm_device *dev = obj->base.dev;
|
struct drm_device *dev = obj->base.dev;
|
||||||
struct drm_crtc *crtc;
|
struct drm_crtc *crtc;
|
||||||
|
|
||||||
if (!i915_powersave)
|
if (!i915.powersave)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
||||||
|
@ -9893,7 +9893,7 @@ intel_set_config_compute_mode_changes(struct drm_mode_set *set,
|
||||||
struct intel_crtc *intel_crtc =
|
struct intel_crtc *intel_crtc =
|
||||||
to_intel_crtc(set->crtc);
|
to_intel_crtc(set->crtc);
|
||||||
|
|
||||||
if (intel_crtc->active && i915_fastboot) {
|
if (intel_crtc->active && i915.fastboot) {
|
||||||
DRM_DEBUG_KMS("crtc has no fb, will flip\n");
|
DRM_DEBUG_KMS("crtc has no fb, will flip\n");
|
||||||
config->fb_changed = true;
|
config->fb_changed = true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -10144,7 +10144,7 @@ static int intel_crtc_set_config(struct drm_mode_set *set)
|
||||||
* flipping, so increasing its cost here shouldn't be a big
|
* flipping, so increasing its cost here shouldn't be a big
|
||||||
* deal).
|
* deal).
|
||||||
*/
|
*/
|
||||||
if (i915_fastboot && ret == 0)
|
if (i915.fastboot && ret == 0)
|
||||||
intel_modeset_check_state(set->crtc->dev);
|
intel_modeset_check_state(set->crtc->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11382,7 +11382,7 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
|
||||||
*/
|
*/
|
||||||
list_for_each_entry(crtc, &dev->mode_config.crtc_list,
|
list_for_each_entry(crtc, &dev->mode_config.crtc_list,
|
||||||
base.head) {
|
base.head) {
|
||||||
if (crtc->active && i915_fastboot) {
|
if (crtc->active && i915.fastboot) {
|
||||||
intel_crtc_mode_from_pipe_config(crtc, &crtc->config);
|
intel_crtc_mode_from_pipe_config(crtc, &crtc->config);
|
||||||
|
|
||||||
DRM_DEBUG_KMS("[CRTC:%d] found active mode: ",
|
DRM_DEBUG_KMS("[CRTC:%d] found active mode: ",
|
||||||
|
|
|
@ -1725,7 +1725,7 @@ static bool intel_edp_psr_match_conditions(struct intel_dp *intel_dp)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!i915_enable_psr) {
|
if (!i915.enable_psr) {
|
||||||
DRM_DEBUG_KMS("PSR disable by flag\n");
|
DRM_DEBUG_KMS("PSR disable by flag\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -848,8 +848,8 @@ static bool compute_is_dual_link_lvds(struct intel_lvds_encoder *lvds_encoder)
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
|
|
||||||
/* use the module option value if specified */
|
/* use the module option value if specified */
|
||||||
if (i915_lvds_channel_mode > 0)
|
if (i915.lvds_channel_mode > 0)
|
||||||
return i915_lvds_channel_mode == 2;
|
return i915.lvds_channel_mode == 2;
|
||||||
|
|
||||||
if (dmi_check_system(intel_dual_link_lvds))
|
if (dmi_check_system(intel_dual_link_lvds))
|
||||||
return true;
|
return true;
|
||||||
|
@ -1036,7 +1036,7 @@ void intel_lvds_init(struct drm_device *dev)
|
||||||
intel_find_panel_downclock(dev,
|
intel_find_panel_downclock(dev,
|
||||||
fixed_mode, connector);
|
fixed_mode, connector);
|
||||||
if (intel_connector->panel.downclock_mode !=
|
if (intel_connector->panel.downclock_mode !=
|
||||||
NULL && i915_lvds_downclock) {
|
NULL && i915.lvds_downclock) {
|
||||||
/* We found the downclock for LVDS. */
|
/* We found the downclock for LVDS. */
|
||||||
dev_priv->lvds_downclock_avail = true;
|
dev_priv->lvds_downclock_avail = true;
|
||||||
dev_priv->lvds_downclock =
|
dev_priv->lvds_downclock =
|
||||||
|
|
|
@ -323,13 +323,6 @@ out:
|
||||||
pipe_config->gmch_pfit.lvds_border_bits = border;
|
pipe_config->gmch_pfit.lvds_border_bits = border;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int i915_panel_invert_brightness;
|
|
||||||
MODULE_PARM_DESC(invert_brightness, "Invert backlight brightness "
|
|
||||||
"(-1 force normal, 0 machine defaults, 1 force inversion), please "
|
|
||||||
"report PCI device ID, subsystem vendor and subsystem device ID "
|
|
||||||
"to dri-devel@lists.freedesktop.org, if your machine needs it. "
|
|
||||||
"It will then be included in an upcoming module version.");
|
|
||||||
module_param_named(invert_brightness, i915_panel_invert_brightness, int, 0600);
|
|
||||||
static u32 intel_panel_compute_brightness(struct intel_connector *connector,
|
static u32 intel_panel_compute_brightness(struct intel_connector *connector,
|
||||||
u32 val)
|
u32 val)
|
||||||
{
|
{
|
||||||
|
@ -339,10 +332,10 @@ static u32 intel_panel_compute_brightness(struct intel_connector *connector,
|
||||||
|
|
||||||
WARN_ON(panel->backlight.max == 0);
|
WARN_ON(panel->backlight.max == 0);
|
||||||
|
|
||||||
if (i915_panel_invert_brightness < 0)
|
if (i915.invert_brightness < 0)
|
||||||
return val;
|
return val;
|
||||||
|
|
||||||
if (i915_panel_invert_brightness > 0 ||
|
if (i915.invert_brightness > 0 ||
|
||||||
dev_priv->quirks & QUIRK_INVERT_BRIGHTNESS) {
|
dev_priv->quirks & QUIRK_INVERT_BRIGHTNESS) {
|
||||||
return panel->backlight.max - val;
|
return panel->backlight.max - val;
|
||||||
}
|
}
|
||||||
|
@ -808,13 +801,13 @@ intel_panel_detect(struct drm_device *dev)
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
|
|
||||||
/* Assume that the BIOS does not lie through the OpRegion... */
|
/* Assume that the BIOS does not lie through the OpRegion... */
|
||||||
if (!i915_panel_ignore_lid && dev_priv->opregion.lid_state) {
|
if (!i915.panel_ignore_lid && dev_priv->opregion.lid_state) {
|
||||||
return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
|
return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
|
||||||
connector_status_connected :
|
connector_status_connected :
|
||||||
connector_status_disconnected;
|
connector_status_disconnected;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (i915_panel_ignore_lid) {
|
switch (i915.panel_ignore_lid) {
|
||||||
case -2:
|
case -2:
|
||||||
return connector_status_connected;
|
return connector_status_connected;
|
||||||
case -1:
|
case -1:
|
||||||
|
|
|
@ -469,7 +469,7 @@ void intel_update_fbc(struct drm_device *dev)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!i915_powersave) {
|
if (!i915.powersave) {
|
||||||
if (set_no_fbc_reason(dev_priv, FBC_MODULE_PARAM))
|
if (set_no_fbc_reason(dev_priv, FBC_MODULE_PARAM))
|
||||||
DRM_DEBUG_KMS("fbc disabled per module param\n");
|
DRM_DEBUG_KMS("fbc disabled per module param\n");
|
||||||
return;
|
return;
|
||||||
|
@ -508,13 +508,13 @@ void intel_update_fbc(struct drm_device *dev)
|
||||||
obj = intel_fb->obj;
|
obj = intel_fb->obj;
|
||||||
adjusted_mode = &intel_crtc->config.adjusted_mode;
|
adjusted_mode = &intel_crtc->config.adjusted_mode;
|
||||||
|
|
||||||
if (i915_enable_fbc < 0 &&
|
if (i915.enable_fbc < 0 &&
|
||||||
INTEL_INFO(dev)->gen <= 7 && !IS_HASWELL(dev)) {
|
INTEL_INFO(dev)->gen <= 7 && !IS_HASWELL(dev)) {
|
||||||
if (set_no_fbc_reason(dev_priv, FBC_CHIP_DEFAULT))
|
if (set_no_fbc_reason(dev_priv, FBC_CHIP_DEFAULT))
|
||||||
DRM_DEBUG_KMS("disabled per chip default\n");
|
DRM_DEBUG_KMS("disabled per chip default\n");
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
if (!i915_enable_fbc) {
|
if (!i915.enable_fbc) {
|
||||||
if (set_no_fbc_reason(dev_priv, FBC_MODULE_PARAM))
|
if (set_no_fbc_reason(dev_priv, FBC_MODULE_PARAM))
|
||||||
DRM_DEBUG_KMS("fbc disabled per module param\n");
|
DRM_DEBUG_KMS("fbc disabled per module param\n");
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
|
@ -3154,8 +3154,8 @@ int intel_enable_rc6(const struct drm_device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Respect the kernel parameter if it is set */
|
/* Respect the kernel parameter if it is set */
|
||||||
if (i915_enable_rc6 >= 0)
|
if (i915.enable_rc6 >= 0)
|
||||||
return i915_enable_rc6;
|
return i915.enable_rc6;
|
||||||
|
|
||||||
/* Disable RC6 on Ironlake */
|
/* Disable RC6 on Ironlake */
|
||||||
if (INTEL_INFO(dev)->gen == 5)
|
if (INTEL_INFO(dev)->gen == 5)
|
||||||
|
@ -5279,7 +5279,7 @@ static void __intel_power_well_put(struct drm_device *dev,
|
||||||
WARN_ON(!power_well->count);
|
WARN_ON(!power_well->count);
|
||||||
|
|
||||||
if (!--power_well->count && power_well->set &&
|
if (!--power_well->count && power_well->set &&
|
||||||
i915_disable_power_well) {
|
i915.disable_power_well) {
|
||||||
power_well->set(dev, power_well, false);
|
power_well->set(dev, power_well, false);
|
||||||
hsw_enable_package_c8(dev_priv);
|
hsw_enable_package_c8(dev_priv);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче