xref: /OK3568_Linux_fs/kernel/arch/arm/mach-omap2/opp2420_data.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * opp2420_data.c - old-style "OPP" table for OMAP2420
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2005-2009 Texas Instruments, Inc.
6*4882a593Smuzhiyun  * Copyright (C) 2004-2009 Nokia Corporation
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * Richard Woodruff <r-woodruff2@ti.com>
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * The OMAP2 processor can be run at several discrete 'PRCM configurations'.
11*4882a593Smuzhiyun  * These configurations are characterized by voltage and speed for clocks.
12*4882a593Smuzhiyun  * The device is only validated for certain combinations. One way to express
13*4882a593Smuzhiyun  * these combinations is via the 'ratios' which the clocks operate with
14*4882a593Smuzhiyun  * respect to each other. These ratio sets are for a given voltage/DPLL
15*4882a593Smuzhiyun  * setting. All configurations can be described by a DPLL setting and a ratio.
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  * XXX Missing voltage data.
18*4882a593Smuzhiyun  * XXX Missing 19.2MHz sys_clk rate sets (needed for N800/N810)
19*4882a593Smuzhiyun  *
20*4882a593Smuzhiyun  * THe format described in this file is deprecated.  Once a reasonable
21*4882a593Smuzhiyun  * OPP API exists, the data in this file should be converted to use it.
22*4882a593Smuzhiyun  *
23*4882a593Smuzhiyun  * This is technically part of the OMAP2xxx clock code.
24*4882a593Smuzhiyun  *
25*4882a593Smuzhiyun  * Considerable work is still needed to fully support dynamic frequency
26*4882a593Smuzhiyun  * changes on OMAP2xxx-series chips.  Readers interested in such a
27*4882a593Smuzhiyun  * project are encouraged to review the Maemo Diablo RX-34 and RX-44
28*4882a593Smuzhiyun  * kernel source at:
29*4882a593Smuzhiyun  *     http://repository.maemo.org/pool/diablo/free/k/kernel-source-diablo/
30*4882a593Smuzhiyun  */
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #include <linux/kernel.h>
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #include "opp2xxx.h"
35*4882a593Smuzhiyun #include "sdrc.h"
36*4882a593Smuzhiyun #include "clock.h"
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /*
39*4882a593Smuzhiyun  * Key dividers which make up a PRCM set. Ratios for a PRCM are mandated.
40*4882a593Smuzhiyun  * xtal_speed, dpll_speed, mpu_speed, CM_CLKSEL_MPU,
41*4882a593Smuzhiyun  * CM_CLKSEL_DSP, CM_CLKSEL_GFX, CM_CLKSEL1_CORE, CM_CLKSEL1_PLL,
42*4882a593Smuzhiyun  * CM_CLKSEL2_PLL, CM_CLKSEL_MDM
43*4882a593Smuzhiyun  *
44*4882a593Smuzhiyun  * Filling in table based on H4 boards available.  There are quite a
45*4882a593Smuzhiyun  * few more rate combinations which could be defined.
46*4882a593Smuzhiyun  *
47*4882a593Smuzhiyun  * When multiple values are defined the start up will try and choose
48*4882a593Smuzhiyun  * the fastest one. If a 'fast' value is defined, then automatically,
49*4882a593Smuzhiyun  * the /2 one should be included as it can be used.  Generally having
50*4882a593Smuzhiyun  * more than one fast set does not make sense, as static timings need
51*4882a593Smuzhiyun  * to be changed to change the set.  The exception is the bypass
52*4882a593Smuzhiyun  * setting which is available for low power bypass.
53*4882a593Smuzhiyun  *
54*4882a593Smuzhiyun  * Note: This table needs to be sorted, fastest to slowest.
55*4882a593Smuzhiyun  **/
56*4882a593Smuzhiyun const struct prcm_config omap2420_rate_table[] = {
57*4882a593Smuzhiyun 	/* PRCM I - FAST */
58*4882a593Smuzhiyun 	{S12M, S660M, S330M, RI_CM_CLKSEL_MPU_VAL,		/* 330MHz ARM */
59*4882a593Smuzhiyun 		RI_CM_CLKSEL_DSP_VAL, RI_CM_CLKSEL_GFX_VAL,
60*4882a593Smuzhiyun 		RI_CM_CLKSEL1_CORE_VAL, MI_CM_CLKSEL1_PLL_12_VAL,
61*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_165MHz,
62*4882a593Smuzhiyun 		RATE_IN_242X},
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun 	/* PRCM II - FAST */
65*4882a593Smuzhiyun 	{S12M, S600M, S300M, RII_CM_CLKSEL_MPU_VAL,		/* 300MHz ARM */
66*4882a593Smuzhiyun 		RII_CM_CLKSEL_DSP_VAL, RII_CM_CLKSEL_GFX_VAL,
67*4882a593Smuzhiyun 		RII_CM_CLKSEL1_CORE_VAL, MII_CM_CLKSEL1_PLL_12_VAL,
68*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_100MHz,
69*4882a593Smuzhiyun 		RATE_IN_242X},
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 	{S13M, S600M, S300M, RII_CM_CLKSEL_MPU_VAL,		/* 300MHz ARM */
72*4882a593Smuzhiyun 		RII_CM_CLKSEL_DSP_VAL, RII_CM_CLKSEL_GFX_VAL,
73*4882a593Smuzhiyun 		RII_CM_CLKSEL1_CORE_VAL, MII_CM_CLKSEL1_PLL_13_VAL,
74*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_100MHz,
75*4882a593Smuzhiyun 		RATE_IN_242X},
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun 	/* PRCM III - FAST */
78*4882a593Smuzhiyun 	{S12M, S532M, S266M, RIII_CM_CLKSEL_MPU_VAL,		/* 266MHz ARM */
79*4882a593Smuzhiyun 		RIII_CM_CLKSEL_DSP_VAL, RIII_CM_CLKSEL_GFX_VAL,
80*4882a593Smuzhiyun 		RIII_CM_CLKSEL1_CORE_VAL, MIII_CM_CLKSEL1_PLL_12_VAL,
81*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_133MHz,
82*4882a593Smuzhiyun 		RATE_IN_242X},
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun 	{S13M, S532M, S266M, RIII_CM_CLKSEL_MPU_VAL,		/* 266MHz ARM */
85*4882a593Smuzhiyun 		RIII_CM_CLKSEL_DSP_VAL, RIII_CM_CLKSEL_GFX_VAL,
86*4882a593Smuzhiyun 		RIII_CM_CLKSEL1_CORE_VAL, MIII_CM_CLKSEL1_PLL_13_VAL,
87*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_133MHz,
88*4882a593Smuzhiyun 		RATE_IN_242X},
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun 	/* PRCM II - SLOW */
91*4882a593Smuzhiyun 	{S12M, S300M, S150M, RII_CM_CLKSEL_MPU_VAL,		/* 150MHz ARM */
92*4882a593Smuzhiyun 		RII_CM_CLKSEL_DSP_VAL, RII_CM_CLKSEL_GFX_VAL,
93*4882a593Smuzhiyun 		RII_CM_CLKSEL1_CORE_VAL, MII_CM_CLKSEL1_PLL_12_VAL,
94*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_100MHz,
95*4882a593Smuzhiyun 		RATE_IN_242X},
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun 	{S13M, S300M, S150M, RII_CM_CLKSEL_MPU_VAL,		/* 150MHz ARM */
98*4882a593Smuzhiyun 		RII_CM_CLKSEL_DSP_VAL, RII_CM_CLKSEL_GFX_VAL,
99*4882a593Smuzhiyun 		RII_CM_CLKSEL1_CORE_VAL, MII_CM_CLKSEL1_PLL_13_VAL,
100*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_100MHz,
101*4882a593Smuzhiyun 		RATE_IN_242X},
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun 	/* PRCM III - SLOW */
104*4882a593Smuzhiyun 	{S12M, S266M, S133M, RIII_CM_CLKSEL_MPU_VAL,		/* 133MHz ARM */
105*4882a593Smuzhiyun 		RIII_CM_CLKSEL_DSP_VAL, RIII_CM_CLKSEL_GFX_VAL,
106*4882a593Smuzhiyun 		RIII_CM_CLKSEL1_CORE_VAL, MIII_CM_CLKSEL1_PLL_12_VAL,
107*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_133MHz,
108*4882a593Smuzhiyun 		RATE_IN_242X},
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun 	{S13M, S266M, S133M, RIII_CM_CLKSEL_MPU_VAL,		/* 133MHz ARM */
111*4882a593Smuzhiyun 		RIII_CM_CLKSEL_DSP_VAL, RIII_CM_CLKSEL_GFX_VAL,
112*4882a593Smuzhiyun 		RIII_CM_CLKSEL1_CORE_VAL, MIII_CM_CLKSEL1_PLL_13_VAL,
113*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_133MHz,
114*4882a593Smuzhiyun 		RATE_IN_242X},
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun 	/* PRCM-VII (boot-bypass) */
117*4882a593Smuzhiyun 	{S12M, S12M, S12M, RVII_CM_CLKSEL_MPU_VAL,		/* 12MHz ARM*/
118*4882a593Smuzhiyun 		RVII_CM_CLKSEL_DSP_VAL, RVII_CM_CLKSEL_GFX_VAL,
119*4882a593Smuzhiyun 		RVII_CM_CLKSEL1_CORE_VAL, MVII_CM_CLKSEL1_PLL_12_VAL,
120*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_BYPASS,
121*4882a593Smuzhiyun 		RATE_IN_242X},
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun 	/* PRCM-VII (boot-bypass) */
124*4882a593Smuzhiyun 	{S13M, S13M, S13M, RVII_CM_CLKSEL_MPU_VAL,		/* 13MHz ARM */
125*4882a593Smuzhiyun 		RVII_CM_CLKSEL_DSP_VAL, RVII_CM_CLKSEL_GFX_VAL,
126*4882a593Smuzhiyun 		RVII_CM_CLKSEL1_CORE_VAL, MVII_CM_CLKSEL1_PLL_13_VAL,
127*4882a593Smuzhiyun 		MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_BYPASS,
128*4882a593Smuzhiyun 		RATE_IN_242X},
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun 	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
131*4882a593Smuzhiyun };
132