1dc7de222SMasahiro Yamada /* 2dc7de222SMasahiro Yamada * keystone2: common clock header file 3dc7de222SMasahiro Yamada * 4dc7de222SMasahiro Yamada * (C) Copyright 2012-2014 5dc7de222SMasahiro Yamada * Texas Instruments Incorporated, <www.ti.com> 6dc7de222SMasahiro Yamada * 7dc7de222SMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 8dc7de222SMasahiro Yamada */ 9dc7de222SMasahiro Yamada 10dc7de222SMasahiro Yamada #ifndef __ASM_ARCH_CLOCK_H 11dc7de222SMasahiro Yamada #define __ASM_ARCH_CLOCK_H 12dc7de222SMasahiro Yamada 13dc7de222SMasahiro Yamada #ifndef __ASSEMBLY__ 14dc7de222SMasahiro Yamada 15dc7de222SMasahiro Yamada #ifdef CONFIG_SOC_K2HK 16dc7de222SMasahiro Yamada #include <asm/arch/clock-k2hk.h> 17dc7de222SMasahiro Yamada #endif 18dc7de222SMasahiro Yamada 19dc7de222SMasahiro Yamada #ifdef CONFIG_SOC_K2E 20dc7de222SMasahiro Yamada #include <asm/arch/clock-k2e.h> 21dc7de222SMasahiro Yamada #endif 22dc7de222SMasahiro Yamada 23dc7de222SMasahiro Yamada #ifdef CONFIG_SOC_K2L 24dc7de222SMasahiro Yamada #include <asm/arch/clock-k2l.h> 25dc7de222SMasahiro Yamada #endif 26dc7de222SMasahiro Yamada 27*bda920c6SVitaly Andrianov #ifdef CONFIG_SOC_K2G 28*bda920c6SVitaly Andrianov #include <asm/arch/clock-k2g.h> 29*bda920c6SVitaly Andrianov #endif 30*bda920c6SVitaly Andrianov 3174af583eSLokesh Vutla #define CORE_PLL MAIN_PLL 3274af583eSLokesh Vutla #define DDR3_PLL DDR3A_PLL 33*bda920c6SVitaly Andrianov #define NSS_PLL PASS_PLL 34dc7de222SMasahiro Yamada 35fe772ebdSLokesh Vutla #define CLK_LIST(CLK)\ 36fe772ebdSLokesh Vutla CLK(0, core_pll_clk)\ 37fe772ebdSLokesh Vutla CLK(1, pass_pll_clk)\ 38fe772ebdSLokesh Vutla CLK(2, tetris_pll_clk)\ 39fe772ebdSLokesh Vutla CLK(3, ddr3a_pll_clk)\ 40fe772ebdSLokesh Vutla CLK(4, ddr3b_pll_clk)\ 41fe772ebdSLokesh Vutla CLK(5, sys_clk0_clk)\ 42fe772ebdSLokesh Vutla CLK(6, sys_clk0_1_clk)\ 43fe772ebdSLokesh Vutla CLK(7, sys_clk0_2_clk)\ 44fe772ebdSLokesh Vutla CLK(8, sys_clk0_3_clk)\ 45fe772ebdSLokesh Vutla CLK(9, sys_clk0_4_clk)\ 46fe772ebdSLokesh Vutla CLK(10, sys_clk0_6_clk)\ 47fe772ebdSLokesh Vutla CLK(11, sys_clk0_8_clk)\ 48fe772ebdSLokesh Vutla CLK(12, sys_clk0_12_clk)\ 49fe772ebdSLokesh Vutla CLK(13, sys_clk0_24_clk)\ 50fe772ebdSLokesh Vutla CLK(14, sys_clk1_clk)\ 51fe772ebdSLokesh Vutla CLK(15, sys_clk1_3_clk)\ 52fe772ebdSLokesh Vutla CLK(16, sys_clk1_4_clk)\ 53fe772ebdSLokesh Vutla CLK(17, sys_clk1_6_clk)\ 54fe772ebdSLokesh Vutla CLK(18, sys_clk1_12_clk)\ 55fe772ebdSLokesh Vutla CLK(19, sys_clk2_clk)\ 56fe772ebdSLokesh Vutla CLK(20, sys_clk3_clk) 57fe772ebdSLokesh Vutla 58dc7de222SMasahiro Yamada #include <asm/types.h> 59dc7de222SMasahiro Yamada 60dc7de222SMasahiro Yamada #define GENERATE_ENUM(NUM, ENUM) ENUM = NUM, 61dc7de222SMasahiro Yamada #define GENERATE_INDX_STR(NUM, STRING) #NUM"\t- "#STRING"\n" 62dc7de222SMasahiro Yamada #define CLOCK_INDEXES_LIST CLK_LIST(GENERATE_INDX_STR) 63dc7de222SMasahiro Yamada 647b50e159SLokesh Vutla enum { 657b50e159SLokesh Vutla SPD800, 667b50e159SLokesh Vutla SPD850, 677b50e159SLokesh Vutla SPD1000, 687b50e159SLokesh Vutla SPD1200, 697b50e159SLokesh Vutla SPD1250, 707b50e159SLokesh Vutla SPD1350, 717b50e159SLokesh Vutla SPD1400, 727b50e159SLokesh Vutla SPD1500, 737b50e159SLokesh Vutla NUM_SPDS, 747b50e159SLokesh Vutla }; 757b50e159SLokesh Vutla 7674af583eSLokesh Vutla /* PLL identifiers */ 7774af583eSLokesh Vutla enum { 7874af583eSLokesh Vutla MAIN_PLL, 7974af583eSLokesh Vutla TETRIS_PLL, 8074af583eSLokesh Vutla PASS_PLL, 8174af583eSLokesh Vutla DDR3A_PLL, 8274af583eSLokesh Vutla DDR3B_PLL, 83*bda920c6SVitaly Andrianov UART_PLL, 8474af583eSLokesh Vutla MAX_PLL_COUNT, 8574af583eSLokesh Vutla }; 8674af583eSLokesh Vutla 877531122eSLokesh Vutla enum ext_clk_e { 887531122eSLokesh Vutla sys_clk, 897531122eSLokesh Vutla alt_core_clk, 907531122eSLokesh Vutla pa_clk, 917531122eSLokesh Vutla tetris_clk, 927531122eSLokesh Vutla ddr3a_clk, 937531122eSLokesh Vutla ddr3b_clk, 947531122eSLokesh Vutla ext_clk_count /* number of external clocks */ 957531122eSLokesh Vutla }; 967531122eSLokesh Vutla 97dc7de222SMasahiro Yamada enum clk_e { 98dc7de222SMasahiro Yamada CLK_LIST(GENERATE_ENUM) 99dc7de222SMasahiro Yamada }; 100dc7de222SMasahiro Yamada 101dc7de222SMasahiro Yamada struct keystone_pll_regs { 102dc7de222SMasahiro Yamada u32 reg0; 103dc7de222SMasahiro Yamada u32 reg1; 104dc7de222SMasahiro Yamada }; 105dc7de222SMasahiro Yamada 106dc7de222SMasahiro Yamada /* PLL configuration data */ 107dc7de222SMasahiro Yamada struct pll_init_data { 108dc7de222SMasahiro Yamada int pll; 109dc7de222SMasahiro Yamada int pll_m; /* PLL Multiplier */ 110dc7de222SMasahiro Yamada int pll_d; /* PLL divider */ 111dc7de222SMasahiro Yamada int pll_od; /* PLL output divider */ 112dc7de222SMasahiro Yamada }; 113dc7de222SMasahiro Yamada 1147531122eSLokesh Vutla extern unsigned int external_clk[ext_clk_count]; 115dc7de222SMasahiro Yamada extern const struct keystone_pll_regs keystone_pll_regs[]; 116c321a236SLokesh Vutla extern s16 divn_val[]; 1177b50e159SLokesh Vutla extern int speeds[]; 118dc7de222SMasahiro Yamada 11994069301SLokesh Vutla void init_plls(void); 120dc7de222SMasahiro Yamada void init_pll(const struct pll_init_data *data); 12194069301SLokesh Vutla struct pll_init_data *get_pll_init_data(int pll); 122dc7de222SMasahiro Yamada unsigned long clk_get_rate(unsigned int clk); 123dc7de222SMasahiro Yamada unsigned long clk_round_rate(unsigned int clk, unsigned long hz); 124dc7de222SMasahiro Yamada int clk_set_rate(unsigned int clk, unsigned long hz); 125dc7de222SMasahiro Yamada int get_max_dev_speed(void); 126dc7de222SMasahiro Yamada int get_max_arm_speed(void); 1278626cb80SLokesh Vutla void pll_pa_clk_sel(void); 128dc7de222SMasahiro Yamada 129dc7de222SMasahiro Yamada #endif 130dc7de222SMasahiro Yamada #endif 131