i915_drv.c 28.3 KB
Newer Older
L
Linus Torvalds 已提交
1 2
/* i915_drv.c -- i830,i845,i855,i865,i915 driver -*- linux-c -*-
 */
D
Dave Airlie 已提交
3
/*
4
 *
L
Linus Torvalds 已提交
5 6
 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
 * All Rights Reserved.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
 *
 * 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 NON-INFRINGEMENT.
 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
 *
D
Dave Airlie 已提交
28
 */
L
Linus Torvalds 已提交
29

30
#include <linux/device.h>
31 32
#include <drm/drmP.h>
#include <drm/i915_drm.h>
L
Linus Torvalds 已提交
33
#include "i915_drv.h"
34
#include "i915_trace.h"
35
#include "intel_drv.h"
L
Linus Torvalds 已提交
36

J
Jesse Barnes 已提交
37
#include <linux/console.h>
38
#include <linux/module.h>
39
#include <drm/drm_crtc_helper.h>
J
Jesse Barnes 已提交
40

41
static int i915_modeset __read_mostly = -1;
J
Jesse Barnes 已提交
42
module_param_named(modeset, i915_modeset, int, 0400);
43 44 45
MODULE_PARM_DESC(modeset,
		"Use kernel modesetting [KMS] (0=DRM_I915_KMS from .config, "
		"1=on, -1=force vga console preference [default])");
J
Jesse Barnes 已提交
46

47
unsigned int i915_fbpercrtc __always_unused = 0;
J
Jesse Barnes 已提交
48
module_param_named(fbpercrtc, i915_fbpercrtc, int, 0400);
L
Linus Torvalds 已提交
49

50
int i915_panel_ignore_lid __read_mostly = 1;
51
module_param_named(panel_ignore_lid, i915_panel_ignore_lid, int, 0600);
52
MODULE_PARM_DESC(panel_ignore_lid,
53 54
		"Override lid status (0=autodetect, 1=autodetect disabled [default], "
		"-1=force lid closed, -2=force lid open)");
55

56
unsigned int i915_powersave __read_mostly = 1;
57
module_param_named(powersave, i915_powersave, int, 0600);
58 59
MODULE_PARM_DESC(powersave,
		"Enable powersavings, fbc, downclocking, etc. (default: true)");
60

61
int i915_semaphores __read_mostly = -1;
62
module_param_named(semaphores, i915_semaphores, int, 0600);
63
MODULE_PARM_DESC(semaphores,
64
		"Use semaphores for inter-ring sync (default: -1 (use per-chip defaults))");
65

66
int i915_enable_rc6 __read_mostly = -1;
67
module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0400);
68
MODULE_PARM_DESC(i915_enable_rc6,
69 70 71 72 73
		"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)");
C
Chris Wilson 已提交
74

75
int i915_enable_fbc __read_mostly = -1;
76
module_param_named(i915_enable_fbc, i915_enable_fbc, int, 0600);
77 78
MODULE_PARM_DESC(i915_enable_fbc,
		"Enable frame buffer compression for power savings "
79
		"(default: -1 (use per-chip default))");
80

81
unsigned int i915_lvds_downclock __read_mostly = 0;
82
module_param_named(lvds_downclock, i915_lvds_downclock, int, 0400);
83 84 85
MODULE_PARM_DESC(lvds_downclock,
		"Use panel (LVDS/eDP) downclocking for power savings "
		"(default: false)");
86

87 88 89 90 91 92
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)");

93
int i915_panel_use_ssc __read_mostly = -1;
94
module_param_named(lvds_use_ssc, i915_panel_use_ssc, int, 0600);
95 96
MODULE_PARM_DESC(lvds_use_ssc,
		"Use Spread Spectrum Clock with panels [LVDS/eDP] "
97
		"(default: auto from VBT)");
98

99
int i915_vbt_sdvo_panel_type __read_mostly = -1;
100
module_param_named(vbt_sdvo_panel_type, i915_vbt_sdvo_panel_type, int, 0600);
101
MODULE_PARM_DESC(vbt_sdvo_panel_type,
102 103
		"Override/Ignore selection of SDVO panel mode in the VBT "
		"(-2=ignore, -1=auto [default], index in VBT BIOS table)");
104

105
static bool i915_try_reset __read_mostly = true;
C
Chris Wilson 已提交
106
module_param_named(reset, i915_try_reset, bool, 0600);
107
MODULE_PARM_DESC(reset, "Attempt GPU resets (default: true)");
C
Chris Wilson 已提交
108

109
bool i915_enable_hangcheck __read_mostly = true;
110
module_param_named(enable_hangcheck, i915_enable_hangcheck, bool, 0644);
111 112 113 114
MODULE_PARM_DESC(enable_hangcheck,
		"Periodically check GPU activity for detecting hangs. "
		"WARNING: Disabling this can cause system wide hangs. "
		"(default: true)");
115

