• Oscar Mateo's avatar
    drm/i915/bdw: Populate LR contexts (somewhat) · 8670d6f9
    Oscar Mateo authored
    For the most part, logical ring context objects are similar to hardware
    contexts in that the backing object is meant to be opaque. There are
    some exceptions where we need to poke certain offsets of the object for
    initialization, updating the tail pointer or updating the PDPs.
    
    For our basic execlist implementation we'll only need our PPGTT PDs,
    and ringbuffer addresses in order to set up the context. With previous
    patches, we have both, so start prepping the context to be load.
    
    Before running a context for the first time you must populate some
    fields in the context object. These fields begin 1 PAGE + LRCA, ie. the
    first page (in 0 based counting) of the context  image. These same
    fields will be read and written to as contexts are saved and restored
    once the system is up and running.
    
    Many of these fields are completely reused from previous global
    registers: ringbuffer head/tail/control, context control matches some
    previous MI_SET_CONTEXT flags, and page directories. There are other
    fields which we don't touch which we may want in the future.
    
    v2: CTX_LRI_HEADER_0 is MI_LOAD_REGISTER_IMM(14) for render and (11)
    for other engines.
    
    v3: Several rebases and general changes to the code.
    
    v4: Squash with "Extract LR context object populating"
    Also, Damien's review comments:
    - Set the Force Posted bit on the LRI header, as the BSpec suggest we do.
    - Prevent warning when compiling a 32-bits kernel without HIGHMEM64.
    - Add a clarifying comment to the context population code.
    
    v5: Damien's review comments:
    - The third MI_LOAD_REGISTER_IMM in the context does not set Force Posted.
    - Remove dead code.
    
    v6: Add a note about the (presumed) differences between BDW and CHV state
    contexts. Also, Brad's review comments:
    - Use the _MASKED_BIT_ENABLE, upper_32_bits and lower_32_bits macros.
    - Be less magical about how we set the ring size in the context.
    
    Signed-off-by: Ben Widawsky <ben@bwidawsk.net> (v1)
    Signed-off-by: Rafael Barbalho <rafael.barbalho@intel.com> (v2)
    Signed-off-by: default avatarOscar Mateo <oscar.mateo@intel.com>
    Reviewed-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    8670d6f9
intel_lrc.c 10.3 KB