intel_ringbuffer.c 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575
  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 "drmP.h"
  30. #include "i915_drv.h"
  31. #include "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 + 8);
  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;
  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 void ring_write_tail(struct intel_ring_buffer *ring,
  235. u32 value)
  236. {
  237. drm_i915_private_t *dev_priv = ring->dev->dev_private;
  238. I915_WRITE_TAIL(ring, value);
  239. }
  240. u32 intel_ring_get_active_head(struct intel_ring_buffer *ring)
  241. {
  242. drm_i915_private_t *dev_priv = ring->dev->dev_private;
  243. u32 acthd_reg = INTEL_INFO(ring->dev)->gen >= 4 ?
  244. RING_ACTHD(ring->mmio_base) : ACTHD;
  245. return I915_READ(acthd_reg);
  246. }
  247. static int init_ring_common(struct intel_ring_buffer *ring)
  248. {
  249. struct drm_device *dev = ring->dev;
  250. drm_i915_private_t *dev_priv = dev->dev_private;
  251. struct drm_i915_gem_object *obj = ring->obj;
  252. int ret = 0;
  253. u32 head;
  254. if (HAS_FORCE_WAKE(dev))
  255. gen6_gt_force_wake_get(dev_priv);
  256. /* Stop the ring if it's running. */
  257. I915_WRITE_CTL(ring, 0);
  258. I915_WRITE_HEAD(ring, 0);
  259. ring->write_tail(ring, 0);
  260. head = I915_READ_HEAD(ring) & HEAD_ADDR;
  261. /* G45 ring initialization fails to reset head to zero */
  262. if (head != 0) {
  263. DRM_DEBUG_KMS("%s head not reset to zero "
  264. "ctl %08x head %08x tail %08x start %08x\n",
  265. ring->name,
  266. I915_READ_CTL(ring),
  267. I915_READ_HEAD(ring),
  268. I915_READ_TAIL(ring),
  269. I915_READ_START(ring));
  270. I915_WRITE_HEAD(ring, 0);
  271. if (I915_READ_HEAD(ring) & HEAD_ADDR) {
  272. DRM_ERROR("failed to set %s head to zero "
  273. "ctl %08x head %08x tail %08x start %08x\n",
  274. ring->name,
  275. I915_READ_CTL(ring),
  276. I915_READ_HEAD(ring),
  277. I915_READ_TAIL(ring),
  278. I915_READ_START(ring));
  279. }
  280. }
  281. /* Initialize the ring. This must happen _after_ we've cleared the ring
  282. * registers with the above sequence (the readback of the HEAD registers
  283. * also enforces ordering), otherwise the hw might lose the new ring
  284. * register values. */
  285. I915_WRITE_START(ring, obj->gtt_offset);
  286. I915_WRITE_CTL(ring,
  287. ((ring->size - PAGE_SIZE) & RING_NR_PAGES)
  288. | RING_VALID);
  289. /* If the head is still not zero, the ring is dead */
  290. if (wait_for((I915_READ_CTL(ring) & RING_VALID) != 0 &&
  291. I915_READ_START(ring) == obj->gtt_offset &&
  292. (I915_READ_HEAD(ring) & HEAD_ADDR) == 0, 50)) {
  293. DRM_ERROR("%s initialization failed "
  294. "ctl %08x head %08x tail %08x start %08x\n",
  295. ring->name,
  296. I915_READ_CTL(ring),
  297. I915_READ_HEAD(ring),
  298. I915_READ_TAIL(ring),
  299. I915_READ_START(ring));
  300. ret = -EIO;
  301. goto out;
  302. }
  303. if (!drm_core_check_feature(ring->dev, DRIVER_MODESET))
  304. i915_kernel_lost_context(ring->dev);
  305. else {
  306. ring->head = I915_READ_HEAD(ring);
  307. ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
  308. ring->space = ring_space(ring);
  309. ring->last_retired_head = -1;
  310. }
  311. out:
  312. if (HAS_FORCE_WAKE(dev))
  313. gen6_gt_force_wake_put(dev_priv);
  314. return ret;
  315. }
  316. static int
  317. init_pipe_control(struct intel_ring_buffer *ring)
  318. {
  319. struct pipe_control *pc;
  320. struct drm_i915_gem_object *obj;
  321. int ret;
  322. if (ring->private)
  323. return 0;
  324. pc = kmalloc(sizeof(*pc), GFP_KERNEL);
  325. if (!pc)
  326. return -ENOMEM;
  327. obj = i915_gem_alloc_object(ring->dev, 4096);
  328. if (obj == NULL) {
  329. DRM_ERROR("Failed to allocate seqno page\n");
  330. ret = -ENOMEM;
  331. goto err;
  332. }
  333. i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
  334. ret = i915_gem_object_pin(obj, 4096, true);
  335. if (ret)
  336. goto err_unref;
  337. pc->gtt_offset = obj->gtt_offset;
  338. pc->cpu_page = kmap(obj->pages[0]);
  339. if (pc->cpu_page == NULL)
  340. goto err_unpin;
  341. pc->obj = obj;
  342. ring->private = pc;
  343. return 0;
  344. err_unpin:
  345. i915_gem_object_unpin(obj);
  346. err_unref:
  347. drm_gem_object_unreference(&obj->base);
  348. err:
  349. kfree(pc);
  350. return ret;
  351. }
  352. static void
  353. cleanup_pipe_control(struct intel_ring_buffer *ring)
  354. {
  355. struct pipe_control *pc = ring->private;
  356. struct drm_i915_gem_object *obj;
  357. if (!ring->private)
  358. return;
  359. obj = pc->obj;
  360. kunmap(obj->pages[0]);
  361. i915_gem_object_unpin(obj);
  362. drm_gem_object_unreference(&obj->base);
  363. kfree(pc);
  364. ring->private = NULL;
  365. }
  366. static int init_render_ring(struct intel_ring_buffer *ring)
  367. {
  368. struct drm_device *dev = ring->dev;
  369. struct drm_i915_private *dev_priv = dev->dev_private;
  370. int ret = init_ring_common(ring);
  371. if (INTEL_INFO(dev)->gen > 3) {
  372. I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(VS_TIMER_DISPATCH));
  373. if (IS_GEN7(dev))
  374. I915_WRITE(GFX_MODE_GEN7,
  375. _MASKED_BIT_DISABLE(GFX_TLB_INVALIDATE_ALWAYS) |
  376. _MASKED_BIT_ENABLE(GFX_REPLAY_MODE));
  377. }
  378. if (INTEL_INFO(dev)->gen >= 5) {
  379. ret = init_pipe_control(ring);
  380. if (ret)
  381. return ret;
  382. }
  383. if (IS_GEN6(dev)) {
  384. /* From the Sandybridge PRM, volume 1 part 3, page 24:
  385. * "If this bit is set, STCunit will have LRA as replacement
  386. * policy. [...] This bit must be reset. LRA replacement
  387. * policy is not supported."
  388. */
  389. I915_WRITE(CACHE_MODE_0,
  390. _MASKED_BIT_DISABLE(CM0_STC_EVICT_DISABLE_LRA_SNB));
  391. /* This is not explicitly set for GEN6, so read the register.
  392. * see intel_ring_mi_set_context() for why we care.
  393. * TODO: consider explicitly setting the bit for GEN5
  394. */
  395. ring->itlb_before_ctx_switch =
  396. !!(I915_READ(GFX_MODE) & GFX_TLB_INVALIDATE_ALWAYS);
  397. }
  398. if (INTEL_INFO(dev)->gen >= 6)
  399. I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_FORCE_ORDERING));
  400. if (IS_IVYBRIDGE(dev))
  401. I915_WRITE_IMR(ring, ~GEN6_RENDER_L3_PARITY_ERROR);
  402. return ret;
  403. }
  404. static void render_ring_cleanup(struct intel_ring_buffer *ring)
  405. {
  406. if (!ring->private)
  407. return;
  408. cleanup_pipe_control(ring);
  409. }
  410. static void
  411. update_mboxes(struct intel_ring_buffer *ring,
  412. u32 seqno,
  413. u32 mmio_offset)
  414. {
  415. intel_ring_emit(ring, MI_SEMAPHORE_MBOX |
  416. MI_SEMAPHORE_GLOBAL_GTT |
  417. MI_SEMAPHORE_REGISTER |
  418. MI_SEMAPHORE_UPDATE);
  419. intel_ring_emit(ring, seqno);
  420. intel_ring_emit(ring, mmio_offset);
  421. }
  422. /**
  423. * gen6_add_request - Update the semaphore mailbox registers
  424. *
  425. * @ring - ring that is adding a request
  426. * @seqno - return seqno stuck into the ring
  427. *
  428. * Update the mailbox registers in the *other* rings with the current seqno.
  429. * This acts like a signal in the canonical semaphore.
  430. */
  431. static int
  432. gen6_add_request(struct intel_ring_buffer *ring,
  433. u32 *seqno)
  434. {
  435. u32 mbox1_reg;
  436. u32 mbox2_reg;
  437. int ret;
  438. ret = intel_ring_begin(ring, 10);
  439. if (ret)
  440. return ret;
  441. mbox1_reg = ring->signal_mbox[0];
  442. mbox2_reg = ring->signal_mbox[1];
  443. *seqno = i915_gem_next_request_seqno(ring);
  444. update_mboxes(ring, *seqno, mbox1_reg);
  445. update_mboxes(ring, *seqno, mbox2_reg);
  446. intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
  447. intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
  448. intel_ring_emit(ring, *seqno);
  449. intel_ring_emit(ring, MI_USER_INTERRUPT);
  450. intel_ring_advance(ring);
  451. return 0;
  452. }
  453. /**
  454. * intel_ring_sync - sync the waiter to the signaller on seqno
  455. *
  456. * @waiter - ring that is waiting
  457. * @signaller - ring which has, or will signal
  458. * @seqno - seqno which the waiter will block on
  459. */
  460. static int
  461. gen6_ring_sync(struct intel_ring_buffer *waiter,
  462. struct intel_ring_buffer *signaller,
  463. u32 seqno)
  464. {
  465. int ret;
  466. u32 dw1 = MI_SEMAPHORE_MBOX |
  467. MI_SEMAPHORE_COMPARE |
  468. MI_SEMAPHORE_REGISTER;
  469. /* Throughout all of the GEM code, seqno passed implies our current
  470. * seqno is >= the last seqno executed. However for hardware the
  471. * comparison is strictly greater than.
  472. */
  473. seqno -= 1;
  474. WARN_ON(signaller->semaphore_register[waiter->id] ==
  475. MI_SEMAPHORE_SYNC_INVALID);
  476. ret = intel_ring_begin(waiter, 4);
  477. if (ret)
  478. return ret;
  479. intel_ring_emit(waiter,
  480. dw1 | signaller->semaphore_register[waiter->id]);
  481. intel_ring_emit(waiter, seqno);
  482. intel_ring_emit(waiter, 0);
  483. intel_ring_emit(waiter, MI_NOOP);
  484. intel_ring_advance(waiter);
  485. return 0;
  486. }
  487. #define PIPE_CONTROL_FLUSH(ring__, addr__) \
  488. do { \
  489. intel_ring_emit(ring__, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE | \
  490. PIPE_CONTROL_DEPTH_STALL); \
  491. intel_ring_emit(ring__, (addr__) | PIPE_CONTROL_GLOBAL_GTT); \
  492. intel_ring_emit(ring__, 0); \
  493. intel_ring_emit(ring__, 0); \
  494. } while (0)
  495. static int
  496. pc_render_add_request(struct intel_ring_buffer *ring,
  497. u32 *result)
  498. {
  499. u32 seqno = i915_gem_next_request_seqno(ring);
  500. struct pipe_control *pc = ring->private;
  501. u32 scratch_addr = pc->gtt_offset + 128;
  502. int ret;
  503. /* For Ironlake, MI_USER_INTERRUPT was deprecated and apparently
  504. * incoherent with writes to memory, i.e. completely fubar,
  505. * so we need to use PIPE_NOTIFY instead.
  506. *
  507. * However, we also need to workaround the qword write
  508. * incoherence by flushing the 6 PIPE_NOTIFY buffers out to
  509. * memory before requesting an interrupt.
  510. */
  511. ret = intel_ring_begin(ring, 32);
  512. if (ret)
  513. return ret;
  514. intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
  515. PIPE_CONTROL_WRITE_FLUSH |
  516. PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE);
  517. intel_ring_emit(ring, pc->gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
  518. intel_ring_emit(ring, seqno);
  519. intel_ring_emit(ring, 0);
  520. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  521. scratch_addr += 128; /* write to separate cachelines */
  522. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  523. scratch_addr += 128;
  524. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  525. scratch_addr += 128;
  526. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  527. scratch_addr += 128;
  528. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  529. scratch_addr += 128;
  530. PIPE_CONTROL_FLUSH(ring, scratch_addr);
  531. intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
  532. PIPE_CONTROL_WRITE_FLUSH |
  533. PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
  534. PIPE_CONTROL_NOTIFY);
  535. intel_ring_emit(ring, pc->gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
  536. intel_ring_emit(ring, seqno);
  537. intel_ring_emit(ring, 0);
  538. intel_ring_advance(ring);
  539. *result = seqno;
  540. return 0;
  541. }
  542. static u32
  543. gen6_ring_get_seqno(struct intel_ring_buffer *ring)
  544. {
  545. struct drm_device *dev = ring->dev;
  546. /* Workaround to force correct ordering between irq and seqno writes on
  547. * ivb (and maybe also on snb) by reading from a CS register (like
  548. * ACTHD) before reading the status page. */
  549. if (IS_GEN6(dev) || IS_GEN7(dev))
  550. intel_ring_get_active_head(ring);
  551. return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
  552. }
  553. static u32
  554. ring_get_seqno(struct intel_ring_buffer *ring)
  555. {
  556. return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
  557. }
  558. static u32
  559. pc_render_get_seqno(struct intel_ring_buffer *ring)
  560. {
  561. struct pipe_control *pc = ring->private;
  562. return pc->cpu_page[0];
  563. }
  564. static bool
  565. gen5_ring_get_irq(struct intel_ring_buffer *ring)
  566. {
  567. struct drm_device *dev = ring->dev;
  568. drm_i915_private_t *dev_priv = dev->dev_private;
  569. unsigned long flags;
  570. if (!dev->irq_enabled)
  571. return false;
  572. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  573. if (ring->irq_refcount++ == 0) {
  574. dev_priv->gt_irq_mask &= ~ring->irq_enable_mask;
  575. I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
  576. POSTING_READ(GTIMR);
  577. }
  578. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  579. return true;
  580. }
  581. static void
  582. gen5_ring_put_irq(struct intel_ring_buffer *ring)
  583. {
  584. struct drm_device *dev = ring->dev;
  585. drm_i915_private_t *dev_priv = dev->dev_private;
  586. unsigned long flags;
  587. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  588. if (--ring->irq_refcount == 0) {
  589. dev_priv->gt_irq_mask |= ring->irq_enable_mask;
  590. I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
  591. POSTING_READ(GTIMR);
  592. }
  593. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  594. }
  595. static bool
  596. i9xx_ring_get_irq(struct intel_ring_buffer *ring)
  597. {
  598. struct drm_device *dev = ring->dev;
  599. drm_i915_private_t *dev_priv = dev->dev_private;
  600. unsigned long flags;
  601. if (!dev->irq_enabled)
  602. return false;
  603. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  604. if (ring->irq_refcount++ == 0) {
  605. dev_priv->irq_mask &= ~ring->irq_enable_mask;
  606. I915_WRITE(IMR, dev_priv->irq_mask);
  607. POSTING_READ(IMR);
  608. }
  609. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  610. return true;
  611. }
  612. static void
  613. i9xx_ring_put_irq(struct intel_ring_buffer *ring)
  614. {
  615. struct drm_device *dev = ring->dev;
  616. drm_i915_private_t *dev_priv = dev->dev_private;
  617. unsigned long flags;
  618. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  619. if (--ring->irq_refcount == 0) {
  620. dev_priv->irq_mask |= ring->irq_enable_mask;
  621. I915_WRITE(IMR, dev_priv->irq_mask);
  622. POSTING_READ(IMR);
  623. }
  624. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  625. }
  626. static bool
  627. i8xx_ring_get_irq(struct intel_ring_buffer *ring)
  628. {
  629. struct drm_device *dev = ring->dev;
  630. drm_i915_private_t *dev_priv = dev->dev_private;
  631. unsigned long flags;
  632. if (!dev->irq_enabled)
  633. return false;
  634. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  635. if (ring->irq_refcount++ == 0) {
  636. dev_priv->irq_mask &= ~ring->irq_enable_mask;
  637. I915_WRITE16(IMR, dev_priv->irq_mask);
  638. POSTING_READ16(IMR);
  639. }
  640. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  641. return true;
  642. }
  643. static void
  644. i8xx_ring_put_irq(struct intel_ring_buffer *ring)
  645. {
  646. struct drm_device *dev = ring->dev;
  647. drm_i915_private_t *dev_priv = dev->dev_private;
  648. unsigned long flags;
  649. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  650. if (--ring->irq_refcount == 0) {
  651. dev_priv->irq_mask |= ring->irq_enable_mask;
  652. I915_WRITE16(IMR, dev_priv->irq_mask);
  653. POSTING_READ16(IMR);
  654. }
  655. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  656. }
  657. void intel_ring_setup_status_page(struct intel_ring_buffer *ring)
  658. {
  659. struct drm_device *dev = ring->dev;
  660. drm_i915_private_t *dev_priv = ring->dev->dev_private;
  661. u32 mmio = 0;
  662. /* The ring status page addresses are no longer next to the rest of
  663. * the ring registers as of gen7.
  664. */
  665. if (IS_GEN7(dev)) {
  666. switch (ring->id) {
  667. case RCS:
  668. mmio = RENDER_HWS_PGA_GEN7;
  669. break;
  670. case BCS:
  671. mmio = BLT_HWS_PGA_GEN7;
  672. break;
  673. case VCS:
  674. mmio = BSD_HWS_PGA_GEN7;
  675. break;
  676. }
  677. } else if (IS_GEN6(ring->dev)) {
  678. mmio = RING_HWS_PGA_GEN6(ring->mmio_base);
  679. } else {
  680. mmio = RING_HWS_PGA(ring->mmio_base);
  681. }
  682. I915_WRITE(mmio, (u32)ring->status_page.gfx_addr);
  683. POSTING_READ(mmio);
  684. }
  685. static int
  686. bsd_ring_flush(struct intel_ring_buffer *ring,
  687. u32 invalidate_domains,
  688. u32 flush_domains)
  689. {
  690. int ret;
  691. ret = intel_ring_begin(ring, 2);
  692. if (ret)
  693. return ret;
  694. intel_ring_emit(ring, MI_FLUSH);
  695. intel_ring_emit(ring, MI_NOOP);
  696. intel_ring_advance(ring);
  697. return 0;
  698. }
  699. static int
  700. i9xx_add_request(struct intel_ring_buffer *ring,
  701. u32 *result)
  702. {
  703. u32 seqno;
  704. int ret;
  705. ret = intel_ring_begin(ring, 4);
  706. if (ret)
  707. return ret;
  708. seqno = i915_gem_next_request_seqno(ring);
  709. intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
  710. intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
  711. intel_ring_emit(ring, seqno);
  712. intel_ring_emit(ring, MI_USER_INTERRUPT);
  713. intel_ring_advance(ring);
  714. *result = seqno;
  715. return 0;
  716. }
  717. static bool
  718. gen6_ring_get_irq(struct intel_ring_buffer *ring)
  719. {
  720. struct drm_device *dev = ring->dev;
  721. drm_i915_private_t *dev_priv = dev->dev_private;
  722. unsigned long flags;
  723. if (!dev->irq_enabled)
  724. return false;
  725. /* It looks like we need to prevent the gt from suspending while waiting
  726. * for an notifiy irq, otherwise irqs seem to get lost on at least the
  727. * blt/bsd rings on ivb. */
  728. gen6_gt_force_wake_get(dev_priv);
  729. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  730. if (ring->irq_refcount++ == 0) {
  731. if (IS_IVYBRIDGE(dev) && ring->id == RCS)
  732. I915_WRITE_IMR(ring, ~(ring->irq_enable_mask |
  733. GEN6_RENDER_L3_PARITY_ERROR));
  734. else
  735. I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
  736. dev_priv->gt_irq_mask &= ~ring->irq_enable_mask;
  737. I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
  738. POSTING_READ(GTIMR);
  739. }
  740. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  741. return true;
  742. }
  743. static void
  744. gen6_ring_put_irq(struct intel_ring_buffer *ring)
  745. {
  746. struct drm_device *dev = ring->dev;
  747. drm_i915_private_t *dev_priv = dev->dev_private;
  748. unsigned long flags;
  749. spin_lock_irqsave(&dev_priv->irq_lock, flags);
  750. if (--ring->irq_refcount == 0) {
  751. if (IS_IVYBRIDGE(dev) && ring->id == RCS)
  752. I915_WRITE_IMR(ring, ~GEN6_RENDER_L3_PARITY_ERROR);
  753. else
  754. I915_WRITE_IMR(ring, ~0);
  755. dev_priv->gt_irq_mask |= ring->irq_enable_mask;
  756. I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
  757. POSTING_READ(GTIMR);
  758. }
  759. spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
  760. gen6_gt_force_wake_put(dev_priv);
  761. }
  762. static int
  763. i965_dispatch_execbuffer(struct intel_ring_buffer *ring, u32 offset, u32 length)
  764. {
  765. int ret;
  766. ret = intel_ring_begin(ring, 2);
  767. if (ret)
  768. return ret;
  769. intel_ring_emit(ring,
  770. MI_BATCH_BUFFER_START |
  771. MI_BATCH_GTT |
  772. MI_BATCH_NON_SECURE_I965);
  773. intel_ring_emit(ring, offset);
  774. intel_ring_advance(ring);
  775. return 0;
  776. }
  777. static int
  778. i830_dispatch_execbuffer(struct intel_ring_buffer *ring,
  779. u32 offset, u32 len)
  780. {
  781. int ret;
  782. ret = intel_ring_begin(ring, 4);
  783. if (ret)
  784. return ret;
  785. intel_ring_emit(ring, MI_BATCH_BUFFER);
  786. intel_ring_emit(ring, offset | MI_BATCH_NON_SECURE);
  787. intel_ring_emit(ring, offset + len - 8);
  788. intel_ring_emit(ring, 0);
  789. intel_ring_advance(ring);
  790. return 0;
  791. }
  792. static int
  793. i915_dispatch_execbuffer(struct intel_ring_buffer *ring,
  794. u32 offset, u32 len)
  795. {
  796. int ret;
  797. ret = intel_ring_begin(ring, 2);
  798. if (ret)
  799. return ret;
  800. intel_ring_emit(ring, MI_BATCH_BUFFER_START | MI_BATCH_GTT);
  801. intel_ring_emit(ring, offset | MI_BATCH_NON_SECURE);
  802. intel_ring_advance(ring);
  803. return 0;
  804. }
  805. static void cleanup_status_page(struct intel_ring_buffer *ring)
  806. {
  807. struct drm_i915_gem_object *obj;
  808. obj = ring->status_page.obj;
  809. if (obj == NULL)
  810. return;
  811. kunmap(obj->pages[0]);
  812. i915_gem_object_unpin(obj);
  813. drm_gem_object_unreference(&obj->base);
  814. ring->status_page.obj = NULL;
  815. }
  816. static int init_status_page(struct intel_ring_buffer *ring)
  817. {
  818. struct drm_device *dev = ring->dev;
  819. struct drm_i915_gem_object *obj;
  820. int ret;
  821. obj = i915_gem_alloc_object(dev, 4096);
  822. if (obj == NULL) {
  823. DRM_ERROR("Failed to allocate status page\n");
  824. ret = -ENOMEM;
  825. goto err;
  826. }
  827. i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
  828. ret = i915_gem_object_pin(obj, 4096, true);
  829. if (ret != 0) {
  830. goto err_unref;
  831. }
  832. ring->status_page.gfx_addr = obj->gtt_offset;
  833. ring->status_page.page_addr = kmap(obj->pages[0]);
  834. if (ring->status_page.page_addr == NULL) {
  835. ret = -ENOMEM;
  836. goto err_unpin;
  837. }
  838. ring->status_page.obj = obj;
  839. memset(ring->status_page.page_addr, 0, PAGE_SIZE);
  840. intel_ring_setup_status_page(ring);
  841. DRM_DEBUG_DRIVER("%s hws offset: 0x%08x\n",
  842. ring->name, ring->status_page.gfx_addr);
  843. return 0;
  844. err_unpin:
  845. i915_gem_object_unpin(obj);
  846. err_unref:
  847. drm_gem_object_unreference(&obj->base);
  848. err:
  849. return ret;
  850. }
  851. static int intel_init_ring_buffer(struct drm_device *dev,
  852. struct intel_ring_buffer *ring)
  853. {
  854. struct drm_i915_gem_object *obj;
  855. struct drm_i915_private *dev_priv = dev->dev_private;
  856. int ret;
  857. ring->dev = dev;
  858. INIT_LIST_HEAD(&ring->active_list);
  859. INIT_LIST_HEAD(&ring->request_list);
  860. INIT_LIST_HEAD(&ring->gpu_write_list);
  861. ring->size = 32 * PAGE_SIZE;
  862. init_waitqueue_head(&ring->irq_queue);
  863. if (I915_NEED_GFX_HWS(dev)) {
  864. ret = init_status_page(ring);
  865. if (ret)
  866. return ret;
  867. }
  868. obj = i915_gem_alloc_object(dev, ring->size);
  869. if (obj == NULL) {
  870. DRM_ERROR("Failed to allocate ringbuffer\n");
  871. ret = -ENOMEM;
  872. goto err_hws;
  873. }
  874. ring->obj = obj;
  875. ret = i915_gem_object_pin(obj, PAGE_SIZE, true);
  876. if (ret)
  877. goto err_unref;
  878. ret = i915_gem_object_set_to_gtt_domain(obj, true);
  879. if (ret)
  880. goto err_unpin;
  881. ring->virtual_start =
  882. ioremap_wc(dev_priv->mm.gtt->gma_bus_addr + obj->gtt_offset,
  883. ring->size);
  884. if (ring->virtual_start == NULL) {
  885. DRM_ERROR("Failed to map ringbuffer.\n");
  886. ret = -EINVAL;
  887. goto err_unpin;
  888. }
  889. ret = ring->init(ring);
  890. if (ret)
  891. goto err_unmap;
  892. /* Workaround an erratum on the i830 which causes a hang if
  893. * the TAIL pointer points to within the last 2 cachelines
  894. * of the buffer.
  895. */
  896. ring->effective_size = ring->size;
  897. if (IS_I830(ring->dev) || IS_845G(ring->dev))
  898. ring->effective_size -= 128;
  899. return 0;
  900. err_unmap:
  901. iounmap(ring->virtual_start);
  902. err_unpin:
  903. i915_gem_object_unpin(obj);
  904. err_unref:
  905. drm_gem_object_unreference(&obj->base);
  906. ring->obj = NULL;
  907. err_hws:
  908. cleanup_status_page(ring);
  909. return ret;
  910. }
  911. void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring)
  912. {
  913. struct drm_i915_private *dev_priv;
  914. int ret;
  915. if (ring->obj == NULL)
  916. return;
  917. /* Disable the ring buffer. The ring must be idle at this point */
  918. dev_priv = ring->dev->dev_private;
  919. ret = intel_wait_ring_idle(ring);
  920. if (ret)
  921. DRM_ERROR("failed to quiesce %s whilst cleaning up: %d\n",
  922. ring->name, ret);
  923. I915_WRITE_CTL(ring, 0);
  924. iounmap(ring->virtual_start);
  925. i915_gem_object_unpin(ring->obj);
  926. drm_gem_object_unreference(&ring->obj->base);
  927. ring->obj = NULL;
  928. if (ring->cleanup)
  929. ring->cleanup(ring);
  930. cleanup_status_page(ring);
  931. }
  932. static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring)
  933. {
  934. uint32_t __iomem *virt;
  935. int rem = ring->size - ring->tail;
  936. if (ring->space < rem) {
  937. int ret = intel_wait_ring_buffer(ring, rem);
  938. if (ret)
  939. return ret;
  940. }
  941. virt = ring->virtual_start + ring->tail;
  942. rem /= 4;
  943. while (rem--)
  944. iowrite32(MI_NOOP, virt++);
  945. ring->tail = 0;
  946. ring->space = ring_space(ring);
  947. return 0;
  948. }
  949. static int intel_ring_wait_seqno(struct intel_ring_buffer *ring, u32 seqno)
  950. {
  951. int ret;
  952. ret = i915_wait_seqno(ring, seqno);
  953. if (!ret)
  954. i915_gem_retire_requests_ring(ring);
  955. return ret;
  956. }
  957. static int intel_ring_wait_request(struct intel_ring_buffer *ring, int n)
  958. {
  959. struct drm_i915_gem_request *request;
  960. u32 seqno = 0;
  961. int ret;
  962. i915_gem_retire_requests_ring(ring);
  963. if (ring->last_retired_head != -1) {
  964. ring->head = ring->last_retired_head;
  965. ring->last_retired_head = -1;
  966. ring->space = ring_space(ring);
  967. if (ring->space >= n)
  968. return 0;
  969. }
  970. list_for_each_entry(request, &ring->request_list, list) {
  971. int space;
  972. if (request->tail == -1)
  973. continue;
  974. space = request->tail - (ring->tail + 8);
  975. if (space < 0)
  976. space += ring->size;
  977. if (space >= n) {
  978. seqno = request->seqno;
  979. break;
  980. }
  981. /* Consume this request in case we need more space than
  982. * is available and so need to prevent a race between
  983. * updating last_retired_head and direct reads of
  984. * I915_RING_HEAD. It also provides a nice sanity check.
  985. */
  986. request->tail = -1;
  987. }
  988. if (seqno == 0)
  989. return -ENOSPC;
  990. ret = intel_ring_wait_seqno(ring, seqno);
  991. if (ret)
  992. return ret;
  993. if (WARN_ON(ring->last_retired_head == -1))
  994. return -ENOSPC;
  995. ring->head = ring->last_retired_head;
  996. ring->last_retired_head = -1;
  997. ring->space = ring_space(ring);
  998. if (WARN_ON(ring->space < n))
  999. return -ENOSPC;
  1000. return 0;
  1001. }
  1002. int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n)
  1003. {
  1004. struct drm_device *dev = ring->dev;
  1005. struct drm_i915_private *dev_priv = dev->dev_private;
  1006. unsigned long end;
  1007. int ret;
  1008. ret = intel_ring_wait_request(ring, n);
  1009. if (ret != -ENOSPC)
  1010. return ret;
  1011. trace_i915_ring_wait_begin(ring);
  1012. /* With GEM the hangcheck timer should kick us out of the loop,
  1013. * leaving it early runs the risk of corrupting GEM state (due
  1014. * to running on almost untested codepaths). But on resume
  1015. * timers don't work yet, so prevent a complete hang in that
  1016. * case by choosing an insanely large timeout. */
  1017. end = jiffies + 60 * HZ;
  1018. do {
  1019. ring->head = I915_READ_HEAD(ring);
  1020. ring->space = ring_space(ring);
  1021. if (ring->space >= n) {
  1022. trace_i915_ring_wait_end(ring);
  1023. return 0;
  1024. }
  1025. if (dev->primary->master) {
  1026. struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
  1027. if (master_priv->sarea_priv)
  1028. master_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
  1029. }
  1030. msleep(1);
  1031. ret = i915_gem_check_wedge(dev_priv, dev_priv->mm.interruptible);
  1032. if (ret)
  1033. return ret;
  1034. } while (!time_after(jiffies, end));
  1035. trace_i915_ring_wait_end(ring);
  1036. return -EBUSY;
  1037. }
  1038. int intel_ring_begin(struct intel_ring_buffer *ring,
  1039. int num_dwords)
  1040. {
  1041. drm_i915_private_t *dev_priv = ring->dev->dev_private;
  1042. int n = 4*num_dwords;
  1043. int ret;
  1044. ret = i915_gem_check_wedge(dev_priv, dev_priv->mm.interruptible);
  1045. if (ret)
  1046. return ret;
  1047. if (unlikely(ring->tail + n > ring->effective_size)) {
  1048. ret = intel_wrap_ring_buffer(ring);
  1049. if (unlikely(ret))
  1050. return ret;
  1051. }
  1052. if (unlikely(ring->space < n)) {
  1053. ret = intel_wait_ring_buffer(ring, n);
  1054. if (unlikely(ret))
  1055. return ret;
  1056. }
  1057. ring->space -= n;
  1058. return 0;
  1059. }
  1060. void intel_ring_advance(struct intel_ring_buffer *ring)
  1061. {
  1062. struct drm_i915_private *dev_priv = ring->dev->dev_private;
  1063. ring->tail &= ring->size - 1;
  1064. if (dev_priv->stop_rings & intel_ring_flag(ring))
  1065. return;
  1066. ring->write_tail(ring, ring->tail);
  1067. }
  1068. static void gen6_bsd_ring_write_tail(struct intel_ring_buffer *ring,
  1069. u32 value)
  1070. {
  1071. drm_i915_private_t *dev_priv = ring->dev->dev_private;
  1072. /* Every tail move must follow the sequence below */
  1073. /* Disable notification that the ring is IDLE. The GT
  1074. * will then assume that it is busy and bring it out of rc6.
  1075. */
  1076. I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
  1077. _MASKED_BIT_ENABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
  1078. /* Clear the context id. Here be magic! */
  1079. I915_WRITE64(GEN6_BSD_RNCID, 0x0);
  1080. /* Wait for the ring not to be idle, i.e. for it to wake up. */
  1081. if (wait_for((I915_READ(GEN6_BSD_SLEEP_PSMI_CONTROL) &
  1082. GEN6_BSD_SLEEP_INDICATOR) == 0,
  1083. 50))
  1084. DRM_ERROR("timed out waiting for the BSD ring to wake up\n");
  1085. /* Now that the ring is fully powered up, update the tail */
  1086. I915_WRITE_TAIL(ring, value);
  1087. POSTING_READ(RING_TAIL(ring->mmio_base));
  1088. /* Let the ring send IDLE messages to the GT again,
  1089. * and so let it sleep to conserve power when idle.
  1090. */
  1091. I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
  1092. _MASKED_BIT_DISABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
  1093. }
  1094. static int gen6_ring_flush(struct intel_ring_buffer *ring,
  1095. u32 invalidate, u32 flush)
  1096. {
  1097. uint32_t cmd;
  1098. int ret;
  1099. ret = intel_ring_begin(ring, 4);
  1100. if (ret)
  1101. return ret;
  1102. cmd = MI_FLUSH_DW;
  1103. if (invalidate & I915_GEM_GPU_DOMAINS)
  1104. cmd |= MI_INVALIDATE_TLB | MI_INVALIDATE_BSD;
  1105. intel_ring_emit(ring, cmd);
  1106. intel_ring_emit(ring, 0);
  1107. intel_ring_emit(ring, 0);
  1108. intel_ring_emit(ring, MI_NOOP);
  1109. intel_ring_advance(ring);
  1110. return 0;
  1111. }
  1112. static int
  1113. gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
  1114. u32 offset, u32 len)
  1115. {
  1116. int ret;
  1117. ret = intel_ring_begin(ring, 2);
  1118. if (ret)
  1119. return ret;
  1120. intel_ring_emit(ring, MI_BATCH_BUFFER_START | MI_BATCH_NON_SECURE_I965);
  1121. /* bit0-7 is the length on GEN6+ */
  1122. intel_ring_emit(ring, offset);
  1123. intel_ring_advance(ring);
  1124. return 0;
  1125. }
  1126. /* Blitter support (SandyBridge+) */
  1127. static int blt_ring_flush(struct intel_ring_buffer *ring,
  1128. u32 invalidate, u32 flush)
  1129. {
  1130. uint32_t cmd;
  1131. int ret;
  1132. ret = intel_ring_begin(ring, 4);
  1133. if (ret)
  1134. return ret;
  1135. cmd = MI_FLUSH_DW;
  1136. if (invalidate & I915_GEM_DOMAIN_RENDER)
  1137. cmd |= MI_INVALIDATE_TLB;
  1138. intel_ring_emit(ring, cmd);
  1139. intel_ring_emit(ring, 0);
  1140. intel_ring_emit(ring, 0);
  1141. intel_ring_emit(ring, MI_NOOP);
  1142. intel_ring_advance(ring);
  1143. return 0;
  1144. }
  1145. int intel_init_render_ring_buffer(struct drm_device *dev)
  1146. {
  1147. drm_i915_private_t *dev_priv = dev->dev_private;
  1148. struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
  1149. ring->name = "render ring";
  1150. ring->id = RCS;
  1151. ring->mmio_base = RENDER_RING_BASE;
  1152. if (INTEL_INFO(dev)->gen >= 6) {
  1153. ring->add_request = gen6_add_request;
  1154. ring->flush = gen6_render_ring_flush;
  1155. ring->irq_get = gen6_ring_get_irq;
  1156. ring->irq_put = gen6_ring_put_irq;
  1157. ring->irq_enable_mask = GT_USER_INTERRUPT;
  1158. ring->get_seqno = gen6_ring_get_seqno;
  1159. ring->sync_to = gen6_ring_sync;
  1160. ring->semaphore_register[0] = MI_SEMAPHORE_SYNC_INVALID;
  1161. ring->semaphore_register[1] = MI_SEMAPHORE_SYNC_RV;
  1162. ring->semaphore_register[2] = MI_SEMAPHORE_SYNC_RB;
  1163. ring->signal_mbox[0] = GEN6_VRSYNC;
  1164. ring->signal_mbox[1] = GEN6_BRSYNC;
  1165. } else if (IS_GEN5(dev)) {
  1166. ring->add_request = pc_render_add_request;
  1167. ring->flush = gen4_render_ring_flush;
  1168. ring->get_seqno = pc_render_get_seqno;
  1169. ring->irq_get = gen5_ring_get_irq;
  1170. ring->irq_put = gen5_ring_put_irq;
  1171. ring->irq_enable_mask = GT_USER_INTERRUPT | GT_PIPE_NOTIFY;
  1172. } else {
  1173. ring->add_request = i9xx_add_request;
  1174. if (INTEL_INFO(dev)->gen < 4)
  1175. ring->flush = gen2_render_ring_flush;
  1176. else
  1177. ring->flush = gen4_render_ring_flush;
  1178. ring->get_seqno = ring_get_seqno;
  1179. if (IS_GEN2(dev)) {
  1180. ring->irq_get = i8xx_ring_get_irq;
  1181. ring->irq_put = i8xx_ring_put_irq;
  1182. } else {
  1183. ring->irq_get = i9xx_ring_get_irq;
  1184. ring->irq_put = i9xx_ring_put_irq;
  1185. }
  1186. ring->irq_enable_mask = I915_USER_INTERRUPT;
  1187. }
  1188. ring->write_tail = ring_write_tail;
  1189. if (INTEL_INFO(dev)->gen >= 6)
  1190. ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
  1191. else if (INTEL_INFO(dev)->gen >= 4)
  1192. ring->dispatch_execbuffer = i965_dispatch_execbuffer;
  1193. else if (IS_I830(dev) || IS_845G(dev))
  1194. ring->dispatch_execbuffer = i830_dispatch_execbuffer;
  1195. else
  1196. ring->dispatch_execbuffer = i915_dispatch_execbuffer;
  1197. ring->init = init_render_ring;
  1198. ring->cleanup = render_ring_cleanup;
  1199. if (!I915_NEED_GFX_HWS(dev)) {
  1200. ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
  1201. memset(ring->status_page.page_addr, 0, PAGE_SIZE);
  1202. }
  1203. return intel_init_ring_buffer(dev, ring);
  1204. }
  1205. int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size)
  1206. {
  1207. drm_i915_private_t *dev_priv = dev->dev_private;
  1208. struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
  1209. ring->name = "render ring";
  1210. ring->id = RCS;
  1211. ring->mmio_base = RENDER_RING_BASE;
  1212. if (INTEL_INFO(dev)->gen >= 6) {
  1213. /* non-kms not supported on gen6+ */
  1214. return -ENODEV;
  1215. }
  1216. /* Note: gem is not supported on gen5/ilk without kms (the corresponding
  1217. * gem_init ioctl returns with -ENODEV). Hence we do not need to set up
  1218. * the special gen5 functions. */
  1219. ring->add_request = i9xx_add_request;
  1220. if (INTEL_INFO(dev)->gen < 4)
  1221. ring->flush = gen2_render_ring_flush;
  1222. else
  1223. ring->flush = gen4_render_ring_flush;
  1224. ring->get_seqno = ring_get_seqno;
  1225. if (IS_GEN2(dev)) {
  1226. ring->irq_get = i8xx_ring_get_irq;
  1227. ring->irq_put = i8xx_ring_put_irq;
  1228. } else {
  1229. ring->irq_get = i9xx_ring_get_irq;
  1230. ring->irq_put = i9xx_ring_put_irq;
  1231. }
  1232. ring->irq_enable_mask = I915_USER_INTERRUPT;
  1233. ring->write_tail = ring_write_tail;
  1234. if (INTEL_INFO(dev)->gen >= 4)
  1235. ring->dispatch_execbuffer = i965_dispatch_execbuffer;
  1236. else if (IS_I830(dev) || IS_845G(dev))
  1237. ring->dispatch_execbuffer = i830_dispatch_execbuffer;
  1238. else
  1239. ring->dispatch_execbuffer = i915_dispatch_execbuffer;
  1240. ring->init = init_render_ring;
  1241. ring->cleanup = render_ring_cleanup;
  1242. if (!I915_NEED_GFX_HWS(dev))
  1243. ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
  1244. ring->dev = dev;
  1245. INIT_LIST_HEAD(&ring->active_list);
  1246. INIT_LIST_HEAD(&ring->request_list);
  1247. INIT_LIST_HEAD(&ring->gpu_write_list);
  1248. ring->size = size;
  1249. ring->effective_size = ring->size;
  1250. if (IS_I830(ring->dev))
  1251. ring->effective_size -= 128;
  1252. ring->virtual_start = ioremap_wc(start, size);
  1253. if (ring->virtual_start == NULL) {
  1254. DRM_ERROR("can not ioremap virtual address for"
  1255. " ring buffer\n");
  1256. return -ENOMEM;
  1257. }
  1258. return 0;
  1259. }
  1260. int intel_init_bsd_ring_buffer(struct drm_device *dev)
  1261. {
  1262. drm_i915_private_t *dev_priv = dev->dev_private;
  1263. struct intel_ring_buffer *ring = &dev_priv->ring[VCS];
  1264. ring->name = "bsd ring";
  1265. ring->id = VCS;
  1266. ring->write_tail = ring_write_tail;
  1267. if (IS_GEN6(dev) || IS_GEN7(dev)) {
  1268. ring->mmio_base = GEN6_BSD_RING_BASE;
  1269. /* gen6 bsd needs a special wa for tail updates */
  1270. if (IS_GEN6(dev))
  1271. ring->write_tail = gen6_bsd_ring_write_tail;
  1272. ring->flush = gen6_ring_flush;
  1273. ring->add_request = gen6_add_request;
  1274. ring->get_seqno = gen6_ring_get_seqno;
  1275. ring->irq_enable_mask = GEN6_BSD_USER_INTERRUPT;
  1276. ring->irq_get = gen6_ring_get_irq;
  1277. ring->irq_put = gen6_ring_put_irq;
  1278. ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
  1279. ring->sync_to = gen6_ring_sync;
  1280. ring->semaphore_register[0] = MI_SEMAPHORE_SYNC_VR;
  1281. ring->semaphore_register[1] = MI_SEMAPHORE_SYNC_INVALID;
  1282. ring->semaphore_register[2] = MI_SEMAPHORE_SYNC_VB;
  1283. ring->signal_mbox[0] = GEN6_RVSYNC;
  1284. ring->signal_mbox[1] = GEN6_BVSYNC;
  1285. } else {
  1286. ring->mmio_base = BSD_RING_BASE;
  1287. ring->flush = bsd_ring_flush;
  1288. ring->add_request = i9xx_add_request;
  1289. ring->get_seqno = ring_get_seqno;
  1290. if (IS_GEN5(dev)) {
  1291. ring->irq_enable_mask = GT_BSD_USER_INTERRUPT;
  1292. ring->irq_get = gen5_ring_get_irq;
  1293. ring->irq_put = gen5_ring_put_irq;
  1294. } else {
  1295. ring->irq_enable_mask = I915_BSD_USER_INTERRUPT;
  1296. ring->irq_get = i9xx_ring_get_irq;
  1297. ring->irq_put = i9xx_ring_put_irq;
  1298. }
  1299. ring->dispatch_execbuffer = i965_dispatch_execbuffer;
  1300. }
  1301. ring->init = init_ring_common;
  1302. return intel_init_ring_buffer(dev, ring);
  1303. }
  1304. int intel_init_blt_ring_buffer(struct drm_device *dev)
  1305. {
  1306. drm_i915_private_t *dev_priv = dev->dev_private;
  1307. struct intel_ring_buffer *ring = &dev_priv->ring[BCS];
  1308. ring->name = "blitter ring";
  1309. ring->id = BCS;
  1310. ring->mmio_base = BLT_RING_BASE;
  1311. ring->write_tail = ring_write_tail;
  1312. ring->flush = blt_ring_flush;
  1313. ring->add_request = gen6_add_request;
  1314. ring->get_seqno = gen6_ring_get_seqno;
  1315. ring->irq_enable_mask = GEN6_BLITTER_USER_INTERRUPT;
  1316. ring->irq_get = gen6_ring_get_irq;
  1317. ring->irq_put = gen6_ring_put_irq;
  1318. ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
  1319. ring->sync_to = gen6_ring_sync;
  1320. ring->semaphore_register[0] = MI_SEMAPHORE_SYNC_BR;
  1321. ring->semaphore_register[1] = MI_SEMAPHORE_SYNC_BV;
  1322. ring->semaphore_register[2] = MI_SEMAPHORE_SYNC_INVALID;
  1323. ring->signal_mbox[0] = GEN6_RBSYNC;
  1324. ring->signal_mbox[1] = GEN6_VBSYNC;
  1325. ring->init = init_ring_common;
  1326. return intel_init_ring_buffer(dev, ring);
  1327. }