• Jani Nikula's avatar
    drm/i915: fix FORCEWAKE posting reads · b5144075
    Jani Nikula authored
    We stopped reading FORCEWAKE for posting reads in
    
    commit 8dee3eea
    Author: Ben Widawsky <ben@bwidawsk.net>
    Date:   Sat Sep 1 22:59:50 2012 -0700
    
        drm/i915: Never read FORCEWAKE
    
    and started using something from the same cacheline instead. On the
    bug reporter's machine this broke entering rc6 states after a
    suspend/resume cycle. It turns out reading ECOBUS as posting read
    worked fine, while GTFIFODBG did not, preventing RC6 states after
    suspend/resume per the bug report referenced below. It's not entirely
    clear why, but clearly GTFIFODBG was nowhere near the same cacheline
    or address range as FORCEWAKE.
    
    Trying out various registers for posting reads showed that all tested
    registers for which NEEDS_FORCE_WAKE() (in i915_drv.c) returns true
    work. Conversely, most (but not quite all) registers for which
    NEEDS_FORCE_WAKE() returns false do not work. Details in the referenced
    bug.
    
    Based on the above, add posting reads on ECOBUS where GTFIFODBG was
    previously relied on.
    
    In true cargo cult spirit, add posting reads for FORCEWAKE_VLV writes as
    well, but instead of ECOBUS, use FORCEWAKE_ACK_VLV which is in the same
    address range as FORCEWAKE_VLV.
    
    v2: Add more details to the commit message. No functional changes.
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=52411Reported-and-tested-by: default avatarAlexander Bersenev <bay@hackerdom.ru>
    CC: Ben Widawsky <ben@bwidawsk.net>
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: stable@vger.kernel.org
    [danvet: add cc: stable and make the commit message a bit clearer that
    this is a regression fix and what exactly broke.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    b5144075
intel_pm.c 124 KB