• Chris Wilson's avatar
    drm/i915: Use a hybrid scheme for fast register waits · 1758b90e
    Chris Wilson authored
    Ville Syrjälä reported that in the majority of wait_for(I915_READ()) he
    inspect, most completed within the first couple of reads and that the
    delay between those wait_for() reads was the ratelimiting step for many
    code paths. For example, __gen6_update_ring_freq() was blamed for
    slowing down boot by many milliseconds, but under Ville's scrutiny the
    issue was just excessive delay waiting for sandybridge_pcode_write().
    
    We can eliminate the wait by initially using a busyspin upon the register
    read and only fallback to the sleeping loop in cases where the hardware
    is indeed too slow. A threshold of 2 microseconds is used as the initial
    ballpark.
    
    To avoid excessive code bloating from converting every wait_for() into a
    hybrid busy/sleep loop, we extend wait_for_register_fw() and export it
    for use by other callers.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Mika Kuoppala <mika.kuoppala@intel.com>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1467297225-21379-1-git-send-email-chris@chris-wilson.co.uk
    1758b90e
intel_uncore.c 51.2 KB