116 117
int i915_enable_ppgtt __read_mostly = -1;
module_param_named(i915_enable_ppgtt, i915_enable_ppgtt, int, 0600);
D
Daniel Vetter 已提交
118 119 120
MODULE_PARM_DESC(i915_enable_ppgtt,
		"Enable PPGTT (default: true)");

121 122 123 124
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)");

125
unsigned int i915_preliminary_hw_support __read_mostly = IS_ENABLED(CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT);
126 127
module_param_named(preliminary_hw_support, i915_preliminary_hw_support, int, 0600);
MODULE_PARM_DESC(preliminary_hw_support,
128
		"Enable preliminary hardware support.");
129

130
int i915_disable_power_well __read_mostly = 1;
131 132
module_param_named(disable_power_well, i915_disable_power_well, int, 0600);
MODULE_PARM_DESC(disable_power_well,
133
		 "Disable the power well when possible (default: true)");
134

135 136 137 138
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)");

139 140 141 142 143
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)");

144
int i915_enable_pc8 __read_mostly = 1;
145
module_param_named(enable_pc8, i915_enable_pc8, int, 0600);
146
MODULE_PARM_DESC(enable_pc8, "Enable support for low power package C states (PC8+) (default: true)");
147

148 149 150 151
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)");

152 153 154 155 156
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.");

157 158
static struct drm_driver driver;

159
static const struct intel_device_info intel_i830_info = {
160
	.gen = 2, .is_mobile = 1, .cursor_needs_physical = 1, .num_pipes = 2,
161
	.has_overlay = 1, .overlay_needs_physical = 1,
162
	.ring_mask = RENDER_RING,
163 164
};

165
static const struct intel_device_info intel_845g_info = {
166
	.gen = 2, .num_pipes = 1,
167
	.has_overlay = 1, .overlay_needs_physical = 1,
168
	.ring_mask = RENDER_RING,
169 170
};

171
static const struct intel_device_info intel_i85x_info = {
172
	.gen = 2, .is_i85x = 1, .is_mobile = 1, .num_pipes = 2,
173
	.cursor_needs_physical = 1,
174
	.has_overlay = 1, .overlay_needs_physical = 1,
175
	.ring_mask = RENDER_RING,
176 177
};

178
static const struct intel_device_info intel_i865g_info = {
179
	.gen = 2, .num_pipes = 1,
180
	.has_overlay = 1, .overlay_needs_physical = 1,
181
	.ring_mask = RENDER_RING,
182 183
};

184
static const struct intel_device_info intel_i915g_info = {
185
	.gen = 3, .is_i915g = 1, .cursor_needs_physical = 1, .num_pipes = 2,
186
	.has_overlay = 1, .overlay_needs_physical = 1,
187
	.ring_mask = RENDER_RING,
188
};
189
static const struct intel_device_info intel_i915gm_info = {
190
	.gen = 3, .is_mobile = 1, .num_pipes = 2,
191
	.cursor_needs_physical = 1,
192
	.has_overlay = 1, .overlay_needs_physical = 1,
193
	.supports_tv = 1,
194
	.ring_mask = RENDER_RING,
195
};
196
static const struct intel_device_info intel_i945g_info = {
197
	.gen = 3, .has_hotplug = 1, .cursor_needs_physical = 1, .num_pipes = 2,
198
	.has_overlay = 1, .overlay_needs_physical = 1,
199
	.ring_mask = RENDER_RING,
200
};
201
static const struct intel_device_info intel_i945gm_info = {
202
	.gen = 3, .is_i945gm = 1, .is_mobile = 1, .num_pipes = 2,
203
	.has_hotplug = 1, .cursor_needs_physical = 1,
204
	.has_overlay = 1, .overlay_needs_physical = 1,
205
	.supports_tv = 1,
206
	.ring_mask = RENDER_RING,
207 208
};

209
static const struct intel_device_info intel_i965g_info = {
210
	.gen = 4, .is_broadwater = 1, .num_pipes = 2,
211
	.has_hotplug = 1,
212
	.has_overlay = 1,
213
	.ring_mask = RENDER_RING,
214 215
};

216
static const struct intel_device_info intel_i965gm_info = {
217
	.gen = 4, .is_crestline = 1, .num_pipes = 2,
218
	.is_mobile = 1, .has_fbc = 1, .has_hotplug = 1,
219
	.has_overlay = 1,
220
	.supports_tv = 1,
221
	.ring_mask = RENDER_RING,
222 223
};

224
static const struct intel_device_info intel_g33_info = {
225
	.gen = 3, .is_g33 = 1, .num_pipes = 2,
226
	.need_gfx_hws = 1, .has_hotplug = 1,
227
	.has_overlay = 1,
228
	.ring_mask = RENDER_RING,
229 230
};

231
static const struct intel_device_info intel_g45_info = {
232
	.gen = 4, .is_g4x = 1, .need_gfx_hws = 1, .num_pipes = 2,
233
	.has_pipe_cxsr = 1, .has_hotplug = 1,
234
	.ring_mask = RENDER_RING | BSD_RING,
235 236
};

