• Tvrtko Ursulin's avatar
    drm/i915: Record GT workarounds in a list · 00936779
    Tvrtko Ursulin authored
    To enable later verification of GT workaround state at various stages of
    driver lifetime, we record the list of applicable ones per platforms to a
    list, from which they are also applied.
    
    The added data structure is a simple array of register, mask and value
    items, which is allocated on demand as workarounds are added to the list.
    
    This is a temporary implementation which later in the series gets fused
    with the existing per context workaround list handling. It is separated at
    this stage since the following patch fixes a bug which needs to be as easy
    to backport as possible.
    
    Also, since in the following patch we will be adding a new class of
    workarounds (per engine) which can be applied from interrupt context, we
    straight away make the provision for safe read-modify-write cycle.
    
    v2:
     * Change dev_priv to i915 along the init path. (Chris Wilson)
     * API rename. (Chris Wilson)
    
    v3:
     * Remove explicit list size tracking in favour of growing the allocation
       in power of two chunks. (Chris Wilson)
    
    v4:
     Chris Wilson:
     * Change wa_list_finish to early return.
     * Copy workarounds using the compiler for static checking.
     * Do not bother zeroing unused entries.
     * Re-order struct i915_wa_list.
    
    v5:
     * kmalloc_array.
     * Whitespace cleanup.
    Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Link: https://patchwork.freedesktop.org/patch/msgid/20181203133319.10174-1-tvrtko.ursulin@linux.intel.com
    (cherry picked from commit 25d140fa)
    Fixes: 59b449d5 ("drm/i915: Split out functions for different kinds of workarounds")
    Signed-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    00936779
intel_workarounds.c 32.9 KB