vmwgfx_drv.c 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672
  1. // SPDX-License-Identifier: GPL-2.0 OR MIT
  2. /**************************************************************************
  3. *
  4. * Copyright (c) 2009-2025 Broadcom. All Rights Reserved. The term
  5. * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
  6. *
  7. **************************************************************************/
  8. #include "vmwgfx_drv.h"
  9. #include "vmwgfx_bo.h"
  10. #include "vmwgfx_binding.h"
  11. #include "vmwgfx_devcaps.h"
  12. #include "vmwgfx_mksstat.h"
  13. #include "vmwgfx_vkms.h"
  14. #include "ttm_object.h"
  15. #include <drm/clients/drm_client_setup.h>
  16. #include <drm/drm_drv.h>
  17. #include <drm/drm_fbdev_ttm.h>
  18. #include <drm/drm_gem_ttm_helper.h>
  19. #include <drm/drm_ioctl.h>
  20. #include <drm/drm_module.h>
  21. #include <drm/drm_sysfs.h>
  22. #include <drm/ttm/ttm_range_manager.h>
  23. #include <drm/ttm/ttm_placement.h>
  24. #include <generated/utsrelease.h>
  25. #ifdef CONFIG_X86
  26. #include <asm/hypervisor.h>
  27. #endif
  28. #include <linux/aperture.h>
  29. #include <linux/cc_platform.h>
  30. #include <linux/dma-mapping.h>
  31. #include <linux/module.h>
  32. #include <linux/pci.h>
  33. #include <linux/version.h>
  34. #include <linux/vmalloc.h>
  35. #define VMWGFX_DRIVER_DESC "Linux drm driver for VMware graphics devices"
  36. /*
  37. * Fully encoded drm commands. Might move to vmw_drm.h
  38. */
  39. #define DRM_IOCTL_VMW_GET_PARAM \
  40. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_GET_PARAM, \
  41. struct drm_vmw_getparam_arg)
  42. #define DRM_IOCTL_VMW_ALLOC_DMABUF \
  43. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_ALLOC_DMABUF, \
  44. union drm_vmw_alloc_dmabuf_arg)
  45. #define DRM_IOCTL_VMW_UNREF_DMABUF \
  46. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_UNREF_DMABUF, \
  47. struct drm_vmw_unref_dmabuf_arg)
  48. #define DRM_IOCTL_VMW_CURSOR_BYPASS \
  49. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_CURSOR_BYPASS, \
  50. struct drm_vmw_cursor_bypass_arg)
  51. #define DRM_IOCTL_VMW_CONTROL_STREAM \
  52. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_CONTROL_STREAM, \
  53. struct drm_vmw_control_stream_arg)
  54. #define DRM_IOCTL_VMW_CLAIM_STREAM \
  55. DRM_IOR(DRM_COMMAND_BASE + DRM_VMW_CLAIM_STREAM, \
  56. struct drm_vmw_stream_arg)
  57. #define DRM_IOCTL_VMW_UNREF_STREAM \
  58. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_UNREF_STREAM, \
  59. struct drm_vmw_stream_arg)
  60. #define DRM_IOCTL_VMW_CREATE_CONTEXT \
  61. DRM_IOR(DRM_COMMAND_BASE + DRM_VMW_CREATE_CONTEXT, \
  62. struct drm_vmw_context_arg)
  63. #define DRM_IOCTL_VMW_UNREF_CONTEXT \
  64. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_UNREF_CONTEXT, \
  65. struct drm_vmw_context_arg)
  66. #define DRM_IOCTL_VMW_CREATE_SURFACE \
  67. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_CREATE_SURFACE, \
  68. union drm_vmw_surface_create_arg)
  69. #define DRM_IOCTL_VMW_UNREF_SURFACE \
  70. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_UNREF_SURFACE, \
  71. struct drm_vmw_surface_arg)
  72. #define DRM_IOCTL_VMW_REF_SURFACE \
  73. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_REF_SURFACE, \
  74. union drm_vmw_surface_reference_arg)
  75. #define DRM_IOCTL_VMW_EXECBUF \
  76. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_EXECBUF, \
  77. struct drm_vmw_execbuf_arg)
  78. #define DRM_IOCTL_VMW_GET_3D_CAP \
  79. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_GET_3D_CAP, \
  80. struct drm_vmw_get_3d_cap_arg)
  81. #define DRM_IOCTL_VMW_FENCE_WAIT \
  82. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_FENCE_WAIT, \
  83. struct drm_vmw_fence_wait_arg)
  84. #define DRM_IOCTL_VMW_FENCE_SIGNALED \
  85. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_FENCE_SIGNALED, \
  86. struct drm_vmw_fence_signaled_arg)
  87. #define DRM_IOCTL_VMW_FENCE_UNREF \
  88. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_FENCE_UNREF, \
  89. struct drm_vmw_fence_arg)
  90. #define DRM_IOCTL_VMW_FENCE_EVENT \
  91. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_FENCE_EVENT, \
  92. struct drm_vmw_fence_event_arg)
  93. #define DRM_IOCTL_VMW_PRESENT \
  94. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_PRESENT, \
  95. struct drm_vmw_present_arg)
  96. #define DRM_IOCTL_VMW_PRESENT_READBACK \
  97. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_PRESENT_READBACK, \
  98. struct drm_vmw_present_readback_arg)
  99. #define DRM_IOCTL_VMW_UPDATE_LAYOUT \
  100. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_UPDATE_LAYOUT, \
  101. struct drm_vmw_update_layout_arg)
  102. #define DRM_IOCTL_VMW_CREATE_SHADER \
  103. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_CREATE_SHADER, \
  104. struct drm_vmw_shader_create_arg)
  105. #define DRM_IOCTL_VMW_UNREF_SHADER \
  106. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_UNREF_SHADER, \
  107. struct drm_vmw_shader_arg)
  108. #define DRM_IOCTL_VMW_GB_SURFACE_CREATE \
  109. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_GB_SURFACE_CREATE, \
  110. union drm_vmw_gb_surface_create_arg)
  111. #define DRM_IOCTL_VMW_GB_SURFACE_REF \
  112. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_GB_SURFACE_REF, \
  113. union drm_vmw_gb_surface_reference_arg)
  114. #define DRM_IOCTL_VMW_SYNCCPU \
  115. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_SYNCCPU, \
  116. struct drm_vmw_synccpu_arg)
  117. #define DRM_IOCTL_VMW_CREATE_EXTENDED_CONTEXT \
  118. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_CREATE_EXTENDED_CONTEXT, \
  119. struct drm_vmw_context_arg)
  120. #define DRM_IOCTL_VMW_GB_SURFACE_CREATE_EXT \
  121. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_GB_SURFACE_CREATE_EXT, \
  122. union drm_vmw_gb_surface_create_ext_arg)
  123. #define DRM_IOCTL_VMW_GB_SURFACE_REF_EXT \
  124. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_GB_SURFACE_REF_EXT, \
  125. union drm_vmw_gb_surface_reference_ext_arg)
  126. #define DRM_IOCTL_VMW_MSG \
  127. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_MSG, \
  128. struct drm_vmw_msg_arg)
  129. #define DRM_IOCTL_VMW_MKSSTAT_RESET \
  130. DRM_IO(DRM_COMMAND_BASE + DRM_VMW_MKSSTAT_RESET)
  131. #define DRM_IOCTL_VMW_MKSSTAT_ADD \
  132. DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_MKSSTAT_ADD, \
  133. struct drm_vmw_mksstat_add_arg)
  134. #define DRM_IOCTL_VMW_MKSSTAT_REMOVE \
  135. DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_MKSSTAT_REMOVE, \
  136. struct drm_vmw_mksstat_remove_arg)
  137. /*
  138. * Ioctl definitions.
  139. */
  140. static const struct drm_ioctl_desc vmw_ioctls[] = {
  141. DRM_IOCTL_DEF_DRV(VMW_GET_PARAM, vmw_getparam_ioctl,
  142. DRM_RENDER_ALLOW),
  143. DRM_IOCTL_DEF_DRV(VMW_ALLOC_DMABUF, vmw_gem_object_create_ioctl,
  144. DRM_RENDER_ALLOW),
  145. DRM_IOCTL_DEF_DRV(VMW_UNREF_DMABUF, vmw_bo_unref_ioctl,
  146. DRM_RENDER_ALLOW),
  147. DRM_IOCTL_DEF_DRV(VMW_CURSOR_BYPASS,
  148. vmw_kms_cursor_bypass_ioctl,
  149. DRM_MASTER),
  150. DRM_IOCTL_DEF_DRV(VMW_CONTROL_STREAM, vmw_overlay_ioctl,
  151. DRM_MASTER),
  152. DRM_IOCTL_DEF_DRV(VMW_CLAIM_STREAM, vmw_stream_claim_ioctl,
  153. DRM_MASTER),
  154. DRM_IOCTL_DEF_DRV(VMW_UNREF_STREAM, vmw_stream_unref_ioctl,
  155. DRM_MASTER),
  156. DRM_IOCTL_DEF_DRV(VMW_CREATE_CONTEXT, vmw_context_define_ioctl,
  157. DRM_RENDER_ALLOW),
  158. DRM_IOCTL_DEF_DRV(VMW_UNREF_CONTEXT, vmw_context_destroy_ioctl,
  159. DRM_RENDER_ALLOW),
  160. DRM_IOCTL_DEF_DRV(VMW_CREATE_SURFACE, vmw_surface_define_ioctl,
  161. DRM_RENDER_ALLOW),
  162. DRM_IOCTL_DEF_DRV(VMW_UNREF_SURFACE, vmw_surface_destroy_ioctl,
  163. DRM_RENDER_ALLOW),
  164. DRM_IOCTL_DEF_DRV(VMW_REF_SURFACE, vmw_surface_reference_ioctl,
  165. DRM_RENDER_ALLOW),
  166. DRM_IOCTL_DEF_DRV(VMW_EXECBUF, vmw_execbuf_ioctl,
  167. DRM_RENDER_ALLOW),
  168. DRM_IOCTL_DEF_DRV(VMW_FENCE_WAIT, vmw_fence_obj_wait_ioctl,
  169. DRM_RENDER_ALLOW),
  170. DRM_IOCTL_DEF_DRV(VMW_FENCE_SIGNALED,
  171. vmw_fence_obj_signaled_ioctl,
  172. DRM_RENDER_ALLOW),
  173. DRM_IOCTL_DEF_DRV(VMW_FENCE_UNREF, vmw_fence_obj_unref_ioctl,
  174. DRM_RENDER_ALLOW),
  175. DRM_IOCTL_DEF_DRV(VMW_FENCE_EVENT, vmw_fence_event_ioctl,
  176. DRM_RENDER_ALLOW),
  177. DRM_IOCTL_DEF_DRV(VMW_GET_3D_CAP, vmw_get_cap_3d_ioctl,
  178. DRM_RENDER_ALLOW),
  179. /* these allow direct access to the framebuffers mark as master only */
  180. DRM_IOCTL_DEF_DRV(VMW_PRESENT, vmw_present_ioctl,
  181. DRM_MASTER | DRM_AUTH),
  182. DRM_IOCTL_DEF_DRV(VMW_PRESENT_READBACK,
  183. vmw_present_readback_ioctl,
  184. DRM_MASTER | DRM_AUTH),
  185. /*
  186. * The permissions of the below ioctl are overridden in
  187. * vmw_generic_ioctl(). We require either
  188. * DRM_MASTER or capable(CAP_SYS_ADMIN).
  189. */
  190. DRM_IOCTL_DEF_DRV(VMW_UPDATE_LAYOUT,
  191. vmw_kms_update_layout_ioctl,
  192. DRM_RENDER_ALLOW),
  193. DRM_IOCTL_DEF_DRV(VMW_CREATE_SHADER,
  194. vmw_shader_define_ioctl,
  195. DRM_RENDER_ALLOW),
  196. DRM_IOCTL_DEF_DRV(VMW_UNREF_SHADER,
  197. vmw_shader_destroy_ioctl,
  198. DRM_RENDER_ALLOW),
  199. DRM_IOCTL_DEF_DRV(VMW_GB_SURFACE_CREATE,
  200. vmw_gb_surface_define_ioctl,
  201. DRM_RENDER_ALLOW),
  202. DRM_IOCTL_DEF_DRV(VMW_GB_SURFACE_REF,
  203. vmw_gb_surface_reference_ioctl,
  204. DRM_RENDER_ALLOW),
  205. DRM_IOCTL_DEF_DRV(VMW_SYNCCPU,
  206. vmw_user_bo_synccpu_ioctl,
  207. DRM_RENDER_ALLOW),
  208. DRM_IOCTL_DEF_DRV(VMW_CREATE_EXTENDED_CONTEXT,
  209. vmw_extended_context_define_ioctl,
  210. DRM_RENDER_ALLOW),
  211. DRM_IOCTL_DEF_DRV(VMW_GB_SURFACE_CREATE_EXT,
  212. vmw_gb_surface_define_ext_ioctl,
  213. DRM_RENDER_ALLOW),
  214. DRM_IOCTL_DEF_DRV(VMW_GB_SURFACE_REF_EXT,
  215. vmw_gb_surface_reference_ext_ioctl,
  216. DRM_RENDER_ALLOW),
  217. DRM_IOCTL_DEF_DRV(VMW_MSG,
  218. vmw_msg_ioctl,
  219. DRM_RENDER_ALLOW),
  220. DRM_IOCTL_DEF_DRV(VMW_MKSSTAT_RESET,
  221. vmw_mksstat_reset_ioctl,
  222. DRM_RENDER_ALLOW),
  223. DRM_IOCTL_DEF_DRV(VMW_MKSSTAT_ADD,
  224. vmw_mksstat_add_ioctl,
  225. DRM_RENDER_ALLOW),
  226. DRM_IOCTL_DEF_DRV(VMW_MKSSTAT_REMOVE,
  227. vmw_mksstat_remove_ioctl,
  228. DRM_RENDER_ALLOW),
  229. };
  230. static const struct pci_device_id vmw_pci_id_list[] = {
  231. { PCI_DEVICE(PCI_VENDOR_ID_VMWARE, VMWGFX_PCI_ID_SVGA2) },
  232. { PCI_DEVICE(PCI_VENDOR_ID_VMWARE, VMWGFX_PCI_ID_SVGA3) },
  233. { }
  234. };
  235. MODULE_DEVICE_TABLE(pci, vmw_pci_id_list);
  236. static int vmw_restrict_iommu;
  237. static int vmw_force_coherent;
  238. static int vmw_restrict_dma_mask;
  239. static int vmw_assume_16bpp;
  240. static int vmw_probe(struct pci_dev *, const struct pci_device_id *);
  241. static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val,
  242. void *ptr);
  243. MODULE_PARM_DESC(restrict_iommu, "Try to limit IOMMU usage for TTM pages");
  244. module_param_named(restrict_iommu, vmw_restrict_iommu, int, 0600);
  245. MODULE_PARM_DESC(force_coherent, "Force coherent TTM pages");
  246. module_param_named(force_coherent, vmw_force_coherent, int, 0600);
  247. MODULE_PARM_DESC(restrict_dma_mask, "Restrict DMA mask to 44 bits with IOMMU");
  248. module_param_named(restrict_dma_mask, vmw_restrict_dma_mask, int, 0600);
  249. MODULE_PARM_DESC(assume_16bpp, "Assume 16-bpp when filtering modes");
  250. module_param_named(assume_16bpp, vmw_assume_16bpp, int, 0600);
  251. struct bitmap_name {
  252. uint32 value;
  253. const char *name;
  254. };
  255. static const struct bitmap_name cap1_names[] = {
  256. { SVGA_CAP_RECT_COPY, "rect copy" },
  257. { SVGA_CAP_CURSOR, "cursor" },
  258. { SVGA_CAP_CURSOR_BYPASS, "cursor bypass" },
  259. { SVGA_CAP_CURSOR_BYPASS_2, "cursor bypass 2" },
  260. { SVGA_CAP_8BIT_EMULATION, "8bit emulation" },
  261. { SVGA_CAP_ALPHA_CURSOR, "alpha cursor" },
  262. { SVGA_CAP_3D, "3D" },
  263. { SVGA_CAP_EXTENDED_FIFO, "extended fifo" },
  264. { SVGA_CAP_MULTIMON, "multimon" },
  265. { SVGA_CAP_PITCHLOCK, "pitchlock" },
  266. { SVGA_CAP_IRQMASK, "irq mask" },
  267. { SVGA_CAP_DISPLAY_TOPOLOGY, "display topology" },
  268. { SVGA_CAP_GMR, "gmr" },
  269. { SVGA_CAP_TRACES, "traces" },
  270. { SVGA_CAP_GMR2, "gmr2" },
  271. { SVGA_CAP_SCREEN_OBJECT_2, "screen object 2" },
  272. { SVGA_CAP_COMMAND_BUFFERS, "command buffers" },
  273. { SVGA_CAP_CMD_BUFFERS_2, "command buffers 2" },
  274. { SVGA_CAP_GBOBJECTS, "gbobject" },
  275. { SVGA_CAP_DX, "dx" },
  276. { SVGA_CAP_HP_CMD_QUEUE, "hp cmd queue" },
  277. { SVGA_CAP_NO_BB_RESTRICTION, "no bb restriction" },
  278. { SVGA_CAP_CAP2_REGISTER, "cap2 register" },
  279. };
  280. static const struct bitmap_name cap2_names[] = {
  281. { SVGA_CAP2_GROW_OTABLE, "grow otable" },
  282. { SVGA_CAP2_INTRA_SURFACE_COPY, "intra surface copy" },
  283. { SVGA_CAP2_DX2, "dx2" },
  284. { SVGA_CAP2_GB_MEMSIZE_2, "gb memsize 2" },
  285. { SVGA_CAP2_SCREENDMA_REG, "screendma reg" },
  286. { SVGA_CAP2_OTABLE_PTDEPTH_2, "otable ptdepth2" },
  287. { SVGA_CAP2_NON_MS_TO_MS_STRETCHBLT, "non ms to ms stretchblt" },
  288. { SVGA_CAP2_CURSOR_MOB, "cursor mob" },
  289. { SVGA_CAP2_MSHINT, "mshint" },
  290. { SVGA_CAP2_CB_MAX_SIZE_4MB, "cb max size 4mb" },
  291. { SVGA_CAP2_DX3, "dx3" },
  292. { SVGA_CAP2_FRAME_TYPE, "frame type" },
  293. { SVGA_CAP2_COTABLE_COPY, "cotable copy" },
  294. { SVGA_CAP2_TRACE_FULL_FB, "trace full fb" },
  295. { SVGA_CAP2_EXTRA_REGS, "extra regs" },
  296. { SVGA_CAP2_LO_STAGING, "lo staging" },
  297. };
  298. static void vmw_print_bitmap(struct drm_device *drm,
  299. const char *prefix, uint32_t bitmap,
  300. const struct bitmap_name *bnames,
  301. uint32_t num_names)
  302. {
  303. char buf[512];
  304. uint32_t i;
  305. uint32_t offset = 0;
  306. for (i = 0; i < num_names; ++i) {
  307. if ((bitmap & bnames[i].value) != 0) {
  308. offset += snprintf(buf + offset,
  309. ARRAY_SIZE(buf) - offset,
  310. "%s, ", bnames[i].name);
  311. bitmap &= ~bnames[i].value;
  312. }
  313. }
  314. drm_info(drm, "%s: %s\n", prefix, buf);
  315. if (bitmap != 0)
  316. drm_dbg(drm, "%s: unknown enums: %x\n", prefix, bitmap);
  317. }
  318. static void vmw_print_sm_type(struct vmw_private *dev_priv)
  319. {
  320. static const char *names[] = {
  321. [VMW_SM_LEGACY] = "Legacy",
  322. [VMW_SM_4] = "SM4",
  323. [VMW_SM_4_1] = "SM4_1",
  324. [VMW_SM_5] = "SM_5",
  325. [VMW_SM_5_1X] = "SM_5_1X",
  326. [VMW_SM_MAX] = "Invalid"
  327. };
  328. BUILD_BUG_ON(ARRAY_SIZE(names) != (VMW_SM_MAX + 1));
  329. drm_info(&dev_priv->drm, "Available shader model: %s.\n",
  330. names[dev_priv->sm_type]);
  331. }
  332. /**
  333. * vmw_dummy_query_bo_create - create a bo to hold a dummy query result
  334. *
  335. * @dev_priv: A device private structure.
  336. *
  337. * This function creates a small buffer object that holds the query
  338. * result for dummy queries emitted as query barriers.
  339. * The function will then map the first page and initialize a pending
  340. * occlusion query result structure, Finally it will unmap the buffer.
  341. * No interruptible waits are done within this function.
  342. *
  343. * Returns an error if bo creation or initialization fails.
  344. */
  345. static int vmw_dummy_query_bo_create(struct vmw_private *dev_priv)
  346. {
  347. int ret;
  348. struct vmw_bo *vbo;
  349. struct ttm_bo_kmap_obj map;
  350. volatile SVGA3dQueryResult *result;
  351. bool dummy;
  352. struct vmw_bo_params bo_params = {
  353. .domain = VMW_BO_DOMAIN_SYS,
  354. .busy_domain = VMW_BO_DOMAIN_SYS,
  355. .bo_type = ttm_bo_type_kernel,
  356. .size = PAGE_SIZE,
  357. .pin = true,
  358. .keep_resv = true,
  359. };
  360. /*
  361. * Create the vbo as pinned, so that a tryreserve will
  362. * immediately succeed. This is because we're the only
  363. * user of the bo currently.
  364. */
  365. ret = vmw_bo_create(dev_priv, &bo_params, &vbo);
  366. if (unlikely(ret != 0))
  367. return ret;
  368. ret = ttm_bo_kmap(&vbo->tbo, 0, 1, &map);
  369. if (likely(ret == 0)) {
  370. result = ttm_kmap_obj_virtual(&map, &dummy);
  371. result->totalSize = sizeof(*result);
  372. result->state = SVGA3D_QUERYSTATE_PENDING;
  373. result->result32 = 0xff;
  374. ttm_bo_kunmap(&map);
  375. }
  376. vmw_bo_pin_reserved(vbo, false);
  377. ttm_bo_unreserve(&vbo->tbo);
  378. if (unlikely(ret != 0)) {
  379. DRM_ERROR("Dummy query buffer map failed.\n");
  380. vmw_bo_unreference(&vbo);
  381. } else
  382. dev_priv->dummy_query_bo = vbo;
  383. return ret;
  384. }
  385. static int vmw_device_init(struct vmw_private *dev_priv)
  386. {
  387. bool uses_fb_traces = false;
  388. dev_priv->enable_state = vmw_read(dev_priv, SVGA_REG_ENABLE);
  389. dev_priv->config_done_state = vmw_read(dev_priv, SVGA_REG_CONFIG_DONE);
  390. dev_priv->traces_state = vmw_read(dev_priv, SVGA_REG_TRACES);
  391. vmw_write(dev_priv, SVGA_REG_ENABLE, SVGA_REG_ENABLE_ENABLE |
  392. SVGA_REG_ENABLE_HIDE);
  393. uses_fb_traces = !vmw_cmd_supported(dev_priv) &&
  394. (dev_priv->capabilities & SVGA_CAP_TRACES) != 0;
  395. vmw_write(dev_priv, SVGA_REG_TRACES, uses_fb_traces);
  396. dev_priv->fifo = vmw_fifo_create(dev_priv);
  397. if (IS_ERR(dev_priv->fifo)) {
  398. int err = PTR_ERR(dev_priv->fifo);
  399. dev_priv->fifo = NULL;
  400. return err;
  401. } else if (!dev_priv->fifo) {
  402. vmw_write(dev_priv, SVGA_REG_CONFIG_DONE, 1);
  403. }
  404. u32 seqno = vmw_fence_read(dev_priv);
  405. atomic_set(&dev_priv->last_read_seqno, seqno);
  406. atomic_set(&dev_priv->marker_seq, seqno);
  407. return 0;
  408. }
  409. static void vmw_device_fini(struct vmw_private *vmw)
  410. {
  411. /*
  412. * Legacy sync
  413. */
  414. vmw_write(vmw, SVGA_REG_SYNC, SVGA_SYNC_GENERIC);
  415. while (vmw_read(vmw, SVGA_REG_BUSY) != 0)
  416. ;
  417. atomic_set(&vmw->last_read_seqno, vmw_fence_read(vmw));
  418. vmw_write(vmw, SVGA_REG_CONFIG_DONE,
  419. vmw->config_done_state);
  420. vmw_write(vmw, SVGA_REG_ENABLE,
  421. vmw->enable_state);
  422. vmw_write(vmw, SVGA_REG_TRACES,
  423. vmw->traces_state);
  424. vmw_fifo_destroy(vmw);
  425. }
  426. /**
  427. * vmw_request_device_late - Perform late device setup
  428. *
  429. * @dev_priv: Pointer to device private.
  430. *
  431. * This function performs setup of otables and enables large command
  432. * buffer submission. These tasks are split out to a separate function
  433. * because it reverts vmw_release_device_early and is intended to be used
  434. * by an error path in the hibernation code.
  435. */
  436. static int vmw_request_device_late(struct vmw_private *dev_priv)
  437. {
  438. int ret;
  439. if (dev_priv->has_mob) {
  440. ret = vmw_otables_setup(dev_priv);
  441. if (unlikely(ret != 0)) {
  442. DRM_ERROR("Unable to initialize "
  443. "guest Memory OBjects.\n");
  444. return ret;
  445. }
  446. }
  447. if (dev_priv->cman) {
  448. ret = vmw_cmdbuf_set_pool_size(dev_priv->cman, 256*4096);
  449. if (ret) {
  450. struct vmw_cmdbuf_man *man = dev_priv->cman;
  451. dev_priv->cman = NULL;
  452. vmw_cmdbuf_man_destroy(man);
  453. }
  454. }
  455. return 0;
  456. }
  457. static int vmw_request_device(struct vmw_private *dev_priv)
  458. {
  459. int ret;
  460. ret = vmw_device_init(dev_priv);
  461. if (unlikely(ret != 0)) {
  462. DRM_ERROR("Unable to initialize the device.\n");
  463. return ret;
  464. }
  465. vmw_fence_fifo_up(dev_priv->fman);
  466. dev_priv->cman = vmw_cmdbuf_man_create(dev_priv);
  467. if (IS_ERR(dev_priv->cman)) {
  468. dev_priv->cman = NULL;
  469. dev_priv->sm_type = VMW_SM_LEGACY;
  470. }
  471. ret = vmw_request_device_late(dev_priv);
  472. if (ret)
  473. goto out_no_mob;
  474. ret = vmw_dummy_query_bo_create(dev_priv);
  475. if (unlikely(ret != 0))
  476. goto out_no_query_bo;
  477. return 0;
  478. out_no_query_bo:
  479. if (dev_priv->cman)
  480. vmw_cmdbuf_remove_pool(dev_priv->cman);
  481. if (dev_priv->has_mob) {
  482. struct ttm_resource_manager *man;
  483. man = ttm_manager_type(&dev_priv->bdev, VMW_PL_MOB);
  484. ttm_resource_manager_evict_all(&dev_priv->bdev, man);
  485. vmw_otables_takedown(dev_priv);
  486. }
  487. if (dev_priv->cman)
  488. vmw_cmdbuf_man_destroy(dev_priv->cman);
  489. out_no_mob:
  490. vmw_fence_fifo_down(dev_priv->fman);
  491. vmw_device_fini(dev_priv);
  492. return ret;
  493. }
  494. /**
  495. * vmw_release_device_early - Early part of fifo takedown.
  496. *
  497. * @dev_priv: Pointer to device private struct.
  498. *
  499. * This is the first part of command submission takedown, to be called before
  500. * buffer management is taken down.
  501. */
  502. static void vmw_release_device_early(struct vmw_private *dev_priv)
  503. {
  504. /*
  505. * Previous destructions should've released
  506. * the pinned bo.
  507. */
  508. BUG_ON(dev_priv->pinned_bo != NULL);
  509. vmw_bo_unreference(&dev_priv->dummy_query_bo);
  510. if (dev_priv->cman)
  511. vmw_cmdbuf_remove_pool(dev_priv->cman);
  512. if (dev_priv->has_mob) {
  513. struct ttm_resource_manager *man;
  514. man = ttm_manager_type(&dev_priv->bdev, VMW_PL_MOB);
  515. ttm_resource_manager_evict_all(&dev_priv->bdev, man);
  516. vmw_otables_takedown(dev_priv);
  517. }
  518. }
  519. /**
  520. * vmw_release_device_late - Late part of fifo takedown.
  521. *
  522. * @dev_priv: Pointer to device private struct.
  523. *
  524. * This is the last part of the command submission takedown, to be called when
  525. * command submission is no longer needed. It may wait on pending fences.
  526. */
  527. static void vmw_release_device_late(struct vmw_private *dev_priv)
  528. {
  529. vmw_fence_fifo_down(dev_priv->fman);
  530. if (dev_priv->cman)
  531. vmw_cmdbuf_man_destroy(dev_priv->cman);
  532. vmw_device_fini(dev_priv);
  533. }
  534. /*
  535. * Sets the initial_[width|height] fields on the given vmw_private.
  536. *
  537. * It does so by reading SVGA_REG_[WIDTH|HEIGHT] regs and then
  538. * clamping the value to fb_max_[width|height] fields and the
  539. * VMW_MIN_INITIAL_[WIDTH|HEIGHT].
  540. * If the values appear to be invalid, set them to
  541. * VMW_MIN_INITIAL_[WIDTH|HEIGHT].
  542. */
  543. static void vmw_get_initial_size(struct vmw_private *dev_priv)
  544. {
  545. uint32_t width;
  546. uint32_t height;
  547. width = vmw_read(dev_priv, SVGA_REG_WIDTH);
  548. height = vmw_read(dev_priv, SVGA_REG_HEIGHT);
  549. width = max_t(uint32_t, width, VMWGFX_MIN_INITIAL_WIDTH);
  550. height = max_t(uint32_t, height, VMWGFX_MIN_INITIAL_HEIGHT);
  551. if (width > dev_priv->fb_max_width ||
  552. height > dev_priv->fb_max_height) {
  553. /*
  554. * This is a host error and shouldn't occur.
  555. */
  556. width = VMWGFX_MIN_INITIAL_WIDTH;
  557. height = VMWGFX_MIN_INITIAL_HEIGHT;
  558. }
  559. dev_priv->initial_width = width;
  560. dev_priv->initial_height = height;
  561. }
  562. /**
  563. * vmw_dma_select_mode - Determine how DMA mappings should be set up for this
  564. * system.
  565. *
  566. * @dev_priv: Pointer to a struct vmw_private
  567. *
  568. * This functions tries to determine what actions need to be taken by the
  569. * driver to make system pages visible to the device.
  570. * If this function decides that DMA is not possible, it returns -EINVAL.
  571. * The driver may then try to disable features of the device that require
  572. * DMA.
  573. */
  574. static int vmw_dma_select_mode(struct vmw_private *dev_priv)
  575. {
  576. static const char *names[vmw_dma_map_max] = {
  577. [vmw_dma_alloc_coherent] = "Using coherent TTM pages.",
  578. [vmw_dma_map_populate] = "Caching DMA mappings.",
  579. [vmw_dma_map_bind] = "Giving up DMA mappings early."};
  580. /*
  581. * When running with SEV we always want dma mappings, because
  582. * otherwise ttm tt pool pages will bounce through swiotlb running
  583. * out of available space.
  584. */
  585. if (vmw_force_coherent || cc_platform_has(CC_ATTR_MEM_ENCRYPT))
  586. dev_priv->map_mode = vmw_dma_alloc_coherent;
  587. else if (vmw_restrict_iommu)
  588. dev_priv->map_mode = vmw_dma_map_bind;
  589. else
  590. dev_priv->map_mode = vmw_dma_map_populate;
  591. drm_info(&dev_priv->drm,
  592. "DMA map mode: %s\n", names[dev_priv->map_mode]);
  593. return 0;
  594. }
  595. /**
  596. * vmw_dma_masks - set required page- and dma masks
  597. *
  598. * @dev_priv: Pointer to struct drm-device
  599. *
  600. * With 32-bit we can only handle 32 bit PFNs. Optionally set that
  601. * restriction also for 64-bit systems.
  602. */
  603. static int vmw_dma_masks(struct vmw_private *dev_priv)
  604. {
  605. struct drm_device *dev = &dev_priv->drm;
  606. int ret = 0;
  607. ret = dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(64));
  608. if (sizeof(unsigned long) == 4 || vmw_restrict_dma_mask) {
  609. drm_info(&dev_priv->drm,
  610. "Restricting DMA addresses to 44 bits.\n");
  611. return dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(44));
  612. }
  613. return ret;
  614. }
  615. static int vmw_vram_manager_init(struct vmw_private *dev_priv)
  616. {
  617. int ret;
  618. ret = ttm_range_man_init(&dev_priv->bdev, TTM_PL_VRAM, false,
  619. dev_priv->vram_size >> PAGE_SHIFT);
  620. ttm_resource_manager_set_used(ttm_manager_type(&dev_priv->bdev, TTM_PL_VRAM), false);
  621. return ret;
  622. }
  623. static void vmw_vram_manager_fini(struct vmw_private *dev_priv)
  624. {
  625. ttm_range_man_fini(&dev_priv->bdev, TTM_PL_VRAM);
  626. }
  627. static int vmw_setup_pci_resources(struct vmw_private *dev,
  628. u32 pci_id)
  629. {
  630. resource_size_t rmmio_start;
  631. resource_size_t rmmio_size;
  632. resource_size_t fifo_start;
  633. resource_size_t fifo_size;
  634. int ret;
  635. struct pci_dev *pdev = to_pci_dev(dev->drm.dev);
  636. pci_set_master(pdev);
  637. ret = pcim_request_all_regions(pdev, "vmwgfx probe");
  638. if (ret)
  639. return ret;
  640. dev->pci_id = pci_id;
  641. if (pci_id == VMWGFX_PCI_ID_SVGA3) {
  642. rmmio_start = pci_resource_start(pdev, 0);
  643. rmmio_size = pci_resource_len(pdev, 0);
  644. dev->vram_start = pci_resource_start(pdev, 2);
  645. dev->vram_size = pci_resource_len(pdev, 2);
  646. drm_info(&dev->drm,
  647. "Register MMIO at 0x%pa size is %llu KiB\n",
  648. &rmmio_start, (uint64_t)rmmio_size / 1024);
  649. dev->rmmio = devm_ioremap(dev->drm.dev,
  650. rmmio_start,
  651. rmmio_size);
  652. if (!dev->rmmio) {
  653. drm_err(&dev->drm,
  654. "Failed mapping registers mmio memory.\n");
  655. return -ENOMEM;
  656. }
  657. } else if (pci_id == VMWGFX_PCI_ID_SVGA2) {
  658. dev->io_start = pci_resource_start(pdev, 0);
  659. dev->vram_start = pci_resource_start(pdev, 1);
  660. dev->vram_size = pci_resource_len(pdev, 1);
  661. fifo_start = pci_resource_start(pdev, 2);
  662. fifo_size = pci_resource_len(pdev, 2);
  663. drm_info(&dev->drm,
  664. "FIFO at %pa size is %llu KiB\n",
  665. &fifo_start, (uint64_t)fifo_size / 1024);
  666. dev->fifo_mem = devm_memremap(dev->drm.dev,
  667. fifo_start,
  668. fifo_size,
  669. MEMREMAP_WB | MEMREMAP_DEC);
  670. if (IS_ERR(dev->fifo_mem)) {
  671. drm_err(&dev->drm,
  672. "Failed mapping FIFO memory.\n");
  673. return PTR_ERR(dev->fifo_mem);
  674. }
  675. } else {
  676. return -EINVAL;
  677. }
  678. /*
  679. * This is approximate size of the vram, the exact size will only
  680. * be known after we read SVGA_REG_VRAM_SIZE. The PCI resource
  681. * size will be equal to or bigger than the size reported by
  682. * SVGA_REG_VRAM_SIZE.
  683. */
  684. drm_info(&dev->drm,
  685. "VRAM at %pa size is %llu KiB\n",
  686. &dev->vram_start, (uint64_t)dev->vram_size / 1024);
  687. return 0;
  688. }
  689. static int vmw_detect_version(struct vmw_private *dev)
  690. {
  691. uint32_t svga_id;
  692. vmw_write(dev, SVGA_REG_ID, vmw_is_svga_v3(dev) ?
  693. SVGA_ID_3 : SVGA_ID_2);
  694. svga_id = vmw_read(dev, SVGA_REG_ID);
  695. if (svga_id != SVGA_ID_2 && svga_id != SVGA_ID_3) {
  696. drm_err(&dev->drm,
  697. "Unsupported SVGA ID 0x%x on chipset 0x%x\n",
  698. svga_id, dev->pci_id);
  699. return -ENOSYS;
  700. }
  701. BUG_ON(vmw_is_svga_v3(dev) && (svga_id != SVGA_ID_3));
  702. drm_info(&dev->drm,
  703. "Running on SVGA version %d.\n", (svga_id & 0xff));
  704. return 0;
  705. }
  706. static void vmw_write_driver_id(struct vmw_private *dev)
  707. {
  708. if ((dev->capabilities2 & SVGA_CAP2_DX2) != 0) {
  709. vmw_write(dev, SVGA_REG_GUEST_DRIVER_ID,
  710. SVGA_REG_GUEST_DRIVER_ID_LINUX);
  711. vmw_write(dev, SVGA_REG_GUEST_DRIVER_VERSION1,
  712. LINUX_VERSION_MAJOR << 24 |
  713. LINUX_VERSION_PATCHLEVEL << 16 |
  714. LINUX_VERSION_SUBLEVEL);
  715. vmw_write(dev, SVGA_REG_GUEST_DRIVER_VERSION2,
  716. VMWGFX_DRIVER_MAJOR << 24 |
  717. VMWGFX_DRIVER_MINOR << 16 |
  718. VMWGFX_DRIVER_PATCHLEVEL);
  719. vmw_write(dev, SVGA_REG_GUEST_DRIVER_VERSION3, 0);
  720. vmw_write(dev, SVGA_REG_GUEST_DRIVER_ID,
  721. SVGA_REG_GUEST_DRIVER_ID_SUBMIT);
  722. }
  723. }
  724. static void vmw_sw_context_init(struct vmw_private *dev_priv)
  725. {
  726. struct vmw_sw_context *sw_context = &dev_priv->ctx;
  727. hash_init(sw_context->res_ht);
  728. }
  729. static void vmw_sw_context_fini(struct vmw_private *dev_priv)
  730. {
  731. struct vmw_sw_context *sw_context = &dev_priv->ctx;
  732. vfree(sw_context->cmd_bounce);
  733. if (sw_context->staged_bindings)
  734. vmw_binding_state_free(sw_context->staged_bindings);
  735. }
  736. static int vmw_driver_load(struct vmw_private *dev_priv, u32 pci_id)
  737. {
  738. int ret;
  739. enum vmw_res_type i;
  740. bool refuse_dma = false;
  741. vmw_sw_context_init(dev_priv);
  742. mutex_init(&dev_priv->cmdbuf_mutex);
  743. mutex_init(&dev_priv->binding_mutex);
  744. spin_lock_init(&dev_priv->resource_lock);
  745. spin_lock_init(&dev_priv->hw_lock);
  746. spin_lock_init(&dev_priv->waiter_lock);
  747. spin_lock_init(&dev_priv->cursor_lock);
  748. ret = vmw_setup_pci_resources(dev_priv, pci_id);
  749. if (ret)
  750. return ret;
  751. ret = vmw_detect_version(dev_priv);
  752. if (ret)
  753. return ret;
  754. for (i = vmw_res_context; i < vmw_res_max; ++i) {
  755. idr_init_base(&dev_priv->res_idr[i], 1);
  756. INIT_LIST_HEAD(&dev_priv->res_lru[i]);
  757. }
  758. init_waitqueue_head(&dev_priv->fence_queue);
  759. init_waitqueue_head(&dev_priv->fifo_queue);
  760. dev_priv->fence_queue_waiters = 0;
  761. dev_priv->fifo_queue_waiters = 0;
  762. dev_priv->used_memory_size = 0;
  763. dev_priv->assume_16bpp = !!vmw_assume_16bpp;
  764. dev_priv->capabilities = vmw_read(dev_priv, SVGA_REG_CAPABILITIES);
  765. vmw_print_bitmap(&dev_priv->drm, "Capabilities",
  766. dev_priv->capabilities,
  767. cap1_names, ARRAY_SIZE(cap1_names));
  768. if (dev_priv->capabilities & SVGA_CAP_CAP2_REGISTER) {
  769. dev_priv->capabilities2 = vmw_read(dev_priv, SVGA_REG_CAP2);
  770. vmw_print_bitmap(&dev_priv->drm, "Capabilities2",
  771. dev_priv->capabilities2,
  772. cap2_names, ARRAY_SIZE(cap2_names));
  773. }
  774. if (!vmwgfx_supported(dev_priv)) {
  775. vmw_disable_backdoor();
  776. drm_err_once(&dev_priv->drm,
  777. "vmwgfx seems to be running on an unsupported hypervisor.");
  778. drm_err_once(&dev_priv->drm,
  779. "This configuration is likely broken.");
  780. drm_err_once(&dev_priv->drm,
  781. "Please switch to a supported graphics device to avoid problems.");
  782. }
  783. vmw_vkms_init(dev_priv);
  784. ret = vmw_dma_select_mode(dev_priv);
  785. if (unlikely(ret != 0)) {
  786. drm_info(&dev_priv->drm,
  787. "Restricting capabilities since DMA not available.\n");
  788. refuse_dma = true;
  789. if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS)
  790. drm_info(&dev_priv->drm,
  791. "Disabling 3D acceleration.\n");
  792. }
  793. dev_priv->vram_size = vmw_read(dev_priv, SVGA_REG_VRAM_SIZE);
  794. dev_priv->fifo_mem_size = vmw_read(dev_priv, SVGA_REG_MEM_SIZE);
  795. dev_priv->fb_max_width = vmw_read(dev_priv, SVGA_REG_MAX_WIDTH);
  796. dev_priv->fb_max_height = vmw_read(dev_priv, SVGA_REG_MAX_HEIGHT);
  797. vmw_get_initial_size(dev_priv);
  798. if (dev_priv->capabilities & SVGA_CAP_GMR2) {
  799. dev_priv->max_gmr_ids =
  800. vmw_read(dev_priv, SVGA_REG_GMR_MAX_IDS);
  801. dev_priv->max_gmr_pages =
  802. vmw_read(dev_priv, SVGA_REG_GMRS_MAX_PAGES);
  803. dev_priv->memory_size =
  804. vmw_read(dev_priv, SVGA_REG_MEMORY_SIZE);
  805. dev_priv->memory_size -= dev_priv->vram_size;
  806. } else {
  807. /*
  808. * An arbitrary limit of 512MiB on surface
  809. * memory. But all HWV8 hardware supports GMR2.
  810. */
  811. dev_priv->memory_size = 512*1024*1024;
  812. }
  813. dev_priv->max_mob_pages = 0;
  814. dev_priv->max_mob_size = 0;
  815. if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS) {
  816. uint64_t mem_size;
  817. if (dev_priv->capabilities2 & SVGA_CAP2_GB_MEMSIZE_2)
  818. mem_size = vmw_read(dev_priv,
  819. SVGA_REG_GBOBJECT_MEM_SIZE_KB);
  820. else
  821. mem_size =
  822. vmw_read(dev_priv,
  823. SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB);
  824. dev_priv->max_mob_pages = mem_size * 1024 / PAGE_SIZE;
  825. dev_priv->max_primary_mem =
  826. vmw_read(dev_priv, SVGA_REG_MAX_PRIMARY_MEM);
  827. dev_priv->max_mob_size =
  828. vmw_read(dev_priv, SVGA_REG_MOB_MAX_SIZE);
  829. dev_priv->stdu_max_width =
  830. vmw_read(dev_priv, SVGA_REG_SCREENTARGET_MAX_WIDTH);
  831. dev_priv->stdu_max_height =
  832. vmw_read(dev_priv, SVGA_REG_SCREENTARGET_MAX_HEIGHT);
  833. vmw_write(dev_priv, SVGA_REG_DEV_CAP,
  834. SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH);
  835. dev_priv->texture_max_width = vmw_read(dev_priv,
  836. SVGA_REG_DEV_CAP);
  837. vmw_write(dev_priv, SVGA_REG_DEV_CAP,
  838. SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT);
  839. dev_priv->texture_max_height = vmw_read(dev_priv,
  840. SVGA_REG_DEV_CAP);
  841. } else {
  842. dev_priv->texture_max_width = 8192;
  843. dev_priv->texture_max_height = 8192;
  844. dev_priv->max_primary_mem = dev_priv->vram_size;
  845. }
  846. drm_info(&dev_priv->drm,
  847. "Legacy memory limits: VRAM = %llu KiB, FIFO = %llu KiB, surface = %u KiB\n",
  848. (u64)dev_priv->vram_size / 1024,
  849. (u64)dev_priv->fifo_mem_size / 1024,
  850. dev_priv->memory_size / 1024);
  851. drm_info(&dev_priv->drm,
  852. "MOB limits: max mob size = %u KiB, max mob pages = %u\n",
  853. dev_priv->max_mob_size / 1024, dev_priv->max_mob_pages);
  854. ret = vmw_dma_masks(dev_priv);
  855. if (unlikely(ret != 0))
  856. goto out_err0;
  857. dma_set_max_seg_size(dev_priv->drm.dev, U32_MAX);
  858. if (dev_priv->capabilities & SVGA_CAP_GMR2) {
  859. drm_info(&dev_priv->drm,
  860. "Max GMR ids is %u\n",
  861. (unsigned)dev_priv->max_gmr_ids);
  862. drm_info(&dev_priv->drm,
  863. "Max number of GMR pages is %u\n",
  864. (unsigned)dev_priv->max_gmr_pages);
  865. }
  866. drm_info(&dev_priv->drm,
  867. "Maximum display memory size is %llu KiB\n",
  868. (uint64_t)dev_priv->max_primary_mem / 1024);
  869. /* Need mmio memory to check for fifo pitchlock cap. */
  870. if (!(dev_priv->capabilities & SVGA_CAP_DISPLAY_TOPOLOGY) &&
  871. !(dev_priv->capabilities & SVGA_CAP_PITCHLOCK) &&
  872. !vmw_fifo_have_pitchlock(dev_priv)) {
  873. ret = -ENOSYS;
  874. DRM_ERROR("Hardware has no pitchlock\n");
  875. goto out_err0;
  876. }
  877. dev_priv->tdev = ttm_object_device_init(&vmw_prime_dmabuf_ops);
  878. if (unlikely(dev_priv->tdev == NULL)) {
  879. drm_err(&dev_priv->drm,
  880. "Unable to initialize TTM object management.\n");
  881. ret = -ENOMEM;
  882. goto out_err0;
  883. }
  884. if (dev_priv->capabilities & SVGA_CAP_IRQMASK) {
  885. ret = vmw_irq_install(dev_priv);
  886. if (ret != 0) {
  887. drm_err(&dev_priv->drm,
  888. "Failed installing irq: %d\n", ret);
  889. goto out_no_irq;
  890. }
  891. }
  892. dev_priv->fman = vmw_fence_manager_init(dev_priv);
  893. if (unlikely(dev_priv->fman == NULL)) {
  894. ret = -ENOMEM;
  895. goto out_no_fman;
  896. }
  897. ret = ttm_device_init(&dev_priv->bdev, &vmw_bo_driver,
  898. dev_priv->drm.dev,
  899. dev_priv->drm.anon_inode->i_mapping,
  900. dev_priv->drm.vma_offset_manager,
  901. (dev_priv->map_mode == vmw_dma_alloc_coherent) ?
  902. TTM_ALLOCATION_POOL_USE_DMA_ALLOC : 0);
  903. if (unlikely(ret != 0)) {
  904. drm_err(&dev_priv->drm,
  905. "Failed initializing TTM buffer object driver.\n");
  906. goto out_no_bdev;
  907. }
  908. /*
  909. * Enable VRAM, but initially don't use it until SVGA is enabled and
  910. * unhidden.
  911. */
  912. ret = vmw_vram_manager_init(dev_priv);
  913. if (unlikely(ret != 0)) {
  914. drm_err(&dev_priv->drm,
  915. "Failed initializing memory manager for VRAM.\n");
  916. goto out_no_vram;
  917. }
  918. ret = vmw_devcaps_create(dev_priv);
  919. if (unlikely(ret != 0)) {
  920. drm_err(&dev_priv->drm,
  921. "Failed initializing device caps.\n");
  922. goto out_no_vram;
  923. }
  924. /*
  925. * "Guest Memory Regions" is an aperture like feature with
  926. * one slot per bo. There is an upper limit of the number of
  927. * slots as well as the bo size.
  928. */
  929. dev_priv->has_gmr = true;
  930. /* TODO: This is most likely not correct */
  931. if (((dev_priv->capabilities & (SVGA_CAP_GMR | SVGA_CAP_GMR2)) == 0) ||
  932. refuse_dma ||
  933. vmw_gmrid_man_init(dev_priv, VMW_PL_GMR) != 0) {
  934. drm_info(&dev_priv->drm,
  935. "No GMR memory available. "
  936. "Graphics memory resources are very limited.\n");
  937. dev_priv->has_gmr = false;
  938. }
  939. if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS && !refuse_dma) {
  940. dev_priv->has_mob = true;
  941. if (vmw_gmrid_man_init(dev_priv, VMW_PL_MOB) != 0) {
  942. drm_info(&dev_priv->drm,
  943. "No MOB memory available. "
  944. "3D will be disabled.\n");
  945. dev_priv->has_mob = false;
  946. }
  947. if (vmw_sys_man_init(dev_priv) != 0) {
  948. drm_info(&dev_priv->drm,
  949. "No MOB page table memory available. "
  950. "3D will be disabled.\n");
  951. dev_priv->has_mob = false;
  952. }
  953. }
  954. if (dev_priv->has_mob && (dev_priv->capabilities & SVGA_CAP_DX)) {
  955. if (vmw_devcap_get(dev_priv, SVGA3D_DEVCAP_DXCONTEXT))
  956. dev_priv->sm_type = VMW_SM_4;
  957. }
  958. /* SVGA_CAP2_DX2 (DefineGBSurface_v3) is needed for SM4_1 support */
  959. if (has_sm4_context(dev_priv) &&
  960. (dev_priv->capabilities2 & SVGA_CAP2_DX2)) {
  961. if (vmw_devcap_get(dev_priv, SVGA3D_DEVCAP_SM41))
  962. dev_priv->sm_type = VMW_SM_4_1;
  963. if (has_sm4_1_context(dev_priv) &&
  964. (dev_priv->capabilities2 & SVGA_CAP2_DX3)) {
  965. if (vmw_devcap_get(dev_priv, SVGA3D_DEVCAP_SM5)) {
  966. dev_priv->sm_type = VMW_SM_5;
  967. if (vmw_devcap_get(dev_priv, SVGA3D_DEVCAP_GL43))
  968. dev_priv->sm_type = VMW_SM_5_1X;
  969. }
  970. }
  971. }
  972. ret = vmw_kms_init(dev_priv);
  973. if (unlikely(ret != 0))
  974. goto out_no_kms;
  975. vmw_overlay_init(dev_priv);
  976. ret = vmw_request_device(dev_priv);
  977. if (ret)
  978. goto out_no_fifo;
  979. vmw_print_sm_type(dev_priv);
  980. vmw_host_printf("vmwgfx: Module Version: %d.%d.%d (kernel: %s)",
  981. VMWGFX_DRIVER_MAJOR, VMWGFX_DRIVER_MINOR,
  982. VMWGFX_DRIVER_PATCHLEVEL, UTS_RELEASE);
  983. vmw_write_driver_id(dev_priv);
  984. dev_priv->pm_nb.notifier_call = vmwgfx_pm_notifier;
  985. register_pm_notifier(&dev_priv->pm_nb);
  986. return 0;
  987. out_no_fifo:
  988. vmw_overlay_close(dev_priv);
  989. vmw_kms_close(dev_priv);
  990. out_no_kms:
  991. if (dev_priv->has_mob) {
  992. vmw_gmrid_man_fini(dev_priv, VMW_PL_MOB);
  993. vmw_sys_man_fini(dev_priv);
  994. }
  995. if (dev_priv->has_gmr)
  996. vmw_gmrid_man_fini(dev_priv, VMW_PL_GMR);
  997. vmw_devcaps_destroy(dev_priv);
  998. vmw_vram_manager_fini(dev_priv);
  999. out_no_vram:
  1000. ttm_device_fini(&dev_priv->bdev);
  1001. out_no_bdev:
  1002. vmw_fence_manager_takedown(dev_priv->fman);
  1003. out_no_fman:
  1004. if (dev_priv->capabilities & SVGA_CAP_IRQMASK)
  1005. vmw_irq_uninstall(&dev_priv->drm);
  1006. out_no_irq:
  1007. ttm_object_device_release(&dev_priv->tdev);
  1008. out_err0:
  1009. for (i = vmw_res_context; i < vmw_res_max; ++i)
  1010. idr_destroy(&dev_priv->res_idr[i]);
  1011. if (dev_priv->ctx.staged_bindings)
  1012. vmw_binding_state_free(dev_priv->ctx.staged_bindings);
  1013. return ret;
  1014. }
  1015. static void vmw_driver_unload(struct drm_device *dev)
  1016. {
  1017. struct vmw_private *dev_priv = vmw_priv(dev);
  1018. enum vmw_res_type i;
  1019. unregister_pm_notifier(&dev_priv->pm_nb);
  1020. vmw_sw_context_fini(dev_priv);
  1021. vmw_fifo_resource_dec(dev_priv);
  1022. vmw_svga_disable(dev_priv);
  1023. vmw_vkms_cleanup(dev_priv);
  1024. vmw_kms_close(dev_priv);
  1025. vmw_overlay_close(dev_priv);
  1026. if (dev_priv->has_gmr)
  1027. vmw_gmrid_man_fini(dev_priv, VMW_PL_GMR);
  1028. vmw_release_device_early(dev_priv);
  1029. if (dev_priv->has_mob) {
  1030. vmw_gmrid_man_fini(dev_priv, VMW_PL_MOB);
  1031. vmw_sys_man_fini(dev_priv);
  1032. }
  1033. vmw_devcaps_destroy(dev_priv);
  1034. vmw_vram_manager_fini(dev_priv);
  1035. ttm_device_fini(&dev_priv->bdev);
  1036. vmw_release_device_late(dev_priv);
  1037. vmw_fence_manager_takedown(dev_priv->fman);
  1038. if (dev_priv->capabilities & SVGA_CAP_IRQMASK)
  1039. vmw_irq_uninstall(&dev_priv->drm);
  1040. ttm_object_device_release(&dev_priv->tdev);
  1041. for (i = vmw_res_context; i < vmw_res_max; ++i)
  1042. idr_destroy(&dev_priv->res_idr[i]);
  1043. vmw_mksstat_remove_all(dev_priv);
  1044. }
  1045. static void vmw_postclose(struct drm_device *dev,
  1046. struct drm_file *file_priv)
  1047. {
  1048. struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
  1049. ttm_object_file_release(&vmw_fp->tfile);
  1050. kfree(vmw_fp);
  1051. }
  1052. static int vmw_driver_open(struct drm_device *dev, struct drm_file *file_priv)
  1053. {
  1054. struct vmw_private *dev_priv = vmw_priv(dev);
  1055. struct vmw_fpriv *vmw_fp;
  1056. int ret = -ENOMEM;
  1057. vmw_fp = kzalloc_obj(*vmw_fp);
  1058. if (unlikely(!vmw_fp))
  1059. return ret;
  1060. vmw_fp->tfile = ttm_object_file_init(dev_priv->tdev);
  1061. if (unlikely(vmw_fp->tfile == NULL))
  1062. goto out_no_tfile;
  1063. file_priv->driver_priv = vmw_fp;
  1064. return 0;
  1065. out_no_tfile:
  1066. kfree(vmw_fp);
  1067. return ret;
  1068. }
  1069. static long vmw_generic_ioctl(struct file *filp, unsigned int cmd,
  1070. unsigned long arg,
  1071. long (*ioctl_func)(struct file *, unsigned int,
  1072. unsigned long))
  1073. {
  1074. struct drm_file *file_priv = filp->private_data;
  1075. struct drm_device *dev = file_priv->minor->dev;
  1076. unsigned int nr = DRM_IOCTL_NR(cmd);
  1077. unsigned int flags;
  1078. /*
  1079. * Do extra checking on driver private ioctls.
  1080. */
  1081. if ((nr >= DRM_COMMAND_BASE) && (nr < DRM_COMMAND_END)
  1082. && (nr < DRM_COMMAND_BASE + dev->driver->num_ioctls)) {
  1083. const struct drm_ioctl_desc *ioctl =
  1084. &vmw_ioctls[nr - DRM_COMMAND_BASE];
  1085. if (nr == DRM_COMMAND_BASE + DRM_VMW_EXECBUF) {
  1086. return ioctl_func(filp, cmd, arg);
  1087. } else if (nr == DRM_COMMAND_BASE + DRM_VMW_UPDATE_LAYOUT) {
  1088. if (!drm_is_current_master(file_priv) &&
  1089. !capable(CAP_SYS_ADMIN))
  1090. return -EACCES;
  1091. }
  1092. if (unlikely(ioctl->cmd != cmd))
  1093. goto out_io_encoding;
  1094. flags = ioctl->flags;
  1095. } else if (!drm_ioctl_flags(nr, &flags))
  1096. return -EINVAL;
  1097. return ioctl_func(filp, cmd, arg);
  1098. out_io_encoding:
  1099. DRM_ERROR("Invalid command format, ioctl %d\n",
  1100. nr - DRM_COMMAND_BASE);
  1101. return -EINVAL;
  1102. }
  1103. static long vmw_unlocked_ioctl(struct file *filp, unsigned int cmd,
  1104. unsigned long arg)
  1105. {
  1106. return vmw_generic_ioctl(filp, cmd, arg, &drm_ioctl);
  1107. }
  1108. #ifdef CONFIG_COMPAT
  1109. static long vmw_compat_ioctl(struct file *filp, unsigned int cmd,
  1110. unsigned long arg)
  1111. {
  1112. return vmw_generic_ioctl(filp, cmd, arg, &drm_compat_ioctl);
  1113. }
  1114. #endif
  1115. static void vmw_master_set(struct drm_device *dev,
  1116. struct drm_file *file_priv,
  1117. bool from_open)
  1118. {
  1119. /*
  1120. * Inform a new master that the layout may have changed while
  1121. * it was gone.
  1122. */
  1123. if (!from_open)
  1124. drm_sysfs_hotplug_event(dev);
  1125. }
  1126. static void vmw_master_drop(struct drm_device *dev,
  1127. struct drm_file *file_priv)
  1128. {
  1129. }
  1130. bool vmwgfx_supported(struct vmw_private *vmw)
  1131. {
  1132. #if defined(CONFIG_X86)
  1133. return hypervisor_is_type(X86_HYPER_VMWARE);
  1134. #elif defined(CONFIG_ARM64)
  1135. /*
  1136. * On aarch64 only svga3 is supported
  1137. */
  1138. return vmw->pci_id == VMWGFX_PCI_ID_SVGA3;
  1139. #else
  1140. drm_warn_once(&vmw->drm,
  1141. "vmwgfx is running on an unknown architecture.");
  1142. return false;
  1143. #endif
  1144. }
  1145. /**
  1146. * __vmw_svga_enable - Enable SVGA mode, FIFO and use of VRAM.
  1147. *
  1148. * @dev_priv: Pointer to device private struct.
  1149. * Needs the reservation sem to be held in non-exclusive mode.
  1150. */
  1151. static void __vmw_svga_enable(struct vmw_private *dev_priv)
  1152. {
  1153. struct ttm_resource_manager *man = ttm_manager_type(&dev_priv->bdev, TTM_PL_VRAM);
  1154. if (!ttm_resource_manager_used(man)) {
  1155. vmw_write(dev_priv, SVGA_REG_ENABLE, SVGA_REG_ENABLE_ENABLE);
  1156. ttm_resource_manager_set_used(man, true);
  1157. }
  1158. }
  1159. /**
  1160. * vmw_svga_enable - Enable SVGA mode, FIFO and use of VRAM.
  1161. *
  1162. * @dev_priv: Pointer to device private struct.
  1163. */
  1164. void vmw_svga_enable(struct vmw_private *dev_priv)
  1165. {
  1166. __vmw_svga_enable(dev_priv);
  1167. }
  1168. /**
  1169. * __vmw_svga_disable - Disable SVGA mode and use of VRAM.
  1170. *
  1171. * @dev_priv: Pointer to device private struct.
  1172. * Needs the reservation sem to be held in exclusive mode.
  1173. * Will not empty VRAM. VRAM must be emptied by caller.
  1174. */
  1175. static void __vmw_svga_disable(struct vmw_private *dev_priv)
  1176. {
  1177. struct ttm_resource_manager *man = ttm_manager_type(&dev_priv->bdev, TTM_PL_VRAM);
  1178. if (ttm_resource_manager_used(man)) {
  1179. ttm_resource_manager_set_used(man, false);
  1180. vmw_write(dev_priv, SVGA_REG_ENABLE,
  1181. SVGA_REG_ENABLE_HIDE |
  1182. SVGA_REG_ENABLE_ENABLE);
  1183. }
  1184. }
  1185. /**
  1186. * vmw_svga_disable - Disable SVGA_MODE, and use of VRAM. Keep the fifo
  1187. * running.
  1188. *
  1189. * @dev_priv: Pointer to device private struct.
  1190. * Will empty VRAM.
  1191. */
  1192. void vmw_svga_disable(struct vmw_private *dev_priv)
  1193. {
  1194. struct ttm_resource_manager *man = ttm_manager_type(&dev_priv->bdev, TTM_PL_VRAM);
  1195. /*
  1196. * Disabling SVGA will turn off device modesetting capabilities, so
  1197. * notify KMS about that so that it doesn't cache atomic state that
  1198. * isn't valid anymore, for example crtcs turned on.
  1199. * Strictly we'd want to do this under the SVGA lock (or an SVGA mutex),
  1200. * but vmw_kms_lost_device() takes the reservation sem and thus we'll
  1201. * end up with lock order reversal. Thus, a master may actually perform
  1202. * a new modeset just after we call vmw_kms_lost_device() and race with
  1203. * vmw_svga_disable(), but that should at worst cause atomic KMS state
  1204. * to be inconsistent with the device, causing modesetting problems.
  1205. *
  1206. */
  1207. vmw_kms_lost_device(&dev_priv->drm);
  1208. if (ttm_resource_manager_used(man)) {
  1209. if (ttm_resource_manager_evict_all(&dev_priv->bdev, man))
  1210. DRM_ERROR("Failed evicting VRAM buffers.\n");
  1211. ttm_resource_manager_set_used(man, false);
  1212. vmw_write(dev_priv, SVGA_REG_ENABLE,
  1213. SVGA_REG_ENABLE_HIDE |
  1214. SVGA_REG_ENABLE_ENABLE);
  1215. }
  1216. }
  1217. static void vmw_remove(struct pci_dev *pdev)
  1218. {
  1219. struct drm_device *dev = pci_get_drvdata(pdev);
  1220. drm_dev_unregister(dev);
  1221. vmw_driver_unload(dev);
  1222. }
  1223. static void vmw_debugfs_resource_managers_init(struct vmw_private *vmw)
  1224. {
  1225. struct drm_minor *minor = vmw->drm.primary;
  1226. struct dentry *root = minor->debugfs_root;
  1227. ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, TTM_PL_SYSTEM),
  1228. root, "system_ttm");
  1229. ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, TTM_PL_VRAM),
  1230. root, "vram_ttm");
  1231. if (vmw->has_gmr)
  1232. ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, VMW_PL_GMR),
  1233. root, "gmr_ttm");
  1234. if (vmw->has_mob) {
  1235. ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, VMW_PL_MOB),
  1236. root, "mob_ttm");
  1237. ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, VMW_PL_SYSTEM),
  1238. root, "system_mob_ttm");
  1239. }
  1240. }
  1241. static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val,
  1242. void *ptr)
  1243. {
  1244. struct vmw_private *dev_priv =
  1245. container_of(nb, struct vmw_private, pm_nb);
  1246. switch (val) {
  1247. case PM_HIBERNATION_PREPARE:
  1248. /*
  1249. * Take the reservation sem in write mode, which will make sure
  1250. * there are no other processes holding a buffer object
  1251. * reservation, meaning we should be able to evict all buffer
  1252. * objects if needed.
  1253. * Once user-space processes have been frozen, we can release
  1254. * the lock again.
  1255. */
  1256. dev_priv->suspend_locked = true;
  1257. break;
  1258. case PM_POST_HIBERNATION:
  1259. case PM_POST_RESTORE:
  1260. if (READ_ONCE(dev_priv->suspend_locked)) {
  1261. dev_priv->suspend_locked = false;
  1262. }
  1263. break;
  1264. default:
  1265. break;
  1266. }
  1267. return 0;
  1268. }
  1269. static int vmw_pci_suspend(struct pci_dev *pdev, pm_message_t state)
  1270. {
  1271. struct drm_device *dev = pci_get_drvdata(pdev);
  1272. struct vmw_private *dev_priv = vmw_priv(dev);
  1273. if (dev_priv->refuse_hibernation)
  1274. return -EBUSY;
  1275. pci_save_state(pdev);
  1276. pci_disable_device(pdev);
  1277. pci_set_power_state(pdev, PCI_D3hot);
  1278. return 0;
  1279. }
  1280. static int vmw_pci_resume(struct pci_dev *pdev)
  1281. {
  1282. pci_set_power_state(pdev, PCI_D0);
  1283. pci_restore_state(pdev);
  1284. return pci_enable_device(pdev);
  1285. }
  1286. static int vmw_pm_suspend(struct device *kdev)
  1287. {
  1288. struct pci_dev *pdev = to_pci_dev(kdev);
  1289. struct pm_message dummy;
  1290. dummy.event = 0;
  1291. return vmw_pci_suspend(pdev, dummy);
  1292. }
  1293. static int vmw_pm_resume(struct device *kdev)
  1294. {
  1295. struct pci_dev *pdev = to_pci_dev(kdev);
  1296. return vmw_pci_resume(pdev);
  1297. }
  1298. static int vmw_pm_freeze(struct device *kdev)
  1299. {
  1300. struct pci_dev *pdev = to_pci_dev(kdev);
  1301. struct drm_device *dev = pci_get_drvdata(pdev);
  1302. struct vmw_private *dev_priv = vmw_priv(dev);
  1303. struct ttm_operation_ctx ctx = {
  1304. .interruptible = false,
  1305. .no_wait_gpu = false
  1306. };
  1307. int ret;
  1308. /*
  1309. * No user-space processes should be running now.
  1310. */
  1311. ret = vmw_kms_suspend(&dev_priv->drm);
  1312. if (ret) {
  1313. DRM_ERROR("Failed to freeze modesetting.\n");
  1314. return ret;
  1315. }
  1316. vmw_execbuf_release_pinned_bo(dev_priv);
  1317. vmw_resource_evict_all(dev_priv);
  1318. vmw_release_device_early(dev_priv);
  1319. while (ttm_device_swapout(&dev_priv->bdev, &ctx, GFP_KERNEL) > 0);
  1320. vmw_fifo_resource_dec(dev_priv);
  1321. if (atomic_read(&dev_priv->num_fifo_resources) != 0) {
  1322. DRM_ERROR("Can't hibernate while 3D resources are active.\n");
  1323. vmw_fifo_resource_inc(dev_priv);
  1324. WARN_ON(vmw_request_device_late(dev_priv));
  1325. dev_priv->suspend_locked = false;
  1326. if (dev_priv->suspend_state)
  1327. vmw_kms_resume(dev);
  1328. return -EBUSY;
  1329. }
  1330. vmw_fence_fifo_down(dev_priv->fman);
  1331. __vmw_svga_disable(dev_priv);
  1332. vmw_release_device_late(dev_priv);
  1333. return 0;
  1334. }
  1335. static int vmw_pm_restore(struct device *kdev)
  1336. {
  1337. struct pci_dev *pdev = to_pci_dev(kdev);
  1338. struct drm_device *dev = pci_get_drvdata(pdev);
  1339. struct vmw_private *dev_priv = vmw_priv(dev);
  1340. int ret;
  1341. vmw_detect_version(dev_priv);
  1342. vmw_fifo_resource_inc(dev_priv);
  1343. ret = vmw_request_device(dev_priv);
  1344. if (ret)
  1345. return ret;
  1346. __vmw_svga_enable(dev_priv);
  1347. vmw_fence_fifo_up(dev_priv->fman);
  1348. dev_priv->suspend_locked = false;
  1349. if (dev_priv->suspend_state)
  1350. vmw_kms_resume(&dev_priv->drm);
  1351. return 0;
  1352. }
  1353. static const struct dev_pm_ops vmw_pm_ops = {
  1354. .freeze = vmw_pm_freeze,
  1355. .thaw = vmw_pm_restore,
  1356. .restore = vmw_pm_restore,
  1357. .suspend = vmw_pm_suspend,
  1358. .resume = vmw_pm_resume,
  1359. };
  1360. static const struct file_operations vmwgfx_driver_fops = {
  1361. .owner = THIS_MODULE,
  1362. .open = drm_open,
  1363. .release = drm_release,
  1364. .unlocked_ioctl = vmw_unlocked_ioctl,
  1365. .mmap = drm_gem_mmap,
  1366. .poll = drm_poll,
  1367. .read = drm_read,
  1368. #if defined(CONFIG_COMPAT)
  1369. .compat_ioctl = vmw_compat_ioctl,
  1370. #endif
  1371. .llseek = noop_llseek,
  1372. .fop_flags = FOP_UNSIGNED_OFFSET,
  1373. };
  1374. static const struct drm_driver driver = {
  1375. .driver_features =
  1376. DRIVER_MODESET | DRIVER_RENDER | DRIVER_ATOMIC | DRIVER_GEM | DRIVER_CURSOR_HOTSPOT,
  1377. .ioctls = vmw_ioctls,
  1378. .num_ioctls = ARRAY_SIZE(vmw_ioctls),
  1379. .master_set = vmw_master_set,
  1380. .master_drop = vmw_master_drop,
  1381. .open = vmw_driver_open,
  1382. .postclose = vmw_postclose,
  1383. .dumb_create = vmw_dumb_create,
  1384. .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
  1385. .prime_fd_to_handle = vmw_prime_fd_to_handle,
  1386. .prime_handle_to_fd = vmw_prime_handle_to_fd,
  1387. .gem_prime_import_sg_table = vmw_prime_import_sg_table,
  1388. DRM_FBDEV_TTM_DRIVER_OPS,
  1389. .fops = &vmwgfx_driver_fops,
  1390. .name = VMWGFX_DRIVER_NAME,
  1391. .desc = VMWGFX_DRIVER_DESC,
  1392. .major = VMWGFX_DRIVER_MAJOR,
  1393. .minor = VMWGFX_DRIVER_MINOR,
  1394. .patchlevel = VMWGFX_DRIVER_PATCHLEVEL
  1395. };
  1396. static struct pci_driver vmw_pci_driver = {
  1397. .name = VMWGFX_DRIVER_NAME,
  1398. .id_table = vmw_pci_id_list,
  1399. .probe = vmw_probe,
  1400. .remove = vmw_remove,
  1401. .driver = {
  1402. .pm = &vmw_pm_ops
  1403. }
  1404. };
  1405. static int vmw_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
  1406. {
  1407. struct vmw_private *vmw;
  1408. int ret;
  1409. ret = aperture_remove_conflicting_pci_devices(pdev, driver.name);
  1410. if (ret)
  1411. goto out_error;
  1412. ret = pcim_enable_device(pdev);
  1413. if (ret)
  1414. goto out_error;
  1415. vmw = devm_drm_dev_alloc(&pdev->dev, &driver,
  1416. struct vmw_private, drm);
  1417. if (IS_ERR(vmw)) {
  1418. ret = PTR_ERR(vmw);
  1419. goto out_error;
  1420. }
  1421. pci_set_drvdata(pdev, &vmw->drm);
  1422. ret = vmw_driver_load(vmw, ent->device);
  1423. if (ret)
  1424. goto out_error;
  1425. ret = drm_dev_register(&vmw->drm, 0);
  1426. if (ret)
  1427. goto out_unload;
  1428. vmw_fifo_resource_inc(vmw);
  1429. vmw_svga_enable(vmw);
  1430. drm_client_setup(&vmw->drm, NULL);
  1431. vmw_debugfs_gem_init(vmw);
  1432. vmw_debugfs_resource_managers_init(vmw);
  1433. return 0;
  1434. out_unload:
  1435. vmw_driver_unload(&vmw->drm);
  1436. out_error:
  1437. return ret;
  1438. }
  1439. drm_module_pci_driver(vmw_pci_driver);
  1440. MODULE_AUTHOR("VMware Inc. and others");
  1441. MODULE_DESCRIPTION("Standalone drm driver for the VMware SVGA device");
  1442. MODULE_LICENSE("GPL and additional rights");
  1443. MODULE_VERSION(__stringify(VMWGFX_DRIVER_MAJOR) "."
  1444. __stringify(VMWGFX_DRIVER_MINOR) "."
  1445. __stringify(VMWGFX_DRIVER_PATCHLEVEL) "."
  1446. "0");