• Mario Kleiner's avatar
    drm/nouveau/kms/nv50-: Allow vblank_disable_immediate · 2ae4c5f6
    Mario Kleiner authored
    With instantaneous high precision vblank timestamping
    that updates at leading edge of vblank, the emulated
    "hw vblank counter" from vblank timestamping, which
    increments at leading edge of vblank, and reliable
    page flip execution and completion at leading edge of
    vblank, we should meet the requirements for fast/
    immediate vblank irq disable/enable.
    
    This is only allowed on nv50+ gpu's, ie. the ones with
    atomic modesetting. One requirement for immediate vblank
    disable is that high precision vblank timestamping works
    reliably all the time on all connectors. This is not the
    case on all pre-nv50 parts for analog VGA outputs, where we
    currently don't always have support for scanout position
    queries and therefore fall back to vblank interrupt
    timestamping. The implementation in nv04_head_state() does
    not return valid values for vblanks, vtotal, hblanks, htotal
    for VGA outputs on all cards, but those are needed for scanout
    position queries.
    
    Testing on Linux-4.12-rc5 + drm-next on a GeForce 9500 GT
    (NV G96) with timing measurement equipment indicates this
    works fine, so allow immediate vblank disable for power
    saving.
    
    For debugging in case of unexpected trouble, booting
    with kernel cmdline option drm.vblankoffdelay=0
    (or echo 0 > /sys/module/drm/parameters/vblankoffdelay)
    would keep vblank irqs permanently on to approximate old
    behavior.
    Signed-off-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
    Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
    2ae4c5f6
disp.c 58.5 KB