• Damien Lespiau's avatar
    drm/i915/bdw: Let the memory controller do all the swizzling · be292e15
    Damien Lespiau authored
    Previously, it was possible for the GPU memory accesses to be swizzled
    to try to optimize the fetches for tiled buffers. This swizzling was on
    top of what the memory controller in the uncore already does.
    
    With broadwell, we drop that GPU side swizzling, and the corresponding
    initialization in 3 units (GAM, GT, DE). All those bits are reserved, as
    specs put it:
    
      Before Gen8, there was a historical configuration control field to
      swizzle address bit[6] for in X/Y tiling modes. This was set in three
      different places: TILECTL[1:0], ARB_MODE[5:4], and
      DISP_ARB_CTL[14:13]"
    
      For Gen8 the swizzle fields are all reserved, and the CPU's memory
      controller performs all address swizzling modifications.
    
    This also means that user space doesn't have to manually swizzle when
    accessing tiled buffers from the CPU, and so we always return
    I915_BIT_6_SWIZZLE_NONE from i915_gem_detect_bit_6_swizzle(), which
    short-circuits the initialization of the registers mentionned above in
    i915_gem_init_swizzling().
    
    v2: Refine the explanation a bit more (Daniel)
    v3: Make it BDW+ specific (Steve)
    
    Cc: Steve Aarnio <steve.j.aarnio@linux.intel.com>
    Signed-off-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
    [danvet: Keep the actual code to set the tiling bits for now, in case
    some bios escaped to the wild that uses this - we'd need it for
    fastboot.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    be292e15
i915_gem_tiling.c 16.5 KB