237
static const struct intel_device_info intel_gm45_info = {
238
	.gen = 4, .is_g4x = 1, .num_pipes = 2,
239
	.is_mobile = 1, .need_gfx_hws = 1, .has_fbc = 1,
240
	.has_pipe_cxsr = 1, .has_hotplug = 1,
241
	.supports_tv = 1,
242
	.ring_mask = RENDER_RING | BSD_RING,
243 244
};

245
static const struct intel_device_info intel_pineview_info = {
246
	.gen = 3, .is_g33 = 1, .is_pineview = 1, .is_mobile = 1, .num_pipes = 2,
247
	.need_gfx_hws = 1, .has_hotplug = 1,
248
	.has_overlay = 1,
249 250
};

251
static const struct intel_device_info intel_ironlake_d_info = {
252
	.gen = 5, .num_pipes = 2,
253
	.need_gfx_hws = 1, .has_hotplug = 1,
254
	.ring_mask = RENDER_RING | BSD_RING,
255 256
};

257
static const struct intel_device_info intel_ironlake_m_info = {
258
	.gen = 5, .is_mobile = 1, .num_pipes = 2,
259
	.need_gfx_hws = 1, .has_hotplug = 1,
260
	.has_fbc = 1,
261
	.ring_mask = RENDER_RING | BSD_RING,
262 263
};

264
static const struct intel_device_info intel_sandybridge_d_info = {
265
	.gen = 6, .num_pipes = 2,
266
	.need_gfx_hws = 1, .has_hotplug = 1,
267
	.ring_mask = RENDER_RING | BSD_RING | BLT_RING,
268
	.has_llc = 1,
269 270
};

271
static const struct intel_device_info intel_sandybridge_m_info = {
272
	.gen = 6, .is_mobile = 1, .num_pipes = 2,
273
	.need_gfx_hws = 1, .has_hotplug = 1,
274
	.has_fbc = 1,
275
	.ring_mask = RENDER_RING | BSD_RING | BLT_RING,
276
	.has_llc = 1,
277 278
};

279 280 281
#define GEN7_FEATURES  \
	.gen = 7, .num_pipes = 3, \
	.need_gfx_hws = 1, .has_hotplug = 1, \
282
	.ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
283
	.has_llc = 1
284

285
static const struct intel_device_info intel_ivybridge_d_info = {
286 287
	GEN7_FEATURES,
	.is_ivybridge = 1,
288 289 290
};

static const struct intel_device_info intel_ivybridge_m_info = {
291 292 293
	GEN7_FEATURES,
	.is_ivybridge = 1,
	.is_mobile = 1,
294
	.has_fbc = 1,
295 296
};

297 298 299 300 301 302
static const struct intel_device_info intel_ivybridge_q_info = {
	GEN7_FEATURES,
	.is_ivybridge = 1,
	.num_pipes = 0, /* legal, last one wins */
};

303
static const struct intel_device_info intel_valleyview_m_info = {
304 305 306
	GEN7_FEATURES,
	.is_mobile = 1,
	.num_pipes = 2,
307
	.is_valleyview = 1,
308
	.display_mmio_offset = VLV_DISPLAY_BASE,
B
Ben Widawsky 已提交
309
	.has_llc = 0, /* legal, last one wins */
310 311 312
};

static const struct intel_device_info intel_valleyview_d_info = {
313 314
	GEN7_FEATURES,
	.num_pipes = 2,
315
	.is_valleyview = 1,
316
	.display_mmio_offset = VLV_DISPLAY_BASE,
B
Ben Widawsky 已提交
317
	.has_llc = 0, /* legal, last one wins */
318 319
};

320
static const struct intel_device_info intel_haswell_d_info = {
321 322
	GEN7_FEATURES,
	.is_haswell = 1,
323
	.has_ddi = 1,
324
	.has_fpga_dbg = 1,
325
	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
326 327 328
};

static const struct intel_device_info intel_haswell_m_info = {
329 330 331
	GEN7_FEATURES,
	.is_haswell = 1,
	.is_mobile = 1,
332
	.has_ddi = 1,
333
	.has_fpga_dbg = 1,
R
Rodrigo Vivi 已提交
334
	.has_fbc = 1,
335
	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
336 337
};

338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
/*
 * Make sure any device matches here are from most specific to most
 * general.  For example, since the Quanta match is based on the subsystem
 * and subvendor IDs, we need it to come before the more general IVB
 * PCI ID matches, otherwise we'll use the wrong info struct above.
 */
