rockchip: clk: rk3368: implement DPLL (DRAM PLL) support
To implement a TPL stage (incl. its DRAM controller setup) for the RK3368, we'll want to configure the DPLL (DRAM PLL). This commit implements setting the DPLL (CLK_DDR) and provides PLL configuration details for the common DRAM operating speeds found on RK3368 boards. Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
4bebf94e85
commit
a00dfa042d
@ -250,6 +250,37 @@ static ulong rk3368_clk_get_rate(struct clk *clk)
|
||||
return rate;
|
||||
}
|
||||
|
||||
static ulong rk3368_ddr_set_clk(struct rk3368_cru *cru, ulong set_rate)
|
||||
{
|
||||
const struct pll_div *dpll_cfg = NULL;
|
||||
const ulong MHz = 1000000;
|
||||
|
||||
/* Fout = ((Fin /NR) * NF )/ NO */
|
||||
static const struct pll_div dpll_1200 =
|
||||
PLL_DIVISORS(1200 * MHz, 1, 1);
|
||||
static const struct pll_div dpll_1332 =
|
||||
PLL_DIVISORS(1332 * MHz, 2, 1);
|
||||
static const struct pll_div dpll_1600 =
|
||||
PLL_DIVISORS(1600 * MHz, 3, 2);
|
||||
|
||||
switch (set_rate) {
|
||||
case 1200*MHz:
|
||||
dpll_cfg = &dpll_1200;
|
||||
break;
|
||||
case 1332*MHz:
|
||||
dpll_cfg = &dpll_1332;
|
||||
break;
|
||||
case 1600*MHz:
|
||||
dpll_cfg = &dpll_1600;
|
||||
break;
|
||||
default:
|
||||
error("Unsupported SDRAM frequency!,%ld\n", set_rate);
|
||||
}
|
||||
rkclk_set_pll(cru, DPLL, dpll_cfg);
|
||||
|
||||
return set_rate;
|
||||
}
|
||||
|
||||
static ulong rk3368_clk_set_rate(struct clk *clk, ulong rate)
|
||||
{
|
||||
struct rk3368_clk_priv *priv = dev_get_priv(clk->dev);
|
||||
@ -257,6 +288,10 @@ static ulong rk3368_clk_set_rate(struct clk *clk, ulong rate)
|
||||
|
||||
debug("%s id:%ld rate:%ld\n", __func__, clk->id, rate);
|
||||
switch (clk->id) {
|
||||
case CLK_DDR:
|
||||
ret = rk3368_ddr_set_clk(priv->cru, rate);
|
||||
break;
|
||||
|
||||
case SCLK_SDMMC:
|
||||
case SCLK_EMMC:
|
||||
ret = rk3368_mmc_set_clk(priv->cru, clk->id, rate);
|
||||
|
Loading…
Reference in New Issue
Block a user