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