#define INTEL_PCI_IDS \
	INTEL_I830_IDS(&intel_i830_info),	\
	INTEL_I845G_IDS(&intel_845g_info),	\
	INTEL_I85X_IDS(&intel_i85x_info),	\
	INTEL_I865G_IDS(&intel_i865g_info),	\
	INTEL_I915G_IDS(&intel_i915g_info),	\
	INTEL_I915GM_IDS(&intel_i915gm_info),	\
	INTEL_I945G_IDS(&intel_i945g_info),	\
	INTEL_I945GM_IDS(&intel_i945gm_info),	\
	INTEL_I965G_IDS(&intel_i965g_info),	\
	INTEL_G33_IDS(&intel_g33_info),		\
	INTEL_I965GM_IDS(&intel_i965gm_info),	\
	INTEL_GM45_IDS(&intel_gm45_info), 	\
	INTEL_G45_IDS(&intel_g45_info), 	\
	INTEL_PINEVIEW_IDS(&intel_pineview_info),	\
	INTEL_IRONLAKE_D_IDS(&intel_ironlake_d_info),	\
	INTEL_IRONLAKE_M_IDS(&intel_ironlake_m_info),	\
	INTEL_SNB_D_IDS(&intel_sandybridge_d_info),	\
	INTEL_SNB_M_IDS(&intel_sandybridge_m_info),	\
	INTEL_IVB_Q_IDS(&intel_ivybridge_q_info), /* must be first IVB */ \
	INTEL_IVB_M_IDS(&intel_ivybridge_m_info),	\
	INTEL_IVB_D_IDS(&intel_ivybridge_d_info),	\
	INTEL_HSW_D_IDS(&intel_haswell_d_info), \
	INTEL_HSW_M_IDS(&intel_haswell_m_info), \
	INTEL_VLV_M_IDS(&intel_valleyview_m_info),	\
	INTEL_VLV_D_IDS(&intel_valleyview_d_info)

371
static const struct pci_device_id pciidlist[] = {		/* aka */
372
	INTEL_PCI_IDS,
373
	{0, 0, 0}
L
Linus Torvalds 已提交
374 375
};

J
Jesse Barnes 已提交
376 377 378 379
#if defined(CONFIG_DRM_I915_KMS)
MODULE_DEVICE_TABLE(pci, pciidlist);
#endif

380
void intel_detect_pch(struct drm_device *dev)
381 382 383 384
{
	struct drm_i915_private *dev_priv = dev->dev_private;
	struct pci_dev *pch;

B
Ben Widawsky 已提交
385 386 387 388 389 390 391 392
	/* In all current cases, num_pipes is equivalent to the PCH_NOP setting
	 * (which really amounts to a PCH but no South Display).
	 */
	if (INTEL_INFO(dev)->num_pipes == 0) {
		dev_priv->pch_type = PCH_NOP;
		return;
	}

393 394 395 396 397
	/*
	 * The reason to probe ISA bridge instead of Dev31:Fun0 is to
	 * make graphics device passthrough work easy for VMM, that only
	 * need to expose ISA bridge to let driver know the real hardware
	 * underneath. This is a requirement from virtualization team.
398 399 400 401 402
	 *
	 * In some virtualized environments (e.g. XEN), there is irrelevant
	 * ISA bridge in the system. To work reliably, we should scan trhough
	 * all the ISA bridge devices and check for the first match, instead
	 * of only checking the first one.
403 404
	 */
	pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
405 406
	while (pch) {
		struct pci_dev *curr = pch;
407
		if (pch->vendor == PCI_VENDOR_ID_INTEL) {
408
			unsigned short id;
409
			id = pch->device & INTEL_PCH_DEVICE_ID_MASK;
410
			dev_priv->pch_id = id;
411

412 413 414
			if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
				dev_priv->pch_type = PCH_IBX;
				DRM_DEBUG_KMS("Found Ibex Peak PCH\n");
415
				WARN_ON(!IS_GEN5(dev));
416
			} else if (id == INTEL_PCH_CPT_DEVICE_ID_TYPE) {
417 418
				dev_priv->pch_type = PCH_CPT;
				DRM_DEBUG_KMS("Found CougarPoint PCH\n");
419
				WARN_ON(!(IS_GEN6(dev) || IS_IVYBRIDGE(dev)));
J
Jesse Barnes 已提交
420 421 422
			} else if (id == INTEL_PCH_PPT_DEVICE_ID_TYPE) {
				/* PantherPoint is CPT compatible */
				dev_priv->pch_type = PCH_CPT;
423
				DRM_DEBUG_KMS("Found PantherPoint PCH\n");
424
				WARN_ON(!(IS_GEN6(dev) || IS_IVYBRIDGE(dev)));
425 426 427
			} else if (id == INTEL_PCH_LPT_DEVICE_ID_TYPE) {
				dev_priv->pch_type = PCH_LPT;
				DRM_DEBUG_KMS("Found LynxPoint PCH\n");
428
				WARN_ON(!IS_HASWELL(dev));
429
				WARN_ON(IS_ULT(dev));
W
Wei Shun Chang 已提交
430 431 432 433
			} else if (id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE) {
				dev_priv->pch_type = PCH_LPT;
				DRM_DEBUG_KMS("Found LynxPoint LP PCH\n");
				WARN_ON(!IS_HASWELL(dev));
434
				WARN_ON(!IS_ULT(dev));
435 436
			} else {
				goto check_next;
437
			}
438 439
			pci_dev_put(pch);
			break;
440
		}
441 442 443
check_next:
		pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, curr);
		pci_dev_put(curr);
