mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 12:33:18 -04:00
media: ccs-pll: Better validate VT PLL branch
Check that the VT PLL dividers are actually found, don't trust they always are even though they should be. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
This commit is contained in:
committed by
Hans Verkuil
parent
2f19528845
commit
cd9cb0313a
@@ -449,7 +449,7 @@ static int ccs_pll_calculate_vt_tree(struct device *dev,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
ccs_pll_calculate_vt(struct device *dev, const struct ccs_pll_limits *lim,
|
||||
const struct ccs_pll_branch_limits_bk *op_lim_bk,
|
||||
struct ccs_pll *pll, struct ccs_pll_branch_fr *pll_fr,
|
||||
@@ -572,6 +572,8 @@ ccs_pll_calculate_vt(struct device *dev, const struct ccs_pll_limits *lim,
|
||||
if (best_pix_div < SHRT_MAX >> 1)
|
||||
break;
|
||||
}
|
||||
if (best_pix_div == SHRT_MAX >> 1)
|
||||
return -EINVAL;
|
||||
|
||||
pll->vt_bk.sys_clk_div = DIV_ROUND_UP(vt_div, best_pix_div);
|
||||
pll->vt_bk.pix_clk_div = best_pix_div;
|
||||
@@ -584,6 +586,8 @@ ccs_pll_calculate_vt(struct device *dev, const struct ccs_pll_limits *lim,
|
||||
out_calc_pixel_rate:
|
||||
pll->pixel_rate_pixel_array =
|
||||
pll->vt_bk.pix_clk_freq_hz * pll->vt_lanes;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -863,8 +867,10 @@ int ccs_pll_calculate(struct device *dev, const struct ccs_pll_limits *lim,
|
||||
if (pll->flags & CCS_PLL_FLAG_DUAL_PLL)
|
||||
break;
|
||||
|
||||
ccs_pll_calculate_vt(dev, lim, op_lim_bk, pll, op_pll_fr,
|
||||
op_pll_bk, cphy, phy_const);
|
||||
rval = ccs_pll_calculate_vt(dev, lim, op_lim_bk, pll, op_pll_fr,
|
||||
op_pll_bk, cphy, phy_const);
|
||||
if (rval)
|
||||
continue;
|
||||
|
||||
rval = check_bk_bounds(dev, lim, pll, PLL_VT);
|
||||
if (rval)
|
||||
|
||||
Reference in New Issue
Block a user