Commit ae25144ed1b608a16c69c5cf1c37e7c5ff7e210d

Authored by Hebbar Gururaja
1 parent 042c58a03f

Revert "ARM: OMAP: AM33XX: Add OPP table for PG2.1 AM335x"

This reverts commit ee9dfd8d729d3e7b5ce9e404a0e87f27f6f79135.

This patch checks for the package type for checking the supported opp
bits & also if the bits are set, the opp table is updated.
However, checking package type bit is not required & also, the opp bit
checking must be reversed.

A fix for the same will follow after this commit

Showing 1 changed file with 4 additions and 123 deletions Inline Diff

arch/arm/mach-omap2/opp3xxx_data.c
1 /* 1 /*
2 * OMAP3 OPP table definitions. 2 * OMAP3 OPP table definitions.
3 * 3 *
4 * Copyright (C) 2009-2010 Texas Instruments Incorporated - http://www.ti.com/ 4 * Copyright (C) 2009-2010 Texas Instruments Incorporated - http://www.ti.com/
5 * Nishanth Menon 5 * Nishanth Menon
6 * Kevin Hilman 6 * Kevin Hilman
7 * Copyright (C) 2010-2011 Nokia Corporation. 7 * Copyright (C) 2010-2011 Nokia Corporation.
8 * Eduardo Valentin 8 * Eduardo Valentin
9 * Paul Walmsley 9 * Paul Walmsley
10 * 10 *
11 * This program is free software; you can redistribute it and/or modify 11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as 12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation. 13 * published by the Free Software Foundation.
14 * 14 *
15 * This program is distributed "as is" WITHOUT ANY WARRANTY of any 15 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
16 * kind, whether express or implied; without even the implied warranty 16 * kind, whether express or implied; without even the implied warranty
17 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details. 18 * GNU General Public License for more details.
19 */ 19 */
20 #include <linux/module.h> 20 #include <linux/module.h>
21 #include <linux/io.h>
22 21
23 #include <plat/cpu.h> 22 #include <plat/cpu.h>
24 23
25 #include "control.h" 24 #include "control.h"
26 #include "omap_opp_data.h" 25 #include "omap_opp_data.h"
27 #include "pm.h" 26 #include "pm.h"
28 27
29 /* 34xx */ 28 /* 34xx */
30 29
31 /* VDD1 */ 30 /* VDD1 */
32 31
33 #define OMAP3430_VDD_MPU_OPP1_UV 975000 32 #define OMAP3430_VDD_MPU_OPP1_UV 975000
34 #define OMAP3430_VDD_MPU_OPP2_UV 1075000 33 #define OMAP3430_VDD_MPU_OPP2_UV 1075000
35 #define OMAP3430_VDD_MPU_OPP3_UV 1200000 34 #define OMAP3430_VDD_MPU_OPP3_UV 1200000
36 #define OMAP3430_VDD_MPU_OPP4_UV 1270000 35 #define OMAP3430_VDD_MPU_OPP4_UV 1270000
37 #define OMAP3430_VDD_MPU_OPP5_UV 1350000 36 #define OMAP3430_VDD_MPU_OPP5_UV 1350000
38 37
39 struct omap_volt_data omap34xx_vddmpu_volt_data[] = { 38 struct omap_volt_data omap34xx_vddmpu_volt_data[] = {
40 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP1_UV, OMAP343X_CONTROL_FUSE_OPP1_VDD1, 0xf4, 0x0c), 39 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP1_UV, OMAP343X_CONTROL_FUSE_OPP1_VDD1, 0xf4, 0x0c),
41 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP2_UV, OMAP343X_CONTROL_FUSE_OPP2_VDD1, 0xf4, 0x0c), 40 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP2_UV, OMAP343X_CONTROL_FUSE_OPP2_VDD1, 0xf4, 0x0c),
42 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP3_UV, OMAP343X_CONTROL_FUSE_OPP3_VDD1, 0xf9, 0x18), 41 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP3_UV, OMAP343X_CONTROL_FUSE_OPP3_VDD1, 0xf9, 0x18),
43 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP4_UV, OMAP343X_CONTROL_FUSE_OPP4_VDD1, 0xf9, 0x18), 42 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP4_UV, OMAP343X_CONTROL_FUSE_OPP4_VDD1, 0xf9, 0x18),
44 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP5_UV, OMAP343X_CONTROL_FUSE_OPP5_VDD1, 0xf9, 0x18), 43 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP5_UV, OMAP343X_CONTROL_FUSE_OPP5_VDD1, 0xf9, 0x18),
45 VOLT_DATA_DEFINE(0, 0, 0, 0), 44 VOLT_DATA_DEFINE(0, 0, 0, 0),
46 }; 45 };
47 46
48 /* VDD2 */ 47 /* VDD2 */
49 48
50 #define OMAP3430_VDD_CORE_OPP1_UV 975000 49 #define OMAP3430_VDD_CORE_OPP1_UV 975000
51 #define OMAP3430_VDD_CORE_OPP2_UV 1050000 50 #define OMAP3430_VDD_CORE_OPP2_UV 1050000
52 #define OMAP3430_VDD_CORE_OPP3_UV 1150000 51 #define OMAP3430_VDD_CORE_OPP3_UV 1150000
53 52
54 struct omap_volt_data omap34xx_vddcore_volt_data[] = { 53 struct omap_volt_data omap34xx_vddcore_volt_data[] = {
55 VOLT_DATA_DEFINE(OMAP3430_VDD_CORE_OPP1_UV, OMAP343X_CONTROL_FUSE_OPP1_VDD2, 0xf4, 0x0c), 54 VOLT_DATA_DEFINE(OMAP3430_VDD_CORE_OPP1_UV, OMAP343X_CONTROL_FUSE_OPP1_VDD2, 0xf4, 0x0c),
56 VOLT_DATA_DEFINE(OMAP3430_VDD_CORE_OPP2_UV, OMAP343X_CONTROL_FUSE_OPP2_VDD2, 0xf4, 0x0c), 55 VOLT_DATA_DEFINE(OMAP3430_VDD_CORE_OPP2_UV, OMAP343X_CONTROL_FUSE_OPP2_VDD2, 0xf4, 0x0c),
57 VOLT_DATA_DEFINE(OMAP3430_VDD_CORE_OPP3_UV, OMAP343X_CONTROL_FUSE_OPP3_VDD2, 0xf9, 0x18), 56 VOLT_DATA_DEFINE(OMAP3430_VDD_CORE_OPP3_UV, OMAP343X_CONTROL_FUSE_OPP3_VDD2, 0xf9, 0x18),
58 VOLT_DATA_DEFINE(0, 0, 0, 0), 57 VOLT_DATA_DEFINE(0, 0, 0, 0),
59 }; 58 };
60 59
61 /* 36xx */ 60 /* 36xx */
62 61
63 /* VDD1 */ 62 /* VDD1 */
64 63
65 #define OMAP3630_VDD_MPU_OPP50_UV 1012500 64 #define OMAP3630_VDD_MPU_OPP50_UV 1012500
66 #define OMAP3630_VDD_MPU_OPP100_UV 1200000 65 #define OMAP3630_VDD_MPU_OPP100_UV 1200000
67 #define OMAP3630_VDD_MPU_OPP120_UV 1325000 66 #define OMAP3630_VDD_MPU_OPP120_UV 1325000
68 #define OMAP3630_VDD_MPU_OPP1G_UV 1375000 67 #define OMAP3630_VDD_MPU_OPP1G_UV 1375000
69 68
70 struct omap_volt_data omap36xx_vddmpu_volt_data[] = { 69 struct omap_volt_data omap36xx_vddmpu_volt_data[] = {
71 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP50_UV, OMAP3630_CONTROL_FUSE_OPP50_VDD1, 0xf4, 0x0c), 70 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP50_UV, OMAP3630_CONTROL_FUSE_OPP50_VDD1, 0xf4, 0x0c),
72 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP100_UV, OMAP3630_CONTROL_FUSE_OPP100_VDD1, 0xf9, 0x16), 71 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP100_UV, OMAP3630_CONTROL_FUSE_OPP100_VDD1, 0xf9, 0x16),
73 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP120_UV, OMAP3630_CONTROL_FUSE_OPP120_VDD1, 0xfa, 0x23), 72 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP120_UV, OMAP3630_CONTROL_FUSE_OPP120_VDD1, 0xfa, 0x23),
74 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP1G_UV, OMAP3630_CONTROL_FUSE_OPP1G_VDD1, 0xfa, 0x27), 73 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP1G_UV, OMAP3630_CONTROL_FUSE_OPP1G_VDD1, 0xfa, 0x27),
75 VOLT_DATA_DEFINE(0, 0, 0, 0), 74 VOLT_DATA_DEFINE(0, 0, 0, 0),
76 }; 75 };
77 76
78 /* VDD2 */ 77 /* VDD2 */
79 78
80 #define OMAP3630_VDD_CORE_OPP50_UV 1000000 79 #define OMAP3630_VDD_CORE_OPP50_UV 1000000
81 #define OMAP3630_VDD_CORE_OPP100_UV 1200000 80 #define OMAP3630_VDD_CORE_OPP100_UV 1200000
82 81
83 struct omap_volt_data omap36xx_vddcore_volt_data[] = { 82 struct omap_volt_data omap36xx_vddcore_volt_data[] = {
84 VOLT_DATA_DEFINE(OMAP3630_VDD_CORE_OPP50_UV, OMAP3630_CONTROL_FUSE_OPP50_VDD2, 0xf4, 0x0c), 83 VOLT_DATA_DEFINE(OMAP3630_VDD_CORE_OPP50_UV, OMAP3630_CONTROL_FUSE_OPP50_VDD2, 0xf4, 0x0c),
85 VOLT_DATA_DEFINE(OMAP3630_VDD_CORE_OPP100_UV, OMAP3630_CONTROL_FUSE_OPP100_VDD2, 0xf9, 0x16), 84 VOLT_DATA_DEFINE(OMAP3630_VDD_CORE_OPP100_UV, OMAP3630_CONTROL_FUSE_OPP100_VDD2, 0xf9, 0x16),
86 VOLT_DATA_DEFINE(0, 0, 0, 0), 85 VOLT_DATA_DEFINE(0, 0, 0, 0),
87 }; 86 };
88 87
89 /* OPP data */ 88 /* OPP data */
90 89
91 static struct omap_opp_def __initdata omap34xx_opp_def_list[] = { 90 static struct omap_opp_def __initdata omap34xx_opp_def_list[] = {
92 /* MPU OPP1 */ 91 /* MPU OPP1 */
93 OPP_INITIALIZER("mpu", true, 125000000, OMAP3430_VDD_MPU_OPP1_UV), 92 OPP_INITIALIZER("mpu", true, 125000000, OMAP3430_VDD_MPU_OPP1_UV),
94 /* MPU OPP2 */ 93 /* MPU OPP2 */
95 OPP_INITIALIZER("mpu", true, 250000000, OMAP3430_VDD_MPU_OPP2_UV), 94 OPP_INITIALIZER("mpu", true, 250000000, OMAP3430_VDD_MPU_OPP2_UV),
96 /* MPU OPP3 */ 95 /* MPU OPP3 */
97 OPP_INITIALIZER("mpu", true, 500000000, OMAP3430_VDD_MPU_OPP3_UV), 96 OPP_INITIALIZER("mpu", true, 500000000, OMAP3430_VDD_MPU_OPP3_UV),
98 /* MPU OPP4 */ 97 /* MPU OPP4 */
99 OPP_INITIALIZER("mpu", true, 550000000, OMAP3430_VDD_MPU_OPP4_UV), 98 OPP_INITIALIZER("mpu", true, 550000000, OMAP3430_VDD_MPU_OPP4_UV),
100 /* MPU OPP5 */ 99 /* MPU OPP5 */
101 OPP_INITIALIZER("mpu", true, 600000000, OMAP3430_VDD_MPU_OPP5_UV), 100 OPP_INITIALIZER("mpu", true, 600000000, OMAP3430_VDD_MPU_OPP5_UV),
102 101
103 /* 102 /*
104 * L3 OPP1 - 41.5 MHz is disabled because: The voltage for that OPP is 103 * L3 OPP1 - 41.5 MHz is disabled because: The voltage for that OPP is
105 * almost the same than the one at 83MHz thus providing very little 104 * almost the same than the one at 83MHz thus providing very little
106 * gain for the power point of view. In term of energy it will even 105 * gain for the power point of view. In term of energy it will even
107 * increase the consumption due to the very negative performance 106 * increase the consumption due to the very negative performance
108 * impact that frequency will do to the MPU and the whole system in 107 * impact that frequency will do to the MPU and the whole system in
109 * general. 108 * general.
110 */ 109 */
111 OPP_INITIALIZER("l3_main", false, 41500000, OMAP3430_VDD_CORE_OPP1_UV), 110 OPP_INITIALIZER("l3_main", false, 41500000, OMAP3430_VDD_CORE_OPP1_UV),
112 /* L3 OPP2 */ 111 /* L3 OPP2 */
113 OPP_INITIALIZER("l3_main", true, 83000000, OMAP3430_VDD_CORE_OPP2_UV), 112 OPP_INITIALIZER("l3_main", true, 83000000, OMAP3430_VDD_CORE_OPP2_UV),
114 /* L3 OPP3 */ 113 /* L3 OPP3 */
115 OPP_INITIALIZER("l3_main", true, 166000000, OMAP3430_VDD_CORE_OPP3_UV), 114 OPP_INITIALIZER("l3_main", true, 166000000, OMAP3430_VDD_CORE_OPP3_UV),
116 115
117 /* DSP OPP1 */ 116 /* DSP OPP1 */
118 OPP_INITIALIZER("iva", true, 90000000, OMAP3430_VDD_MPU_OPP1_UV), 117 OPP_INITIALIZER("iva", true, 90000000, OMAP3430_VDD_MPU_OPP1_UV),
119 /* DSP OPP2 */ 118 /* DSP OPP2 */
120 OPP_INITIALIZER("iva", true, 180000000, OMAP3430_VDD_MPU_OPP2_UV), 119 OPP_INITIALIZER("iva", true, 180000000, OMAP3430_VDD_MPU_OPP2_UV),
121 /* DSP OPP3 */ 120 /* DSP OPP3 */
122 OPP_INITIALIZER("iva", true, 360000000, OMAP3430_VDD_MPU_OPP3_UV), 121 OPP_INITIALIZER("iva", true, 360000000, OMAP3430_VDD_MPU_OPP3_UV),
123 /* DSP OPP4 */ 122 /* DSP OPP4 */
124 OPP_INITIALIZER("iva", true, 400000000, OMAP3430_VDD_MPU_OPP4_UV), 123 OPP_INITIALIZER("iva", true, 400000000, OMAP3430_VDD_MPU_OPP4_UV),
125 /* DSP OPP5 */ 124 /* DSP OPP5 */
126 OPP_INITIALIZER("iva", true, 430000000, OMAP3430_VDD_MPU_OPP5_UV), 125 OPP_INITIALIZER("iva", true, 430000000, OMAP3430_VDD_MPU_OPP5_UV),
127 }; 126 };
128 127
129 static struct omap_opp_def __initdata omap36xx_opp_def_list[] = { 128 static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
130 /* MPU OPP1 - OPP50 */ 129 /* MPU OPP1 - OPP50 */
131 OPP_INITIALIZER("mpu", true, 300000000, OMAP3630_VDD_MPU_OPP50_UV), 130 OPP_INITIALIZER("mpu", true, 300000000, OMAP3630_VDD_MPU_OPP50_UV),
132 /* MPU OPP2 - OPP100 */ 131 /* MPU OPP2 - OPP100 */
133 OPP_INITIALIZER("mpu", true, 600000000, OMAP3630_VDD_MPU_OPP100_UV), 132 OPP_INITIALIZER("mpu", true, 600000000, OMAP3630_VDD_MPU_OPP100_UV),
134 /* MPU OPP3 - OPP-Turbo */ 133 /* MPU OPP3 - OPP-Turbo */
135 OPP_INITIALIZER("mpu", false, 800000000, OMAP3630_VDD_MPU_OPP120_UV), 134 OPP_INITIALIZER("mpu", false, 800000000, OMAP3630_VDD_MPU_OPP120_UV),
136 /* MPU OPP4 - OPP-SB */ 135 /* MPU OPP4 - OPP-SB */
137 OPP_INITIALIZER("mpu", false, 1000000000, OMAP3630_VDD_MPU_OPP1G_UV), 136 OPP_INITIALIZER("mpu", false, 1000000000, OMAP3630_VDD_MPU_OPP1G_UV),
138 137
139 /* L3 OPP1 - OPP50 */ 138 /* L3 OPP1 - OPP50 */
140 OPP_INITIALIZER("l3_main", true, 100000000, OMAP3630_VDD_CORE_OPP50_UV), 139 OPP_INITIALIZER("l3_main", true, 100000000, OMAP3630_VDD_CORE_OPP50_UV),
141 /* L3 OPP2 - OPP100, OPP-Turbo, OPP-SB */ 140 /* L3 OPP2 - OPP100, OPP-Turbo, OPP-SB */
142 OPP_INITIALIZER("l3_main", true, 200000000, OMAP3630_VDD_CORE_OPP100_UV), 141 OPP_INITIALIZER("l3_main", true, 200000000, OMAP3630_VDD_CORE_OPP100_UV),
143 142
144 /* DSP OPP1 - OPP50 */ 143 /* DSP OPP1 - OPP50 */
145 OPP_INITIALIZER("iva", true, 260000000, OMAP3630_VDD_MPU_OPP50_UV), 144 OPP_INITIALIZER("iva", true, 260000000, OMAP3630_VDD_MPU_OPP50_UV),
146 /* DSP OPP2 - OPP100 */ 145 /* DSP OPP2 - OPP100 */
147 OPP_INITIALIZER("iva", true, 520000000, OMAP3630_VDD_MPU_OPP100_UV), 146 OPP_INITIALIZER("iva", true, 520000000, OMAP3630_VDD_MPU_OPP100_UV),
148 /* DSP OPP3 - OPP-Turbo */ 147 /* DSP OPP3 - OPP-Turbo */
149 OPP_INITIALIZER("iva", false, 660000000, OMAP3630_VDD_MPU_OPP120_UV), 148 OPP_INITIALIZER("iva", false, 660000000, OMAP3630_VDD_MPU_OPP120_UV),
150 /* DSP OPP4 - OPP-SB */ 149 /* DSP OPP4 - OPP-SB */
151 OPP_INITIALIZER("iva", false, 800000000, OMAP3630_VDD_MPU_OPP1G_UV), 150 OPP_INITIALIZER("iva", false, 800000000, OMAP3630_VDD_MPU_OPP1G_UV),
152 }; 151 };
153 152
154 /* 33xx */ 153 /* 33xx */
155 154
156 /* VDD1 */ 155 /* VDD1 */
157 156
158 /* 157 /*
159 * Errata 1.0.15: OPP50 Operation on MPU Domain is Not Supported. 158 * Errata 1.0.15: OPP50 Operation on MPU Domain is Not Supported.
160 * 159 *
161 * To minimize power consumption, the ARM Cortex-A8 may be operated at 160 * To minimize power consumption, the ARM Cortex-A8 may be operated at
162 * the lower frequency defined by OPP50, but the respective voltage 161 * the lower frequency defined by OPP50, but the respective voltage
163 * domain VDD_MPU must be operated as defined by OPP100. So MPU OPP50 162 * domain VDD_MPU must be operated as defined by OPP100. So MPU OPP50
164 * definition is modified to 275MHz, 1.1V. 163 * definition is modified to 275MHz, 1.1V.
165 */ 164 */
166 #define AM33XX_VDD_MPU_OPP50_UV 1100000 165 #define AM33XX_VDD_MPU_OPP50_UV 1100000
167 #define AM33XX_VDD_MPU_OPP100_UV 1100000 166 #define AM33XX_VDD_MPU_OPP100_UV 1100000
168 #define AM33XX_VDD_MPU_OPP120_UV 1200000 167 #define AM33XX_VDD_MPU_OPP120_UV 1200000
169 #define AM33XX_VDD_MPU_OPPTURBO_UV 1260000 168 #define AM33XX_VDD_MPU_OPPTURBO_UV 1260000
170 169
171 static struct omap_opp_def __initdata am33xx_es1_0_opp_def_list[] = { 170 static struct omap_opp_def __initdata am33xx_es1_0_opp_def_list[] = {
172 /* MPU OPP1 - OPP50 */ 171 /* MPU OPP1 - OPP50 */
173 OPP_INITIALIZER("mpu", true, 275000000, AM33XX_VDD_MPU_OPP50_UV), 172 OPP_INITIALIZER("mpu", true, 275000000, AM33XX_VDD_MPU_OPP50_UV),
174 /* MPU OPP2 - OPP100 */ 173 /* MPU OPP2 - OPP100 */
175 OPP_INITIALIZER("mpu", true, 500000000, AM33XX_VDD_MPU_OPP100_UV), 174 OPP_INITIALIZER("mpu", true, 500000000, AM33XX_VDD_MPU_OPP100_UV),
176 /* MPU OPP3 - OPP120 */ 175 /* MPU OPP3 - OPP120 */
177 OPP_INITIALIZER("mpu", true, 600000000, AM33XX_VDD_MPU_OPP120_UV), 176 OPP_INITIALIZER("mpu", true, 600000000, AM33XX_VDD_MPU_OPP120_UV),
178 /* MPU OPP4 - OPPTurbo */ 177 /* MPU OPP4 - OPPTurbo */
179 OPP_INITIALIZER("mpu", true, 720000000, AM33XX_VDD_MPU_OPPTURBO_UV), 178 OPP_INITIALIZER("mpu", true, 720000000, AM33XX_VDD_MPU_OPPTURBO_UV),
180 }; 179 };
181 180
182 #define AM33XX_ES2_0_VDD_MPU_OPP50_UV 950000 181 #define AM33XX_ES2_0_VDD_MPU_OPP50_UV 950000
183 #define AM33XX_ES2_0_VDD_MPU_OPP100_UV 1100000 182 #define AM33XX_ES2_0_VDD_MPU_OPP100_UV 1100000
184 #define AM33XX_ES2_0_VDD_MPU_OPPTURBO_UV 1260000 183 #define AM33XX_ES2_0_VDD_MPU_OPPTURBO_UV 1260000
185 #define AM33XX_ES2_0_VDD_MPU_OPPNITRO_UV 1320000 184 #define AM33XX_ES2_0_VDD_MPU_OPPNITRO_UV 1320000
186 185
187 static struct omap_opp_def __initdata am33xx_es2_0_opp_def_list[] = { 186 static struct omap_opp_def __initdata am33xx_es2_0_opp_def_list[] = {
188 /* MPU OPP1 - OPP50 */ 187 /* MPU OPP1 - OPP50 */
189 OPP_INITIALIZER("mpu", true, 300000000, AM33XX_ES2_0_VDD_MPU_OPP50_UV), 188 OPP_INITIALIZER("mpu", true, 300000000, AM33XX_ES2_0_VDD_MPU_OPP50_UV),
190 /* MPU OPP2 - OPP100 */ 189 /* MPU OPP2 - OPP100 */
191 OPP_INITIALIZER("mpu", true, 600000000, 190 OPP_INITIALIZER("mpu", true, 600000000,
192 AM33XX_ES2_0_VDD_MPU_OPP100_UV), 191 AM33XX_ES2_0_VDD_MPU_OPP100_UV),
193 /* MPU OPP3 - OPPTurbo */ 192 /* MPU OPP3 - OPPTurbo */
194 OPP_INITIALIZER("mpu", true, 800000000, 193 OPP_INITIALIZER("mpu", true, 800000000,
195 AM33XX_ES2_0_VDD_MPU_OPPTURBO_UV), 194 AM33XX_ES2_0_VDD_MPU_OPPTURBO_UV),
196 /* MPU OPP4 - OPPNitro */ 195 /* MPU OPP4 - OPPNitro */
197 OPP_INITIALIZER("mpu", false, 1000000000, 196 OPP_INITIALIZER("mpu", false, 1000000000,
198 AM33XX_ES2_0_VDD_MPU_OPPNITRO_UV), 197 AM33XX_ES2_0_VDD_MPU_OPPNITRO_UV),
199 }; 198 };
200 199
201 #define AM33XX_ES2_1_VDD_MPU_OPP50_UV 950000
202 #define AM33XX_ES2_1_VDD_MPU_OPP100_UV 1100000
203 #define AM33XX_ES2_1_VDD_MPU_OPPTURBO_UV 1260000
204 #define AM33XX_ES2_1_VDD_MPU_OPPNITRO_UV 1350000
205
206 #define OPP_50_INDEX 0
207 #define OPP_100_INDEX 1
208 #define OPP_TURBO_INDEX 2
209 #define OPP_NITRO_INDEX 3
210
211
212 /* From AM335x TRM, SPRUH73H, Section 9.3.50 */
213 #define AM33XX_EFUSE_SMA_OFFSET 0x7fc
214
215 /*
216 * Bits [17-16] indicates package type
217 * 00 - reserved
218 * 01 - ZCZ
219 * 10 - ZCE
220 * 11 - reserved
221 */
222 #define PACKAGE_TYPE_MASK 0x3
223 #define PACKAGE_TYPE_SHFT 16
224
225 #define PACKAGE_TYPE_ZCZ 0x1
226 #define PACKAGE_TYPE_ZCE 0x2
227
228 /*
229 * Bits [12:0] are OPP Disabled bits,
230 * 1 = OPP is disabled and not available,
231 * 0 = OPP available.
232 */
233 #define MAX_FREQ_MASK 0x1fff
234 #define MAX_FREQ_SHFT 0
235
236 #define OPP_50_300MHZ_ZCZ_BIT 4
237 #define OPP_100_600MHZ_ZCZ_BIT 6
238 #define OPP_TURBO_800MHZ_ZCZ_BIT 8
239 #define OPP_NITRO_1GHZ_ZCZ_BIT 9
240
241 #define OPP_50_300MHZ_ZCE_BIT 5
242 #define OPP_100_600MHZ_ZCE_BIT 6
243
244
245 static struct omap_opp_def __initdata am33xx_es2_1_opp_list[] = {
246 /* MPU OPP1 - OPP50 */
247 OPP_INITIALIZER("mpu", false, 300000000,
248 AM33XX_ES2_1_VDD_MPU_OPP50_UV),
249 /* MPU OPP2 - OPP100 */
250 OPP_INITIALIZER("mpu", false, 600000000,
251 AM33XX_ES2_1_VDD_MPU_OPP100_UV),
252 /* MPU OPP3 - OPPTurbo */
253 OPP_INITIALIZER("mpu", false, 800000000,
254 AM33XX_ES2_1_VDD_MPU_OPPTURBO_UV),
255 /* MPU OPP4 - OPPNitro */
256 OPP_INITIALIZER("mpu", false, 1000000000,
257 AM33XX_ES2_1_VDD_MPU_OPPNITRO_UV),
258 };
259
260 /** 200 /**
261 * omap3_opp_init() - initialize omap3 opp table 201 * omap3_opp_init() - initialize omap3 opp table
262 */ 202 */
263 int __init omap3_opp_init(void) 203 int __init omap3_opp_init(void)
264 { 204 {
265 int r = -ENODEV; 205 int r = -ENODEV;
266 u32 rev, val, package_type, max_freq;
267 206
268 if (!cpu_is_omap34xx()) 207 if (!cpu_is_omap34xx())
269 return r; 208 return r;
270 209
271 if (cpu_is_omap3630()) 210 if (cpu_is_omap3630())
272 r = omap_init_opp_table(omap36xx_opp_def_list, 211 r = omap_init_opp_table(omap36xx_opp_def_list,
273 ARRAY_SIZE(omap36xx_opp_def_list)); 212 ARRAY_SIZE(omap36xx_opp_def_list));
274 else if (cpu_is_am33xx()) { 213 else if (cpu_is_am33xx()) {
275 rev = omap_rev(); 214 if (omap_rev() == AM335X_REV_ES1_0)
276 switch (rev) {
277 case AM335X_REV_ES1_0:
278 r = omap_init_opp_table(am33xx_es1_0_opp_def_list, 215 r = omap_init_opp_table(am33xx_es1_0_opp_def_list,
279 ARRAY_SIZE(am33xx_es1_0_opp_def_list)); 216 ARRAY_SIZE(am33xx_es1_0_opp_def_list));
280 break; 217 else
281
282 case AM335X_REV_ES2_1:
283 /*
284 * First read efuse sma reg to detect package type and
285 * supported frequency
286 */
287 val =
288 readl(AM33XX_CTRL_REGADDR(AM33XX_EFUSE_SMA_OFFSET));
289
290 package_type = (val >> PACKAGE_TYPE_SHFT) &
291 PACKAGE_TYPE_MASK;
292 max_freq = val & MAX_FREQ_MASK;
293
294 if (package_type == PACKAGE_TYPE_ZCZ) {
295 if (max_freq & OPP_50_300MHZ_ZCZ_BIT)
296 am33xx_es2_1_opp_list[OPP_50_INDEX].
297 default_available = true;
298
299 if (max_freq & OPP_100_600MHZ_ZCZ_BIT)
300 am33xx_es2_1_opp_list[OPP_100_INDEX].
301 default_available = true;
302
303 if (max_freq & OPP_TURBO_800MHZ_ZCZ_BIT)
304 am33xx_es2_1_opp_list[OPP_TURBO_INDEX].
305 default_available = true;
306
307 if (max_freq & OPP_NITRO_1GHZ_ZCZ_BIT)
308 am33xx_es2_1_opp_list[OPP_NITRO_INDEX].
309 default_available = true;
310 } else if (package_type == PACKAGE_TYPE_ZCE) {
311 if (max_freq & OPP_50_300MHZ_ZCE_BIT)
312 am33xx_es2_1_opp_list[OPP_50_INDEX].
313 default_available = true;
314
315 if (max_freq & OPP_100_600MHZ_ZCE_BIT)
316 am33xx_es2_1_opp_list[OPP_100_INDEX].
317 default_available = true;
318 } else {
319 /*
320 * if package type is not detected fall back to
321 * PG 2.0 OPP settings
322 */
323 r =
324 omap_init_opp_table(am33xx_es2_0_opp_def_list,
325 ARRAY_SIZE(am33xx_es2_0_opp_def_list));
326 break;
327 }
328
329 r = omap_init_opp_table(am33xx_es2_1_opp_list,
330 ARRAY_SIZE(am33xx_es2_1_opp_list));
331 break;
332
333 case AM335X_REV_ES2_0:
334 /* FALLTHROUGH */
335 default:
336 r = omap_init_opp_table(am33xx_es2_0_opp_def_list, 218 r = omap_init_opp_table(am33xx_es2_0_opp_def_list,
337 ARRAY_SIZE(am33xx_es2_0_opp_def_list)); 219 ARRAY_SIZE(am33xx_es2_0_opp_def_list));
338 } 220 }
339 } else { 221 else
340 r = omap_init_opp_table(omap34xx_opp_def_list, 222 r = omap_init_opp_table(omap34xx_opp_def_list,
341 ARRAY_SIZE(omap34xx_opp_def_list)); 223 ARRAY_SIZE(omap34xx_opp_def_list));
342 }
343 224
344 return r; 225 return r;
345 } 226 }
346 device_initcall(omap3_opp_init); 227 device_initcall(omap3_opp_init);
347 228