444
	}
445 446
	if (!pch)
		DRM_DEBUG_KMS("No PCH found?\n");
447 448
}

449 450 451 452 453 454 455 456
bool i915_semaphore_is_enabled(struct drm_device *dev)
{
	if (INTEL_INFO(dev)->gen < 6)
		return 0;

	if (i915_semaphores >= 0)
		return i915_semaphores;

457
#ifdef CONFIG_INTEL_IOMMU
458
	/* Enable semaphores on SNB when IO remapping is off */
459 460 461
	if (INTEL_INFO(dev)->gen == 6 && intel_iommu_gfx_mapped)
		return false;
#endif
462 463 464 465

	return 1;
}

466
static int i915_drm_freeze(struct drm_device *dev)
J
Jesse Barnes 已提交
467
{
468
	struct drm_i915_private *dev_priv = dev->dev_private;
469
	struct drm_crtc *crtc;
470

471 472 473 474 475
	/* ignore lid events during suspend */
	mutex_lock(&dev_priv->modeset_restore_lock);
	dev_priv->modeset_restore = MODESET_SUSPENDED;
	mutex_unlock(&dev_priv->modeset_restore_lock);

476 477 478
	/* We do a lot of poking in a lot of registers, make sure they work
	 * properly. */
	hsw_disable_package_c8(dev_priv);
479
	intel_display_set_init_power(dev, true);
480

481 482
	drm_kms_helper_poll_disable(dev);

J
Jesse Barnes 已提交
483 484
	pci_save_state(dev->pdev);

485
	/* If KMS is active, we do the leavevt stuff here */
486
	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
487 488
		int error;

489
		error = i915_gem_suspend(dev);
490
		if (error) {
491
			dev_err(&dev->pdev->dev,
492 493 494
				"GEM idle failed, resume might fail\n");
			return error;
		}
495

496 497
		cancel_delayed_work_sync(&dev_priv->rps.delayed_resume_work);

498
		drm_irq_uninstall(dev);
499
		dev_priv->enable_hotplug_processing = false;
500 501 502 503 504 505
		/*
		 * Disable CRTCs directly since we want to preserve sw state
		 * for _thaw.
		 */
		list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
			dev_priv->display.crtc_disable(crtc);
506 507

		intel_modeset_suspend_hw(dev);
508 509
	}

510 511
	i915_gem_suspend_gtt_mappings(dev);

512 513
	i915_save_state(dev);

514
	intel_opregion_fini(dev);
515

516
	console_lock();
517
	intel_fbdev_set_suspend(dev, FBINFO_STATE_SUSPENDED);
518 519
	console_unlock();

520
	return 0;
521 522
}

523
int i915_suspend(struct drm_device *dev, pm_message_t state)
524 525 526 527 528 529 530 531 532 533 534 535
{
	int error;

	if (!dev || !dev->dev_private) {
		DRM_ERROR("dev: %p\n", dev);
		DRM_ERROR("DRM not initialized, aborting suspend.\n");
		return -ENODEV;
	}

	if (state.event == PM_EVENT_PRETHAW)
		return 0;

536 537 538

	if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
		return 0;
539

540 541 542 543
	error = i915_drm_freeze(dev);
	if (error)
		return error;

544 545 546 547 548
	if (state.event == PM_EVENT_SUSPEND) {
		/* Shut down the device */
		pci_disable_device(dev->pdev);
		pci_set_power_state(dev->pdev, PCI_D3hot);
	}
J
Jesse Barnes 已提交
549 550 551 552

	return 0;
}

553 554 555 556 557 558 559 560
void intel_console_resume(struct work_struct *work)
{
	struct drm_i915_private *dev_priv =
		container_of(work, struct drm_i915_private,
			     console_resume_work);
	struct drm_device *dev = dev_priv->dev;

	console_lock();
561
	intel_fbdev_set_suspend(dev, FBINFO_STATE_RUNNING);
562 563 564
	console_unlock();
}

565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582
static void intel_resume_hotplug(struct drm_device *dev)
{
	struct drm_mode_config *mode_config = &dev->mode_config;
	struct intel_encoder *encoder;

	mutex_lock(&mode_config->mutex);
	DRM_DEBUG_KMS("running encoder hotplug functions\n");

	list_for_each_entry(encoder, &mode_config->encoder_list, base.head)
		if (encoder->hot_plug)
			encoder->hot_plug(encoder);

	mutex_unlock(&mode_config->mutex);

	/* Just fire off a uevent and let userspace tell us what to do */
	drm_helper_hpd_irq_event(dev);
}

