Skip to content
  • Daniel Vetter's avatar
    drm/i915: fix overlay on i830M · a9193983
    Daniel Vetter authored
    The overlay on the i830M has a peculiar failure mode: It works the
    first time around after boot-up, but consistenly hangs the second time
    it's used.
    
    Chris Wilson has dug out a nice errata:
    
    "1.5.12 Clock Gating Disable for Display Register
    Address Offset:	06200h–06203h
    
    "Bit 3
    Ovrunit Clock Gating Disable.
    0 = Clock gating controlled by unit enabling logic
    1 = Disable clock gating function
    DevALM Errata ALM049: Overlay Clock Gating Must be Disabled:  Overlay
    & L2 Cache clock gating must be disabled in order to prevent device
    hangs when turning off overlay.SW must turn off Ovrunit clock gating
    (6200h) and L2 Cache clock gating (C8h)."
    
    Now I've nowhere found that 0xc8 register and hence couldn't apply the
    l2 cache workaround. But I've remembered that part of the magic that
    the OVERLAY_ON/OFF commands are supposed to do is to rearrange cache
    allocations so that the overlay scaler has some scratch space.
    
    And while pondering how that could explain the hang the 2nd time we
    enable the overlay, I've remembered that the old ums overlay code did
    _not_ issue the OVERLAY_OFF cmd.
    
    And indeed, disabling the OFF cmd results in the overlay working
    flawlessly, so I guess we can workaround the lack of the above
    workaround by simply never disabling the overlay engine once it's
    enabled.
    
    Note that we have the first part of the above w/a already implemented
    in i830_init_clock_gating - leave that as-is to avoid surprises.
    
    v2: Add a comment in the code.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47827
    
    
    Cc: stable@vger.kernel.org
    Tested-by: default avatarRhys <rhyspuk@gmail.com>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    a9193983