• Shashank Sharma's avatar
    drm/i915/icl: Add Multi-segmented gamma support · 02ae8ba9
    Shashank Sharma authored
    ICL introduces a new gamma correction mode in display engine, called
    multi-segmented-gamma mode. This mode allows users to program the
    darker region of the gamma curve with sueprfine precision. An
    example use case for this is HDR curves (like PQ ST-2084).
    
    If we plot a gamma correction curve from value range between 0.0 to 1.0,
    ICL's multi-segment has 3 different sections:
    - superfine segment: 9 values, ranges between 0 - 1/(128 * 256)
    - fine segment: 257 values, ranges between 0 - 1/(128)
    - corase segment: 257 values, ranges between 0 - 1
    
    This patch:
    - Changes gamma LUTs size for ICL/GEN11 to 262144 entries (8 * 128 * 256),
      so that userspace can program with highest precision supported.
    - Changes default gamma mode (non-legacy) to multi-segmented-gamma mode.
    - Adds functions to program/detect multi-segment gamma.
    
    V2: Addressed review comments from Ville
        - separate function for superfine and fine segments.
        - remove enum for segments.
        - reuse last entry of the LUT as gc_max value.
        - replace if() ....cond with switch...case in icl_load_luts.
        - add an entry variable, instead of 'word'
    
    V3: Addressed review comments from Ville
        - extra newline
        - s/entry/color/
        - remove LUT size checks
        - program ilk_lut_12p4_ldw value before ilk_lut_12p4_udw
        - Change the comments in description of fine and coarse segments,
          and try to make more sense.
        - use 8 * 128 instead of 1024
        - add 1 entry in LUT for GCMAX
    
    V4: Addressed review comments from Ville
        - Remove unused macro
        - missing shift entry in blue
        - pick correct entry for GCMAX
        - Added Ville's R-B
    Note: Tested and confirmed the programming sequence of odd/even
    registers in the HW. The correct sequence should be:
    	ilk_lut_12p4_udw
    	ilk_lut_12p4_ldw
    
    v5: Addressed Ville's review comments and renamed odd/even register
    helpers to be more consistent with the values.
    
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Suggested-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: default avatarShashank Sharma <shashank.sharma@intel.com>
    Signed-off-by: default avatarUma Shankar <uma.shankar@intel.com>
    Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/1560321900-18318-5-git-send-email-uma.shankar@intel.com
    02ae8ba9
i915_pci.c 24.6 KB