583
static int __i915_drm_thaw(struct drm_device *dev, bool restore_gtt_mappings)
J
Jesse Barnes 已提交
584
{
585
	struct drm_i915_private *dev_priv = dev->dev_private;
586
	int error = 0;
587

588 589
	intel_uncore_early_sanitize(dev);

590 591 592 593 594 595 596 597 598
	intel_uncore_sanitize(dev);

	if (drm_core_check_feature(dev, DRIVER_MODESET) &&
	    restore_gtt_mappings) {
		mutex_lock(&dev->struct_mutex);
		i915_gem_restore_gtt_mappings(dev);
		mutex_unlock(&dev->struct_mutex);
	}

599
	intel_power_domains_init_hw(dev);
600

601
	i915_restore_state(dev);
602
	intel_opregion_setup(dev);
603

604 605
	/* KMS EnterVT equivalent */
	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
P
Paulo Zanoni 已提交
606
		intel_init_pch_refclk(dev);
607

608 609
		mutex_lock(&dev->struct_mutex);

610
		error = i915_gem_init_hw(dev);
611
		mutex_unlock(&dev->struct_mutex);
612

613 614 615
		/* We need working interrupts for modeset enabling ... */
		drm_irq_install(dev);

616
		intel_modeset_init_hw(dev);
617 618 619 620

		drm_modeset_lock_all(dev);
		intel_modeset_setup_hw_state(dev, true);
		drm_modeset_unlock_all(dev);
621 622 623 624 625 626 627

		/*
		 * ... but also need to make sure that hotplug processing
		 * doesn't cause havoc. Like in the driver load code we don't
		 * bother with the tiny race here where we might loose hotplug
		 * notifications.
		 * */
628
		intel_hpd_init(dev);
629
		dev_priv->enable_hotplug_processing = true;
630 631
		/* Config may have changed between suspend and resume */
		intel_resume_hotplug(dev);
J
Jesse Barnes 已提交
632
	}
633

634 635
	intel_opregion_init(dev);

636 637 638 639 640 641
	/*
	 * The console lock can be pretty contented on resume due
	 * to all the printk activity.  Try to keep it out of the hot
	 * path of resume if possible.
	 */
	if (console_trylock()) {
642
		intel_fbdev_set_suspend(dev, FBINFO_STATE_RUNNING);
643 644 645 646 647
		console_unlock();
	} else {
		schedule_work(&dev_priv->console_resume_work);
	}

648 649 650 651
	/* Undo what we did at i915_drm_freeze so the refcount goes back to the
	 * expected level. */
	hsw_enable_package_c8(dev_priv);

652 653 654
	mutex_lock(&dev_priv->modeset_restore_lock);
	dev_priv->modeset_restore = MODESET_DONE;
	mutex_unlock(&dev_priv->modeset_restore_lock);
655 656 657
	return error;
}

658 659
static int i915_drm_thaw(struct drm_device *dev)
{
660
	if (drm_core_check_feature(dev, DRIVER_MODESET))
661
		i915_check_and_clear_faults(dev);
662

663
	return __i915_drm_thaw(dev, true);
664 665
}

666
int i915_resume(struct drm_device *dev)
667
{
668
	struct drm_i915_private *dev_priv = dev->dev_private;
669 670
	int ret;

671 672 673
	if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
		return 0;

674 675 676 677 678
	if (pci_enable_device(dev->pdev))
		return -EIO;

	pci_set_master(dev->pdev);

679 680
	/*
	 * Platforms with opregion should have sane BIOS, older ones (gen3 and
681 682
	 * earlier) need to restore the GTT mappings since the BIOS might clear
	 * all our scratch PTEs.
683
	 */
684
	ret = __i915_drm_thaw(dev, !dev_priv->opregion.header);
685 686 687 688 689
	if (ret)
		return ret;

	drm_kms_helper_poll_enable(dev);
	return 0;
J
Jesse Barnes 已提交
690 691
}

692
/**
693
 * i915_reset - reset chip after a hang
694 695 696 697 698 699 700 701 702 703 704 705 706
 * @dev: drm device to reset
 *
 * Reset the chip.  Useful if a hang is detected. Returns zero on successful
 * reset or otherwise an error code.
 *
 * Procedure is fairly simple:
 *   - reset the chip using the reset reg
 *   - re-init context state
 *   - re-init hardware status page
 *   - re-init ring buffer
 *   - re-init interrupt state
 *   - re-init display
 */
