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