• Laurent Pinchart's avatar
    drm: rcar-du: lvds: Fix post-DLL divider calculation · 6eb883c4
    Laurent Pinchart authored
    [ Upstream commit 167e5354 ]
    
    The PLL parameters are computed by looping over the range of acceptable
    M, N and E values, and selecting the combination that produces the
    output frequency closest to the target. The internal frequency
    constraints are taken into account by restricting the tested values for
    the PLL parameters, reducing the search space. The target frequency,
    however, is only taken into account when computing the post-PLL divider,
    which can result in a 0 value for the divider when the PLL output
    frequency being tested is lower than half of the target frequency.
    Subsequent loops will produce a better set of PLL parameters, but for
    some of the iterations this can result in a division by 0.
    
    Fix it by clamping the divider value. We could instead restrict the E
    values being tested in the inner loop, but that would require additional
    calculation that would likely be less efficient as the E parameter can
    only take three different values.
    
    Fixes: c25c0136 ("drm: rcar-du: lvds: D3/E3 support")
    Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Reviewed-by: default avatarKieran Bingham <kieran.bingham+renesas@ideasonboard.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    6eb883c4
rcar_lvds.c 23.6 KB