707
int i915_reset(struct drm_device *dev)
708 709
{
	drm_i915_private_t *dev_priv = dev->dev_private;
710
	bool simulated;
711
	int ret;
712

C
Chris Wilson 已提交
713 714 715
	if (!i915_try_reset)
		return 0;

716
	mutex_lock(&dev->struct_mutex);
717

718
	i915_gem_reset(dev);
719

720 721
	simulated = dev_priv->gpu_error.stop_rings != 0;

722 723 724 725 726 727 728
	ret = intel_gpu_reset(dev);

	/* Also reset the gpu hangman. */
	if (simulated) {
		DRM_INFO("Simulated gpu hang, resetting stop_rings\n");
		dev_priv->gpu_error.stop_rings = 0;
		if (ret == -ENODEV) {
729 730
			DRM_INFO("Reset not implemented, but ignoring "
				 "error for simulated gpu hangs\n");
731 732
			ret = 0;
		}
733
	}
734

735
	if (ret) {
736
		DRM_ERROR("Failed to reset chip: %i\n", ret);
737
		mutex_unlock(&dev->struct_mutex);
738
		return ret;
739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755
	}

	/* Ok, now get things going again... */

	/*
	 * Everything depends on having the GTT running, so we need to start
	 * there.  Fortunately we don't need to do this unless we reset the
	 * chip at a PCI level.
	 *
	 * Next we need to restore the context, but we don't use those
	 * yet either...
	 *
	 * Ring buffer needs to be re-initialized in the KMS case, or if X
	 * was running at the time of the reset (i.e. we weren't VT
	 * switched away).
	 */
	if (drm_core_check_feature(dev, DRIVER_MODESET) ||
756 757
			!dev_priv->ums.mm_suspended) {
		dev_priv->ums.mm_suspended = 0;
758

759
		ret = i915_gem_init_hw(dev);
760
		mutex_unlock(&dev->struct_mutex);
761 762 763 764
		if (ret) {
			DRM_ERROR("Failed hw init on reset %d\n", ret);
			return ret;
		}
765

766 767
		drm_irq_uninstall(dev);
		drm_irq_install(dev);
768
		intel_hpd_init(dev);
769 770
	} else {
		mutex_unlock(&dev->struct_mutex);
771 772 773 774 775
	}

	return 0;
}

776
static int i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
777
{
778 779 780
	struct intel_device_info *intel_info =
		(struct intel_device_info *) ent->driver_data;

781 782 783 784 785 786
	if (IS_PRELIMINARY_HW(intel_info) && !i915_preliminary_hw_support) {
		DRM_INFO("This hardware requires preliminary hardware support.\n"
			 "See CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT, and/or modparam preliminary_hw_support\n");
		return -ENODEV;
	}

787 788 789 790 791 792 793 794
	/* Only bind to function 0 of the device. Early generations
	 * used function 1 as a placeholder for multi-head. This causes
	 * us confusion instead, especially on the systems where both
	 * functions have the same PCI-ID!
	 */
	if (PCI_FUNC(pdev->devfn))
		return -ENODEV;

795
	driver.driver_features &= ~(DRIVER_USE_AGP | DRIVER_REQUIRE_AGP);
796

797
	return drm_get_pci_dev(pdev, ent, &driver);
798 799 800 801 802 803 804 805 806 807
}

static void
i915_pci_remove(struct pci_dev *pdev)
{
	struct drm_device *dev = pci_get_drvdata(pdev);

	drm_put_dev(dev);
}

808
static int i915_pm_suspend(struct device *dev)
809
{
810 811 812
	struct pci_dev *pdev = to_pci_dev(dev);
	struct drm_device *drm_dev = pci_get_drvdata(pdev);
	int error;
813

814 815 816 817
	if (!drm_dev || !drm_dev->dev_private) {
		dev_err(dev, "DRM not initialized, aborting suspend.\n");
		return -ENODEV;
	}
818

819 820 821
	if (drm_dev->switch_power_state == DRM_SWITCH_POWER_OFF)
		return 0;

822 823 824
	error = i915_drm_freeze(drm_dev);
	if (error)
		return error;
825

826 827
	pci_disable_device(pdev);
	pci_set_power_state(pdev, PCI_D3hot);
828

829
	return 0;
830 831
}

832
static int i915_pm_resume(struct device *dev)
833
{
834 835 836 837
	struct pci_dev *pdev = to_pci_dev(dev);
	struct drm_device *drm_dev = pci_get_drvdata(pdev);

	return i915_resume(drm_dev);
838 839
}

840
static int i915_pm_freeze(struct device *dev)
841
{
842 843 844 845 846 847 848 849 850
	struct pci_dev *pdev = to_pci_dev(dev);
	struct drm_device *drm_dev = pci_get_drvdata(pdev);

	if (!drm_dev || !drm_dev->dev_private) {
		dev_err(dev, "DRM not initialized, aborting suspend.\n");
		return -ENODEV;
	}

	return i915_drm_freeze(drm_dev);
851 852
}

853
static int i915_pm_thaw(struct device *dev)
854
{
855 856 857 858
	struct pci_dev *pdev = to_pci_dev(dev);
	struct drm_device *drm_dev = pci_get_drvdata(pdev);

	return i915_drm_thaw(drm_dev);
859 860
}

861
static int i915_pm_poweroff(struct device *dev)
862
{
863 864 865
	struct pci_dev *pdev = to_pci_dev(dev);
	struct drm_device *drm_dev = pci_get_drvdata(pdev);

866
	return i915_drm_freeze(drm_dev);
867 868
}

869
static const struct dev_pm_ops i915_pm_ops = {
870 871 872 873 874 875
	.suspend = i915_pm_suspend,
	.resume = i915_pm_resume,
	.freeze = i915_pm_freeze,
	.thaw = i915_pm_thaw,
	.poweroff = i915_pm_poweroff,
	.restore = i915_pm_resume,
876 877
};

