xref: /rk3399_rockchip-uboot/arch/arm/mach-uniphier/clk/dpll-sld8.c (revision 0c9e85f67cd86d2d7a3424ea3ebff0e6db7a3915)
1fcc238baSMasahiro Yamada /*
2fcc238baSMasahiro Yamada  * Copyright (C) 2013-2014 Panasonic Corporation
3fcc238baSMasahiro Yamada  * Copyright (C) 2015-2016 Socionext Inc.
4fcc238baSMasahiro Yamada  *
5fcc238baSMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
6fcc238baSMasahiro Yamada  */
7fcc238baSMasahiro Yamada 
8*d9a70368SMasahiro Yamada #include <linux/delay.h>
9fcc238baSMasahiro Yamada #include <linux/io.h>
10fcc238baSMasahiro Yamada 
11fcc238baSMasahiro Yamada #include "../init.h"
12fcc238baSMasahiro Yamada #include "../sc-regs.h"
13fcc238baSMasahiro Yamada 
uniphier_sld8_dpll_init(const struct uniphier_board_data * bd)14fcc238baSMasahiro Yamada int uniphier_sld8_dpll_init(const struct uniphier_board_data *bd)
15fcc238baSMasahiro Yamada {
16fcc238baSMasahiro Yamada 	u32 tmp;
17fcc238baSMasahiro Yamada 	/*
18fcc238baSMasahiro Yamada 	 * Set DPLL SSC parameters for DPLLCTRL3
19fcc238baSMasahiro Yamada 	 * [23]    DIVN_TEST    0x1
20fcc238baSMasahiro Yamada 	 * [22:16] DIVN         0x50
21fcc238baSMasahiro Yamada 	 * [10]    FREFSEL_TEST 0x1
22fcc238baSMasahiro Yamada 	 * [9:8]   FREFSEL      0x2
23fcc238baSMasahiro Yamada 	 * [4]     ICPD_TEST    0x1
24fcc238baSMasahiro Yamada 	 * [3:0]   ICPD         0xb
25fcc238baSMasahiro Yamada 	 */
26fcc238baSMasahiro Yamada 	tmp = readl(SC_DPLLCTRL3);
27fcc238baSMasahiro Yamada 	tmp &= ~0x00ff0717;
28fcc238baSMasahiro Yamada 	tmp |= 0x00d0061b;
29fcc238baSMasahiro Yamada 	writel(tmp, SC_DPLLCTRL3);
30fcc238baSMasahiro Yamada 
31fcc238baSMasahiro Yamada 	/*
32fcc238baSMasahiro Yamada 	 * Set DPLL SSC parameters for DPLLCTRL
33fcc238baSMasahiro Yamada 	 *                    <-1%>          <-2%>
34fcc238baSMasahiro Yamada 	 * [29:20] SSC_UPCNT 132 (0x084)    132  (0x084)
35fcc238baSMasahiro Yamada 	 * [14:0]  SSC_dK    6335(0x18bf)   12710(0x31a6)
36fcc238baSMasahiro Yamada 	 */
37fcc238baSMasahiro Yamada 	tmp = readl(SC_DPLLCTRL);
38fcc238baSMasahiro Yamada 	tmp &= ~0x3ff07fff;
39fcc238baSMasahiro Yamada #ifdef DPLL_SSC_RATE_1PER
40fcc238baSMasahiro Yamada 	tmp |= 0x084018bf;
41fcc238baSMasahiro Yamada #else
42fcc238baSMasahiro Yamada 	tmp |= 0x084031a6;
43fcc238baSMasahiro Yamada #endif
44fcc238baSMasahiro Yamada 	writel(tmp, SC_DPLLCTRL);
45fcc238baSMasahiro Yamada 
46fcc238baSMasahiro Yamada 	/*
47fcc238baSMasahiro Yamada 	 * Set DPLL SSC parameters for DPLLCTRL2
48fcc238baSMasahiro Yamada 	 * [31:29]  SSC_STEP     0
49fcc238baSMasahiro Yamada 	 * [27]     SSC_REG_REF  1
50fcc238baSMasahiro Yamada 	 * [26:20]  SSC_M        79     (0x4f)
51fcc238baSMasahiro Yamada 	 * [19:0]   SSC_K        964689 (0xeb851)
52fcc238baSMasahiro Yamada 	 */
53fcc238baSMasahiro Yamada 	tmp = readl(SC_DPLLCTRL2);
54fcc238baSMasahiro Yamada 	tmp &= ~0xefffffff;
55fcc238baSMasahiro Yamada 	tmp |= 0x0cfeb851;
56fcc238baSMasahiro Yamada 	writel(tmp, SC_DPLLCTRL2);
57fcc238baSMasahiro Yamada 
58fcc238baSMasahiro Yamada 	/* Wait 500 usec until dpll gets stable */
59fcc238baSMasahiro Yamada 	udelay(500);
60fcc238baSMasahiro Yamada 
61fcc238baSMasahiro Yamada 	return 0;
62fcc238baSMasahiro Yamada }
63