• Ben Widawsky's avatar
    drm/i915/bdw: Implement context switching (somewhat) · 84b790f8
    Ben Widawsky authored
    A context switch occurs by submitting a context descriptor to the
    ExecList Submission Port. Given that we can now initialize a context,
    it's possible to begin implementing the context switch by creating the
    descriptor and submitting it to ELSP (actually two, since the ELSP
    has two ports).
    
    The context object must be mapped in the GGTT, which means it must exist
    in the 0-4GB graphics VA range.
    Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
    
    v2: This code has changed quite a lot in various rebases. Of particular
    importance is that now we use the globally unique Submission ID to send
    to the hardware. Also, context pages are now pinned unconditionally to
    GGTT, so there is no need to bind them.
    
    v3: Use LRCA[31:12] as hwCtxId[19:0]. This guarantees that the HW context
    ID we submit to the ELSP is globally unique and != 0 (Bspec requirements
    of the software use-only bits of the Context ID in the Context Descriptor
    Format) without the hassle of the previous submission Id construction.
    Also, re-add the ELSP porting read (it was dropped somewhere during the
    rebases).
    
    v4:
    - Squash with "drm/i915/bdw: Add forcewake lock around ELSP writes" (BSPEC
      says: "SW must set Force Wakeup bit to prevent GT from entering C6 while
      ELSP writes are in progress") as noted by Thomas Daniel
      (thomas.daniel@intel.com).
    - Rename functions and use an execlists/intel_execlists_ namespace.
    - The BUG_ON only checked that the LRCA was <32 bits, but it didn't make
      sure that it was properly aligned. Spotted by Alistair Mcaulay
      <alistair.mcaulay@intel.com>.
    
    v5:
    - Improved source code comments as suggested by Chris Wilson.
    - No need to abstract submit_ctx away, as pointed by Brad Volkin.
    Signed-off-by: default avatarOscar Mateo <oscar.mateo@intel.com>
    Reviewed-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
    [danvet: Checkpatch. Sigh.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    84b790f8
intel_lrc.c 34.5 KB