2 * Copyright (C) 2011-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
4 * SPDX-License-Identifier: GPL-2.0+
10 #include <mach/sc-regs.h>
11 #include <mach/sg-regs.h>
13 static void dpll_init(void)
17 * Set DPLL SSC parameters for DPLLCTRL3
20 * [10] FREFSEL_TEST 0x1
25 tmp = readl(SC_DPLLCTRL3);
28 writel(tmp, SC_DPLLCTRL3);
31 * Set DPLL SSC parameters for DPLLCTRL
33 * [29:20] SSC_UPCNT 132 (0x084) 132 (0x084)
34 * [14:0] SSC_dK 6335(0x18bf) 12710(0x31a6)
36 tmp = readl(SC_DPLLCTRL);
38 #ifdef CONFIG_DPLL_SSC_RATE_1PER
43 writel(tmp, SC_DPLLCTRL);
46 * Set DPLL SSC parameters for DPLLCTRL2
49 * [26:20] SSC_M 79 (0x4f)
50 * [19:0] SSC_K 964689 (0xeb851)
52 tmp = readl(SC_DPLLCTRL2);
55 writel(tmp, SC_DPLLCTRL2);
58 static void upll_init(void)
60 u32 tmp, clk_mode_upll, clk_mode_axosel;
62 tmp = readl(SG_PINMON0);
63 clk_mode_upll = tmp & SG_PINMON0_CLK_MODE_UPLLSRC_MASK;
64 clk_mode_axosel = tmp & SG_PINMON0_CLK_MODE_AXOSEL_MASK;
66 /* set 0 to SNRT(UPLLCTRL.bit28) and K_LD(UPLLCTRL.bit[27]) */
67 tmp = readl(SC_UPLLCTRL);
69 writel(tmp, SC_UPLLCTRL);
71 if (clk_mode_upll == SG_PINMON0_CLK_MODE_UPLLSRC_DEFAULT) {
72 if (clk_mode_axosel == SG_PINMON0_CLK_MODE_AXOSEL_25000KHZ_U ||
73 clk_mode_axosel == SG_PINMON0_CLK_MODE_AXOSEL_25000KHZ_A) {
78 /* AXO: default 24.576MHz */
84 writel(tmp, SC_UPLLCTRL);
86 /* set 1 to K_LD(UPLLCTRL.bit[27]) */
88 writel(tmp, SC_UPLLCTRL);
93 /* set 1 to SNRT(UPLLCTRL.bit[28]) */
95 writel(tmp, SC_UPLLCTRL);
98 static void vpll_init(void)
100 u32 tmp, clk_mode_axosel;
102 tmp = readl(SG_PINMON0);
103 clk_mode_axosel = tmp & SG_PINMON0_CLK_MODE_AXOSEL_MASK;
105 /* set 1 to VPLA27WP and VPLA27WP */
106 tmp = readl(SC_VPLL27ACTRL);
108 writel(tmp, SC_VPLL27ACTRL);
109 tmp = readl(SC_VPLL27BCTRL);
111 writel(tmp, SC_VPLL27BCTRL);
113 /* Set 0 to VPLA_K_LD and VPLB_K_LD */
114 tmp = readl(SC_VPLL27ACTRL3);
116 writel(tmp, SC_VPLL27ACTRL3);
117 tmp = readl(SC_VPLL27BCTRL3);
119 writel(tmp, SC_VPLL27BCTRL3);
121 /* Set 0 to VPLA_SNRST and VPLB_SNRST */
122 tmp = readl(SC_VPLL27ACTRL2);
124 writel(tmp, SC_VPLL27ACTRL2);
125 tmp = readl(SC_VPLL27BCTRL2);
127 writel(tmp, SC_VPLL27BCTRL2);
129 /* Set 0x20 to VPLA_SNRST and VPLB_SNRST */
130 tmp = readl(SC_VPLL27ACTRL2);
133 writel(tmp, SC_VPLL27ACTRL2);
134 tmp = readl(SC_VPLL27BCTRL2);
137 writel(tmp, SC_VPLL27BCTRL2);
139 if (clk_mode_axosel == SG_PINMON0_CLK_MODE_AXOSEL_25000KHZ_U ||
140 clk_mode_axosel == SG_PINMON0_CLK_MODE_AXOSEL_25000KHZ_A) {
142 tmp = readl(SC_VPLL27ACTRL3);
145 writel(tmp, SC_VPLL27ACTRL3);
146 tmp = readl(SC_VPLL27BCTRL3);
149 writel(tmp, SC_VPLL27BCTRL3);
151 /* AXO: default 24.576MHz */
152 tmp = readl(SC_VPLL27ACTRL3);
155 writel(tmp, SC_VPLL27ACTRL3);
156 tmp = readl(SC_VPLL27BCTRL3);
159 writel(tmp, SC_VPLL27BCTRL3);
162 /* Set 1 to VPLA_K_LD and VPLB_K_LD */
163 tmp = readl(SC_VPLL27ACTRL3);
165 writel(tmp, SC_VPLL27ACTRL3);
166 tmp = readl(SC_VPLL27BCTRL3);
168 writel(tmp, SC_VPLL27BCTRL3);
173 /* Set 0 to VPLA_SNRST and VPLB_SNRST */
174 tmp = readl(SC_VPLL27ACTRL2);
176 writel(tmp, SC_VPLL27ACTRL2);
177 tmp = readl(SC_VPLL27BCTRL2);
179 writel(tmp, SC_VPLL27BCTRL2);
181 /* set 0 to VPLA27WP and VPLA27WP */
182 tmp = readl(SC_VPLL27ACTRL);
184 writel(tmp, SC_VPLL27ACTRL);
185 tmp = readl(SC_VPLL27BCTRL);
187 writel(tmp, SC_VPLL27BCTRL);
190 int ph1_sld8_pll_init(const struct uniphier_board_data *bd)
197 * Wait 500 usec until dpll get stable
198 * We wait 10 usec in upll_init() and vpll_init()
199 * so 20 usec can be saved here.