878
static const struct vm_operations_struct i915_gem_vm_ops = {
879
	.fault = i915_gem_fault,
880 881
	.open = drm_gem_vm_open,
	.close = drm_gem_vm_close,
882 883
};

884 885 886 887 888 889 890 891 892 893 894 895 896 897
static const struct file_operations i915_driver_fops = {
	.owner = THIS_MODULE,
	.open = drm_open,
	.release = drm_release,
	.unlocked_ioctl = drm_ioctl,
	.mmap = drm_gem_mmap,
	.poll = drm_poll,
	.read = drm_read,
#ifdef CONFIG_COMPAT
	.compat_ioctl = i915_compat_ioctl,
#endif
	.llseek = noop_llseek,
};

L
Linus Torvalds 已提交
898
static struct drm_driver driver = {
899 900
	/* Don't use MTRRs here; the Xserver or userspace app should
	 * deal with them for Intel hardware.
D
Dave Airlie 已提交
901
	 */
902
	.driver_features =
903
	    DRIVER_USE_AGP | DRIVER_REQUIRE_AGP |
904 905
	    DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM | DRIVER_PRIME |
	    DRIVER_RENDER,
906
	.load = i915_driver_load,
J
Jesse Barnes 已提交
907
	.unload = i915_driver_unload,
908
	.open = i915_driver_open,
909 910
	.lastclose = i915_driver_lastclose,
	.preclose = i915_driver_preclose,
911
	.postclose = i915_driver_postclose,
912 913 914 915 916

	/* Used in place of i915_pm_ops for non-DRIVER_MODESET */
	.suspend = i915_suspend,
	.resume = i915_resume,

917
	.device_is_agp = i915_driver_device_is_agp,
918 919
	.master_create = i915_master_create,
	.master_destroy = i915_master_destroy,
920
#if defined(CONFIG_DEBUG_FS)
921 922
	.debugfs_init = i915_debugfs_init,
	.debugfs_cleanup = i915_debugfs_cleanup,
923
#endif
924
	.gem_free_object = i915_gem_free_object,
925
	.gem_vm_ops = &i915_gem_vm_ops,
926 927 928 929 930 931

	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
	.gem_prime_export = i915_gem_prime_export,
	.gem_prime_import = i915_gem_prime_import,

932 933
	.dumb_create = i915_gem_dumb_create,
	.dumb_map_offset = i915_gem_mmap_gtt,
934
	.dumb_destroy = drm_gem_dumb_destroy,
L
Linus Torvalds 已提交
935
	.ioctls = i915_ioctls,
936
	.fops = &i915_driver_fops,
937 938 939 940 941 942
	.name = DRIVER_NAME,
	.desc = DRIVER_DESC,
	.date = DRIVER_DATE,
	.major = DRIVER_MAJOR,
	.minor = DRIVER_MINOR,
	.patchlevel = DRIVER_PATCHLEVEL,
L
Linus Torvalds 已提交
943 944
};

945 946 947 948 949 950 951 952
static struct pci_driver i915_pci_driver = {
	.name = DRIVER_NAME,
	.id_table = pciidlist,
	.probe = i915_pci_probe,
	.remove = i915_pci_remove,
	.driver.pm = &i915_pm_ops,
};

L
Linus Torvalds 已提交
953 954 955
static int __init i915_init(void)
{
	driver.num_ioctls = i915_max_ioctl;
J
Jesse Barnes 已提交
956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977

	/*
	 * If CONFIG_DRM_I915_KMS is set, default to KMS unless
	 * explicitly disabled with the module pararmeter.
	 *
	 * Otherwise, just follow the parameter (defaulting to off).
	 *
	 * Allow optional vga_text_mode_force boot option to override
	 * the default behavior.
	 */
#if defined(CONFIG_DRM_I915_KMS)
	if (i915_modeset != 0)
		driver.driver_features |= DRIVER_MODESET;
#endif
	if (i915_modeset == 1)
		driver.driver_features |= DRIVER_MODESET;

#ifdef CONFIG_VGA_CONSOLE
	if (vgacon_text_force() && i915_modeset == -1)
		driver.driver_features &= ~DRIVER_MODESET;
#endif

D
Daniel Vetter 已提交
978
	if (!(driver.driver_features & DRIVER_MODESET)) {
979
		driver.get_vblank_timestamp = NULL;
D
Daniel Vetter 已提交
980 981 982 983 984
#ifndef CONFIG_DRM_I915_UMS
		/* Silently fail loading to not upset userspace. */
		return 0;
#endif
	}
985

986
	return drm_pci_init(&driver, &i915_pci_driver);
L
Linus Torvalds 已提交
987 988 989 990
}

static void __exit i915_exit(void)
{
991
	drm_pci_exit(&driver, &i915_pci_driver);
L
Linus Torvalds 已提交
992 993 994 995 996
}

module_init(i915_init);
module_exit(i915_exit);

D
Dave Airlie 已提交
997 998
MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
L
Linus Torvalds 已提交
999
MODULE_LICENSE("GPL and additional rights");