diff options
author | Aneesh V <aneesh@ti.com> | 2011-07-01 22:30:22 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2011-07-08 05:11:45 -0400 |
commit | cc0170b2d929b8a31fec3da66a132822a99f550b (patch) | |
tree | d41194e39efbf81b6dd66a8e7f30232261b8c75a /arch/arm/mach-omap2/id.c | |
parent | fa54dccddc8f4a53c223d53c56c54c61ea7d2623 (diff) |
OMAP4: ID: add omap_has_feature for max freq supported
Macros for identifying the max frequency supported by various
OMAP4 variants - Expanding along the lines of OMAP3's feature
handling.
[nm@ti.com: minor fixes for checks that should only for 443x|446x]
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Aneesh V <aneesh@ti.com>
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Reviewed-by: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap2/id.c')
-rw-r--r-- | arch/arm/mach-omap2/id.c | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index 743889a25e4b..37efb8696927 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c | |||
@@ -31,7 +31,7 @@ | |||
31 | static struct omap_chip_id omap_chip; | 31 | static struct omap_chip_id omap_chip; |
32 | static unsigned int omap_revision; | 32 | static unsigned int omap_revision; |
33 | 33 | ||
34 | u32 omap3_features; | 34 | u32 omap_features; |
35 | 35 | ||
36 | unsigned int omap_rev(void) | 36 | unsigned int omap_rev(void) |
37 | { | 37 | { |
@@ -183,14 +183,14 @@ static void __init omap24xx_check_revision(void) | |||
183 | #define OMAP3_CHECK_FEATURE(status,feat) \ | 183 | #define OMAP3_CHECK_FEATURE(status,feat) \ |
184 | if (((status & OMAP3_ ##feat## _MASK) \ | 184 | if (((status & OMAP3_ ##feat## _MASK) \ |
185 | >> OMAP3_ ##feat## _SHIFT) != FEAT_ ##feat## _NONE) { \ | 185 | >> OMAP3_ ##feat## _SHIFT) != FEAT_ ##feat## _NONE) { \ |
186 | omap3_features |= OMAP3_HAS_ ##feat; \ | 186 | omap_features |= OMAP3_HAS_ ##feat; \ |
187 | } | 187 | } |
188 | 188 | ||
189 | static void __init omap3_check_features(void) | 189 | static void __init omap3_check_features(void) |
190 | { | 190 | { |
191 | u32 status; | 191 | u32 status; |
192 | 192 | ||
193 | omap3_features = 0; | 193 | omap_features = 0; |
194 | 194 | ||
195 | status = omap_ctrl_readl(OMAP3_CONTROL_OMAP_STATUS); | 195 | status = omap_ctrl_readl(OMAP3_CONTROL_OMAP_STATUS); |
196 | 196 | ||
@@ -200,11 +200,11 @@ static void __init omap3_check_features(void) | |||
200 | OMAP3_CHECK_FEATURE(status, NEON); | 200 | OMAP3_CHECK_FEATURE(status, NEON); |
201 | OMAP3_CHECK_FEATURE(status, ISP); | 201 | OMAP3_CHECK_FEATURE(status, ISP); |
202 | if (cpu_is_omap3630()) | 202 | if (cpu_is_omap3630()) |
203 | omap3_features |= OMAP3_HAS_192MHZ_CLK; | 203 | omap_features |= OMAP3_HAS_192MHZ_CLK; |
204 | if (!cpu_is_omap3505() && !cpu_is_omap3517()) | 204 | if (!cpu_is_omap3505() && !cpu_is_omap3517()) |
205 | omap3_features |= OMAP3_HAS_IO_WAKEUP; | 205 | omap_features |= OMAP3_HAS_IO_WAKEUP; |
206 | 206 | ||
207 | omap3_features |= OMAP3_HAS_SDRC; | 207 | omap_features |= OMAP3_HAS_SDRC; |
208 | 208 | ||
209 | /* | 209 | /* |
210 | * TODO: Get additional info (where applicable) | 210 | * TODO: Get additional info (where applicable) |
@@ -212,9 +212,34 @@ static void __init omap3_check_features(void) | |||
212 | */ | 212 | */ |
213 | } | 213 | } |
214 | 214 | ||
215 | static void __init omap4_check_features(void) | ||
216 | { | ||
217 | u32 si_type; | ||
218 | |||
219 | if (cpu_is_omap443x()) | ||
220 | omap_features |= OMAP4_HAS_MPU_1GHZ; | ||
221 | |||
222 | |||
223 | if (cpu_is_omap446x()) { | ||
224 | si_type = | ||
225 | read_tap_reg(OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_1); | ||
226 | switch ((si_type & (3 << 16)) >> 16) { | ||
227 | case 2: | ||
228 | /* High performance device */ | ||
229 | omap_features |= OMAP4_HAS_MPU_1_5GHZ; | ||
230 | break; | ||
231 | case 1: | ||
232 | default: | ||
233 | /* Standard device */ | ||
234 | omap_features |= OMAP4_HAS_MPU_1_2GHZ; | ||
235 | break; | ||
236 | } | ||
237 | } | ||
238 | } | ||
239 | |||
215 | static void __init ti816x_check_features(void) | 240 | static void __init ti816x_check_features(void) |
216 | { | 241 | { |
217 | omap3_features = OMAP3_HAS_NEON; | 242 | omap_features = OMAP3_HAS_NEON; |
218 | } | 243 | } |
219 | 244 | ||
220 | static void __init omap3_check_revision(void) | 245 | static void __init omap3_check_revision(void) |
@@ -527,6 +552,7 @@ void __init omap2_check_revision(void) | |||
527 | return; | 552 | return; |
528 | } else if (cpu_is_omap44xx()) { | 553 | } else if (cpu_is_omap44xx()) { |
529 | omap4_check_revision(); | 554 | omap4_check_revision(); |
555 | omap4_check_features(); | ||
530 | return; | 556 | return; |
531 | } else { | 557 | } else { |
532 | pr_err("OMAP revision unknown, please fix!\n"); | 558 | pr_err("OMAP revision unknown, please fix!\n"); |