• Chris Wilson's avatar
    drm/i915: Enable render context support for gen4 (Broadwater to Cantiga) · 9ce9bdb0
    Chris Wilson authored
    Broadwater and the rest of gen4  do support being able to saving and
    reloading context specific registers between contexts, providing isolation
    of the basic GPU state (as programmable by userspace). This allows
    userspace to assume that the GPU retains their state from one batch to the
    next, minimising the amount of state it needs to reload and manually save
    across batches.
    
    v2: CONSTANT_BUFFER woes
    
    Running through piglit turned up an interesting issue, a GPU hang inside
    the context load. The context image includes the CONSTANT_BUFFER command
    that loads an address into a on-gpu buffer, and the context load was
    executing that immediately. However, since it was reading from the GTT
    there is no guarantee that the GTT retains the same configuration as
    when the context was saved, resulting in stray reads and a GPU hang.
    
    Having tried issuing a CONSTANT_BUFFER (to disable the command) from the
    ring before saving the context to no avail, we resort to patching out
    the instruction inside the context image before loading.
    
    This does impose that gen4 always reissues CONSTANT_BUFFER commands on
    each batch, but due to the use of a shared GTT that was and will remain
    a requirement.
    
    v3: ECOSKPD to the rescue
    
    Ville found the magic bit in the ECOSKPD to disable saving and restoring
    the CONSTANT_BUFFER from the context image, thereby completely avoiding
    the GPU hangs from chasing invalid pointers. This appears to be the
    default behaviour for gen5, and so we just need to tweak gen4 to match.
    
    v4: Fix spelling of ECOSKPD and discover it already exists
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: default avatarKenneth Graunke <kenneth@whitecape.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190419172720.5462-1-chris@chris-wilson.co.uk
    9ce9bdb0
intel_ringbuffer.c 60.6 KB