• Stanislav Lisovskiy's avatar
    drm/i915: Ensure DSC has enough BW and stays within HW limits · ce086a32
    Stanislav Lisovskiy authored
    We currently have an issue with some BPPs when using DSC.
    According to the HW team, the reason is that a single VDSC engine
    instance has some BW limitations that must be accounted for.
    So, whenever we approach around 90% of the CDCLK, a second VDSC engine
    has to be used.
    This always means using two slices. However, in our current code,
    the amount of slices is calculated independently of whether
    we need to enable the second VDSC engine or not.
    This leads to some logical issues when, according to the pixel clock needs,
    we need to enable the second VDSC engine.
    But as we calculated previously that we can only use a single slice,
    we can't do that and fail.
    So, we need to fix that so that the number of VDSC engines enabled
    should depend on the number of slices, and the number of slices
    should also depend on BW requirements.
    Lastly, we didn't have BPP limitation for ADLP/MTL/DG2 implemented,
    which says that DSC output BPPs can only be chosen within the range of 8 to 27
    (BSpec 49259).
    All of this applied together allows us to fix existing FIFO underruns,
    which we have in many DSC tests.
    
    v2: - Replace min with clamp_t(Jani Nikula)
        - Fix commit message(Swati Sharma)
        - Added "Closes"(Swati Sharma)
    
    BSpec: 49259
    HSDES: 18027167222
    
    Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/8231Signed-off-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    Reviewed-by: default avatarVinod Govindapillai <vinod.govindapillai@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230306080401.22552-1-stanislav.lisovskiy@intel.com
    ce086a32
intel_dp.c 161 KB