Merge branch 'parisc-4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller...
[cascardo/linux.git] / drivers / gpu / drm / i915 / i915_pci.c
1 /*
2  * Copyright © 2016 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  *
23  */
24
25 #include <linux/console.h>
26 #include <linux/vgaarb.h>
27 #include <linux/vga_switcheroo.h>
28
29 #include "i915_drv.h"
30
31 #define GEN_DEFAULT_PIPEOFFSETS \
32         .pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \
33                           PIPE_C_OFFSET, PIPE_EDP_OFFSET }, \
34         .trans_offsets = { TRANSCODER_A_OFFSET, TRANSCODER_B_OFFSET, \
35                            TRANSCODER_C_OFFSET, TRANSCODER_EDP_OFFSET }, \
36         .palette_offsets = { PALETTE_A_OFFSET, PALETTE_B_OFFSET }
37
38 #define GEN_CHV_PIPEOFFSETS \
39         .pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \
40                           CHV_PIPE_C_OFFSET }, \
41         .trans_offsets = { TRANSCODER_A_OFFSET, TRANSCODER_B_OFFSET, \
42                            CHV_TRANSCODER_C_OFFSET, }, \
43         .palette_offsets = { PALETTE_A_OFFSET, PALETTE_B_OFFSET, \
44                              CHV_PALETTE_C_OFFSET }
45
46 #define CURSOR_OFFSETS \
47         .cursor_offsets = { CURSOR_A_OFFSET, CURSOR_B_OFFSET, CHV_CURSOR_C_OFFSET }
48
49 #define IVB_CURSOR_OFFSETS \
50         .cursor_offsets = { CURSOR_A_OFFSET, IVB_CURSOR_B_OFFSET, IVB_CURSOR_C_OFFSET }
51
52 #define BDW_COLORS \
53         .color = { .degamma_lut_size = 512, .gamma_lut_size = 512 }
54 #define CHV_COLORS \
55         .color = { .degamma_lut_size = 65, .gamma_lut_size = 257 }
56
57 static const struct intel_device_info intel_i830_info = {
58         .gen = 2, .is_mobile = 1, .cursor_needs_physical = 1, .num_pipes = 2,
59         .has_overlay = 1, .overlay_needs_physical = 1,
60         .ring_mask = RENDER_RING,
61         GEN_DEFAULT_PIPEOFFSETS,
62         CURSOR_OFFSETS,
63 };
64
65 static const struct intel_device_info intel_845g_info = {
66         .gen = 2, .num_pipes = 1,
67         .has_overlay = 1, .overlay_needs_physical = 1,
68         .ring_mask = RENDER_RING,
69         GEN_DEFAULT_PIPEOFFSETS,
70         CURSOR_OFFSETS,
71 };
72
73 static const struct intel_device_info intel_i85x_info = {
74         .gen = 2, .is_i85x = 1, .is_mobile = 1, .num_pipes = 2,
75         .cursor_needs_physical = 1,
76         .has_overlay = 1, .overlay_needs_physical = 1,
77         .has_fbc = 1,
78         .ring_mask = RENDER_RING,
79         GEN_DEFAULT_PIPEOFFSETS,
80         CURSOR_OFFSETS,
81 };
82
83 static const struct intel_device_info intel_i865g_info = {
84         .gen = 2, .num_pipes = 1,
85         .has_overlay = 1, .overlay_needs_physical = 1,
86         .ring_mask = RENDER_RING,
87         GEN_DEFAULT_PIPEOFFSETS,
88         CURSOR_OFFSETS,
89 };
90
91 static const struct intel_device_info intel_i915g_info = {
92         .gen = 3, .is_i915g = 1, .cursor_needs_physical = 1, .num_pipes = 2,
93         .has_overlay = 1, .overlay_needs_physical = 1,
94         .ring_mask = RENDER_RING,
95         GEN_DEFAULT_PIPEOFFSETS,
96         CURSOR_OFFSETS,
97 };
98 static const struct intel_device_info intel_i915gm_info = {
99         .gen = 3, .is_mobile = 1, .num_pipes = 2,
100         .cursor_needs_physical = 1,
101         .has_overlay = 1, .overlay_needs_physical = 1,
102         .supports_tv = 1,
103         .has_fbc = 1,
104         .ring_mask = RENDER_RING,
105         GEN_DEFAULT_PIPEOFFSETS,
106         CURSOR_OFFSETS,
107 };
108 static const struct intel_device_info intel_i945g_info = {
109         .gen = 3, .has_hotplug = 1, .cursor_needs_physical = 1, .num_pipes = 2,
110         .has_overlay = 1, .overlay_needs_physical = 1,
111         .ring_mask = RENDER_RING,
112         GEN_DEFAULT_PIPEOFFSETS,
113         CURSOR_OFFSETS,
114 };
115 static const struct intel_device_info intel_i945gm_info = {
116         .gen = 3, .is_i945gm = 1, .is_mobile = 1, .num_pipes = 2,
117         .has_hotplug = 1, .cursor_needs_physical = 1,
118         .has_overlay = 1, .overlay_needs_physical = 1,
119         .supports_tv = 1,
120         .has_fbc = 1,
121         .ring_mask = RENDER_RING,
122         GEN_DEFAULT_PIPEOFFSETS,
123         CURSOR_OFFSETS,
124 };
125
126 static const struct intel_device_info intel_i965g_info = {
127         .gen = 4, .is_broadwater = 1, .num_pipes = 2,
128         .has_hotplug = 1,
129         .has_overlay = 1,
130         .ring_mask = RENDER_RING,
131         GEN_DEFAULT_PIPEOFFSETS,
132         CURSOR_OFFSETS,
133 };
134
135 static const struct intel_device_info intel_i965gm_info = {
136         .gen = 4, .is_crestline = 1, .num_pipes = 2,
137         .is_mobile = 1, .has_fbc = 1, .has_hotplug = 1,
138         .has_overlay = 1,
139         .supports_tv = 1,
140         .ring_mask = RENDER_RING,
141         GEN_DEFAULT_PIPEOFFSETS,
142         CURSOR_OFFSETS,
143 };
144
145 static const struct intel_device_info intel_g33_info = {
146         .gen = 3, .is_g33 = 1, .num_pipes = 2,
147         .need_gfx_hws = 1, .has_hotplug = 1,
148         .has_overlay = 1,
149         .ring_mask = RENDER_RING,
150         GEN_DEFAULT_PIPEOFFSETS,
151         CURSOR_OFFSETS,
152 };
153
154 static const struct intel_device_info intel_g45_info = {
155         .gen = 4, .is_g4x = 1, .need_gfx_hws = 1, .num_pipes = 2,
156         .has_pipe_cxsr = 1, .has_hotplug = 1,
157         .ring_mask = RENDER_RING | BSD_RING,
158         GEN_DEFAULT_PIPEOFFSETS,
159         CURSOR_OFFSETS,
160 };
161
162 static const struct intel_device_info intel_gm45_info = {
163         .gen = 4, .is_g4x = 1, .num_pipes = 2,
164         .is_mobile = 1, .need_gfx_hws = 1, .has_fbc = 1,
165         .has_pipe_cxsr = 1, .has_hotplug = 1,
166         .supports_tv = 1,
167         .ring_mask = RENDER_RING | BSD_RING,
168         GEN_DEFAULT_PIPEOFFSETS,
169         CURSOR_OFFSETS,
170 };
171
172 static const struct intel_device_info intel_pineview_info = {
173         .gen = 3, .is_g33 = 1, .is_pineview = 1, .is_mobile = 1, .num_pipes = 2,
174         .need_gfx_hws = 1, .has_hotplug = 1,
175         .has_overlay = 1,
176         GEN_DEFAULT_PIPEOFFSETS,
177         CURSOR_OFFSETS,
178 };
179
180 static const struct intel_device_info intel_ironlake_d_info = {
181         .gen = 5, .num_pipes = 2,
182         .need_gfx_hws = 1, .has_hotplug = 1,
183         .ring_mask = RENDER_RING | BSD_RING,
184         GEN_DEFAULT_PIPEOFFSETS,
185         CURSOR_OFFSETS,
186 };
187
188 static const struct intel_device_info intel_ironlake_m_info = {
189         .gen = 5, .is_mobile = 1, .num_pipes = 2,
190         .need_gfx_hws = 1, .has_hotplug = 1,
191         .has_fbc = 1,
192         .ring_mask = RENDER_RING | BSD_RING,
193         GEN_DEFAULT_PIPEOFFSETS,
194         CURSOR_OFFSETS,
195 };
196
197 static const struct intel_device_info intel_sandybridge_d_info = {
198         .gen = 6, .num_pipes = 2,
199         .need_gfx_hws = 1, .has_hotplug = 1,
200         .has_fbc = 1,
201         .ring_mask = RENDER_RING | BSD_RING | BLT_RING,
202         .has_llc = 1,
203         GEN_DEFAULT_PIPEOFFSETS,
204         CURSOR_OFFSETS,
205 };
206
207 static const struct intel_device_info intel_sandybridge_m_info = {
208         .gen = 6, .is_mobile = 1, .num_pipes = 2,
209         .need_gfx_hws = 1, .has_hotplug = 1,
210         .has_fbc = 1,
211         .ring_mask = RENDER_RING | BSD_RING | BLT_RING,
212         .has_llc = 1,
213         GEN_DEFAULT_PIPEOFFSETS,
214         CURSOR_OFFSETS,
215 };
216
217 #define GEN7_FEATURES  \
218         .gen = 7, .num_pipes = 3, \
219         .need_gfx_hws = 1, .has_hotplug = 1, \
220         .has_fbc = 1, \
221         .ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
222         .has_llc = 1, \
223         GEN_DEFAULT_PIPEOFFSETS, \
224         IVB_CURSOR_OFFSETS
225
226 static const struct intel_device_info intel_ivybridge_d_info = {
227         GEN7_FEATURES,
228         .is_ivybridge = 1,
229 };
230
231 static const struct intel_device_info intel_ivybridge_m_info = {
232         GEN7_FEATURES,
233         .is_ivybridge = 1,
234         .is_mobile = 1,
235 };
236
237 static const struct intel_device_info intel_ivybridge_q_info = {
238         GEN7_FEATURES,
239         .is_ivybridge = 1,
240         .num_pipes = 0, /* legal, last one wins */
241 };
242
243 #define VLV_FEATURES  \
244         .gen = 7, .num_pipes = 2, \
245         .need_gfx_hws = 1, .has_hotplug = 1, \
246         .ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
247         .display_mmio_offset = VLV_DISPLAY_BASE, \
248         GEN_DEFAULT_PIPEOFFSETS, \
249         CURSOR_OFFSETS
250
251 static const struct intel_device_info intel_valleyview_m_info = {
252         VLV_FEATURES,
253         .is_valleyview = 1,
254         .is_mobile = 1,
255 };
256
257 static const struct intel_device_info intel_valleyview_d_info = {
258         VLV_FEATURES,
259         .is_valleyview = 1,
260 };
261
262 #define HSW_FEATURES  \
263         GEN7_FEATURES, \
264         .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, \
265         .has_ddi = 1, \
266         .has_fpga_dbg = 1
267
268 static const struct intel_device_info intel_haswell_d_info = {
269         HSW_FEATURES,
270         .is_haswell = 1,
271 };
272
273 static const struct intel_device_info intel_haswell_m_info = {
274         HSW_FEATURES,
275         .is_haswell = 1,
276         .is_mobile = 1,
277 };
278
279 #define BDW_FEATURES \
280         HSW_FEATURES, \
281         BDW_COLORS
282
283 static const struct intel_device_info intel_broadwell_d_info = {
284         BDW_FEATURES,
285         .gen = 8,
286         .is_broadwell = 1,
287 };
288
289 static const struct intel_device_info intel_broadwell_m_info = {
290         BDW_FEATURES,
291         .gen = 8, .is_mobile = 1,
292         .is_broadwell = 1,
293 };
294
295 static const struct intel_device_info intel_broadwell_gt3d_info = {
296         BDW_FEATURES,
297         .gen = 8,
298         .is_broadwell = 1,
299         .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
300 };
301
302 static const struct intel_device_info intel_broadwell_gt3m_info = {
303         BDW_FEATURES,
304         .gen = 8, .is_mobile = 1,
305         .is_broadwell = 1,
306         .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
307 };
308
309 static const struct intel_device_info intel_cherryview_info = {
310         .gen = 8, .num_pipes = 3,
311         .need_gfx_hws = 1, .has_hotplug = 1,
312         .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
313         .is_cherryview = 1,
314         .display_mmio_offset = VLV_DISPLAY_BASE,
315         GEN_CHV_PIPEOFFSETS,
316         CURSOR_OFFSETS,
317         CHV_COLORS,
318 };
319
320 static const struct intel_device_info intel_skylake_info = {
321         BDW_FEATURES,
322         .is_skylake = 1,
323         .gen = 9,
324 };
325
326 static const struct intel_device_info intel_skylake_gt3_info = {
327         BDW_FEATURES,
328         .is_skylake = 1,
329         .gen = 9,
330         .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
331 };
332
333 static const struct intel_device_info intel_broxton_info = {
334         .is_broxton = 1,
335         .gen = 9,
336         .need_gfx_hws = 1, .has_hotplug = 1,
337         .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
338         .num_pipes = 3,
339         .has_ddi = 1,
340         .has_fpga_dbg = 1,
341         .has_fbc = 1,
342         .has_pooled_eu = 0,
343         GEN_DEFAULT_PIPEOFFSETS,
344         IVB_CURSOR_OFFSETS,
345         BDW_COLORS,
346 };
347
348 static const struct intel_device_info intel_kabylake_info = {
349         BDW_FEATURES,
350         .is_kabylake = 1,
351         .gen = 9,
352 };
353
354 static const struct intel_device_info intel_kabylake_gt3_info = {
355         BDW_FEATURES,
356         .is_kabylake = 1,
357         .gen = 9,
358         .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
359 };
360
361 /*
362  * Make sure any device matches here are from most specific to most
363  * general.  For example, since the Quanta match is based on the subsystem
364  * and subvendor IDs, we need it to come before the more general IVB
365  * PCI ID matches, otherwise we'll use the wrong info struct above.
366  */
367 static const struct pci_device_id pciidlist[] = {
368         INTEL_I830_IDS(&intel_i830_info),
369         INTEL_I845G_IDS(&intel_845g_info),
370         INTEL_I85X_IDS(&intel_i85x_info),
371         INTEL_I865G_IDS(&intel_i865g_info),
372         INTEL_I915G_IDS(&intel_i915g_info),
373         INTEL_I915GM_IDS(&intel_i915gm_info),
374         INTEL_I945G_IDS(&intel_i945g_info),
375         INTEL_I945GM_IDS(&intel_i945gm_info),
376         INTEL_I965G_IDS(&intel_i965g_info),
377         INTEL_G33_IDS(&intel_g33_info),
378         INTEL_I965GM_IDS(&intel_i965gm_info),
379         INTEL_GM45_IDS(&intel_gm45_info),
380         INTEL_G45_IDS(&intel_g45_info),
381         INTEL_PINEVIEW_IDS(&intel_pineview_info),
382         INTEL_IRONLAKE_D_IDS(&intel_ironlake_d_info),
383         INTEL_IRONLAKE_M_IDS(&intel_ironlake_m_info),
384         INTEL_SNB_D_IDS(&intel_sandybridge_d_info),
385         INTEL_SNB_M_IDS(&intel_sandybridge_m_info),
386         INTEL_IVB_Q_IDS(&intel_ivybridge_q_info), /* must be first IVB */
387         INTEL_IVB_M_IDS(&intel_ivybridge_m_info),
388         INTEL_IVB_D_IDS(&intel_ivybridge_d_info),
389         INTEL_HSW_D_IDS(&intel_haswell_d_info),
390         INTEL_HSW_M_IDS(&intel_haswell_m_info),
391         INTEL_VLV_M_IDS(&intel_valleyview_m_info),
392         INTEL_VLV_D_IDS(&intel_valleyview_d_info),
393         INTEL_BDW_GT12M_IDS(&intel_broadwell_m_info),
394         INTEL_BDW_GT12D_IDS(&intel_broadwell_d_info),
395         INTEL_BDW_GT3M_IDS(&intel_broadwell_gt3m_info),
396         INTEL_BDW_GT3D_IDS(&intel_broadwell_gt3d_info),
397         INTEL_CHV_IDS(&intel_cherryview_info),
398         INTEL_SKL_GT1_IDS(&intel_skylake_info),
399         INTEL_SKL_GT2_IDS(&intel_skylake_info),
400         INTEL_SKL_GT3_IDS(&intel_skylake_gt3_info),
401         INTEL_SKL_GT4_IDS(&intel_skylake_gt3_info),
402         INTEL_BXT_IDS(&intel_broxton_info),
403         INTEL_KBL_GT1_IDS(&intel_kabylake_info),
404         INTEL_KBL_GT2_IDS(&intel_kabylake_info),
405         INTEL_KBL_GT3_IDS(&intel_kabylake_gt3_info),
406         INTEL_KBL_GT4_IDS(&intel_kabylake_gt3_info),
407         {0, 0, 0}
408 };
409 MODULE_DEVICE_TABLE(pci, pciidlist);
410
411 extern int i915_driver_load(struct pci_dev *pdev,
412                             const struct pci_device_id *ent);
413
414 static int i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
415 {
416         struct intel_device_info *intel_info =
417                 (struct intel_device_info *) ent->driver_data;
418
419         if (IS_PRELIMINARY_HW(intel_info) && !i915.preliminary_hw_support) {
420                 DRM_INFO("This hardware requires preliminary hardware support.\n"
421                          "See CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT, and/or modparam preliminary_hw_support\n");
422                 return -ENODEV;
423         }
424
425         /* Only bind to function 0 of the device. Early generations
426          * used function 1 as a placeholder for multi-head. This causes
427          * us confusion instead, especially on the systems where both
428          * functions have the same PCI-ID!
429          */
430         if (PCI_FUNC(pdev->devfn))
431                 return -ENODEV;
432
433         /*
434          * apple-gmux is needed on dual GPU MacBook Pro
435          * to probe the panel if we're the inactive GPU.
436          */
437         if (vga_switcheroo_client_probe_defer(pdev))
438                 return -EPROBE_DEFER;
439
440         return i915_driver_load(pdev, ent);
441 }
442
443 extern void i915_driver_unload(struct drm_device *dev);
444
445 static void i915_pci_remove(struct pci_dev *pdev)
446 {
447         struct drm_device *dev = pci_get_drvdata(pdev);
448
449         i915_driver_unload(dev);
450         drm_dev_unref(dev);
451 }
452
453 extern const struct dev_pm_ops i915_pm_ops;
454
455 static struct pci_driver i915_pci_driver = {
456         .name = DRIVER_NAME,
457         .id_table = pciidlist,
458         .probe = i915_pci_probe,
459         .remove = i915_pci_remove,
460         .driver.pm = &i915_pm_ops,
461 };
462
463 static int __init i915_init(void)
464 {
465         bool use_kms = true;
466
467         /*
468          * Enable KMS by default, unless explicitly overriden by
469          * either the i915.modeset prarameter or by the
470          * vga_text_mode_force boot option.
471          */
472
473         if (i915.modeset == 0)
474                 use_kms = false;
475
476         if (vgacon_text_force() && i915.modeset == -1)
477                 use_kms = false;
478
479         if (!use_kms) {
480                 /* Silently fail loading to not upset userspace. */
481                 DRM_DEBUG_DRIVER("KMS disabled.\n");
482                 return 0;
483         }
484
485         return pci_register_driver(&i915_pci_driver);
486 }
487
488 static void __exit i915_exit(void)
489 {
490         if (!i915_pci_driver.driver.owner)
491                 return;
492
493         pci_unregister_driver(&i915_pci_driver);
494 }
495
496 module_init(i915_init);
497 module_exit(i915_exit);
498
499 MODULE_AUTHOR("Tungsten Graphics, Inc.");
500 MODULE_AUTHOR("Intel Corporation");
501
502 MODULE_DESCRIPTION(DRIVER_DESC);
503 MODULE_LICENSE("GPL and additional rights");