• Paulo Zanoni's avatar
    drm/i915: make sure we write all the DIP data bytes · adf00b26
    Paulo Zanoni authored
    ... even if the actual infoframe is smaller than the maximum possible
    size.
    
    If we don't write all the 32 DIP data bytes the InfoFrame ECC may not
    be correctly calculated in some cases (e.g., when changing the port),
    and this will lead to black screens on HDMI monitors. The ECC value is
    generated by the hardware.
    
    I don't see how this should break anything since we're writing 0 and
    that should be the correct value, so this patch should be safe.
    
    Notice that on IVB and older we actually have 64 bytes available for
    VIDEO_DIP_DATA, but only bytes 0-31 actually store infoframe data: the
    others are either read-only ECC values or marked as "reserved". On HSW
    we only have 32 bytes, and the ECC value is stored on its own separate
    read-only register. See BSpec.
    
    This patch fixes bug #46761, which is marked as a regression
    introduced by commit 4e89ee17:
        drm/i915: set the DIP port on ibx_write_infoframe
    
    Before commit 4e89 we were just failing to send AVI infoframes when we
    needed to change the port, which can lead to black screens in some
    cases. After commit 4e89 we started sending infoframes, but with a
    possibly wrong ECC value. After this patch I hope we start sending
    correct infoframes.
    
    Version 2:
      - Improve commit message
      - Try to make the code more clear
    
    Cc: stable@vger.kernel.org
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=46761Signed-off-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@gmail.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    adf00b26
intel_hdmi.c 28.6 KB