intel_ringbuffer.c 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920
  1. /*
  2. * Copyright © 2008-2010 Intel Corporation
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a
  5. * copy of this software and associated documentation files (the "Software"),
  6. * to deal in the Software without restriction, including without limitation
  7. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. * and/or sell copies of the Software, and to permit persons to whom the
  9. * Software is furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice (including the next
  12. * paragraph) shall be included in all copies or substantial portions of the
  13. * Software.
  14. *
  15. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  18. * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20. * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  21. * IN THE SOFTWARE.
  22. *
  23. * Authors:
  24. * Eric Anholt <eric@anholt.net>
  25. * Zou Nan hai <nanhai.zou@intel.com>
  26. * Xiang Hai hao<haihao.xiang@intel.com>
  27. *
  28. */
  29. #include <drm/drmP.h>
  30. #include "i915_drv.h"
  31. #include <drm/i915_drm.h>
  32. #include "i915_trace.h"
  33. #include "intel_drv.h"
  34. /*
  35. * 965+ support PIPE_CONTROL commands, which provide finer grained control
  36. * over cache flushing.
  37. */
  38. struct pipe_control {
  39. struct drm_i915_gem_object *obj;
  40. volatile u32 *cpu_page;
  41. u32 gtt_offset;
  42. };
  43. static inline int ring_space(struct intel_ring_buffer *ring)
  44. {
  45. int space = (ring->head & HEAD_ADDR) - (ring->tail + I915_RING_FREE_SPACE);
  46. if (space < 0)
  47. space += ring->size;
  48. return space;
  49. }
  50. static int
  51. gen2_render_ring_flush(struct intel_ring_buffer *ring,
  52. u32 invalidate_domains,
  53. u32 flush_domains)
  54. {
  55. u32 cmd;
  56. int ret;
  57. cmd = MI_FLUSH;
  58. if (((invalidate_domains|flush_domains) & I915_GEM_DOMAIN_RENDER) == 0)
  59. cmd |= MI_NO_WRITE_FLUSH;
  60. if (invalidate_domains & I915_GEM_DOMAIN_SAMPLER)
  61. cmd |= MI_READ_FLUSH;
  62. ret = intel_ring_begin(ring, 2);
  63. if (ret)
  64. return ret;
  65. intel_ring_emit(ring, cmd);
  66. intel_ring_emit(ring, MI_NOOP);
  67. intel_ring_advance(ring);
  68. return 0;
  69. }
  70. static int
  71. gen4_render_ring_flush(struct intel_ring_buffer *ring,
  72. u32 invalidate_domains,
  73. u32 flush_domains)
  74. {
  75. struct drm_device *dev = ring->dev;
  76. u32 cmd;
  77. int ret;
  78. /*
  79. * read/write caches:
  80. *
  81. * I915_GEM_DOMAIN_RENDER is always invalidated, but is
  82. * only flushed if MI_NO_WRITE_FLUSH is unset. On 965, it is
  83. * also flushed at 2d versus 3d pipeline switches.
  84. *
  85. * read-only caches:
  86. *
  87. * I915_GEM_DOMAIN_SAMPLER is flushed on pre-965 if
  88. * MI_READ_FLUSH is set, and is always flushed on 965.
  89. *
  90. * I915_GEM_DOMAIN_COMMAND may not exist?
  91. *
  92. * I915_GEM_DOMAIN_INSTRUCTION, which exists on 965, is
  93. * invalidated when MI_EXE_FLUSH is set.
  94. *
  95. * I915_GEM_DOMAIN_VERTEX, which exists on 965, is
  96. * invalidated with every MI_FLUSH.
  97. *
  98. * TLBs:
  99. *
  100. * On 965, TLBs associated with I915_GEM_DOMAIN_COMMAND
  101. * and I915_GEM_DOMAIN_CPU in are invalidated at PTE write and
  102. * I915_GEM_DOMAIN_RENDER and I915_GEM_DOMAIN_SAMPLER
  103. * are flushed at any MI_FLUSH.
  104. */
  105. cmd = MI_FLUSH | MI_NO_WRITE_FLUSH;
  106. if ((invalidate_domains|flush_domains) & I915_GEM_DOMAIN_RENDER)
  107. cmd &= ~MI_NO_WRITE_FLUSH;
  108. if (invalidate_domains & I915_GEM_DOMAIN_INSTRUCTION)
  109. cmd |= MI_EXE_FLUSH;
  110. if (invalidate_domains & I915_GEM_DOMAIN_COMMAND &&
  111. (IS_G4X(dev) || IS_GEN5(dev)))
  112. cmd |= MI_INVALIDATE_ISP;
  113. ret = intel_ring_begin(ring, 2);
  114. if (ret)
  115. return ret;
  116. intel_ring_emit(ring, cmd);
  117. intel_ring_emit(ring, MI_NOOP);
  118. intel_ring_advance(ring);
  119. return 0;
  120. }
  121. /**
  122. * Emits a PIPE_CONTROL with a non-zero post-sync operation, for
  123. * implementing two workarounds on gen6. From section 1.4.7.1
  124. * "PIPE_CONTROL" of the Sandy Bridge PRM volume 2 part 1:
  125. *
  126. * [DevSNB-C+{W/A}] Before any depth stall flush (including those
  127. * produced by non-pipelined state commands), software needs to first
  128. * send a PIPE_CONTROL with no bits set except Post-Sync Operation !=
  129. * 0.
  130. *
  131. * [Dev-SNB{W/A}]: Before a PIPE_CONTROL with Write Cache Flush Enable
  132. * =1, a PIPE_CONTROL with any non-zero post-sync-op is required.
  133. *
  134. * And the workaround for these two requires this workaround first:
  135. *
  136. * [Dev-SNB{W/A}]: Pipe-control with CS-stall bit set must be sent
  137. * BEFORE the pipe-control with a post-sync op and no write-cache
  138. * flushes.
  139. *
  140. * And this last workaround is tricky because of the requirements on
  141. * that bit. From section 1.4.7.2.3 "Stall" of the Sandy Bridge PRM
  142. * volume 2 part 1:
  143. *
  144. * "1 of the following must also be set:
  145. * - Render Target Cache Flush Enable ([12] of DW1)
  146. * - Depth Cache Flush Enable ([0] of DW1)
  147. * - Stall at Pixel Scoreboard ([1] of DW1)
  148. * - Depth Stall ([13] of DW1)
  149. * - Post-Sync Operation ([13] of DW1)
  150. * - Notify Enable ([8] of DW1)"
  151. *
  152. * The cache flushes require the workaround flush that triggered this
  153. * one, so we can't use it. Depth stall would trigger the same.
  154. * Post-sync nonzero is what triggered this second workaround, so we
  155. * can't use that one either. Notify enable is IRQs, which aren't
  156. * really our business. That leaves only stall at scoreboard.
  157. */
  158. static int
  159. intel_emit_post_sync_nonzero_flush(struct intel_ring_buffer *ring)
  160. {
  161. struct pipe_control *pc = ring->private;
  162. u32 scratch_addr = pc->gtt_offset + 128;
  163. int ret;
  164. ret = intel_ring_begin(ring, 6);
  165. if (ret)
  166. return ret;
  167. intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5));
  168. intel_ring_emit(ring, PIPE_CONTROL_CS_STALL |
  169. PIPE_CONTROL_STALL_AT_SCOREBOARD);
  170. intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); /* address */
  171. intel_ring_emit(ring, 0); /* low dword */
  172. intel_ring_emit(ring, 0); /* high dword */
  173. intel_ring_emit(ring, MI_NOOP);
  174. intel_ring_advance(ring);
  175. ret = intel_ring_begin(ring, 6);
  176. if (ret)
  177. return ret;
  178. intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5));
  179. intel_ring_emit(ring, PIPE_CONTROL_QW_WRITE);
  180. intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); /* address */
  181. intel_ring_emit(ring, 0);
  182. intel_ring_emit(ring, 0);
  183. intel_ring_emit(ring, MI_NOOP);
  184. intel_ring_advance(ring);
  185. return 0;
  186. }
  187. static int
  188. gen6_render_ring_flush(struct intel_ring_buffer *ring,
  189. u32 invalidate_domains, u32 flush_domains)
  190. {
  191. u32 flags = 0;
  192. struct pipe_control *pc = ring->private;
  193. u32 scratch_addr = pc->gtt_offset + 128;
  194. int ret;
  195. /* Force SNB workarounds for PIPE_CONTROL flushes */
  196. ret = intel_emit_post_sync_nonzero_flush(ring);
  197. if (ret)
  198. return ret;
  199. /* Just flush everything. Experiments have shown that reducing the
  200. * number of bits based on the write domains has little performance
  201. * impact.
  202. */
  203. if (flush_domains) {
  204. flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
  205. flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
  206. /*
  207. * Ensure that any following seqno writes only happen
  208. * when the render cache is indeed flushed.
  209. */
  210. flags |= PIPE_CONTROL_CS_STALL;
  211. }
  212. if (invalidate_domains) {
  213. flags |= PIPE_CONTROL_TLB_INVALIDATE;
  214. flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
  215. flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
  216. flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
  217. flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
  218. flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
  219. /*
  220. * TLB invalidate requires a post-sync write.
  221. */
  222. flags |= PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_CS_STALL;
  223. }
  224. ret = intel_ring_begin(ring, 4);
  225. if (ret)
  226. return ret;
  227. intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
  228. intel_ring_emit(ring, flags);
  229. intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT);
  230. intel_ring_emit(ring, 0);
  231. intel_ring_advance(ring);
  232. return 0;
  233. }
  234. static int
  235. gen7_render_ring_cs_stall_wa(struct intel_ring_buffer *ring)
  236. {
  237. int ret;
  238. ret = intel_ring_begin(ring, 4);
  239. if (ret)
  240. return ret;
  241. intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
  242. intel_ring_emit(ring, PIPE_CONTROL_CS_STALL |
  243. PIPE_CONTROL_STALL_AT_SCOREBOARD);
  244. intel_ring_emit(ring, 0);
  245. intel_ring_emit(ring, 0);
  246. intel_ring_advance(ring);
  247. return 0;
  248. }
  249. static int
  250. gen7_render_ring_flush(struct intel_ring_buffer *ring,
  251. u32 invalidate_domains, u32 flush_domains)
  252. {
  253. u32 flags = 0;
  254. struct pipe_control *pc = ring->private;
  255. u32 scratch_addr = pc->gtt_offset + 128;
  256. int ret;
  257. /*
  258. * Ensure that any following seqno writes only happen when the render
  259. * cache is indeed flushed.
  260. *
  261. * Workaround: 4th PIPE_CONTROL command (except the ones with only
  262. * read-cache invalidate bits set) must have the CS_STALL bit set. We
  263. * don't try to be clever and just set it unconditionally.
  264. */
  265. flags |= PIPE_CONTROL_CS_STALL;
  266. /* Just flush everything. Experiments have shown that reducing the
  267. * number of bits based on the write domains has little performance
  268. * impact.
  269. */
  270. if (flush_domains) {
  271. flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
  272. flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
  273. }
  274. if (invalidate_domains) {
  275. flags |= PIPE_CONTROL_TLB_INVALIDATE;
  276. flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
  277. flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
  278. flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
  279. flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
  280. flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
  281. /*
  282. * TLB invalidate requires a post-sync write.
  283. */
  284. flags |= PIPE_CONTROL_QW_WRITE;
  285. flags |= PIPE_CONTROL_GLOBAL_GTT_IVB;
  286. /* Workaround: we must issue a pipe_control with CS-stall bit
  287. * set before a pipe_control command that has the state cache
  288. * invalidate bit set. */
  289. gen7_render_ring_cs_stall_wa(ring);
  290. }
  291. ret = intel_ring_begin(ring, 4);
  292. if (ret)
  293. return ret;
  294. intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
  295. intel_ring_emit(ring, flags);
  296. intel_ring_emit(ring, scratch_addr);
  297. intel_ring_emit(ring, 0);
  298. intel_ring_advance(ring);
  299. return 0;
  300. }
  301. static void ring_write_tail(struct intel_ring_buffer *ring,
  302. u32 value)
  303. {
  304. drm_i915_private_t *dev_priv = ring->dev->dev_private;
  305. I915_WRITE_TAIL(ring, value);
  306. }
  307. u32 intel_ring_get_active_head(struct intel_ring_buffer *ring)
  308. {
  309. drm_i915_private_t *dev_priv = ring->dev->dev_private;
  310. u32 acthd_reg = INTEL_INFO(ring->dev)->gen >= 4 ?
  311. RING_ACTHD(ring->mmio_base) : ACTHD;
  312. return I915_READ(acthd_reg);
  313. }
  314. static int init_ring_common(struct intel_ring_buffer *ring)
  315. {
  316. struct drm_device *dev = ring->dev;
  317. drm_i915_private_t *dev_priv = dev->dev_private;
  318. struct drm_i915_gem_object *obj = ring->obj;
  319. int ret = 0;
  320. u32 head;
  321. if (HAS_FORCE_WAKE(dev))
  322. gen6_gt_force_wake_get(dev_priv);
  323. /* Stop the ring if it's running. */
  324. I915_WRITE_CTL(ring, 0);
  325. I915_WRITE_HEAD(ring, 0);
  326. ring->write_tail(ring, 0);
  327. head = I915_READ_HEAD(ring) & HEAD_ADDR;
  328. /* G45 ring initialization fails to reset head to zero */
  329. if (head != 0) {
  330. DRM_DEBUG_KMS("%s head not reset to zero "
  331. "ctl %08x head %08x tail %08x start %08x\n",
  332. ring->name,
  333. I915_READ_CTL(ring),
  334. I915_READ_HEAD(ring),
  335. I915_READ_TAIL(ring),
  336. I915_READ_START(ring));
  337. I915_WRITE_HEAD(ring, 0);
  338. if (I915_READ_HEAD(ring) & HEAD_ADDR) {
  339. DRM_ERROR("failed to set %s head to zero "
  340. "ctl %08x head %08x tail %08x start %08x\n",
  341. ring->name,
  342. I915_READ_CTL(ring),
  343. I915_READ_HEAD(ring),
  344. I915_READ_TAIL(ring),
  345. I915_READ_START(ring));
  346. }
  347. }
  348. /* Initialize the ring. This must happen _after_ we've cleared the ring
  349. * registers with the above sequence (the readback of the HEAD registers
  350. * also enforces ordering), otherwise the hw might lose the new ring
  351. * register values. */
  352. I915_WRITE_START(ring, obj->gtt_offset);
  353. I915_WRITE_CTL(ring,
  354. ((ring->size - PAGE_SIZE) & RING_NR_PAGES)
  355. | RING_VALID);
  356. /* If the head is still not zero, the ring is dead */
  357. if (wait_for((I915_READ_CTL(ring) & RING_VALID) != 0 &&
  358. I915_READ_START(ring) == obj->gtt_offset &&
  359. (I915_READ_HEAD(ring) & HEAD_ADDR) == 0, 50)) {
  360. DRM_ERROR("%s initialization failed "
  361. "ctl %08x head %08x tail %08x start %08x\n",
  362. ring->name,
  363. I915_READ_CTL(ring),
  364. I915_READ_HEAD(ring),
  365. I915_READ_TAIL(ring),
  366. I915_READ_START(ring));
  367. ret = -EIO;
  368. goto out;
  369. }
  370. if (!drm_core_check_feature(ring->dev, DRIVER_MODESET))
  371. i915_kernel_lost_context(ring->dev);
  372. else {
  373. ring->head = I915_READ_HEAD(ring);
  374. ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
  375. ring->space = ring_space(ring);
  376. ring->last_retired_head = -1;
  377. }
  378. out:
  379. if (HAS_FORCE_WAKE(dev))
  380. gen6_gt_force_wake_put(dev_priv);
  381. return ret;
  382. }
  383. static int
  384. init_pipe_control(struct intel_ring_buffer *ring)
  385. {
  386. struct pipe_control *pc;
  387. struct drm_i915_gem_object *obj;
  388. int ret;
  389. if (ring->private)
  390. return 0;
  391. pc = kmalloc(sizeof(*pc), GFP_KERNEL);
  392. if (!pc)
  393. return -ENOMEM;
  394. obj = i915_gem_alloc_object(ring->dev, 4096);
  395. if (obj == NULL) {
  396. DRM_ERROR("Failed to allocate seqno page\n");
  397. ret = -ENOMEM;
  398. goto err;
  399. }
  400. i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
  401. ret = i915_gem_object_pin(obj, 4096, true, false);
  402. if (ret)
  403. goto err_unref;
  404. pc->gtt_offset = obj->gtt_offset;
  405. pc->cpu_page = kmap(sg_page(obj->pages->sgl));
  406. if (pc->cpu_page == NULL)
  407. goto err_unpin;
  408. DRM_DEBUG_DRIVER("%s pipe control offset: 0x%08x\n",
  409. ring->name, pc->gtt_offset);
  410. pc->obj = obj;
  411. ring->private = pc;
  412. return 0;
  413. err_unpin:
  414. i915_gem_object_unpin(obj);
  415. err_unref:
  416. drm_gem_object_unreference(&obj->base);
  417. err:
  418. kfree(pc);
  419. return ret;
  420. }
  421. static void
  422. cleanup_pipe_control(struct intel_ring_buffer *ring)
  423. {
  424. struct pipe_control *pc = ring->private;
  425. struct drm_i915_gem_object *obj;
  426. if (!ring->private)
  427. return;
  428. obj = pc->obj;
  429. kunmap(sg_page(obj->pages->sgl));
  430. i915_gem_object_unpin(obj);
  431. drm_gem_object_unreference(&obj->base);
  432. kfree(pc);
  433. ring->private = NULL;
  434. }
  435. static int init_render_ring(struct intel_ring_buffer *ring)
  436. {
  437. struct drm_device *dev = ring->dev;
  438. struct drm_i915_private *dev_priv = dev->dev_private;
  439. int ret = init_ring_common(ring);
  440. if (INTEL_INFO(dev)->gen > 3)
  441. I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(VS_TIMER_DISPATCH));
  442. /* We need to disable the AsyncFlip performance optimisations in order
  443. * to use MI_WAIT_FOR_EVENT within the CS. It should already be
  444. * programmed to '1' on all products.
  445. */
  446. if (INTEL_INFO(dev)->gen >= 6)
  447. I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(ASYNC_FLIP_PERF_DISABLE));
  448. /* Required for the hardware to program scanline values for waiting */
  449. if (INTEL_INFO(dev)->gen == 6)
  450. I915_WRITE(GFX_MODE,
  451. _MASKED_BIT_ENABLE(GFX_TLB_INVALIDATE_ALWAYS));
  452. if (IS_GEN7(dev))
  453. I915_WRITE(GFX_MODE_GEN7,
  454. _MASKED_BIT_DISABLE(GFX_TLB_INVALIDATE_ALWAYS) |
  455. _MASKED_BIT_ENABLE(GFX_REPLAY_MODE));
  456. if (INTEL_INFO(dev)->gen >= 5) {
  457. ret = init_pipe_control(ring);
  458. if (ret)
  459. return ret;
  460. }
  461. if (IS_GEN6(dev)) {
  462. /* From the Sandybridge PRM, volume 1 part 3, page 24:
  463. * "If this bit is set, STCunit will have LRA as replacement
  464. * policy. [...] This bit must be reset. LRA replacement
  465. * policy is not supported."
  466. */
  467. I915_WRITE(CACHE_MODE_0,
  468. _MASKED_BIT_DISABLE(CM0_STC_EVICT_DISABLE_LRA_SNB));
  469. /* This is not explicitly set for GEN6, so read the register.
  470. * see intel_ring_mi_set_context() for why we care.
  471. * TODO: consider explicitly setting the bit for GEN5
  472. */
  473. ring->itlb_before_ctx_switch =
  474. !!(I915_READ(GFX_MODE) & GFX_TLB_INVALIDATE_ALWAYS);
  475. }
  476. if (INTEL_INFO(dev)->gen >= 6)
  477. I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_FORCE_ORDERING));
  478. if (HAS_L3_GPU_CACHE(dev))
  479. I915_WRITE_IMR(ring, ~GEN6_RENDER_L3_PARITY_ERROR);
  480. return ret;
  481. }
  482. static void render_ring_cleanup(struct intel_ring_buffer *ring)
  483. {
  484. struct drm_device *dev = ring->dev;
  485. if (!ring->private)
  486. return;
  487. if (HAS_BROKEN_CS_TLB(dev))
  488. drm_gem_object_unreference(to_gem_object(ring->private));
  489. cleanup_pipe_control(ring);
  490. }
  491. static void
  492. update_mboxes(struct intel_ring_buffer *ring,
  493. u32 mmio_offset)
  494. {
  495. intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
  496. intel_ring_emit(ring, mmio_offset);
  497. intel_ring_emit(ring, ring->outstanding_lazy_request);
  498. }
  499. /**
  500. * gen6_add_request - Update the semaphore mailbox registers
  501. *
  502. * @ring - ring that is adding a request
  503. * @seqno - return seqno stuck into the ring
  504. *
  505. * Update the mailbox registers in the *other* rings with the current seqno.
  506. * This acts like a signal in the canonical semaphore.
  507. */
  508. static int
  509. gen6_add_request(struct intel_ring_buffer *ring)
  510. {
  511. u32 mbox1_reg;
  512. u32 mbox2_reg;
  513. int ret;
  514. ret = intel_ring_begin(ring, 10);
  515. if (ret)
  516. return ret;
  517. mbox1_reg = ring->signal_mbox[0];
  518. mbox2_reg = ring->signal_mbox[1];
  519. update_mboxes(ring, mbox1_reg);
  520. update_mboxes(ring, mbox2_reg);
  521. intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
  522. intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
  523. intel_ring_emit(ring, ring->outstanding_lazy_request);
  524. intel_ring_emit(ring, MI_USER_INTERRUPT);
  525. intel_ring_advance(ring);
  526. return 0;
  527. }
  528. static inline bool i915_gem_has_seqno_wrapped(struct drm_device *dev,
  529. u32 seqno)
  530. {
  531. struct drm_i915_private *dev_priv = dev->dev_private;
  532. return dev_priv->last_seqno < seqno;
  533. }
  534. /**
  535. * intel_ring_sync - sync the waiter to the signaller on seqno
  536. *
  537. * @waiter - ring that is waiting
  538. * @signaller - ring which has, or will signal
  539. * @seqno - seqno which the waiter will block on
  540. */
  541. static int
  542. gen6_ring_sync(struct intel_ring_buffer *waiter,
  543. struct intel_ring_buffer *signaller,
  544. u32 seqno)
  545. {
  546. int ret;
  547. u32 dw1 = MI_SEMAPHORE_MBOX |
  548. MI_SEMAPHORE_COMPARE |
  549. MI_SEMAPHORE_REGISTER;
  550. /* Throughout all of the GEM code, seqno passed implies our current
  551. * seqno is >= the last seqno executed. However for hardware the
  552. * comparison is strictly greater than.
  553. */
  554. seqno -= 1;
  555. WARN_ON(signaller->semaphore_register[waiter->id] ==
  556. MI_SEMAPHORE_SYNC_INVALID);
  557. ret = intel_ring_begin(waiter, 4);
  558. if (ret)
  559. return ret;
  560. /* If seqno wrap happened, omit the wait with no-ops */
  561. if (likely(!i915_gem_has_seqno_wrapped(waiter->dev, seqno))) {
  562. intel_ring_emit(waiter,
  563. dw1 |
  564. signaller->semaphore_register[waiter->id]);
  565. intel_ring_emit(waiter, seqno);
  566. intel_ring_emit(waiter, 0);
  567. intel_ring_emit(waiter, MI_NOOP);
  568. } else {
  569. intel_ring_emit(waiter, MI_NOOP);
  570. intel_ring_emit(waiter, MI_NOOP);
  571. intel_ring_emit(waiter, MI_NOOP);
  572. intel_ring_emit(waiter, MI_NOOP);
  573. }
  574. intel_ring_advance(waiter);
  575. return 0;
  576. }
  577. #define PIPE_CONTROL_FLUSH(ring__, addr__) \
  578. do { \
  579. intel_ring_emit(ring__, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE | \
  580. PIPE_CONTROL_DEPTH_STALL); \
  581. intel_ring_emit(ring__, (addr__) | PIPE_CONTROL_GLOBAL_GTT); \
  582. intel_ring_emit(ring__, 0); \
  583. intel_ring_emit(ring__, 0); \
  584. } while (0)
  585. static int
  586. pc_render_add_request(struct intel_ring_buffer *ring)
  587. {
  588. struct pipe_control *pc = ring->private;
  589. u32 scratch_addr = pc->gtt_offset + 128;
  590. int ret;
  591. /* For Ironlake, MI_USER_INTERRUPT was deprecated and apparently
  592. * incoherent with writes to memory, i.e. completely fubar,
  593. * so we need to use PIPE_NOTIFY instead.
  594. *
  595. * However, we also need to workaround the qword write
  596. * incoherence by flushing the 6 PIPE_NOTIFY buffers out to
  597. * memory before requesting an interrupt.
  598. */
  599. ret = intel_ring_begin(ring, 32);
  600. if (ret)
  601. return ret;
  602. intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
  603. PIPE_CONTROL_WRITE_FLUSH |
  604. PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE);
  605. intel_ring_emit(ring, pc->gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
  606. intel_ring_emit(ring, ring->outstanding_lazy_request);
  607. intel_ring_emit(ring, 0);
  608. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  609. scratch_addr += 128; /* write to separate cachelines */
  610. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  611. scratch_addr += 128;
  612. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  613. scratch_addr += 128;
  614. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  615. scratch_addr += 128;
  616. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  617. scratch_addr += 128;
  618. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  619. intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
  620. PIPE_CONTROL_WRITE_FLUSH |
  621. PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
  622. PIPE_CONTROL_NOTIFY);
  623. intel_ring_emit(ring, pc->gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
  624. intel_ring_emit(ring, ring->outstanding_lazy_request);
  625. intel_ring_emit(ring, 0);
  626. intel_ring_advance(ring);
  627. return 0;
  628. }
  629. static u32
  630. gen6_ring_get_seqno(struct intel_ring_buffer *ring, bool lazy_coherency)
  631. {
  632. /* Workaround to force correct ordering between irq and seqno writes on
  633. * ivb (and maybe also on snb) by reading from a CS register (like
  634. * ACTHD) before reading the status page. */
  635. if (!lazy_coherency)
  636. intel_ring_get_active_head(ring);
  637. return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
  638. }
  639. static u32
  640. ring_get_seqno(struct intel_ring_buffer *ring, bool lazy_coherency)
  641. {
  642. return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
  643. }
  644. static void
  645. ring_set_seqno(struct intel_ring_buffer *ring, u32 seqno)
  646. {
  647. intel_write_status_page(ring, I915_GEM_HWS_INDEX, seqno);
  648. }
  649. static u32
  650. pc_render_get_seqno(struct intel_ring_buffer *ring, bool lazy_coherency)
  651. {
  652. struct pipe_control *pc = ring->private;
  653. return pc->cpu_page[0];
  654. }
  655. static void
  656. pc_render_set_seqno(struct intel_ring_buffer *ring, u32 seqno)
  657. {
  658. struct pipe_control *pc = ring->private;
  659. pc->cpu_page[0] = seqno;
  660. }
  661. static bool
  662. gen5_ring_get_irq(struct intel_ring_buffer *ring)
  663. {
  664. struct drm_device *dev = ring->dev;
  665. drm_i915_private_t *dev_priv = dev->dev_private;
  666. unsigned long flags;
  667. if (!dev->irq_enabled)
  668. return false;
  669. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  670. if (ring->irq_refcount++ == 0) {
  671. dev_priv->gt_irq_mask &= ~ring->irq_enable_mask;
  672. I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
  673. POSTING_READ(GTIMR);
  674. }
  675. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  676. return true;
  677. }
  678. static void
  679. gen5_ring_put_irq(struct intel_ring_buffer *ring)
  680. {
  681. struct drm_device *dev = ring->dev;
  682. drm_i915_private_t *dev_priv = dev->dev_private;
  683. unsigned long flags;
  684. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  685. if (--ring->irq_refcount == 0) {
  686. dev_priv->gt_irq_mask |= ring->irq_enable_mask;
  687. I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
  688. POSTING_READ(GTIMR);
  689. }
  690. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  691. }
  692. static bool
  693. i9xx_ring_get_irq(struct intel_ring_buffer *ring)
  694. {
  695. struct drm_device *dev = ring->dev;
  696. drm_i915_private_t *dev_priv = dev->dev_private;
  697. unsigned long flags;
  698. if (!dev->irq_enabled)
  699. return false;
  700. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  701. if (ring->irq_refcount++ == 0) {
  702. dev_priv->irq_mask &= ~ring->irq_enable_mask;
  703. I915_WRITE(IMR, dev_priv->irq_mask);
  704. POSTING_READ(IMR);
  705. }
  706. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  707. return true;
  708. }
  709. static void
  710. i9xx_ring_put_irq(struct intel_ring_buffer *ring)
  711. {
  712. struct drm_device *dev = ring->dev;
  713. drm_i915_private_t *dev_priv = dev->dev_private;
  714. unsigned long flags;
  715. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  716. if (--ring->irq_refcount == 0) {
  717. dev_priv->irq_mask |= ring->irq_enable_mask;
  718. I915_WRITE(IMR, dev_priv->irq_mask);
  719. POSTING_READ(IMR);
  720. }
  721. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  722. }
  723. static bool
  724. i8xx_ring_get_irq(struct intel_ring_buffer *ring)
  725. {
  726. struct drm_device *dev = ring->dev;
  727. drm_i915_private_t *dev_priv = dev->dev_private;
  728. unsigned long flags;
  729. if (!dev->irq_enabled)
  730. return false;
  731. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  732. if (ring->irq_refcount++ == 0) {
  733. dev_priv->irq_mask &= ~ring->irq_enable_mask;
  734. I915_WRITE16(IMR, dev_priv->irq_mask);
  735. POSTING_READ16(IMR);
  736. }
  737. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  738. return true;
  739. }
  740. static void
  741. i8xx_ring_put_irq(struct intel_ring_buffer *ring)
  742. {
  743. struct drm_device *dev = ring->dev;
  744. drm_i915_private_t *dev_priv = dev->dev_private;
  745. unsigned long flags;
  746. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  747. if (--ring->irq_refcount == 0) {
  748. dev_priv->irq_mask |= ring->irq_enable_mask;
  749. I915_WRITE16(IMR, dev_priv->irq_mask);
  750. POSTING_READ16(IMR);
  751. }
  752. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  753. }
  754. void intel_ring_setup_status_page(struct intel_ring_buffer *ring)
  755. {
  756. struct drm_device *dev = ring->dev;
  757. drm_i915_private_t *dev_priv = ring->dev->dev_private;
  758. u32 mmio = 0;
  759. /* The ring status page addresses are no longer next to the rest of
  760. * the ring registers as of gen7.
  761. */
  762. if (IS_GEN7(dev)) {
  763. switch (ring->id) {
  764. case RCS:
  765. mmio = RENDER_HWS_PGA_GEN7;
  766. break;
  767. case BCS:
  768. mmio = BLT_HWS_PGA_GEN7;
  769. break;
  770. case VCS:
  771. mmio = BSD_HWS_PGA_GEN7;
  772. break;
  773. }
  774. } else if (IS_GEN6(ring->dev)) {
  775. mmio = RING_HWS_PGA_GEN6(ring->mmio_base);
  776. } else {
  777. mmio = RING_HWS_PGA(ring->mmio_base);
  778. }
  779. I915_WRITE(mmio, (u32)ring->status_page.gfx_addr);
  780. POSTING_READ(mmio);
  781. }
  782. static int
  783. bsd_ring_flush(struct intel_ring_buffer *ring,
  784. u32 invalidate_domains,
  785. u32 flush_domains)
  786. {
  787. int ret;
  788. ret = intel_ring_begin(ring, 2);
  789. if (ret)
  790. return ret;
  791. intel_ring_emit(ring, MI_FLUSH);
  792. intel_ring_emit(ring, MI_NOOP);
  793. intel_ring_advance(ring);
  794. return 0;
  795. }
  796. static int
  797. i9xx_add_request(struct intel_ring_buffer *ring)
  798. {
  799. int ret;
  800. ret = intel_ring_begin(ring, 4);
  801. if (ret)
  802. return ret;
  803. intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
  804. intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
  805. intel_ring_emit(ring, ring->outstanding_lazy_request);
  806. intel_ring_emit(ring, MI_USER_INTERRUPT);
  807. intel_ring_advance(ring);
  808. return 0;
  809. }
  810. static bool
  811. gen6_ring_get_irq(struct intel_ring_buffer *ring)
  812. {
  813. struct drm_device *dev = ring->dev;
  814. drm_i915_private_t *dev_priv = dev->dev_private;
  815. unsigned long flags;
  816. if (!dev->irq_enabled)
  817. return false;
  818. /* It looks like we need to prevent the gt from suspending while waiting
  819. * for an notifiy irq, otherwise irqs seem to get lost on at least the
  820. * blt/bsd rings on ivb. */
  821. gen6_gt_force_wake_get(dev_priv);
  822. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  823. if (ring->irq_refcount++ == 0) {
  824. if (HAS_L3_GPU_CACHE(dev) && ring->id == RCS)
  825. I915_WRITE_IMR(ring, ~(ring->irq_enable_mask |
  826. GEN6_RENDER_L3_PARITY_ERROR));
  827. else
  828. I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
  829. dev_priv->gt_irq_mask &= ~ring->irq_enable_mask;
  830. I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
  831. POSTING_READ(GTIMR);
  832. }
  833. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  834. return true;
  835. }
  836. static void
  837. gen6_ring_put_irq(struct intel_ring_buffer *ring)
  838. {
  839. struct drm_device *dev = ring->dev;
  840. drm_i915_private_t *dev_priv = dev->dev_private;
  841. unsigned long flags;
  842. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  843. if (--ring->irq_refcount == 0) {
  844. if (HAS_L3_GPU_CACHE(dev) && ring->id == RCS)
  845. I915_WRITE_IMR(ring, ~GEN6_RENDER_L3_PARITY_ERROR);
  846. else
  847. I915_WRITE_IMR(ring, ~0);
  848. dev_priv->gt_irq_mask |= ring->irq_enable_mask;
  849. I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
  850. POSTING_READ(GTIMR);
  851. }
  852. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  853. gen6_gt_force_wake_put(dev_priv);
  854. }
  855. static int
  856. i965_dispatch_execbuffer(struct intel_ring_buffer *ring,
  857. u32 offset, u32 length,
  858. unsigned flags)
  859. {
  860. int ret;
  861. ret = intel_ring_begin(ring, 2);
  862. if (ret)
  863. return ret;
  864. intel_ring_emit(ring,
  865. MI_BATCH_BUFFER_START |
  866. MI_BATCH_GTT |
  867. (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_I965));
  868. intel_ring_emit(ring, offset);
  869. intel_ring_advance(ring);
  870. return 0;
  871. }
  872. /* Just userspace ABI convention to limit the wa batch bo to a resonable size */
  873. #define I830_BATCH_LIMIT (256*1024)
  874. static int
  875. i830_dispatch_execbuffer(struct intel_ring_buffer *ring,
  876. u32 offset, u32 len,
  877. unsigned flags)
  878. {
  879. int ret;
  880. if (flags & I915_DISPATCH_PINNED) {
  881. ret = intel_ring_begin(ring, 4);
  882. if (ret)
  883. return ret;
  884. intel_ring_emit(ring, MI_BATCH_BUFFER);
  885. intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
  886. intel_ring_emit(ring, offset + len - 8);
  887. intel_ring_emit(ring, MI_NOOP);
  888. intel_ring_advance(ring);
  889. } else {
  890. struct drm_i915_gem_object *obj = ring->private;
  891. u32 cs_offset = obj->gtt_offset;
  892. if (len > I830_BATCH_LIMIT)
  893. return -ENOSPC;
  894. ret = intel_ring_begin(ring, 9+3);
  895. if (ret)
  896. return ret;
  897. /* Blit the batch (which has now all relocs applied) to the stable batch
  898. * scratch bo area (so that the CS never stumbles over its tlb
  899. * invalidation bug) ... */
  900. intel_ring_emit(ring, XY_SRC_COPY_BLT_CMD |
  901. XY_SRC_COPY_BLT_WRITE_ALPHA |
  902. XY_SRC_COPY_BLT_WRITE_RGB);
  903. intel_ring_emit(ring, BLT_DEPTH_32 | BLT_ROP_GXCOPY | 4096);
  904. intel_ring_emit(ring, 0);
  905. intel_ring_emit(ring, (DIV_ROUND_UP(len, 4096) << 16) | 1024);
  906. intel_ring_emit(ring, cs_offset);
  907. intel_ring_emit(ring, 0);
  908. intel_ring_emit(ring, 4096);
  909. intel_ring_emit(ring, offset);
  910. intel_ring_emit(ring, MI_FLUSH);
  911. /* ... and execute it. */
  912. intel_ring_emit(ring, MI_BATCH_BUFFER);
  913. intel_ring_emit(ring, cs_offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
  914. intel_ring_emit(ring, cs_offset + len - 8);
  915. intel_ring_advance(ring);
  916. }
  917. return 0;
  918. }
  919. static int
  920. i915_dispatch_execbuffer(struct intel_ring_buffer *ring,
  921. u32 offset, u32 len,
  922. unsigned flags)
  923. {
  924. int ret;
  925. ret = intel_ring_begin(ring, 2);
  926. if (ret)
  927. return ret;
  928. intel_ring_emit(ring, MI_BATCH_BUFFER_START | MI_BATCH_GTT);
  929. intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
  930. intel_ring_advance(ring);
  931. return 0;
  932. }
  933. static void cleanup_status_page(struct intel_ring_buffer *ring)
  934. {
  935. struct drm_i915_gem_object *obj;
  936. obj = ring->status_page.obj;
  937. if (obj == NULL)
  938. return;
  939. kunmap(sg_page(obj->pages->sgl));
  940. i915_gem_object_unpin(obj);
  941. drm_gem_object_unreference(&obj->base);
  942. ring->status_page.obj = NULL;
  943. }
  944. static int init_status_page(struct intel_ring_buffer *ring)
  945. {
  946. struct drm_device *dev = ring->dev;
  947. struct drm_i915_gem_object *obj;
  948. int ret;
  949. obj = i915_gem_alloc_object(dev, 4096);
  950. if (obj == NULL) {
  951. DRM_ERROR("Failed to allocate status page\n");
  952. ret = -ENOMEM;
  953. goto err;
  954. }
  955. i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
  956. ret = i915_gem_object_pin(obj, 4096, true, false);
  957. if (ret != 0) {
  958. goto err_unref;
  959. }
  960. ring->status_page.gfx_addr = obj->gtt_offset;
  961. ring->status_page.page_addr = kmap(sg_page(obj->pages->sgl));
  962. if (ring->status_page.page_addr == NULL) {
  963. ret = -ENOMEM;
  964. goto err_unpin;
  965. }
  966. ring->status_page.obj = obj;
  967. memset(ring->status_page.page_addr, 0, PAGE_SIZE);
  968. intel_ring_setup_status_page(ring);
  969. DRM_DEBUG_DRIVER("%s hws offset: 0x%08x\n",
  970. ring->name, ring->status_page.gfx_addr);
  971. return 0;
  972. err_unpin:
  973. i915_gem_object_unpin(obj);
  974. err_unref:
  975. drm_gem_object_unreference(&obj->base);
  976. err:
  977. return ret;
  978. }
  979. static int init_phys_hws_pga(struct intel_ring_buffer *ring)
  980. {
  981. struct drm_i915_private *dev_priv = ring->dev->dev_private;
  982. u32 addr;
  983. if (!dev_priv->status_page_dmah) {
  984. dev_priv->status_page_dmah =
  985. drm_pci_alloc(ring->dev, PAGE_SIZE, PAGE_SIZE);
  986. if (!dev_priv->status_page_dmah)
  987. return -ENOMEM;
  988. }
  989. addr = dev_priv->status_page_dmah->busaddr;
  990. if (INTEL_INFO(ring->dev)->gen >= 4)
  991. addr |= (dev_priv->status_page_dmah->busaddr >> 28) & 0xf0;
  992. I915_WRITE(HWS_PGA, addr);
  993. ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
  994. memset(ring->status_page.page_addr, 0, PAGE_SIZE);
  995. return 0;
  996. }
  997. static int intel_init_ring_buffer(struct drm_device *dev,
  998. struct intel_ring_buffer *ring)
  999. {
  1000. struct drm_i915_gem_object *obj;
  1001. struct drm_i915_private *dev_priv = dev->dev_private;
  1002. int ret;
  1003. ring->dev = dev;
  1004. INIT_LIST_HEAD(&ring->active_list);
  1005. INIT_LIST_HEAD(&ring->request_list);
  1006. ring->size = 32 * PAGE_SIZE;
  1007. memset(ring->sync_seqno, 0, sizeof(ring->sync_seqno));
  1008. init_waitqueue_head(&ring->irq_queue);
  1009. if (I915_NEED_GFX_HWS(dev)) {
  1010. ret = init_status_page(ring);
  1011. if (ret)
  1012. return ret;
  1013. } else {
  1014. BUG_ON(ring->id != RCS);
  1015. ret = init_phys_hws_pga(ring);
  1016. if (ret)
  1017. return ret;
  1018. }
  1019. obj = NULL;
  1020. if (!HAS_LLC(dev))
  1021. obj = i915_gem_object_create_stolen(dev, ring->size);
  1022. if (obj == NULL)
  1023. obj = i915_gem_alloc_object(dev, ring->size);
  1024. if (obj == NULL) {
  1025. DRM_ERROR("Failed to allocate ringbuffer\n");
  1026. ret = -ENOMEM;
  1027. goto err_hws;
  1028. }
  1029. ring->obj = obj;
  1030. ret = i915_gem_object_pin(obj, PAGE_SIZE, true, false);
  1031. if (ret)
  1032. goto err_unref;
  1033. ret = i915_gem_object_set_to_gtt_domain(obj, true);
  1034. if (ret)
  1035. goto err_unpin;
  1036. ring->virtual_start =
  1037. ioremap_wc(dev_priv->gtt.mappable_base + obj->gtt_offset,
  1038. ring->size);
  1039. if (ring->virtual_start == NULL) {
  1040. DRM_ERROR("Failed to map ringbuffer.\n");
  1041. ret = -EINVAL;
  1042. goto err_unpin;
  1043. }
  1044. ret = ring->init(ring);
  1045. if (ret)
  1046. goto err_unmap;
  1047. /* Workaround an erratum on the i830 which causes a hang if
  1048. * the TAIL pointer points to within the last 2 cachelines
  1049. * of the buffer.
  1050. */
  1051. ring->effective_size = ring->size;
  1052. if (IS_I830(ring->dev) || IS_845G(ring->dev))
  1053. ring->effective_size -= 128;
  1054. return 0;
  1055. err_unmap:
  1056. iounmap(ring->virtual_start);
  1057. err_unpin:
  1058. i915_gem_object_unpin(obj);
  1059. err_unref:
  1060. drm_gem_object_unreference(&obj->base);
  1061. ring->obj = NULL;
  1062. err_hws:
  1063. cleanup_status_page(ring);
  1064. return ret;
  1065. }
  1066. void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring)
  1067. {
  1068. struct drm_i915_private *dev_priv;
  1069. int ret;
  1070. if (ring->obj == NULL)
  1071. return;
  1072. /* Disable the ring buffer. The ring must be idle at this point */
  1073. dev_priv = ring->dev->dev_private;
  1074. ret = intel_ring_idle(ring);
  1075. if (ret)
  1076. DRM_ERROR("failed to quiesce %s whilst cleaning up: %d\n",
  1077. ring->name, ret);
  1078. I915_WRITE_CTL(ring, 0);
  1079. iounmap(ring->virtual_start);
  1080. i915_gem_object_unpin(ring->obj);
  1081. drm_gem_object_unreference(&ring->obj->base);
  1082. ring->obj = NULL;
  1083. if (ring->cleanup)
  1084. ring->cleanup(ring);
  1085. cleanup_status_page(ring);
  1086. }
  1087. static int intel_ring_wait_seqno(struct intel_ring_buffer *ring, u32 seqno)
  1088. {
  1089. int ret;
  1090. ret = i915_wait_seqno(ring, seqno);
  1091. if (!ret)
  1092. i915_gem_retire_requests_ring(ring);
  1093. return ret;
  1094. }
  1095. static int intel_ring_wait_request(struct intel_ring_buffer *ring, int n)
  1096. {
  1097. struct drm_i915_gem_request *request;
  1098. u32 seqno = 0;
  1099. int ret;
  1100. i915_gem_retire_requests_ring(ring);
  1101. if (ring->last_retired_head != -1) {
  1102. ring->head = ring->last_retired_head;
  1103. ring->last_retired_head = -1;
  1104. ring->space = ring_space(ring);
  1105. if (ring->space >= n)
  1106. return 0;
  1107. }
  1108. list_for_each_entry(request, &ring->request_list, list) {
  1109. int space;
  1110. if (request->tail == -1)
  1111. continue;
  1112. space = request->tail - (ring->tail + I915_RING_FREE_SPACE);
  1113. if (space < 0)
  1114. space += ring->size;
  1115. if (space >= n) {
  1116. seqno = request->seqno;
  1117. break;
  1118. }
  1119. /* Consume this request in case we need more space than
  1120. * is available and so need to prevent a race between
  1121. * updating last_retired_head and direct reads of
  1122. * I915_RING_HEAD. It also provides a nice sanity check.
  1123. */
  1124. request->tail = -1;
  1125. }
  1126. if (seqno == 0)
  1127. return -ENOSPC;
  1128. ret = intel_ring_wait_seqno(ring, seqno);
  1129. if (ret)
  1130. return ret;
  1131. if (WARN_ON(ring->last_retired_head == -1))
  1132. return -ENOSPC;
  1133. ring->head = ring->last_retired_head;
  1134. ring->last_retired_head = -1;
  1135. ring->space = ring_space(ring);
  1136. if (WARN_ON(ring->space < n))
  1137. return -ENOSPC;
  1138. return 0;
  1139. }
  1140. static int ring_wait_for_space(struct intel_ring_buffer *ring, int n)
  1141. {
  1142. struct drm_device *dev = ring->dev;
  1143. struct drm_i915_private *dev_priv = dev->dev_private;
  1144. unsigned long end;
  1145. int ret;
  1146. ret = intel_ring_wait_request(ring, n);
  1147. if (ret != -ENOSPC)
  1148. return ret;
  1149. trace_i915_ring_wait_begin(ring);
  1150. /* With GEM the hangcheck timer should kick us out of the loop,
  1151. * leaving it early runs the risk of corrupting GEM state (due
  1152. * to running on almost untested codepaths). But on resume
  1153. * timers don't work yet, so prevent a complete hang in that
  1154. * case by choosing an insanely large timeout. */
  1155. end = jiffies + 60 * HZ;
  1156. do {
  1157. ring->head = I915_READ_HEAD(ring);
  1158. ring->space = ring_space(ring);
  1159. if (ring->space >= n) {
  1160. trace_i915_ring_wait_end(ring);
  1161. return 0;
  1162. }
  1163. if (dev->primary->master) {
  1164. struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
  1165. if (master_priv->sarea_priv)
  1166. master_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
  1167. }
  1168. msleep(1);
  1169. ret = i915_gem_check_wedge(&dev_priv->gpu_error,
  1170. dev_priv->mm.interruptible);
  1171. if (ret)
  1172. return ret;
  1173. } while (!time_after(jiffies, end));
  1174. trace_i915_ring_wait_end(ring);
  1175. return -EBUSY;
  1176. }
  1177. static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring)
  1178. {
  1179. uint32_t __iomem *virt;
  1180. int rem = ring->size - ring->tail;
  1181. if (ring->space < rem) {
  1182. int ret = ring_wait_for_space(ring, rem);
  1183. if (ret)
  1184. return ret;
  1185. }
  1186. virt = ring->virtual_start + ring->tail;
  1187. rem /= 4;
  1188. while (rem--)
  1189. iowrite32(MI_NOOP, virt++);
  1190. ring->tail = 0;
  1191. ring->space = ring_space(ring);
  1192. return 0;
  1193. }
  1194. int intel_ring_idle(struct intel_ring_buffer *ring)
  1195. {
  1196. u32 seqno;
  1197. int ret;
  1198. /* We need to add any requests required to flush the objects and ring */
  1199. if (ring->outstanding_lazy_request) {
  1200. ret = i915_add_request(ring, NULL, NULL);
  1201. if (ret)
  1202. return ret;
  1203. }
  1204. /* Wait upon the last request to be completed */
  1205. if (list_empty(&ring->request_list))
  1206. return 0;
  1207. seqno = list_entry(ring->request_list.prev,
  1208. struct drm_i915_gem_request,
  1209. list)->seqno;
  1210. return i915_wait_seqno(ring, seqno);
  1211. }
  1212. static int
  1213. intel_ring_alloc_seqno(struct intel_ring_buffer *ring)
  1214. {
  1215. if (ring->outstanding_lazy_request)
  1216. return 0;
  1217. return i915_gem_get_seqno(ring->dev, &ring->outstanding_lazy_request);
  1218. }
  1219. static int __intel_ring_begin(struct intel_ring_buffer *ring,
  1220. int bytes)
  1221. {
  1222. int ret;
  1223. if (unlikely(ring->tail + bytes > ring->effective_size)) {
  1224. ret = intel_wrap_ring_buffer(ring);
  1225. if (unlikely(ret))
  1226. return ret;
  1227. }
  1228. if (unlikely(ring->space < bytes)) {
  1229. ret = ring_wait_for_space(ring, bytes);
  1230. if (unlikely(ret))
  1231. return ret;
  1232. }
  1233. ring->space -= bytes;
  1234. return 0;
  1235. }
  1236. int intel_ring_begin(struct intel_ring_buffer *ring,
  1237. int num_dwords)
  1238. {
  1239. drm_i915_private_t *dev_priv = ring->dev->dev_private;
  1240. int ret;
  1241. ret = i915_gem_check_wedge(&dev_priv->gpu_error,
  1242. dev_priv->mm.interruptible);
  1243. if (ret)
  1244. return ret;
  1245. /* Preallocate the olr before touching the ring */
  1246. ret = intel_ring_alloc_seqno(ring);
  1247. if (ret)
  1248. return ret;
  1249. return __intel_ring_begin(ring, num_dwords * sizeof(uint32_t));
  1250. }
  1251. void intel_ring_init_seqno(struct intel_ring_buffer *ring, u32 seqno)
  1252. {
  1253. struct drm_i915_private *dev_priv = ring->dev->dev_private;
  1254. BUG_ON(ring->outstanding_lazy_request);
  1255. if (INTEL_INFO(ring->dev)->gen >= 6) {
  1256. I915_WRITE(RING_SYNC_0(ring->mmio_base), 0);
  1257. I915_WRITE(RING_SYNC_1(ring->mmio_base), 0);
  1258. }
  1259. ring->set_seqno(ring, seqno);
  1260. }
  1261. void intel_ring_advance(struct intel_ring_buffer *ring)
  1262. {
  1263. struct drm_i915_private *dev_priv = ring->dev->dev_private;
  1264. ring->tail &= ring->size - 1;
  1265. if (dev_priv->gpu_error.stop_rings & intel_ring_flag(ring))
  1266. return;
  1267. ring->write_tail(ring, ring->tail);
  1268. }
  1269. static void gen6_bsd_ring_write_tail(struct intel_ring_buffer *ring,
  1270. u32 value)
  1271. {
  1272. drm_i915_private_t *dev_priv = ring->dev->dev_private;
  1273. /* Every tail move must follow the sequence below */
  1274. /* Disable notification that the ring is IDLE. The GT
  1275. * will then assume that it is busy and bring it out of rc6.
  1276. */
  1277. I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
  1278. _MASKED_BIT_ENABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
  1279. /* Clear the context id. Here be magic! */
  1280. I915_WRITE64(GEN6_BSD_RNCID, 0x0);
  1281. /* Wait for the ring not to be idle, i.e. for it to wake up. */
  1282. if (wait_for((I915_READ(GEN6_BSD_SLEEP_PSMI_CONTROL) &
  1283. GEN6_BSD_SLEEP_INDICATOR) == 0,
  1284. 50))
  1285. DRM_ERROR("timed out waiting for the BSD ring to wake up\n");
  1286. /* Now that the ring is fully powered up, update the tail */
  1287. I915_WRITE_TAIL(ring, value);
  1288. POSTING_READ(RING_TAIL(ring->mmio_base));
  1289. /* Let the ring send IDLE messages to the GT again,
  1290. * and so let it sleep to conserve power when idle.
  1291. */
  1292. I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
  1293. _MASKED_BIT_DISABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
  1294. }
  1295. static int gen6_ring_flush(struct intel_ring_buffer *ring,
  1296. u32 invalidate, u32 flush)
  1297. {
  1298. uint32_t cmd;
  1299. int ret;
  1300. ret = intel_ring_begin(ring, 4);
  1301. if (ret)
  1302. return ret;
  1303. cmd = MI_FLUSH_DW;
  1304. /*
  1305. * Bspec vol 1c.5 - video engine command streamer:
  1306. * "If ENABLED, all TLBs will be invalidated once the flush
  1307. * operation is complete. This bit is only valid when the
  1308. * Post-Sync Operation field is a value of 1h or 3h."
  1309. */
  1310. if (invalidate & I915_GEM_GPU_DOMAINS)
  1311. cmd |= MI_INVALIDATE_TLB | MI_INVALIDATE_BSD |
  1312. MI_FLUSH_DW_STORE_INDEX | MI_FLUSH_DW_OP_STOREDW;
  1313. intel_ring_emit(ring, cmd);
  1314. intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
  1315. intel_ring_emit(ring, 0);
  1316. intel_ring_emit(ring, MI_NOOP);
  1317. intel_ring_advance(ring);
  1318. return 0;
  1319. }
  1320. static int
  1321. hsw_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
  1322. u32 offset, u32 len,
  1323. unsigned flags)
  1324. {
  1325. int ret;
  1326. ret = intel_ring_begin(ring, 2);
  1327. if (ret)
  1328. return ret;
  1329. intel_ring_emit(ring,
  1330. MI_BATCH_BUFFER_START | MI_BATCH_PPGTT_HSW |
  1331. (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_HSW));
  1332. /* bit0-7 is the length on GEN6+ */
  1333. intel_ring_emit(ring, offset);
  1334. intel_ring_advance(ring);
  1335. return 0;
  1336. }
  1337. static int
  1338. gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
  1339. u32 offset, u32 len,
  1340. unsigned flags)
  1341. {
  1342. int ret;
  1343. ret = intel_ring_begin(ring, 2);
  1344. if (ret)
  1345. return ret;
  1346. intel_ring_emit(ring,
  1347. MI_BATCH_BUFFER_START |
  1348. (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_I965));
  1349. /* bit0-7 is the length on GEN6+ */
  1350. intel_ring_emit(ring, offset);
  1351. intel_ring_advance(ring);
  1352. return 0;
  1353. }
  1354. /* Blitter support (SandyBridge+) */
  1355. static int blt_ring_flush(struct intel_ring_buffer *ring,
  1356. u32 invalidate, u32 flush)
  1357. {
  1358. uint32_t cmd;
  1359. int ret;
  1360. ret = intel_ring_begin(ring, 4);
  1361. if (ret)
  1362. return ret;
  1363. cmd = MI_FLUSH_DW;
  1364. /*
  1365. * Bspec vol 1c.3 - blitter engine command streamer:
  1366. * "If ENABLED, all TLBs will be invalidated once the flush
  1367. * operation is complete. This bit is only valid when the
  1368. * Post-Sync Operation field is a value of 1h or 3h."
  1369. */
  1370. if (invalidate & I915_GEM_DOMAIN_RENDER)
  1371. cmd |= MI_INVALIDATE_TLB | MI_FLUSH_DW_STORE_INDEX |
  1372. MI_FLUSH_DW_OP_STOREDW;
  1373. intel_ring_emit(ring, cmd);
  1374. intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
  1375. intel_ring_emit(ring, 0);
  1376. intel_ring_emit(ring, MI_NOOP);
  1377. intel_ring_advance(ring);
  1378. return 0;
  1379. }
  1380. int intel_init_render_ring_buffer(struct drm_device *dev)
  1381. {
  1382. drm_i915_private_t *dev_priv = dev->dev_private;
  1383. struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
  1384. ring->name = "render ring";
  1385. ring->id = RCS;
  1386. ring->mmio_base = RENDER_RING_BASE;
  1387. if (INTEL_INFO(dev)->gen >= 6) {
  1388. ring->add_request = gen6_add_request;
  1389. ring->flush = gen7_render_ring_flush;
  1390. if (INTEL_INFO(dev)->gen == 6)
  1391. ring->flush = gen6_render_ring_flush;
  1392. ring->irq_get = gen6_ring_get_irq;
  1393. ring->irq_put = gen6_ring_put_irq;
  1394. ring->irq_enable_mask = GT_USER_INTERRUPT;
  1395. ring->get_seqno = gen6_ring_get_seqno;
  1396. ring->set_seqno = ring_set_seqno;
  1397. ring->sync_to = gen6_ring_sync;
  1398. ring->semaphore_register[0] = MI_SEMAPHORE_SYNC_INVALID;
  1399. ring->semaphore_register[1] = MI_SEMAPHORE_SYNC_RV;
  1400. ring->semaphore_register[2] = MI_SEMAPHORE_SYNC_RB;
  1401. ring->signal_mbox[0] = GEN6_VRSYNC;
  1402. ring->signal_mbox[1] = GEN6_BRSYNC;
  1403. } else if (IS_GEN5(dev)) {
  1404. ring->add_request = pc_render_add_request;
  1405. ring->flush = gen4_render_ring_flush;
  1406. ring->get_seqno = pc_render_get_seqno;
  1407. ring->set_seqno = pc_render_set_seqno;
  1408. ring->irq_get = gen5_ring_get_irq;
  1409. ring->irq_put = gen5_ring_put_irq;
  1410. ring->irq_enable_mask = GT_USER_INTERRUPT | GT_PIPE_NOTIFY;
  1411. } else {
  1412. ring->add_request = i9xx_add_request;
  1413. if (INTEL_INFO(dev)->gen < 4)
  1414. ring->flush = gen2_render_ring_flush;
  1415. else
  1416. ring->flush = gen4_render_ring_flush;
  1417. ring->get_seqno = ring_get_seqno;
  1418. ring->set_seqno = ring_set_seqno;
  1419. if (IS_GEN2(dev)) {
  1420. ring->irq_get = i8xx_ring_get_irq;
  1421. ring->irq_put = i8xx_ring_put_irq;
  1422. } else {
  1423. ring->irq_get = i9xx_ring_get_irq;
  1424. ring->irq_put = i9xx_ring_put_irq;
  1425. }
  1426. ring->irq_enable_mask = I915_USER_INTERRUPT;
  1427. }
  1428. ring->write_tail = ring_write_tail;
  1429. if (IS_HASWELL(dev))
  1430. ring->dispatch_execbuffer = hsw_ring_dispatch_execbuffer;
  1431. else if (INTEL_INFO(dev)->gen >= 6)
  1432. ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
  1433. else if (INTEL_INFO(dev)->gen >= 4)
  1434. ring->dispatch_execbuffer = i965_dispatch_execbuffer;
  1435. else if (IS_I830(dev) || IS_845G(dev))
  1436. ring->dispatch_execbuffer = i830_dispatch_execbuffer;
  1437. else
  1438. ring->dispatch_execbuffer = i915_dispatch_execbuffer;
  1439. ring->init = init_render_ring;
  1440. ring->cleanup = render_ring_cleanup;
  1441. /* Workaround batchbuffer to combat CS tlb bug. */
  1442. if (HAS_BROKEN_CS_TLB(dev)) {
  1443. struct drm_i915_gem_object *obj;
  1444. int ret;
  1445. obj = i915_gem_alloc_object(dev, I830_BATCH_LIMIT);
  1446. if (obj == NULL) {
  1447. DRM_ERROR("Failed to allocate batch bo\n");
  1448. return -ENOMEM;
  1449. }
  1450. ret = i915_gem_object_pin(obj, 0, true, false);
  1451. if (ret != 0) {
  1452. drm_gem_object_unreference(&obj->base);
  1453. DRM_ERROR("Failed to ping batch bo\n");
  1454. return ret;
  1455. }
  1456. ring->private = obj;
  1457. }
  1458. return intel_init_ring_buffer(dev, ring);
  1459. }
  1460. int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size)
  1461. {
  1462. drm_i915_private_t *dev_priv = dev->dev_private;
  1463. struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
  1464. int ret;
  1465. ring->name = "render ring";
  1466. ring->id = RCS;
  1467. ring->mmio_base = RENDER_RING_BASE;
  1468. if (INTEL_INFO(dev)->gen >= 6) {
  1469. /* non-kms not supported on gen6+ */
  1470. return -ENODEV;
  1471. }
  1472. /* Note: gem is not supported on gen5/ilk without kms (the corresponding
  1473. * gem_init ioctl returns with -ENODEV). Hence we do not need to set up
  1474. * the special gen5 functions. */
  1475. ring->add_request = i9xx_add_request;
  1476. if (INTEL_INFO(dev)->gen < 4)
  1477. ring->flush = gen2_render_ring_flush;
  1478. else
  1479. ring->flush = gen4_render_ring_flush;
  1480. ring->get_seqno = ring_get_seqno;
  1481. ring->set_seqno = ring_set_seqno;
  1482. if (IS_GEN2(dev)) {
  1483. ring->irq_get = i8xx_ring_get_irq;
  1484. ring->irq_put = i8xx_ring_put_irq;
  1485. } else {
  1486. ring->irq_get = i9xx_ring_get_irq;
  1487. ring->irq_put = i9xx_ring_put_irq;
  1488. }
  1489. ring->irq_enable_mask = I915_USER_INTERRUPT;
  1490. ring->write_tail = ring_write_tail;
  1491. if (INTEL_INFO(dev)->gen >= 4)
  1492. ring->dispatch_execbuffer = i965_dispatch_execbuffer;
  1493. else if (IS_I830(dev) || IS_845G(dev))
  1494. ring->dispatch_execbuffer = i830_dispatch_execbuffer;
  1495. else
  1496. ring->dispatch_execbuffer = i915_dispatch_execbuffer;
  1497. ring->init = init_render_ring;
  1498. ring->cleanup = render_ring_cleanup;
  1499. ring->dev = dev;
  1500. INIT_LIST_HEAD(&ring->active_list);
  1501. INIT_LIST_HEAD(&ring->request_list);
  1502. ring->size = size;
  1503. ring->effective_size = ring->size;
  1504. if (IS_I830(ring->dev) || IS_845G(ring->dev))
  1505. ring->effective_size -= 128;
  1506. ring->virtual_start = ioremap_wc(start, size);
  1507. if (ring->virtual_start == NULL) {
  1508. DRM_ERROR("can not ioremap virtual address for"
  1509. " ring buffer\n");
  1510. return -ENOMEM;
  1511. }
  1512. if (!I915_NEED_GFX_HWS(dev)) {
  1513. ret = init_phys_hws_pga(ring);
  1514. if (ret)
  1515. return ret;
  1516. }
  1517. return 0;
  1518. }
  1519. int intel_init_bsd_ring_buffer(struct drm_device *dev)
  1520. {
  1521. drm_i915_private_t *dev_priv = dev->dev_private;
  1522. struct intel_ring_buffer *ring = &dev_priv->ring[VCS];
  1523. ring->name = "bsd ring";
  1524. ring->id = VCS;
  1525. ring->write_tail = ring_write_tail;
  1526. if (IS_GEN6(dev) || IS_GEN7(dev)) {
  1527. ring->mmio_base = GEN6_BSD_RING_BASE;
  1528. /* gen6 bsd needs a special wa for tail updates */
  1529. if (IS_GEN6(dev))
  1530. ring->write_tail = gen6_bsd_ring_write_tail;
  1531. ring->flush = gen6_ring_flush;
  1532. ring->add_request = gen6_add_request;
  1533. ring->get_seqno = gen6_ring_get_seqno;
  1534. ring->set_seqno = ring_set_seqno;
  1535. ring->irq_enable_mask = GEN6_BSD_USER_INTERRUPT;
  1536. ring->irq_get = gen6_ring_get_irq;
  1537. ring->irq_put = gen6_ring_put_irq;
  1538. ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
  1539. ring->sync_to = gen6_ring_sync;
  1540. ring->semaphore_register[0] = MI_SEMAPHORE_SYNC_VR;
  1541. ring->semaphore_register[1] = MI_SEMAPHORE_SYNC_INVALID;
  1542. ring->semaphore_register[2] = MI_SEMAPHORE_SYNC_VB;
  1543. ring->signal_mbox[0] = GEN6_RVSYNC;
  1544. ring->signal_mbox[1] = GEN6_BVSYNC;
  1545. } else {
  1546. ring->mmio_base = BSD_RING_BASE;
  1547. ring->flush = bsd_ring_flush;
  1548. ring->add_request = i9xx_add_request;
  1549. ring->get_seqno = ring_get_seqno;
  1550. ring->set_seqno = ring_set_seqno;
  1551. if (IS_GEN5(dev)) {
  1552. ring->irq_enable_mask = GT_BSD_USER_INTERRUPT;
  1553. ring->irq_get = gen5_ring_get_irq;
  1554. ring->irq_put = gen5_ring_put_irq;
  1555. } else {
  1556. ring->irq_enable_mask = I915_BSD_USER_INTERRUPT;
  1557. ring->irq_get = i9xx_ring_get_irq;
  1558. ring->irq_put = i9xx_ring_put_irq;
  1559. }
  1560. ring->dispatch_execbuffer = i965_dispatch_execbuffer;
  1561. }
  1562. ring->init = init_ring_common;
  1563. return intel_init_ring_buffer(dev, ring);
  1564. }
  1565. int intel_init_blt_ring_buffer(struct drm_device *dev)
  1566. {
  1567. drm_i915_private_t *dev_priv = dev->dev_private;
  1568. struct intel_ring_buffer *ring = &dev_priv->ring[BCS];
  1569. ring->name = "blitter ring";
  1570. ring->id = BCS;
  1571. ring->mmio_base = BLT_RING_BASE;
  1572. ring->write_tail = ring_write_tail;
  1573. ring->flush = blt_ring_flush;
  1574. ring->add_request = gen6_add_request;
  1575. ring->get_seqno = gen6_ring_get_seqno;
  1576. ring->set_seqno = ring_set_seqno;
  1577. ring->irq_enable_mask = GEN6_BLITTER_USER_INTERRUPT;
  1578. ring->irq_get = gen6_ring_get_irq;
  1579. ring->irq_put = gen6_ring_put_irq;
  1580. ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
  1581. ring->sync_to = gen6_ring_sync;
  1582. ring->semaphore_register[0] = MI_SEMAPHORE_SYNC_BR;
  1583. ring->semaphore_register[1] = MI_SEMAPHORE_SYNC_BV;
  1584. ring->semaphore_register[2] = MI_SEMAPHORE_SYNC_INVALID;
  1585. ring->signal_mbox[0] = GEN6_RBSYNC;
  1586. ring->signal_mbox[1] = GEN6_VBSYNC;
  1587. ring->init = init_ring_common;
  1588. return intel_init_ring_buffer(dev, ring);
  1589. }
  1590. int
  1591. intel_ring_flush_all_caches(struct intel_ring_buffer *ring)
  1592. {
  1593. int ret;
  1594. if (!ring->gpu_caches_dirty)
  1595. return 0;
  1596. ret = ring->flush(ring, 0, I915_GEM_GPU_DOMAINS);
  1597. if (ret)
  1598. return ret;
  1599. trace_i915_gem_ring_flush(ring, 0, I915_GEM_GPU_DOMAINS);
  1600. ring->gpu_caches_dirty = false;
  1601. return 0;
  1602. }
  1603. int
  1604. intel_ring_invalidate_all_caches(struct intel_ring_buffer *ring)
  1605. {
  1606. uint32_t flush_domains;
  1607. int ret;
  1608. flush_domains = 0;
  1609. if (ring->gpu_caches_dirty)
  1610. flush_domains = I915_GEM_GPU_DOMAINS;
  1611. ret = ring->flush(ring, I915_GEM_GPU_DOMAINS, flush_domains);
  1612. if (ret)
  1613. return ret;
  1614. trace_i915_gem_ring_flush(ring, I915_GEM_GPU_DOMAINS, flush_domains);
  1615. ring->gpu_caches_dirty = false;
  1616. return 0;
  1617. }