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)\ 56e6d71e1cSVitaly Andrianov CLK(20, sys_clk3_clk)\ 57e6d71e1cSVitaly 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 { 66ef76ebb1SLokesh Vutla SPD200, 67ef76ebb1SLokesh Vutla SPD400, 68ef76ebb1SLokesh Vutla SPD600, 697b50e159SLokesh Vutla SPD800, 707b50e159SLokesh Vutla SPD850, 71ef76ebb1SLokesh Vutla SPD900, 727b50e159SLokesh Vutla SPD1000, 737b50e159SLokesh Vutla SPD1200, 747b50e159SLokesh Vutla SPD1250, 757b50e159SLokesh Vutla SPD1350, 767b50e159SLokesh Vutla SPD1400, 777b50e159SLokesh Vutla SPD1500, 787b50e159SLokesh Vutla NUM_SPDS, 797b50e159SLokesh Vutla }; 807b50e159SLokesh Vutla 8174af583eSLokesh Vutla /* PLL identifiers */ 8274af583eSLokesh Vutla enum { 8374af583eSLokesh Vutla MAIN_PLL, 8474af583eSLokesh Vutla TETRIS_PLL, 8574af583eSLokesh Vutla PASS_PLL, 8674af583eSLokesh Vutla DDR3A_PLL, 8774af583eSLokesh Vutla DDR3B_PLL, 88bda920c6SVitaly Andrianov UART_PLL, 8974af583eSLokesh Vutla MAX_PLL_COUNT, 9074af583eSLokesh Vutla }; 9174af583eSLokesh Vutla 927531122eSLokesh Vutla enum ext_clk_e { 937531122eSLokesh Vutla sys_clk, 947531122eSLokesh Vutla alt_core_clk, 957531122eSLokesh Vutla pa_clk, 967531122eSLokesh Vutla tetris_clk, 977531122eSLokesh Vutla ddr3a_clk, 987531122eSLokesh Vutla ddr3b_clk, 99e6d71e1cSVitaly Andrianov uart_clk, 1007531122eSLokesh Vutla ext_clk_count /* number of external clocks */ 1017531122eSLokesh Vutla }; 1027531122eSLokesh Vutla 103dc7de222SMasahiro Yamada enum clk_e { 104dc7de222SMasahiro Yamada CLK_LIST(GENERATE_ENUM) 105dc7de222SMasahiro Yamada }; 106dc7de222SMasahiro Yamada 107dc7de222SMasahiro Yamada struct keystone_pll_regs { 108dc7de222SMasahiro Yamada u32 reg0; 109dc7de222SMasahiro Yamada u32 reg1; 110dc7de222SMasahiro Yamada }; 111dc7de222SMasahiro Yamada 112dc7de222SMasahiro Yamada /* PLL configuration data */ 113dc7de222SMasahiro Yamada struct pll_init_data { 114dc7de222SMasahiro Yamada int pll; 115dc7de222SMasahiro Yamada int pll_m; /* PLL Multiplier */ 116dc7de222SMasahiro Yamada int pll_d; /* PLL divider */ 117dc7de222SMasahiro Yamada int pll_od; /* PLL output divider */ 118dc7de222SMasahiro Yamada }; 119dc7de222SMasahiro Yamada 120dc7de222SMasahiro Yamada extern const struct keystone_pll_regs keystone_pll_regs[]; 121c321a236SLokesh Vutla extern s16 divn_val[]; 1227b50e159SLokesh Vutla extern int speeds[]; 123dc7de222SMasahiro Yamada 12494069301SLokesh Vutla void init_plls(void); 125dc7de222SMasahiro Yamada void init_pll(const struct pll_init_data *data); 12694069301SLokesh Vutla struct pll_init_data *get_pll_init_data(int pll); 12743ebbfc3SMasahiro Yamada unsigned long ks_clk_get_rate(unsigned int clk); 1285cd1f6bdSLokesh Vutla int get_max_dev_speed(int *spds); 1295cd1f6bdSLokesh Vutla int get_max_arm_speed(int *spds); 1308626cb80SLokesh Vutla void pll_pa_clk_sel(void); 131*ee3c6532SLokesh Vutla unsigned int get_external_clk(u32 clk); 132dc7de222SMasahiro Yamada 133dc7de222SMasahiro Yamada #endif 134dc7de222SMasahiro Yamada #endif 135