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 Yamadaint 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