blob: de61f15c48e29ee7e1bdbd89b8a1f26162730366 [file] [log] [blame]
Paul Walmsleyaa218da2010-10-08 11:40:19 -06001/*
2 * linux/arch/arm/mach-omap2/common.c
3 *
4 * Code common to all OMAP2+ machines.
5 *
6 * Copyright (C) 2009 Texas Instruments
7 * Copyright (C) 2010 Nokia Corporation
8 * Tony Lindgren <tony@atomide.com>
9 * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
10 *
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
13 * published by the Free Software Foundation.
14 */
15#include <linux/kernel.h>
16#include <linux/init.h>
17#include <linux/clk.h>
18#include <linux/io.h>
19
20#include <plat/common.h>
21#include <plat/board.h>
Paul Walmsleyaa218da2010-10-08 11:40:19 -060022#include <plat/mux.h>
23
24#include <plat/clock.h>
25
26#include "sdrc.h"
Paul Walmsley4814ced2010-10-08 11:40:20 -060027#include "control.h"
Paul Walmsleyaa218da2010-10-08 11:40:19 -060028
29/* Global address base setup code */
30
31#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
32
33static void __init __omap2_set_globals(struct omap_globals *omap2_globals)
34{
35 omap2_set_globals_tap(omap2_globals);
36 omap2_set_globals_sdrc(omap2_globals);
37 omap2_set_globals_control(omap2_globals);
38 omap2_set_globals_prcm(omap2_globals);
39}
40
41#endif
42
Tony Lindgren59b479e2011-01-27 16:39:40 -080043#if defined(CONFIG_SOC_OMAP2420)
Paul Walmsleyaa218da2010-10-08 11:40:19 -060044
45static struct omap_globals omap242x_globals = {
46 .class = OMAP242X_CLASS,
47 .tap = OMAP2_L4_IO_ADDRESS(0x48014000),
48 .sdrc = OMAP2420_SDRC_BASE,
49 .sms = OMAP2420_SMS_BASE,
50 .ctrl = OMAP242X_CTRL_BASE,
51 .prm = OMAP2420_PRM_BASE,
52 .cm = OMAP2420_CM_BASE,
Paul Walmsleyaa218da2010-10-08 11:40:19 -060053};
54
55void __init omap2_set_globals_242x(void)
56{
57 __omap2_set_globals(&omap242x_globals);
58}
Benoit Cousson35549ec2011-09-23 22:23:09 +020059
60void __init omap242x_map_io(void)
61{
62 omap2_set_globals_242x();
63 omap242x_map_common_io();
64}
Paul Walmsleyaa218da2010-10-08 11:40:19 -060065#endif
66
Tony Lindgren59b479e2011-01-27 16:39:40 -080067#if defined(CONFIG_SOC_OMAP2430)
Paul Walmsleyaa218da2010-10-08 11:40:19 -060068
69static struct omap_globals omap243x_globals = {
70 .class = OMAP243X_CLASS,
71 .tap = OMAP2_L4_IO_ADDRESS(0x4900a000),
72 .sdrc = OMAP243X_SDRC_BASE,
73 .sms = OMAP243X_SMS_BASE,
74 .ctrl = OMAP243X_CTRL_BASE,
75 .prm = OMAP2430_PRM_BASE,
76 .cm = OMAP2430_CM_BASE,
Paul Walmsleyaa218da2010-10-08 11:40:19 -060077};
78
79void __init omap2_set_globals_243x(void)
80{
81 __omap2_set_globals(&omap243x_globals);
82}
Benoit Cousson35549ec2011-09-23 22:23:09 +020083
84void __init omap243x_map_io(void)
85{
86 omap2_set_globals_243x();
87 omap243x_map_common_io();
88}
Paul Walmsleyaa218da2010-10-08 11:40:19 -060089#endif
90
91#if defined(CONFIG_ARCH_OMAP3)
92
93static struct omap_globals omap3_globals = {
94 .class = OMAP343X_CLASS,
95 .tap = OMAP2_L4_IO_ADDRESS(0x4830A000),
96 .sdrc = OMAP343X_SDRC_BASE,
97 .sms = OMAP343X_SMS_BASE,
98 .ctrl = OMAP343X_CTRL_BASE,
99 .prm = OMAP3430_PRM_BASE,
100 .cm = OMAP3430_CM_BASE,
Paul Walmsleyaa218da2010-10-08 11:40:19 -0600101};
102
103void __init omap2_set_globals_3xxx(void)
104{
105 __omap2_set_globals(&omap3_globals);
106}
107
108void __init omap3_map_io(void)
109{
110 omap2_set_globals_3xxx();
111 omap34xx_map_common_io();
112}
Hemant Pedanekar01001712011-02-16 08:31:39 -0800113
114/*
115 * Adjust TAP register base such that omap3_check_revision accesses the correct
116 * TI816X register for checking device ID (it adds 0x204 to tap base while
117 * TI816X DEVICE ID register is at offset 0x600 from control base).
118 */
119#define TI816X_TAP_BASE (TI816X_CTRL_BASE + \
120 TI816X_CONTROL_DEVICE_ID - 0x204)
121
122static struct omap_globals ti816x_globals = {
123 .class = OMAP343X_CLASS,
124 .tap = OMAP2_L4_IO_ADDRESS(TI816X_TAP_BASE),
125 .ctrl = TI816X_CTRL_BASE,
126 .prm = TI816X_PRCM_BASE,
127 .cm = TI816X_PRCM_BASE,
128};
129
130void __init omap2_set_globals_ti816x(void)
131{
132 __omap2_set_globals(&ti816x_globals);
133}
Paul Walmsleyaa218da2010-10-08 11:40:19 -0600134#endif
135
136#if defined(CONFIG_ARCH_OMAP4)
137static struct omap_globals omap4_globals = {
138 .class = OMAP443X_CLASS,
139 .tap = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE),
140 .ctrl = OMAP443X_SCM_BASE,
141 .ctrl_pad = OMAP443X_CTRL_BASE,
142 .prm = OMAP4430_PRM_BASE,
143 .cm = OMAP4430_CM_BASE,
144 .cm2 = OMAP4430_CM2_BASE,
Paul Walmsleyaa218da2010-10-08 11:40:19 -0600145};
146
147void __init omap2_set_globals_443x(void)
148{
149 omap2_set_globals_tap(&omap4_globals);
150 omap2_set_globals_control(&omap4_globals);
151 omap2_set_globals_prcm(&omap4_globals);
152}
Benoit Cousson35549ec2011-09-23 22:23:09 +0200153
154void __init omap4_map_io(void)
155{
156 omap2_set_globals_443x();
157 omap44xx_map_common_io();
158}
Paul Walmsleyaa218da2010-10-08 11:40:19 -0600159#endif
160