blob: 1ac52d11f34ad2854d660fffbe4c018772596c66 [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Masahiro Yamada5894ca02014-10-03 19:21:06 +09002/*
Masahiro Yamada6a3e4272016-09-17 03:33:09 +09003 * Copyright (C) 2013-2014 Panasonic Corporation
4 * Copyright (C) 2015-2016 Socionext Inc.
Masahiro Yamada5894ca02014-10-03 19:21:06 +09005 */
6
Masahiro Yamadad9a70362017-01-21 18:05:25 +09007#include <linux/delay.h>
Masahiro Yamadaf6e7f072015-05-29 17:30:00 +09008#include <linux/io.h>
Masahiro Yamada107b3fb2016-01-09 01:51:13 +09009
10#include "../init.h"
11#include "../sc-regs.h"
Masahiro Yamada5894ca02014-10-03 19:21:06 +090012
Masahiro Yamada6a3e4272016-09-17 03:33:09 +090013int uniphier_sld8_dpll_init(const struct uniphier_board_data *bd)
Masahiro Yamada5894ca02014-10-03 19:21:06 +090014{
15 u32 tmp;
16 /*
17 * Set DPLL SSC parameters for DPLLCTRL3
18 * [23] DIVN_TEST 0x1
19 * [22:16] DIVN 0x50
20 * [10] FREFSEL_TEST 0x1
21 * [9:8] FREFSEL 0x2
22 * [4] ICPD_TEST 0x1
23 * [3:0] ICPD 0xb
24 */
Masahiro Yamada739ba412019-07-10 20:07:41 +090025 tmp = readl(sc_base + SC_DPLLCTRL3);
Masahiro Yamada5894ca02014-10-03 19:21:06 +090026 tmp &= ~0x00ff0717;
27 tmp |= 0x00d0061b;
Masahiro Yamada739ba412019-07-10 20:07:41 +090028 writel(tmp, sc_base + SC_DPLLCTRL3);
Masahiro Yamada5894ca02014-10-03 19:21:06 +090029
30 /*
31 * Set DPLL SSC parameters for DPLLCTRL
32 * <-1%> <-2%>
33 * [29:20] SSC_UPCNT 132 (0x084) 132 (0x084)
34 * [14:0] SSC_dK 6335(0x18bf) 12710(0x31a6)
35 */
Masahiro Yamada739ba412019-07-10 20:07:41 +090036 tmp = readl(sc_base + SC_DPLLCTRL);
Masahiro Yamada5894ca02014-10-03 19:21:06 +090037 tmp &= ~0x3ff07fff;
Masahiro Yamada22de6b32016-09-17 03:33:08 +090038#ifdef DPLL_SSC_RATE_1PER
Masahiro Yamada5894ca02014-10-03 19:21:06 +090039 tmp |= 0x084018bf;
40#else
41 tmp |= 0x084031a6;
42#endif
Masahiro Yamada739ba412019-07-10 20:07:41 +090043 writel(tmp, sc_base + SC_DPLLCTRL);
Masahiro Yamada5894ca02014-10-03 19:21:06 +090044
45 /*
46 * Set DPLL SSC parameters for DPLLCTRL2
47 * [31:29] SSC_STEP 0
48 * [27] SSC_REG_REF 1
49 * [26:20] SSC_M 79 (0x4f)
50 * [19:0] SSC_K 964689 (0xeb851)
51 */
Masahiro Yamada739ba412019-07-10 20:07:41 +090052 tmp = readl(sc_base + SC_DPLLCTRL2);
Masahiro Yamada5894ca02014-10-03 19:21:06 +090053 tmp &= ~0xefffffff;
54 tmp |= 0x0cfeb851;
Masahiro Yamada739ba412019-07-10 20:07:41 +090055 writel(tmp, sc_base + SC_DPLLCTRL2);
Masahiro Yamada5894ca02014-10-03 19:21:06 +090056
Masahiro Yamada6a3e4272016-09-17 03:33:09 +090057 /* Wait 500 usec until dpll gets stable */
58 udelay(500);
Masahiro Yamada323d1f92015-09-22 00:27:39 +090059
60 return 0;
Masahiro Yamada5894ca02014-10-03 19:21:06 +090061}