mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-14 18:51:41 +00:00
rockchip: clk: rk3368: implement bandwidth adjust for PLLs
The RK3368 TRM recommends to configure the bandwith adjustment (CON2) for PLLs to NF/2. This implements this for all reconfigurations of PLLs and removes the 'has_bwadj' flag (as the RK3368 always has the bandwidth-adjustment feature according to its manual). Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
e95b6312e5
commit
ddfe77df15
1 changed files with 12 additions and 5 deletions
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* (C) Copyright 2017 Rockchip Electronics Co., Ltd
|
* (C) Copyright 2017 Rockchip Electronics Co., Ltd
|
||||||
* Author: Andy Yan <andy.yan@rock-chips.com>
|
* Author: Andy Yan <andy.yan@rock-chips.com>
|
||||||
|
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
|
||||||
* SPDX-License-Identifier: GPL-2.0
|
* SPDX-License-Identifier: GPL-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -74,7 +75,7 @@ static uint32_t rkclk_pll_get_rate(struct rk3368_cru *cru,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rkclk_set_pll(struct rk3368_cru *cru, enum rk3368_pll_id pll_id,
|
static int rkclk_set_pll(struct rk3368_cru *cru, enum rk3368_pll_id pll_id,
|
||||||
const struct pll_div *div, bool has_bwadj)
|
const struct pll_div *div)
|
||||||
{
|
{
|
||||||
struct rk3368_pll *pll = &cru->pll[pll_id];
|
struct rk3368_pll *pll = &cru->pll[pll_id];
|
||||||
/* All PLLs have same VCO and output frequency range restrictions*/
|
/* All PLLs have same VCO and output frequency range restrictions*/
|
||||||
|
@ -92,6 +93,12 @@ static int rkclk_set_pll(struct rk3368_cru *cru, enum rk3368_pll_id pll_id,
|
||||||
((div->nr - 1) << PLL_NR_SHIFT) |
|
((div->nr - 1) << PLL_NR_SHIFT) |
|
||||||
((div->no - 1) << PLL_OD_SHIFT));
|
((div->no - 1) << PLL_OD_SHIFT));
|
||||||
writel((div->nf - 1) << PLL_NF_SHIFT, &pll->con1);
|
writel((div->nf - 1) << PLL_NF_SHIFT, &pll->con1);
|
||||||
|
/*
|
||||||
|
* BWADJ should be set to NF / 2 to ensure the nominal bandwidth.
|
||||||
|
* Compare the RK3368 TRM, section "3.6.4 PLL Bandwidth Adjustment".
|
||||||
|
*/
|
||||||
|
clrsetbits_le32(&pll->con2, PLL_BWADJ_MASK, (div->nf >> 1) - 1);
|
||||||
|
|
||||||
udelay(10);
|
udelay(10);
|
||||||
|
|
||||||
/* return from reset */
|
/* return from reset */
|
||||||
|
@ -111,10 +118,10 @@ static void rkclk_init(struct rk3368_cru *cru)
|
||||||
{
|
{
|
||||||
u32 apllb, aplll, dpll, cpll, gpll;
|
u32 apllb, aplll, dpll, cpll, gpll;
|
||||||
|
|
||||||
rkclk_set_pll(cru, APLLB, &apll_b_init_cfg, false);
|
rkclk_set_pll(cru, APLLB, &apll_b_init_cfg);
|
||||||
rkclk_set_pll(cru, APLLL, &apll_l_init_cfg, false);
|
rkclk_set_pll(cru, APLLL, &apll_l_init_cfg);
|
||||||
rkclk_set_pll(cru, GPLL, &gpll_init_cfg, false);
|
rkclk_set_pll(cru, GPLL, &gpll_init_cfg);
|
||||||
rkclk_set_pll(cru, CPLL, &cpll_init_cfg, false);
|
rkclk_set_pll(cru, CPLL, &cpll_init_cfg);
|
||||||
|
|
||||||
apllb = rkclk_pll_get_rate(cru, APLLB);
|
apllb = rkclk_pll_get_rate(cru, APLLB);
|
||||||
aplll = rkclk_pll_get_rate(cru, APLLL);
|
aplll = rkclk_pll_get_rate(cru, APLLL);
|
||||||
|
|
Loading…
Add table
Reference in a new issue