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 27bda920c6SVitaly Andrianov #ifdef CONFIG_SOC_K2G 28bda920c6SVitaly Andrianov #include <asm/arch/clock-k2g.h> 29bda920c6SVitaly Andrianov #endif 30bda920c6SVitaly Andrianov 3174af583eSLokesh Vutla #define CORE_PLL MAIN_PLL 3274af583eSLokesh Vutla #define DDR3_PLL DDR3A_PLL 33bda920c6SVitaly 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)\ 56*e6d71e1cSVitaly Andrianov CLK(20, sys_clk3_clk)\ 57*e6d71e1cSVitaly Andrianov CLK(21, uart_pll_clk) 58fe772ebdSLokesh Vutla 59dc7de222SMasahiro Yamada #include <asm/types.h> 60dc7de222SMasahiro Yamada 61dc7de222SMasahiro Yamada #define GENERATE_ENUM(NUM, ENUM) ENUM = NUM, 62dc7de222SMasahiro Yamada #define GENERATE_INDX_STR(NUM, STRING) #NUM"\t- "#STRING"\n" 63dc7de222SMasahiro Yamada #define CLOCK_INDEXES_LIST CLK_LIST(GENERATE_INDX_STR) 64dc7de222SMasahiro Yamada 657b50e159SLokesh Vutla enum { 667b50e159SLokesh Vutla SPD800, 677b50e159SLokesh Vutla SPD850, 687b50e159SLokesh Vutla SPD1000, 697b50e159SLokesh Vutla SPD1200, 707b50e159SLokesh Vutla SPD1250, 717b50e159SLokesh Vutla SPD1350, 727b50e159SLokesh Vutla SPD1400, 737b50e159SLokesh Vutla SPD1500, 747b50e159SLokesh Vutla NUM_SPDS, 757b50e159SLokesh Vutla }; 767b50e159SLokesh Vutla 7774af583eSLokesh Vutla /* PLL identifiers */ 7874af583eSLokesh Vutla enum { 7974af583eSLokesh Vutla MAIN_PLL, 8074af583eSLokesh Vutla TETRIS_PLL, 8174af583eSLokesh Vutla PASS_PLL, 8274af583eSLokesh Vutla DDR3A_PLL, 8374af583eSLokesh Vutla DDR3B_PLL, 84bda920c6SVitaly Andrianov UART_PLL, 8574af583eSLokesh Vutla MAX_PLL_COUNT, 8674af583eSLokesh Vutla }; 8774af583eSLokesh Vutla 887531122eSLokesh Vutla enum ext_clk_e { 897531122eSLokesh Vutla sys_clk, 907531122eSLokesh Vutla alt_core_clk, 917531122eSLokesh Vutla pa_clk, 927531122eSLokesh Vutla tetris_clk, 937531122eSLokesh Vutla ddr3a_clk, 947531122eSLokesh Vutla ddr3b_clk, 95*e6d71e1cSVitaly Andrianov uart_clk, 967531122eSLokesh Vutla ext_clk_count /* number of external clocks */ 977531122eSLokesh Vutla }; 987531122eSLokesh Vutla 99dc7de222SMasahiro Yamada enum clk_e { 100dc7de222SMasahiro Yamada CLK_LIST(GENERATE_ENUM) 101dc7de222SMasahiro Yamada }; 102dc7de222SMasahiro Yamada 103dc7de222SMasahiro Yamada struct keystone_pll_regs { 104dc7de222SMasahiro Yamada u32 reg0; 105dc7de222SMasahiro Yamada u32 reg1; 106dc7de222SMasahiro Yamada }; 107dc7de222SMasahiro Yamada 108dc7de222SMasahiro Yamada /* PLL configuration data */ 109dc7de222SMasahiro Yamada struct pll_init_data { 110dc7de222SMasahiro Yamada int pll; 111dc7de222SMasahiro Yamada int pll_m; /* PLL Multiplier */ 112dc7de222SMasahiro Yamada int pll_d; /* PLL divider */ 113dc7de222SMasahiro Yamada int pll_od; /* PLL output divider */ 114dc7de222SMasahiro Yamada }; 115dc7de222SMasahiro Yamada 1167531122eSLokesh Vutla extern unsigned int external_clk[ext_clk_count]; 117dc7de222SMasahiro Yamada extern const struct keystone_pll_regs keystone_pll_regs[]; 118c321a236SLokesh Vutla extern s16 divn_val[]; 1197b50e159SLokesh Vutla extern int speeds[]; 120dc7de222SMasahiro Yamada 12194069301SLokesh Vutla void init_plls(void); 122dc7de222SMasahiro Yamada void init_pll(const struct pll_init_data *data); 12394069301SLokesh Vutla struct pll_init_data *get_pll_init_data(int pll); 124dc7de222SMasahiro Yamada unsigned long clk_get_rate(unsigned int clk); 125dc7de222SMasahiro Yamada unsigned long clk_round_rate(unsigned int clk, unsigned long hz); 126dc7de222SMasahiro Yamada int clk_set_rate(unsigned int clk, unsigned long hz); 127dc7de222SMasahiro Yamada int get_max_dev_speed(void); 128dc7de222SMasahiro Yamada int get_max_arm_speed(void); 1298626cb80SLokesh Vutla void pll_pa_clk_sel(void); 130dc7de222SMasahiro Yamada 131dc7de222SMasahiro Yamada #endif 132dc7de222SMasahiro Yamada #endif 133