• Dave Gordon's avatar
    drm/i915/guc: refactor doorbell management code · a667429b
    Dave Gordon authored
    This patch refactors the driver's handling and tracking of doorbells, in
    preparation for a later one which will resolve a suspend-resume issue.
    
    There are three resources to be managed:
    1. Cachelines: a single line within the client-object's page 0
       is snooped by doorbell hardware for writes from the host.
    2. Doorbell registers: each defines one cacheline to be snooped.
    3. Bitmap: tracks which doorbell registers are in use.
    
    The doorbell setup/teardown protocol starts with:
    1. Pick a cacheline: select_doorbell_cacheline()
    2. Find an available doorbell register: assign_doorbell()
    (These values are passed to the GuC via the shared context
    descriptor; this part of the sequence remains unchanged).
    
    3. Update the bitmap to reflect registers-in-use
    4. Prepare the cacheline for use by setting its status to ENABLED
    5. Ask the GuC to program the doorbell to snoop the cacheline
    
    and of course teardown is very similar:
    6. Set the cacheline to DISABLED
    7. Ask the GuC to reprogram the doorbell to stop snooping
    8. Record that the doorbell is not in use.
    
    Operations 6-8 (guc_disable_doorbell(), host2guc_release_doorbell(), and
    release_doorbell()) were called in sequence from guc_client_free(), but
    are now moved into the teardown phase of the common function.
    
    Steps 4-5 (guc_init_doorbell() and host2guc_allocate_doorbell()) were
    similarly done as sequential steps in guc_client_alloc(), but since it
    turns out that we don't need to be able to do them separately they're
    now collected into the setup phase of the common function.
    
    The only new code (and new capability) is the block tagged
        /* Update the GuC's idea of the doorbell ID */
    i.e. we can now *change* the doorbell register used by an existing
    client, whereas previously it was set once for the entire lifetime
    of the client. We will use this new feature in the next patch.
    
    v2: Trivial independent fixes pushed ahead as separate patches.
        MUCH longer commit message :) [Tvrtko Ursulin]
    Signed-off-by: default avatarDave Gordon <david.s.gordon@intel.com>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    a667429b
i915_guc_submission.c 29.7 KB