i915_driver.c 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792
  1. /* i915_drv.c -- i830,i845,i855,i865,i915 driver -*- linux-c -*-
  2. */
  3. /*
  4. *
  5. * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
  6. * All Rights Reserved.
  7. *
  8. * Permission is hereby granted, free of charge, to any person obtaining a
  9. * copy of this software and associated documentation files (the
  10. * "Software"), to deal in the Software without restriction, including
  11. * without limitation the rights to use, copy, modify, merge, publish,
  12. * distribute, sub license, and/or sell copies of the Software, and to
  13. * permit persons to whom the Software is furnished to do so, subject to
  14. * the following conditions:
  15. *
  16. * The above copyright notice and this permission notice (including the
  17. * next paragraph) shall be included in all copies or substantial portions
  18. * of the Software.
  19. *
  20. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  21. * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  22. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  23. * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
  24. * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  25. * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  26. * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  27. *
  28. */
  29. #include <linux/acpi.h>
  30. #include <linux/device.h>
  31. #include <linux/module.h>
  32. #include <linux/oom.h>
  33. #include <linux/pci.h>
  34. #include <linux/pm.h>
  35. #include <linux/pm_runtime.h>
  36. #include <linux/slab.h>
  37. #include <linux/string_helpers.h>
  38. #include <linux/vga_switcheroo.h>
  39. #include <linux/vt.h>
  40. #include <drm/drm_aperture.h>
  41. #include <drm/drm_atomic_helper.h>
  42. #include <drm/drm_ioctl.h>
  43. #include <drm/drm_managed.h>
  44. #include <drm/drm_probe_helper.h>
  45. #include "display/intel_acpi.h"
  46. #include "display/intel_bw.h"
  47. #include "display/intel_cdclk.h"
  48. #include "display/intel_display_driver.h"
  49. #include "display/intel_display.h"
  50. #include "display/intel_dmc.h"
  51. #include "display/intel_dp.h"
  52. #include "display/intel_dpt.h"
  53. #include "display/intel_encoder.h"
  54. #include "display/intel_fbdev.h"
  55. #include "display/intel_hotplug.h"
  56. #include "display/intel_overlay.h"
  57. #include "display/intel_pch_refclk.h"
  58. #include "display/intel_pps.h"
  59. #include "display/intel_sprite.h"
  60. #include "display/skl_watermark.h"
  61. #include "gem/i915_gem_context.h"
  62. #include "gem/i915_gem_create.h"
  63. #include "gem/i915_gem_dmabuf.h"
  64. #include "gem/i915_gem_ioctls.h"
  65. #include "gem/i915_gem_mman.h"
  66. #include "gem/i915_gem_pm.h"
  67. #include "gt/intel_gt.h"
  68. #include "gt/intel_gt_pm.h"
  69. #include "gt/intel_gt_print.h"
  70. #include "gt/intel_rc6.h"
  71. #include "pxp/intel_pxp.h"
  72. #include "pxp/intel_pxp_debugfs.h"
  73. #include "pxp/intel_pxp_pm.h"
  74. #include "soc/intel_dram.h"
  75. #include "soc/intel_gmch.h"
  76. #include "i915_debugfs.h"
  77. #include "i915_driver.h"
  78. #include "i915_drm_client.h"
  79. #include "i915_drv.h"
  80. #include "i915_file_private.h"
  81. #include "i915_getparam.h"
  82. #include "i915_hwmon.h"
  83. #include "i915_ioc32.h"
  84. #include "i915_ioctl.h"
  85. #include "i915_irq.h"
  86. #include "i915_memcpy.h"
  87. #include "i915_perf.h"
  88. #include "i915_query.h"
  89. #include "i915_suspend.h"
  90. #include "i915_switcheroo.h"
  91. #include "i915_sysfs.h"
  92. #include "i915_utils.h"
  93. #include "i915_vgpu.h"
  94. #include "intel_clock_gating.h"
  95. #include "intel_gvt.h"
  96. #include "intel_memory_region.h"
  97. #include "intel_pci_config.h"
  98. #include "intel_pcode.h"
  99. #include "intel_region_ttm.h"
  100. #include "vlv_suspend.h"
  101. static const struct drm_driver i915_drm_driver;
  102. static int i915_workqueues_init(struct drm_i915_private *dev_priv)
  103. {
  104. /*
  105. * The i915 workqueue is primarily used for batched retirement of
  106. * requests (and thus managing bo) once the task has been completed
  107. * by the GPU. i915_retire_requests() is called directly when we
  108. * need high-priority retirement, such as waiting for an explicit
  109. * bo.
  110. *
  111. * It is also used for periodic low-priority events, such as
  112. * idle-timers and recording error state.
  113. *
  114. * All tasks on the workqueue are expected to acquire the dev mutex
  115. * so there is no point in running more than one instance of the
  116. * workqueue at any time. Use an ordered one.
  117. */
  118. dev_priv->wq = alloc_ordered_workqueue("i915", 0);
  119. if (dev_priv->wq == NULL)
  120. goto out_err;
  121. dev_priv->display.hotplug.dp_wq = alloc_ordered_workqueue("i915-dp", 0);
  122. if (dev_priv->display.hotplug.dp_wq == NULL)
  123. goto out_free_wq;
  124. /*
  125. * The unordered i915 workqueue should be used for all work
  126. * scheduling that do not require running in order, which used
  127. * to be scheduled on the system_wq before moving to a driver
  128. * instance due deprecation of flush_scheduled_work().
  129. */
  130. dev_priv->unordered_wq = alloc_workqueue("i915-unordered", 0, 0);
  131. if (dev_priv->unordered_wq == NULL)
  132. goto out_free_dp_wq;
  133. return 0;
  134. out_free_dp_wq:
  135. destroy_workqueue(dev_priv->display.hotplug.dp_wq);
  136. out_free_wq:
  137. destroy_workqueue(dev_priv->wq);
  138. out_err:
  139. drm_err(&dev_priv->drm, "Failed to allocate workqueues.\n");
  140. return -ENOMEM;
  141. }
  142. static void i915_workqueues_cleanup(struct drm_i915_private *dev_priv)
  143. {
  144. destroy_workqueue(dev_priv->unordered_wq);
  145. destroy_workqueue(dev_priv->display.hotplug.dp_wq);
  146. destroy_workqueue(dev_priv->wq);
  147. }
  148. /*
  149. * We don't keep the workarounds for pre-production hardware, so we expect our
  150. * driver to fail on these machines in one way or another. A little warning on
  151. * dmesg may help both the user and the bug triagers.
  152. *
  153. * Our policy for removing pre-production workarounds is to keep the
  154. * current gen workarounds as a guide to the bring-up of the next gen
  155. * (workarounds have a habit of persisting!). Anything older than that
  156. * should be removed along with the complications they introduce.
  157. */
  158. static void intel_detect_preproduction_hw(struct drm_i915_private *dev_priv)
  159. {
  160. bool pre = false;
  161. pre |= IS_HASWELL_EARLY_SDV(dev_priv);
  162. pre |= IS_SKYLAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x6;
  163. pre |= IS_BROXTON(dev_priv) && INTEL_REVID(dev_priv) < 0xA;
  164. pre |= IS_KABYLAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x1;
  165. pre |= IS_GEMINILAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x3;
  166. pre |= IS_ICELAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x7;
  167. pre |= IS_TIGERLAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x1;
  168. pre |= IS_DG1(dev_priv) && INTEL_REVID(dev_priv) < 0x1;
  169. pre |= IS_DG2_G10(dev_priv) && INTEL_REVID(dev_priv) < 0x8;
  170. pre |= IS_DG2_G11(dev_priv) && INTEL_REVID(dev_priv) < 0x5;
  171. pre |= IS_DG2_G12(dev_priv) && INTEL_REVID(dev_priv) < 0x1;
  172. if (pre) {
  173. drm_err(&dev_priv->drm, "This is a pre-production stepping. "
  174. "It may not be fully functional.\n");
  175. add_taint(TAINT_MACHINE_CHECK, LOCKDEP_STILL_OK);
  176. }
  177. }
  178. static void sanitize_gpu(struct drm_i915_private *i915)
  179. {
  180. if (!INTEL_INFO(i915)->gpu_reset_clobbers_display) {
  181. struct intel_gt *gt;
  182. unsigned int i;
  183. for_each_gt(gt, i915, i)
  184. intel_gt_reset_all_engines(gt);
  185. }
  186. }
  187. /**
  188. * i915_driver_early_probe - setup state not requiring device access
  189. * @dev_priv: device private
  190. *
  191. * Initialize everything that is a "SW-only" state, that is state not
  192. * requiring accessing the device or exposing the driver via kernel internal
  193. * or userspace interfaces. Example steps belonging here: lock initialization,
  194. * system memory allocation, setting up device specific attributes and
  195. * function hooks not requiring accessing the device.
  196. */
  197. static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
  198. {
  199. int ret = 0;
  200. if (i915_inject_probe_failure(dev_priv))
  201. return -ENODEV;
  202. intel_device_info_runtime_init_early(dev_priv);
  203. intel_step_init(dev_priv);
  204. intel_uncore_mmio_debug_init_early(dev_priv);
  205. spin_lock_init(&dev_priv->irq_lock);
  206. spin_lock_init(&dev_priv->gpu_error.lock);
  207. mutex_init(&dev_priv->sb_lock);
  208. cpu_latency_qos_add_request(&dev_priv->sb_qos, PM_QOS_DEFAULT_VALUE);
  209. i915_memcpy_init_early(dev_priv);
  210. intel_runtime_pm_init_early(&dev_priv->runtime_pm);
  211. ret = i915_workqueues_init(dev_priv);
  212. if (ret < 0)
  213. return ret;
  214. ret = vlv_suspend_init(dev_priv);
  215. if (ret < 0)
  216. goto err_workqueues;
  217. ret = intel_region_ttm_device_init(dev_priv);
  218. if (ret)
  219. goto err_ttm;
  220. ret = intel_root_gt_init_early(dev_priv);
  221. if (ret < 0)
  222. goto err_rootgt;
  223. i915_gem_init_early(dev_priv);
  224. /* This must be called before any calls to HAS_PCH_* */
  225. intel_detect_pch(dev_priv);
  226. intel_irq_init(dev_priv);
  227. intel_display_driver_early_probe(dev_priv);
  228. intel_clock_gating_hooks_init(dev_priv);
  229. intel_detect_preproduction_hw(dev_priv);
  230. return 0;
  231. err_rootgt:
  232. intel_region_ttm_device_fini(dev_priv);
  233. err_ttm:
  234. vlv_suspend_cleanup(dev_priv);
  235. err_workqueues:
  236. i915_workqueues_cleanup(dev_priv);
  237. return ret;
  238. }
  239. /**
  240. * i915_driver_late_release - cleanup the setup done in
  241. * i915_driver_early_probe()
  242. * @dev_priv: device private
  243. */
  244. static void i915_driver_late_release(struct drm_i915_private *dev_priv)
  245. {
  246. intel_irq_fini(dev_priv);
  247. intel_power_domains_cleanup(dev_priv);
  248. i915_gem_cleanup_early(dev_priv);
  249. intel_gt_driver_late_release_all(dev_priv);
  250. intel_region_ttm_device_fini(dev_priv);
  251. vlv_suspend_cleanup(dev_priv);
  252. i915_workqueues_cleanup(dev_priv);
  253. cpu_latency_qos_remove_request(&dev_priv->sb_qos);
  254. mutex_destroy(&dev_priv->sb_lock);
  255. i915_params_free(&dev_priv->params);
  256. }
  257. /**
  258. * i915_driver_mmio_probe - setup device MMIO
  259. * @dev_priv: device private
  260. *
  261. * Setup minimal device state necessary for MMIO accesses later in the
  262. * initialization sequence. The setup here should avoid any other device-wide
  263. * side effects or exposing the driver via kernel internal or user space
  264. * interfaces.
  265. */
  266. static int i915_driver_mmio_probe(struct drm_i915_private *dev_priv)
  267. {
  268. struct intel_gt *gt;
  269. int ret, i;
  270. if (i915_inject_probe_failure(dev_priv))
  271. return -ENODEV;
  272. ret = intel_gmch_bridge_setup(dev_priv);
  273. if (ret < 0)
  274. return ret;
  275. for_each_gt(gt, dev_priv, i) {
  276. ret = intel_uncore_init_mmio(gt->uncore);
  277. if (ret)
  278. return ret;
  279. ret = drmm_add_action_or_reset(&dev_priv->drm,
  280. intel_uncore_fini_mmio,
  281. gt->uncore);
  282. if (ret)
  283. return ret;
  284. }
  285. /* Try to make sure MCHBAR is enabled before poking at it */
  286. intel_gmch_bar_setup(dev_priv);
  287. intel_device_info_runtime_init(dev_priv);
  288. intel_display_device_info_runtime_init(dev_priv);
  289. for_each_gt(gt, dev_priv, i) {
  290. ret = intel_gt_init_mmio(gt);
  291. if (ret)
  292. goto err_uncore;
  293. }
  294. /* As early as possible, scrub existing GPU state before clobbering */
  295. sanitize_gpu(dev_priv);
  296. return 0;
  297. err_uncore:
  298. intel_gmch_bar_teardown(dev_priv);
  299. return ret;
  300. }
  301. /**
  302. * i915_driver_mmio_release - cleanup the setup done in i915_driver_mmio_probe()
  303. * @dev_priv: device private
  304. */
  305. static void i915_driver_mmio_release(struct drm_i915_private *dev_priv)
  306. {
  307. intel_gmch_bar_teardown(dev_priv);
  308. }
  309. /**
  310. * i915_set_dma_info - set all relevant PCI dma info as configured for the
  311. * platform
  312. * @i915: valid i915 instance
  313. *
  314. * Set the dma max segment size, device and coherent masks. The dma mask set
  315. * needs to occur before i915_ggtt_probe_hw.
  316. *
  317. * A couple of platforms have special needs. Address them as well.
  318. *
  319. */
  320. static int i915_set_dma_info(struct drm_i915_private *i915)
  321. {
  322. unsigned int mask_size = INTEL_INFO(i915)->dma_mask_size;
  323. int ret;
  324. GEM_BUG_ON(!mask_size);
  325. /*
  326. * We don't have a max segment size, so set it to the max so sg's
  327. * debugging layer doesn't complain
  328. */
  329. dma_set_max_seg_size(i915->drm.dev, UINT_MAX);
  330. ret = dma_set_mask(i915->drm.dev, DMA_BIT_MASK(mask_size));
  331. if (ret)
  332. goto mask_err;
  333. /* overlay on gen2 is broken and can't address above 1G */
  334. if (GRAPHICS_VER(i915) == 2)
  335. mask_size = 30;
  336. /*
  337. * 965GM sometimes incorrectly writes to hardware status page (HWS)
  338. * using 32bit addressing, overwriting memory if HWS is located
  339. * above 4GB.
  340. *
  341. * The documentation also mentions an issue with undefined
  342. * behaviour if any general state is accessed within a page above 4GB,
  343. * which also needs to be handled carefully.
  344. */
  345. if (IS_I965G(i915) || IS_I965GM(i915))
  346. mask_size = 32;
  347. ret = dma_set_coherent_mask(i915->drm.dev, DMA_BIT_MASK(mask_size));
  348. if (ret)
  349. goto mask_err;
  350. return 0;
  351. mask_err:
  352. drm_err(&i915->drm, "Can't set DMA mask/consistent mask (%d)\n", ret);
  353. return ret;
  354. }
  355. static int i915_pcode_init(struct drm_i915_private *i915)
  356. {
  357. struct intel_gt *gt;
  358. int id, ret;
  359. for_each_gt(gt, i915, id) {
  360. ret = intel_pcode_init(gt->uncore);
  361. if (ret) {
  362. gt_err(gt, "intel_pcode_init failed %d\n", ret);
  363. return ret;
  364. }
  365. }
  366. return 0;
  367. }
  368. /**
  369. * i915_driver_hw_probe - setup state requiring device access
  370. * @dev_priv: device private
  371. *
  372. * Setup state that requires accessing the device, but doesn't require
  373. * exposing the driver via kernel internal or userspace interfaces.
  374. */
  375. static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
  376. {
  377. struct intel_display *display = &dev_priv->display;
  378. struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
  379. int ret;
  380. if (i915_inject_probe_failure(dev_priv))
  381. return -ENODEV;
  382. if (HAS_PPGTT(dev_priv)) {
  383. if (intel_vgpu_active(dev_priv) &&
  384. !intel_vgpu_has_full_ppgtt(dev_priv)) {
  385. drm_err(&dev_priv->drm,
  386. "incompatible vGPU found, support for isolated ppGTT required\n");
  387. return -ENXIO;
  388. }
  389. }
  390. if (HAS_EXECLISTS(dev_priv)) {
  391. /*
  392. * Older GVT emulation depends upon intercepting CSB mmio,
  393. * which we no longer use, preferring to use the HWSP cache
  394. * instead.
  395. */
  396. if (intel_vgpu_active(dev_priv) &&
  397. !intel_vgpu_has_hwsp_emulation(dev_priv)) {
  398. drm_err(&dev_priv->drm,
  399. "old vGPU host found, support for HWSP emulation required\n");
  400. return -ENXIO;
  401. }
  402. }
  403. /* needs to be done before ggtt probe */
  404. intel_dram_edram_detect(dev_priv);
  405. ret = i915_set_dma_info(dev_priv);
  406. if (ret)
  407. return ret;
  408. ret = i915_perf_init(dev_priv);
  409. if (ret)
  410. return ret;
  411. ret = i915_ggtt_probe_hw(dev_priv);
  412. if (ret)
  413. goto err_perf;
  414. ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, dev_priv->drm.driver);
  415. if (ret)
  416. goto err_ggtt;
  417. ret = i915_ggtt_init_hw(dev_priv);
  418. if (ret)
  419. goto err_ggtt;
  420. /*
  421. * Make sure we probe lmem before we probe stolen-lmem. The BAR size
  422. * might be different due to bar resizing.
  423. */
  424. ret = intel_gt_tiles_init(dev_priv);
  425. if (ret)
  426. goto err_ggtt;
  427. ret = intel_memory_regions_hw_probe(dev_priv);
  428. if (ret)
  429. goto err_ggtt;
  430. ret = i915_ggtt_enable_hw(dev_priv);
  431. if (ret) {
  432. drm_err(&dev_priv->drm, "failed to enable GGTT\n");
  433. goto err_mem_regions;
  434. }
  435. pci_set_master(pdev);
  436. /* On the 945G/GM, the chipset reports the MSI capability on the
  437. * integrated graphics even though the support isn't actually there
  438. * according to the published specs. It doesn't appear to function
  439. * correctly in testing on 945G.
  440. * This may be a side effect of MSI having been made available for PEG
  441. * and the registers being closely associated.
  442. *
  443. * According to chipset errata, on the 965GM, MSI interrupts may
  444. * be lost or delayed, and was defeatured. MSI interrupts seem to
  445. * get lost on g4x as well, and interrupt delivery seems to stay
  446. * properly dead afterwards. So we'll just disable them for all
  447. * pre-gen5 chipsets.
  448. *
  449. * dp aux and gmbus irq on gen4 seems to be able to generate legacy
  450. * interrupts even when in MSI mode. This results in spurious
  451. * interrupt warnings if the legacy irq no. is shared with another
  452. * device. The kernel then disables that interrupt source and so
  453. * prevents the other device from working properly.
  454. */
  455. if (GRAPHICS_VER(dev_priv) >= 5) {
  456. if (pci_enable_msi(pdev) < 0)
  457. drm_dbg(&dev_priv->drm, "can't enable MSI");
  458. }
  459. ret = intel_gvt_init(dev_priv);
  460. if (ret)
  461. goto err_msi;
  462. intel_opregion_setup(display);
  463. ret = i915_pcode_init(dev_priv);
  464. if (ret)
  465. goto err_opregion;
  466. /*
  467. * Fill the dram structure to get the system dram info. This will be
  468. * used for memory latency calculation.
  469. */
  470. intel_dram_detect(dev_priv);
  471. intel_bw_init_hw(dev_priv);
  472. return 0;
  473. err_opregion:
  474. intel_opregion_cleanup(display);
  475. err_msi:
  476. if (pdev->msi_enabled)
  477. pci_disable_msi(pdev);
  478. err_mem_regions:
  479. intel_memory_regions_driver_release(dev_priv);
  480. err_ggtt:
  481. i915_ggtt_driver_release(dev_priv);
  482. i915_gem_drain_freed_objects(dev_priv);
  483. i915_ggtt_driver_late_release(dev_priv);
  484. err_perf:
  485. i915_perf_fini(dev_priv);
  486. return ret;
  487. }
  488. /**
  489. * i915_driver_hw_remove - cleanup the setup done in i915_driver_hw_probe()
  490. * @dev_priv: device private
  491. */
  492. static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
  493. {
  494. struct intel_display *display = &dev_priv->display;
  495. struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
  496. i915_perf_fini(dev_priv);
  497. intel_opregion_cleanup(display);
  498. if (pdev->msi_enabled)
  499. pci_disable_msi(pdev);
  500. }
  501. /**
  502. * i915_driver_register - register the driver with the rest of the system
  503. * @dev_priv: device private
  504. *
  505. * Perform any steps necessary to make the driver available via kernel
  506. * internal or userspace interfaces.
  507. */
  508. static void i915_driver_register(struct drm_i915_private *dev_priv)
  509. {
  510. struct intel_gt *gt;
  511. unsigned int i;
  512. i915_gem_driver_register(dev_priv);
  513. i915_pmu_register(dev_priv);
  514. intel_vgpu_register(dev_priv);
  515. /* Reveal our presence to userspace */
  516. if (drm_dev_register(&dev_priv->drm, 0)) {
  517. drm_err(&dev_priv->drm,
  518. "Failed to register driver for userspace access!\n");
  519. return;
  520. }
  521. i915_debugfs_register(dev_priv);
  522. i915_setup_sysfs(dev_priv);
  523. /* Depends on sysfs having been initialized */
  524. i915_perf_register(dev_priv);
  525. for_each_gt(gt, dev_priv, i)
  526. intel_gt_driver_register(gt);
  527. intel_pxp_debugfs_register(dev_priv->pxp);
  528. i915_hwmon_register(dev_priv);
  529. intel_display_driver_register(dev_priv);
  530. intel_power_domains_enable(dev_priv);
  531. intel_runtime_pm_enable(&dev_priv->runtime_pm);
  532. intel_register_dsm_handler();
  533. if (i915_switcheroo_register(dev_priv))
  534. drm_err(&dev_priv->drm, "Failed to register vga switcheroo!\n");
  535. }
  536. /**
  537. * i915_driver_unregister - cleanup the registration done in i915_driver_regiser()
  538. * @dev_priv: device private
  539. */
  540. static void i915_driver_unregister(struct drm_i915_private *dev_priv)
  541. {
  542. struct intel_gt *gt;
  543. unsigned int i;
  544. i915_switcheroo_unregister(dev_priv);
  545. intel_unregister_dsm_handler();
  546. intel_runtime_pm_disable(&dev_priv->runtime_pm);
  547. intel_power_domains_disable(dev_priv);
  548. intel_display_driver_unregister(dev_priv);
  549. intel_pxp_fini(dev_priv);
  550. for_each_gt(gt, dev_priv, i)
  551. intel_gt_driver_unregister(gt);
  552. i915_hwmon_unregister(dev_priv);
  553. i915_perf_unregister(dev_priv);
  554. i915_pmu_unregister(dev_priv);
  555. i915_teardown_sysfs(dev_priv);
  556. drm_dev_unplug(&dev_priv->drm);
  557. i915_gem_driver_unregister(dev_priv);
  558. }
  559. void
  560. i915_print_iommu_status(struct drm_i915_private *i915, struct drm_printer *p)
  561. {
  562. drm_printf(p, "iommu: %s\n",
  563. str_enabled_disabled(i915_vtd_active(i915)));
  564. }
  565. static void i915_welcome_messages(struct drm_i915_private *dev_priv)
  566. {
  567. if (drm_debug_enabled(DRM_UT_DRIVER)) {
  568. struct drm_printer p = drm_dbg_printer(&dev_priv->drm, DRM_UT_DRIVER,
  569. "device info:");
  570. struct intel_gt *gt;
  571. unsigned int i;
  572. drm_printf(&p, "pciid=0x%04x rev=0x%02x platform=%s (subplatform=0x%x) gen=%i\n",
  573. INTEL_DEVID(dev_priv),
  574. INTEL_REVID(dev_priv),
  575. intel_platform_name(INTEL_INFO(dev_priv)->platform),
  576. intel_subplatform(RUNTIME_INFO(dev_priv),
  577. INTEL_INFO(dev_priv)->platform),
  578. GRAPHICS_VER(dev_priv));
  579. intel_device_info_print(INTEL_INFO(dev_priv),
  580. RUNTIME_INFO(dev_priv), &p);
  581. i915_print_iommu_status(dev_priv, &p);
  582. for_each_gt(gt, dev_priv, i)
  583. intel_gt_info_print(&gt->info, &p);
  584. }
  585. if (IS_ENABLED(CONFIG_DRM_I915_DEBUG))
  586. drm_info(&dev_priv->drm, "DRM_I915_DEBUG enabled\n");
  587. if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
  588. drm_info(&dev_priv->drm, "DRM_I915_DEBUG_GEM enabled\n");
  589. if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_RUNTIME_PM))
  590. drm_info(&dev_priv->drm,
  591. "DRM_I915_DEBUG_RUNTIME_PM enabled\n");
  592. }
  593. static struct drm_i915_private *
  594. i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent)
  595. {
  596. const struct intel_device_info *match_info =
  597. (struct intel_device_info *)ent->driver_data;
  598. struct drm_i915_private *i915;
  599. i915 = devm_drm_dev_alloc(&pdev->dev, &i915_drm_driver,
  600. struct drm_i915_private, drm);
  601. if (IS_ERR(i915))
  602. return i915;
  603. pci_set_drvdata(pdev, &i915->drm);
  604. /* Device parameters start as a copy of module parameters. */
  605. i915_params_copy(&i915->params, &i915_modparams);
  606. /* Set up device info and initial runtime info. */
  607. intel_device_info_driver_create(i915, pdev->device, match_info);
  608. intel_display_device_probe(i915);
  609. return i915;
  610. }
  611. /**
  612. * i915_driver_probe - setup chip and create an initial config
  613. * @pdev: PCI device
  614. * @ent: matching PCI ID entry
  615. *
  616. * The driver probe routine has to do several things:
  617. * - drive output discovery via intel_display_driver_probe()
  618. * - initialize the memory manager
  619. * - allocate initial config memory
  620. * - setup the DRM framebuffer with the allocated memory
  621. */
  622. int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
  623. {
  624. struct drm_i915_private *i915;
  625. int ret;
  626. ret = pci_enable_device(pdev);
  627. if (ret) {
  628. pr_err("Failed to enable graphics device: %pe\n", ERR_PTR(ret));
  629. return ret;
  630. }
  631. i915 = i915_driver_create(pdev, ent);
  632. if (IS_ERR(i915)) {
  633. pci_disable_device(pdev);
  634. return PTR_ERR(i915);
  635. }
  636. ret = i915_driver_early_probe(i915);
  637. if (ret < 0)
  638. goto out_pci_disable;
  639. disable_rpm_wakeref_asserts(&i915->runtime_pm);
  640. intel_vgpu_detect(i915);
  641. ret = intel_gt_probe_all(i915);
  642. if (ret < 0)
  643. goto out_runtime_pm_put;
  644. ret = i915_driver_mmio_probe(i915);
  645. if (ret < 0)
  646. goto out_runtime_pm_put;
  647. ret = i915_driver_hw_probe(i915);
  648. if (ret < 0)
  649. goto out_cleanup_mmio;
  650. ret = intel_display_driver_probe_noirq(i915);
  651. if (ret < 0)
  652. goto out_cleanup_hw;
  653. ret = intel_irq_install(i915);
  654. if (ret)
  655. goto out_cleanup_modeset;
  656. ret = intel_display_driver_probe_nogem(i915);
  657. if (ret)
  658. goto out_cleanup_irq;
  659. ret = i915_gem_init(i915);
  660. if (ret)
  661. goto out_cleanup_modeset2;
  662. ret = intel_pxp_init(i915);
  663. if (ret && ret != -ENODEV)
  664. drm_dbg(&i915->drm, "pxp init failed with %d\n", ret);
  665. ret = intel_display_driver_probe(i915);
  666. if (ret)
  667. goto out_cleanup_gem;
  668. i915_driver_register(i915);
  669. enable_rpm_wakeref_asserts(&i915->runtime_pm);
  670. i915_welcome_messages(i915);
  671. i915->do_release = true;
  672. return 0;
  673. out_cleanup_gem:
  674. i915_gem_suspend(i915);
  675. i915_gem_driver_remove(i915);
  676. i915_gem_driver_release(i915);
  677. out_cleanup_modeset2:
  678. /* FIXME clean up the error path */
  679. intel_display_driver_remove(i915);
  680. intel_irq_uninstall(i915);
  681. intel_display_driver_remove_noirq(i915);
  682. goto out_cleanup_modeset;
  683. out_cleanup_irq:
  684. intel_irq_uninstall(i915);
  685. out_cleanup_modeset:
  686. intel_display_driver_remove_nogem(i915);
  687. out_cleanup_hw:
  688. i915_driver_hw_remove(i915);
  689. intel_memory_regions_driver_release(i915);
  690. i915_ggtt_driver_release(i915);
  691. i915_gem_drain_freed_objects(i915);
  692. i915_ggtt_driver_late_release(i915);
  693. out_cleanup_mmio:
  694. i915_driver_mmio_release(i915);
  695. out_runtime_pm_put:
  696. enable_rpm_wakeref_asserts(&i915->runtime_pm);
  697. i915_driver_late_release(i915);
  698. out_pci_disable:
  699. pci_disable_device(pdev);
  700. i915_probe_error(i915, "Device initialization failed (%d)\n", ret);
  701. return ret;
  702. }
  703. void i915_driver_remove(struct drm_i915_private *i915)
  704. {
  705. intel_wakeref_t wakeref;
  706. wakeref = intel_runtime_pm_get(&i915->runtime_pm);
  707. i915_driver_unregister(i915);
  708. /* Flush any external code that still may be under the RCU lock */
  709. synchronize_rcu();
  710. i915_gem_suspend(i915);
  711. intel_gvt_driver_remove(i915);
  712. intel_display_driver_remove(i915);
  713. intel_irq_uninstall(i915);
  714. intel_display_driver_remove_noirq(i915);
  715. i915_reset_error_state(i915);
  716. i915_gem_driver_remove(i915);
  717. intel_display_driver_remove_nogem(i915);
  718. i915_driver_hw_remove(i915);
  719. intel_runtime_pm_put(&i915->runtime_pm, wakeref);
  720. }
  721. static void i915_driver_release(struct drm_device *dev)
  722. {
  723. struct drm_i915_private *dev_priv = to_i915(dev);
  724. struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
  725. intel_wakeref_t wakeref;
  726. if (!dev_priv->do_release)
  727. return;
  728. wakeref = intel_runtime_pm_get(rpm);
  729. i915_gem_driver_release(dev_priv);
  730. intel_memory_regions_driver_release(dev_priv);
  731. i915_ggtt_driver_release(dev_priv);
  732. i915_gem_drain_freed_objects(dev_priv);
  733. i915_ggtt_driver_late_release(dev_priv);
  734. i915_driver_mmio_release(dev_priv);
  735. intel_runtime_pm_put(rpm, wakeref);
  736. intel_runtime_pm_driver_release(rpm);
  737. i915_driver_late_release(dev_priv);
  738. intel_display_device_remove(dev_priv);
  739. }
  740. static int i915_driver_open(struct drm_device *dev, struct drm_file *file)
  741. {
  742. struct drm_i915_private *i915 = to_i915(dev);
  743. int ret;
  744. ret = i915_gem_open(i915, file);
  745. if (ret)
  746. return ret;
  747. return 0;
  748. }
  749. static void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
  750. {
  751. struct drm_i915_file_private *file_priv = file->driver_priv;
  752. i915_gem_context_close(file);
  753. i915_drm_client_put(file_priv->client);
  754. kfree_rcu(file_priv, rcu);
  755. /* Catch up with all the deferred frees from "this" client */
  756. i915_gem_flush_free_objects(to_i915(dev));
  757. }
  758. void i915_driver_shutdown(struct drm_i915_private *i915)
  759. {
  760. disable_rpm_wakeref_asserts(&i915->runtime_pm);
  761. intel_runtime_pm_disable(&i915->runtime_pm);
  762. intel_power_domains_disable(i915);
  763. intel_fbdev_set_suspend(&i915->drm, FBINFO_STATE_SUSPENDED, true);
  764. if (HAS_DISPLAY(i915)) {
  765. drm_kms_helper_poll_disable(&i915->drm);
  766. intel_display_driver_disable_user_access(i915);
  767. drm_atomic_helper_shutdown(&i915->drm);
  768. }
  769. intel_dp_mst_suspend(i915);
  770. intel_runtime_pm_disable_interrupts(i915);
  771. intel_hpd_cancel_work(i915);
  772. if (HAS_DISPLAY(i915))
  773. intel_display_driver_suspend_access(i915);
  774. intel_encoder_suspend_all(&i915->display);
  775. intel_encoder_shutdown_all(&i915->display);
  776. intel_dmc_suspend(i915);
  777. i915_gem_suspend(i915);
  778. /*
  779. * The only requirement is to reboot with display DC states disabled,
  780. * for now leaving all display power wells in the INIT power domain
  781. * enabled.
  782. *
  783. * TODO:
  784. * - unify the pci_driver::shutdown sequence here with the
  785. * pci_driver.driver.pm.poweroff,poweroff_late sequence.
  786. * - unify the driver remove and system/runtime suspend sequences with
  787. * the above unified shutdown/poweroff sequence.
  788. */
  789. intel_power_domains_driver_remove(i915);
  790. enable_rpm_wakeref_asserts(&i915->runtime_pm);
  791. intel_runtime_pm_driver_last_release(&i915->runtime_pm);
  792. }
  793. static bool suspend_to_idle(struct drm_i915_private *dev_priv)
  794. {
  795. #if IS_ENABLED(CONFIG_ACPI_SLEEP)
  796. if (acpi_target_system_state() < ACPI_STATE_S3)
  797. return true;
  798. #endif
  799. return false;
  800. }
  801. static void i915_drm_complete(struct drm_device *dev)
  802. {
  803. struct drm_i915_private *i915 = to_i915(dev);
  804. intel_pxp_resume_complete(i915->pxp);
  805. }
  806. static int i915_drm_prepare(struct drm_device *dev)
  807. {
  808. struct drm_i915_private *i915 = to_i915(dev);
  809. intel_pxp_suspend_prepare(i915->pxp);
  810. /*
  811. * NB intel_display_driver_suspend() may issue new requests after we've
  812. * ostensibly marked the GPU as ready-to-sleep here. We need to
  813. * split out that work and pull it forward so that after point,
  814. * the GPU is not woken again.
  815. */
  816. return i915_gem_backup_suspend(i915);
  817. }
  818. static int i915_drm_suspend(struct drm_device *dev)
  819. {
  820. struct drm_i915_private *dev_priv = to_i915(dev);
  821. struct intel_display *display = &dev_priv->display;
  822. struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
  823. pci_power_t opregion_target_state;
  824. disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
  825. /* We do a lot of poking in a lot of registers, make sure they work
  826. * properly. */
  827. intel_power_domains_disable(dev_priv);
  828. intel_fbdev_set_suspend(dev, FBINFO_STATE_SUSPENDED, true);
  829. if (HAS_DISPLAY(dev_priv)) {
  830. drm_kms_helper_poll_disable(dev);
  831. intel_display_driver_disable_user_access(dev_priv);
  832. }
  833. pci_save_state(pdev);
  834. intel_display_driver_suspend(dev_priv);
  835. intel_dp_mst_suspend(dev_priv);
  836. intel_runtime_pm_disable_interrupts(dev_priv);
  837. intel_hpd_cancel_work(dev_priv);
  838. if (HAS_DISPLAY(dev_priv))
  839. intel_display_driver_suspend_access(dev_priv);
  840. intel_encoder_suspend_all(&dev_priv->display);
  841. /* Must be called before GGTT is suspended. */
  842. intel_dpt_suspend(dev_priv);
  843. i915_ggtt_suspend(to_gt(dev_priv)->ggtt);
  844. i915_save_display(dev_priv);
  845. opregion_target_state = suspend_to_idle(dev_priv) ? PCI_D1 : PCI_D3cold;
  846. intel_opregion_suspend(display, opregion_target_state);
  847. dev_priv->suspend_count++;
  848. intel_dmc_suspend(dev_priv);
  849. enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
  850. i915_gem_drain_freed_objects(dev_priv);
  851. return 0;
  852. }
  853. static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
  854. {
  855. struct drm_i915_private *dev_priv = to_i915(dev);
  856. struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
  857. struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
  858. struct intel_gt *gt;
  859. int ret, i;
  860. bool s2idle = !hibernation && suspend_to_idle(dev_priv);
  861. disable_rpm_wakeref_asserts(rpm);
  862. intel_pxp_suspend(dev_priv->pxp);
  863. i915_gem_suspend_late(dev_priv);
  864. for_each_gt(gt, dev_priv, i)
  865. intel_uncore_suspend(gt->uncore);
  866. intel_power_domains_suspend(dev_priv, s2idle);
  867. intel_display_power_suspend_late(dev_priv);
  868. ret = vlv_suspend_complete(dev_priv);
  869. if (ret) {
  870. drm_err(&dev_priv->drm, "Suspend complete failed: %d\n", ret);
  871. intel_power_domains_resume(dev_priv);
  872. goto out;
  873. }
  874. pci_disable_device(pdev);
  875. /*
  876. * During hibernation on some platforms the BIOS may try to access
  877. * the device even though it's already in D3 and hang the machine. So
  878. * leave the device in D0 on those platforms and hope the BIOS will
  879. * power down the device properly. The issue was seen on multiple old
  880. * GENs with different BIOS vendors, so having an explicit blacklist
  881. * is inpractical; apply the workaround on everything pre GEN6. The
  882. * platforms where the issue was seen:
  883. * Lenovo Thinkpad X301, X61s, X60, T60, X41
  884. * Fujitsu FSC S7110
  885. * Acer Aspire 1830T
  886. */
  887. if (!(hibernation && GRAPHICS_VER(dev_priv) < 6))
  888. pci_set_power_state(pdev, PCI_D3hot);
  889. out:
  890. enable_rpm_wakeref_asserts(rpm);
  891. if (!dev_priv->uncore.user_forcewake_count)
  892. intel_runtime_pm_driver_release(rpm);
  893. return ret;
  894. }
  895. int i915_driver_suspend_switcheroo(struct drm_i915_private *i915,
  896. pm_message_t state)
  897. {
  898. int error;
  899. if (drm_WARN_ON_ONCE(&i915->drm, state.event != PM_EVENT_SUSPEND &&
  900. state.event != PM_EVENT_FREEZE))
  901. return -EINVAL;
  902. if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
  903. return 0;
  904. error = i915_drm_suspend(&i915->drm);
  905. if (error)
  906. return error;
  907. return i915_drm_suspend_late(&i915->drm, false);
  908. }
  909. static int i915_drm_resume(struct drm_device *dev)
  910. {
  911. struct drm_i915_private *dev_priv = to_i915(dev);
  912. struct intel_display *display = &dev_priv->display;
  913. struct intel_gt *gt;
  914. int ret, i;
  915. disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
  916. ret = i915_pcode_init(dev_priv);
  917. if (ret)
  918. return ret;
  919. sanitize_gpu(dev_priv);
  920. ret = i915_ggtt_enable_hw(dev_priv);
  921. if (ret)
  922. drm_err(&dev_priv->drm, "failed to re-enable GGTT\n");
  923. i915_ggtt_resume(to_gt(dev_priv)->ggtt);
  924. for_each_gt(gt, dev_priv, i)
  925. if (GRAPHICS_VER(gt->i915) >= 8)
  926. setup_private_pat(gt);
  927. /* Must be called after GGTT is resumed. */
  928. intel_dpt_resume(dev_priv);
  929. intel_dmc_resume(dev_priv);
  930. i915_restore_display(dev_priv);
  931. intel_pps_unlock_regs_wa(display);
  932. intel_init_pch_refclk(dev_priv);
  933. /*
  934. * Interrupts have to be enabled before any batches are run. If not the
  935. * GPU will hang. i915_gem_init_hw() will initiate batches to
  936. * update/restore the context.
  937. *
  938. * drm_mode_config_reset() needs AUX interrupts.
  939. *
  940. * Modeset enabling in intel_display_driver_init_hw() also needs working
  941. * interrupts.
  942. */
  943. intel_runtime_pm_enable_interrupts(dev_priv);
  944. if (HAS_DISPLAY(dev_priv))
  945. drm_mode_config_reset(dev);
  946. i915_gem_resume(dev_priv);
  947. intel_display_driver_init_hw(dev_priv);
  948. intel_clock_gating_init(dev_priv);
  949. if (HAS_DISPLAY(dev_priv))
  950. intel_display_driver_resume_access(dev_priv);
  951. intel_hpd_init(dev_priv);
  952. /* MST sideband requires HPD interrupts enabled */
  953. intel_dp_mst_resume(dev_priv);
  954. intel_display_driver_resume(dev_priv);
  955. if (HAS_DISPLAY(dev_priv)) {
  956. intel_display_driver_enable_user_access(dev_priv);
  957. drm_kms_helper_poll_enable(dev);
  958. }
  959. intel_hpd_poll_disable(dev_priv);
  960. intel_opregion_resume(display);
  961. intel_fbdev_set_suspend(dev, FBINFO_STATE_RUNNING, false);
  962. intel_power_domains_enable(dev_priv);
  963. intel_gvt_resume(dev_priv);
  964. enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
  965. return 0;
  966. }
  967. static int i915_drm_resume_early(struct drm_device *dev)
  968. {
  969. struct drm_i915_private *dev_priv = to_i915(dev);
  970. struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
  971. struct intel_gt *gt;
  972. int ret, i;
  973. /*
  974. * We have a resume ordering issue with the snd-hda driver also
  975. * requiring our device to be power up. Due to the lack of a
  976. * parent/child relationship we currently solve this with an early
  977. * resume hook.
  978. *
  979. * FIXME: This should be solved with a special hdmi sink device or
  980. * similar so that power domains can be employed.
  981. */
  982. /*
  983. * Note that we need to set the power state explicitly, since we
  984. * powered off the device during freeze and the PCI core won't power
  985. * it back up for us during thaw. Powering off the device during
  986. * freeze is not a hard requirement though, and during the
  987. * suspend/resume phases the PCI core makes sure we get here with the
  988. * device powered on. So in case we change our freeze logic and keep
  989. * the device powered we can also remove the following set power state
  990. * call.
  991. */
  992. ret = pci_set_power_state(pdev, PCI_D0);
  993. if (ret) {
  994. drm_err(&dev_priv->drm,
  995. "failed to set PCI D0 power state (%d)\n", ret);
  996. return ret;
  997. }
  998. /*
  999. * Note that pci_enable_device() first enables any parent bridge
  1000. * device and only then sets the power state for this device. The
  1001. * bridge enabling is a nop though, since bridge devices are resumed
  1002. * first. The order of enabling power and enabling the device is
  1003. * imposed by the PCI core as described above, so here we preserve the
  1004. * same order for the freeze/thaw phases.
  1005. *
  1006. * TODO: eventually we should remove pci_disable_device() /
  1007. * pci_enable_enable_device() from suspend/resume. Due to how they
  1008. * depend on the device enable refcount we can't anyway depend on them
  1009. * disabling/enabling the device.
  1010. */
  1011. if (pci_enable_device(pdev))
  1012. return -EIO;
  1013. pci_set_master(pdev);
  1014. disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
  1015. ret = vlv_resume_prepare(dev_priv, false);
  1016. if (ret)
  1017. drm_err(&dev_priv->drm,
  1018. "Resume prepare failed: %d, continuing anyway\n", ret);
  1019. for_each_gt(gt, dev_priv, i)
  1020. intel_gt_resume_early(gt);
  1021. intel_display_power_resume_early(dev_priv);
  1022. intel_power_domains_resume(dev_priv);
  1023. enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
  1024. return ret;
  1025. }
  1026. int i915_driver_resume_switcheroo(struct drm_i915_private *i915)
  1027. {
  1028. int ret;
  1029. if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
  1030. return 0;
  1031. ret = i915_drm_resume_early(&i915->drm);
  1032. if (ret)
  1033. return ret;
  1034. return i915_drm_resume(&i915->drm);
  1035. }
  1036. static int i915_pm_prepare(struct device *kdev)
  1037. {
  1038. struct drm_i915_private *i915 = kdev_to_i915(kdev);
  1039. if (!i915) {
  1040. dev_err(kdev, "DRM not initialized, aborting suspend.\n");
  1041. return -ENODEV;
  1042. }
  1043. if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
  1044. return 0;
  1045. return i915_drm_prepare(&i915->drm);
  1046. }
  1047. static int i915_pm_suspend(struct device *kdev)
  1048. {
  1049. struct drm_i915_private *i915 = kdev_to_i915(kdev);
  1050. if (!i915) {
  1051. dev_err(kdev, "DRM not initialized, aborting suspend.\n");
  1052. return -ENODEV;
  1053. }
  1054. if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
  1055. return 0;
  1056. return i915_drm_suspend(&i915->drm);
  1057. }
  1058. static int i915_pm_suspend_late(struct device *kdev)
  1059. {
  1060. struct drm_i915_private *i915 = kdev_to_i915(kdev);
  1061. /*
  1062. * We have a suspend ordering issue with the snd-hda driver also
  1063. * requiring our device to be power up. Due to the lack of a
  1064. * parent/child relationship we currently solve this with an late
  1065. * suspend hook.
  1066. *
  1067. * FIXME: This should be solved with a special hdmi sink device or
  1068. * similar so that power domains can be employed.
  1069. */
  1070. if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
  1071. return 0;
  1072. return i915_drm_suspend_late(&i915->drm, false);
  1073. }
  1074. static int i915_pm_poweroff_late(struct device *kdev)
  1075. {
  1076. struct drm_i915_private *i915 = kdev_to_i915(kdev);
  1077. if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
  1078. return 0;
  1079. return i915_drm_suspend_late(&i915->drm, true);
  1080. }
  1081. static int i915_pm_resume_early(struct device *kdev)
  1082. {
  1083. struct drm_i915_private *i915 = kdev_to_i915(kdev);
  1084. if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
  1085. return 0;
  1086. return i915_drm_resume_early(&i915->drm);
  1087. }
  1088. static int i915_pm_resume(struct device *kdev)
  1089. {
  1090. struct drm_i915_private *i915 = kdev_to_i915(kdev);
  1091. if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
  1092. return 0;
  1093. return i915_drm_resume(&i915->drm);
  1094. }
  1095. static void i915_pm_complete(struct device *kdev)
  1096. {
  1097. struct drm_i915_private *i915 = kdev_to_i915(kdev);
  1098. if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
  1099. return;
  1100. i915_drm_complete(&i915->drm);
  1101. }
  1102. /* freeze: before creating the hibernation_image */
  1103. static int i915_pm_freeze(struct device *kdev)
  1104. {
  1105. struct drm_i915_private *i915 = kdev_to_i915(kdev);
  1106. int ret;
  1107. if (i915->drm.switch_power_state != DRM_SWITCH_POWER_OFF) {
  1108. ret = i915_drm_suspend(&i915->drm);
  1109. if (ret)
  1110. return ret;
  1111. }
  1112. ret = i915_gem_freeze(i915);
  1113. if (ret)
  1114. return ret;
  1115. return 0;
  1116. }
  1117. static int i915_pm_freeze_late(struct device *kdev)
  1118. {
  1119. struct drm_i915_private *i915 = kdev_to_i915(kdev);
  1120. int ret;
  1121. if (i915->drm.switch_power_state != DRM_SWITCH_POWER_OFF) {
  1122. ret = i915_drm_suspend_late(&i915->drm, true);
  1123. if (ret)
  1124. return ret;
  1125. }
  1126. ret = i915_gem_freeze_late(i915);
  1127. if (ret)
  1128. return ret;
  1129. return 0;
  1130. }
  1131. /* thaw: called after creating the hibernation image, but before turning off. */
  1132. static int i915_pm_thaw_early(struct device *kdev)
  1133. {
  1134. return i915_pm_resume_early(kdev);
  1135. }
  1136. static int i915_pm_thaw(struct device *kdev)
  1137. {
  1138. return i915_pm_resume(kdev);
  1139. }
  1140. /* restore: called after loading the hibernation image. */
  1141. static int i915_pm_restore_early(struct device *kdev)
  1142. {
  1143. return i915_pm_resume_early(kdev);
  1144. }
  1145. static int i915_pm_restore(struct device *kdev)
  1146. {
  1147. return i915_pm_resume(kdev);
  1148. }
  1149. static int intel_runtime_suspend(struct device *kdev)
  1150. {
  1151. struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
  1152. struct intel_display *display = &dev_priv->display;
  1153. struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
  1154. struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
  1155. struct pci_dev *root_pdev;
  1156. struct intel_gt *gt;
  1157. int ret, i;
  1158. if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv)))
  1159. return -ENODEV;
  1160. drm_dbg(&dev_priv->drm, "Suspending device\n");
  1161. disable_rpm_wakeref_asserts(rpm);
  1162. /*
  1163. * We are safe here against re-faults, since the fault handler takes
  1164. * an RPM reference.
  1165. */
  1166. i915_gem_runtime_suspend(dev_priv);
  1167. intel_pxp_runtime_suspend(dev_priv->pxp);
  1168. for_each_gt(gt, dev_priv, i)
  1169. intel_gt_runtime_suspend(gt);
  1170. intel_runtime_pm_disable_interrupts(dev_priv);
  1171. for_each_gt(gt, dev_priv, i)
  1172. intel_uncore_suspend(gt->uncore);
  1173. intel_display_power_suspend(dev_priv);
  1174. ret = vlv_suspend_complete(dev_priv);
  1175. if (ret) {
  1176. drm_err(&dev_priv->drm,
  1177. "Runtime suspend failed, disabling it (%d)\n", ret);
  1178. intel_uncore_runtime_resume(&dev_priv->uncore);
  1179. intel_runtime_pm_enable_interrupts(dev_priv);
  1180. for_each_gt(gt, dev_priv, i)
  1181. intel_gt_runtime_resume(gt);
  1182. enable_rpm_wakeref_asserts(rpm);
  1183. return ret;
  1184. }
  1185. enable_rpm_wakeref_asserts(rpm);
  1186. intel_runtime_pm_driver_release(rpm);
  1187. if (intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore))
  1188. drm_err(&dev_priv->drm,
  1189. "Unclaimed access detected prior to suspending\n");
  1190. /*
  1191. * FIXME: Temporary hammer to avoid freezing the machine on our DGFX
  1192. * This should be totally removed when we handle the pci states properly
  1193. * on runtime PM.
  1194. */
  1195. root_pdev = pcie_find_root_port(pdev);
  1196. if (root_pdev)
  1197. pci_d3cold_disable(root_pdev);
  1198. /*
  1199. * FIXME: We really should find a document that references the arguments
  1200. * used below!
  1201. */
  1202. if (IS_BROADWELL(dev_priv)) {
  1203. /*
  1204. * On Broadwell, if we use PCI_D1 the PCH DDI ports will stop
  1205. * being detected, and the call we do at intel_runtime_resume()
  1206. * won't be able to restore them. Since PCI_D3hot matches the
  1207. * actual specification and appears to be working, use it.
  1208. */
  1209. intel_opregion_notify_adapter(display, PCI_D3hot);
  1210. } else {
  1211. /*
  1212. * current versions of firmware which depend on this opregion
  1213. * notification have repurposed the D1 definition to mean
  1214. * "runtime suspended" vs. what you would normally expect (D3)
  1215. * to distinguish it from notifications that might be sent via
  1216. * the suspend path.
  1217. */
  1218. intel_opregion_notify_adapter(display, PCI_D1);
  1219. }
  1220. assert_forcewakes_inactive(&dev_priv->uncore);
  1221. if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
  1222. intel_hpd_poll_enable(dev_priv);
  1223. drm_dbg(&dev_priv->drm, "Device suspended\n");
  1224. return 0;
  1225. }
  1226. static int intel_runtime_resume(struct device *kdev)
  1227. {
  1228. struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
  1229. struct intel_display *display = &dev_priv->display;
  1230. struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
  1231. struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
  1232. struct pci_dev *root_pdev;
  1233. struct intel_gt *gt;
  1234. int ret, i;
  1235. if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv)))
  1236. return -ENODEV;
  1237. drm_dbg(&dev_priv->drm, "Resuming device\n");
  1238. drm_WARN_ON_ONCE(&dev_priv->drm, atomic_read(&rpm->wakeref_count));
  1239. disable_rpm_wakeref_asserts(rpm);
  1240. intel_opregion_notify_adapter(display, PCI_D0);
  1241. root_pdev = pcie_find_root_port(pdev);
  1242. if (root_pdev)
  1243. pci_d3cold_enable(root_pdev);
  1244. if (intel_uncore_unclaimed_mmio(&dev_priv->uncore))
  1245. drm_dbg(&dev_priv->drm,
  1246. "Unclaimed access during suspend, bios?\n");
  1247. intel_display_power_resume(dev_priv);
  1248. ret = vlv_resume_prepare(dev_priv, true);
  1249. for_each_gt(gt, dev_priv, i)
  1250. intel_uncore_runtime_resume(gt->uncore);
  1251. intel_runtime_pm_enable_interrupts(dev_priv);
  1252. /*
  1253. * No point of rolling back things in case of an error, as the best
  1254. * we can do is to hope that things will still work (and disable RPM).
  1255. */
  1256. for_each_gt(gt, dev_priv, i)
  1257. intel_gt_runtime_resume(gt);
  1258. intel_pxp_runtime_resume(dev_priv->pxp);
  1259. /*
  1260. * On VLV/CHV display interrupts are part of the display
  1261. * power well, so hpd is reinitialized from there. For
  1262. * everyone else do it here.
  1263. */
  1264. if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv)) {
  1265. intel_hpd_init(dev_priv);
  1266. intel_hpd_poll_disable(dev_priv);
  1267. }
  1268. skl_watermark_ipc_update(dev_priv);
  1269. enable_rpm_wakeref_asserts(rpm);
  1270. if (ret)
  1271. drm_err(&dev_priv->drm,
  1272. "Runtime resume failed, disabling it (%d)\n", ret);
  1273. else
  1274. drm_dbg(&dev_priv->drm, "Device resumed\n");
  1275. return ret;
  1276. }
  1277. const struct dev_pm_ops i915_pm_ops = {
  1278. /*
  1279. * S0ix (via system suspend) and S3 event handlers [PMSG_SUSPEND,
  1280. * PMSG_RESUME]
  1281. */
  1282. .prepare = i915_pm_prepare,
  1283. .suspend = i915_pm_suspend,
  1284. .suspend_late = i915_pm_suspend_late,
  1285. .resume_early = i915_pm_resume_early,
  1286. .resume = i915_pm_resume,
  1287. .complete = i915_pm_complete,
  1288. /*
  1289. * S4 event handlers
  1290. * @freeze, @freeze_late : called (1) before creating the
  1291. * hibernation image [PMSG_FREEZE] and
  1292. * (2) after rebooting, before restoring
  1293. * the image [PMSG_QUIESCE]
  1294. * @thaw, @thaw_early : called (1) after creating the hibernation
  1295. * image, before writing it [PMSG_THAW]
  1296. * and (2) after failing to create or
  1297. * restore the image [PMSG_RECOVER]
  1298. * @poweroff, @poweroff_late: called after writing the hibernation
  1299. * image, before rebooting [PMSG_HIBERNATE]
  1300. * @restore, @restore_early : called after rebooting and restoring the
  1301. * hibernation image [PMSG_RESTORE]
  1302. */
  1303. .freeze = i915_pm_freeze,
  1304. .freeze_late = i915_pm_freeze_late,
  1305. .thaw_early = i915_pm_thaw_early,
  1306. .thaw = i915_pm_thaw,
  1307. .poweroff = i915_pm_suspend,
  1308. .poweroff_late = i915_pm_poweroff_late,
  1309. .restore_early = i915_pm_restore_early,
  1310. .restore = i915_pm_restore,
  1311. /* S0ix (via runtime suspend) event handlers */
  1312. .runtime_suspend = intel_runtime_suspend,
  1313. .runtime_resume = intel_runtime_resume,
  1314. };
  1315. static const struct file_operations i915_driver_fops = {
  1316. .owner = THIS_MODULE,
  1317. .open = drm_open,
  1318. .release = drm_release_noglobal,
  1319. .unlocked_ioctl = drm_ioctl,
  1320. .mmap = i915_gem_mmap,
  1321. .poll = drm_poll,
  1322. .read = drm_read,
  1323. .compat_ioctl = i915_ioc32_compat_ioctl,
  1324. .llseek = noop_llseek,
  1325. #ifdef CONFIG_PROC_FS
  1326. .show_fdinfo = drm_show_fdinfo,
  1327. #endif
  1328. .fop_flags = FOP_UNSIGNED_OFFSET,
  1329. };
  1330. static int
  1331. i915_gem_reject_pin_ioctl(struct drm_device *dev, void *data,
  1332. struct drm_file *file)
  1333. {
  1334. return -ENODEV;
  1335. }
  1336. static const struct drm_ioctl_desc i915_ioctls[] = {
  1337. DRM_IOCTL_DEF_DRV(I915_INIT, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  1338. DRM_IOCTL_DEF_DRV(I915_FLUSH, drm_noop, DRM_AUTH),
  1339. DRM_IOCTL_DEF_DRV(I915_FLIP, drm_noop, DRM_AUTH),
  1340. DRM_IOCTL_DEF_DRV(I915_BATCHBUFFER, drm_noop, DRM_AUTH),
  1341. DRM_IOCTL_DEF_DRV(I915_IRQ_EMIT, drm_noop, DRM_AUTH),
  1342. DRM_IOCTL_DEF_DRV(I915_IRQ_WAIT, drm_noop, DRM_AUTH),
  1343. DRM_IOCTL_DEF_DRV(I915_GETPARAM, i915_getparam_ioctl, DRM_RENDER_ALLOW),
  1344. DRM_IOCTL_DEF_DRV(I915_SETPARAM, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  1345. DRM_IOCTL_DEF_DRV(I915_ALLOC, drm_noop, DRM_AUTH),
  1346. DRM_IOCTL_DEF_DRV(I915_FREE, drm_noop, DRM_AUTH),
  1347. DRM_IOCTL_DEF_DRV(I915_INIT_HEAP, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  1348. DRM_IOCTL_DEF_DRV(I915_CMDBUFFER, drm_noop, DRM_AUTH),
  1349. DRM_IOCTL_DEF_DRV(I915_DESTROY_HEAP, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  1350. DRM_IOCTL_DEF_DRV(I915_SET_VBLANK_PIPE, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  1351. DRM_IOCTL_DEF_DRV(I915_GET_VBLANK_PIPE, drm_noop, DRM_AUTH),
  1352. DRM_IOCTL_DEF_DRV(I915_VBLANK_SWAP, drm_noop, DRM_AUTH),
  1353. DRM_IOCTL_DEF_DRV(I915_HWS_ADDR, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  1354. DRM_IOCTL_DEF_DRV(I915_GEM_INIT, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  1355. DRM_IOCTL_DEF_DRV(I915_GEM_EXECBUFFER, drm_invalid_op, DRM_AUTH),
  1356. DRM_IOCTL_DEF_DRV(I915_GEM_EXECBUFFER2_WR, i915_gem_execbuffer2_ioctl, DRM_RENDER_ALLOW),
  1357. DRM_IOCTL_DEF_DRV(I915_GEM_PIN, i915_gem_reject_pin_ioctl, DRM_AUTH|DRM_ROOT_ONLY),
  1358. DRM_IOCTL_DEF_DRV(I915_GEM_UNPIN, i915_gem_reject_pin_ioctl, DRM_AUTH|DRM_ROOT_ONLY),
  1359. DRM_IOCTL_DEF_DRV(I915_GEM_BUSY, i915_gem_busy_ioctl, DRM_RENDER_ALLOW),
  1360. DRM_IOCTL_DEF_DRV(I915_GEM_SET_CACHING, i915_gem_set_caching_ioctl, DRM_RENDER_ALLOW),
  1361. DRM_IOCTL_DEF_DRV(I915_GEM_GET_CACHING, i915_gem_get_caching_ioctl, DRM_RENDER_ALLOW),
  1362. DRM_IOCTL_DEF_DRV(I915_GEM_THROTTLE, i915_gem_throttle_ioctl, DRM_RENDER_ALLOW),
  1363. DRM_IOCTL_DEF_DRV(I915_GEM_ENTERVT, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  1364. DRM_IOCTL_DEF_DRV(I915_GEM_LEAVEVT, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  1365. DRM_IOCTL_DEF_DRV(I915_GEM_CREATE, i915_gem_create_ioctl, DRM_RENDER_ALLOW),
  1366. DRM_IOCTL_DEF_DRV(I915_GEM_CREATE_EXT, i915_gem_create_ext_ioctl, DRM_RENDER_ALLOW),
  1367. DRM_IOCTL_DEF_DRV(I915_GEM_PREAD, i915_gem_pread_ioctl, DRM_RENDER_ALLOW),
  1368. DRM_IOCTL_DEF_DRV(I915_GEM_PWRITE, i915_gem_pwrite_ioctl, DRM_RENDER_ALLOW),
  1369. DRM_IOCTL_DEF_DRV(I915_GEM_MMAP, i915_gem_mmap_ioctl, DRM_RENDER_ALLOW),
  1370. DRM_IOCTL_DEF_DRV(I915_GEM_MMAP_OFFSET, i915_gem_mmap_offset_ioctl, DRM_RENDER_ALLOW),
  1371. DRM_IOCTL_DEF_DRV(I915_GEM_SET_DOMAIN, i915_gem_set_domain_ioctl, DRM_RENDER_ALLOW),
  1372. DRM_IOCTL_DEF_DRV(I915_GEM_SW_FINISH, i915_gem_sw_finish_ioctl, DRM_RENDER_ALLOW),
  1373. DRM_IOCTL_DEF_DRV(I915_GEM_SET_TILING, i915_gem_set_tiling_ioctl, DRM_RENDER_ALLOW),
  1374. DRM_IOCTL_DEF_DRV(I915_GEM_GET_TILING, i915_gem_get_tiling_ioctl, DRM_RENDER_ALLOW),
  1375. DRM_IOCTL_DEF_DRV(I915_GEM_GET_APERTURE, i915_gem_get_aperture_ioctl, DRM_RENDER_ALLOW),
  1376. DRM_IOCTL_DEF_DRV(I915_GET_PIPE_FROM_CRTC_ID, intel_get_pipe_from_crtc_id_ioctl, 0),
  1377. DRM_IOCTL_DEF_DRV(I915_GEM_MADVISE, i915_gem_madvise_ioctl, DRM_RENDER_ALLOW),
  1378. DRM_IOCTL_DEF_DRV(I915_OVERLAY_PUT_IMAGE, intel_overlay_put_image_ioctl, DRM_MASTER),
  1379. DRM_IOCTL_DEF_DRV(I915_OVERLAY_ATTRS, intel_overlay_attrs_ioctl, DRM_MASTER),
  1380. DRM_IOCTL_DEF_DRV(I915_SET_SPRITE_COLORKEY, intel_sprite_set_colorkey_ioctl, DRM_MASTER),
  1381. DRM_IOCTL_DEF_DRV(I915_GET_SPRITE_COLORKEY, drm_noop, DRM_MASTER),
  1382. DRM_IOCTL_DEF_DRV(I915_GEM_WAIT, i915_gem_wait_ioctl, DRM_RENDER_ALLOW),
  1383. DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_CREATE_EXT, i915_gem_context_create_ioctl, DRM_RENDER_ALLOW),
  1384. DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_DESTROY, i915_gem_context_destroy_ioctl, DRM_RENDER_ALLOW),
  1385. DRM_IOCTL_DEF_DRV(I915_REG_READ, i915_reg_read_ioctl, DRM_RENDER_ALLOW),
  1386. DRM_IOCTL_DEF_DRV(I915_GET_RESET_STATS, i915_gem_context_reset_stats_ioctl, DRM_RENDER_ALLOW),
  1387. DRM_IOCTL_DEF_DRV(I915_GEM_USERPTR, i915_gem_userptr_ioctl, DRM_RENDER_ALLOW),
  1388. DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_GETPARAM, i915_gem_context_getparam_ioctl, DRM_RENDER_ALLOW),
  1389. DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_SETPARAM, i915_gem_context_setparam_ioctl, DRM_RENDER_ALLOW),
  1390. DRM_IOCTL_DEF_DRV(I915_PERF_OPEN, i915_perf_open_ioctl, DRM_RENDER_ALLOW),
  1391. DRM_IOCTL_DEF_DRV(I915_PERF_ADD_CONFIG, i915_perf_add_config_ioctl, DRM_RENDER_ALLOW),
  1392. DRM_IOCTL_DEF_DRV(I915_PERF_REMOVE_CONFIG, i915_perf_remove_config_ioctl, DRM_RENDER_ALLOW),
  1393. DRM_IOCTL_DEF_DRV(I915_QUERY, i915_query_ioctl, DRM_RENDER_ALLOW),
  1394. DRM_IOCTL_DEF_DRV(I915_GEM_VM_CREATE, i915_gem_vm_create_ioctl, DRM_RENDER_ALLOW),
  1395. DRM_IOCTL_DEF_DRV(I915_GEM_VM_DESTROY, i915_gem_vm_destroy_ioctl, DRM_RENDER_ALLOW),
  1396. };
  1397. /*
  1398. * Interface history:
  1399. *
  1400. * 1.1: Original.
  1401. * 1.2: Add Power Management
  1402. * 1.3: Add vblank support
  1403. * 1.4: Fix cmdbuffer path, add heap destroy
  1404. * 1.5: Add vblank pipe configuration
  1405. * 1.6: - New ioctl for scheduling buffer swaps on vertical blank
  1406. * - Support vertical blank on secondary display pipe
  1407. */
  1408. #define DRIVER_MAJOR 1
  1409. #define DRIVER_MINOR 6
  1410. #define DRIVER_PATCHLEVEL 0
  1411. static const struct drm_driver i915_drm_driver = {
  1412. /* Don't use MTRRs here; the Xserver or userspace app should
  1413. * deal with them for Intel hardware.
  1414. */
  1415. .driver_features =
  1416. DRIVER_GEM |
  1417. DRIVER_RENDER | DRIVER_MODESET | DRIVER_ATOMIC | DRIVER_SYNCOBJ |
  1418. DRIVER_SYNCOBJ_TIMELINE,
  1419. .release = i915_driver_release,
  1420. .open = i915_driver_open,
  1421. .postclose = i915_driver_postclose,
  1422. .show_fdinfo = PTR_IF(IS_ENABLED(CONFIG_PROC_FS), i915_drm_client_fdinfo),
  1423. .gem_prime_import = i915_gem_prime_import,
  1424. .dumb_create = i915_gem_dumb_create,
  1425. .dumb_map_offset = i915_gem_dumb_mmap_offset,
  1426. .ioctls = i915_ioctls,
  1427. .num_ioctls = ARRAY_SIZE(i915_ioctls),
  1428. .fops = &i915_driver_fops,
  1429. .name = DRIVER_NAME,
  1430. .desc = DRIVER_DESC,
  1431. .date = DRIVER_DATE,
  1432. .major = DRIVER_MAJOR,
  1433. .minor = DRIVER_MINOR,
  1434. .patchlevel = DRIVER_PATCHLEVEL,
  1435. };