diff options
author | Santosh Shilimkar <santosh.shilimkar@ti.com> | 2009-05-28 17:16:04 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2009-05-28 17:16:04 -0400 |
commit | 44169075e6eaa87bab6a296209d8d0610879b394 (patch) | |
tree | 4aca7ea61215bb50d647476de30c558859c2f2f3 /arch/arm/mach-omap2 | |
parent | 7419045016e5002b3ccee72b28e41bf53dca68f2 (diff) |
ARM: OMAP4: Add minimal support for omap4
This patch adds the support for OMAP4. The platform and machine specific
headers and sources updated for OMAP4430 SDP platform.
OMAP4430 is Texas Instrument's SOC based on ARM Cortex-A9 SMP architecture.
It's a dual core SOC with GIC used for interrupt handling and SCU for cache
coherency.
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r-- | arch/arm/mach-omap2/gpmc.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-omap2/id.c | 8 | ||||
-rw-r--r-- | arch/arm/mach-omap2/io.c | 52 | ||||
-rw-r--r-- | arch/arm/mach-omap2/serial.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-omap2/timer-gp.c | 9 |
5 files changed, 77 insertions, 5 deletions
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index 2249049c1d5a..f91934b2b092 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c | |||
@@ -5,6 +5,9 @@ | |||
5 | * | 5 | * |
6 | * Author: Juha Yrjola | 6 | * Author: Juha Yrjola |
7 | * | 7 | * |
8 | * Copyright (C) 2009 Texas Instruments | ||
9 | * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
10 | * | ||
8 | * 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 |
9 | * 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 |
10 | * published by the Free Software Foundation. | 13 | * published by the Free Software Foundation. |
@@ -424,6 +427,9 @@ void __init gpmc_init(void) | |||
424 | } else if (cpu_is_omap34xx()) { | 427 | } else if (cpu_is_omap34xx()) { |
425 | ck = "gpmc_fck"; | 428 | ck = "gpmc_fck"; |
426 | l = OMAP34XX_GPMC_BASE; | 429 | l = OMAP34XX_GPMC_BASE; |
430 | } else if (cpu_is_omap44xx()) { | ||
431 | ck = "gpmc_fck"; | ||
432 | l = OMAP44XX_GPMC_BASE; | ||
427 | } | 433 | } |
428 | 434 | ||
429 | gpmc_l3_clk = clk_get(NULL, ck); | 435 | gpmc_l3_clk = clk_get(NULL, ck); |
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index 34b5914e0f8b..458990e20c60 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c | |||
@@ -6,6 +6,9 @@ | |||
6 | * Copyright (C) 2005 Nokia Corporation | 6 | * Copyright (C) 2005 Nokia Corporation |
7 | * Written by Tony Lindgren <tony@atomide.com> | 7 | * Written by Tony Lindgren <tony@atomide.com> |
8 | * | 8 | * |
9 | * Copyright (C) 2009 Texas Instruments | ||
10 | * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
11 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
10 | * it under the terms of the GNU General Public License version 2 as | 13 | * it under the terms of the GNU General Public License version 2 as |
11 | * published by the Free Software Foundation. | 14 | * published by the Free Software Foundation. |
@@ -200,7 +203,10 @@ void __init omap2_check_revision(void) | |||
200 | omap24xx_check_revision(); | 203 | omap24xx_check_revision(); |
201 | else if (cpu_is_omap34xx()) | 204 | else if (cpu_is_omap34xx()) |
202 | omap34xx_check_revision(); | 205 | omap34xx_check_revision(); |
203 | else | 206 | else if (cpu_is_omap44xx()) { |
207 | printk(KERN_INFO "FIXME: CPU revision = OMAP4430\n"); | ||
208 | return; | ||
209 | } else | ||
204 | pr_err("OMAP revision unknown, please fix!\n"); | 210 | pr_err("OMAP revision unknown, please fix!\n"); |
205 | 211 | ||
206 | /* | 212 | /* |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index 916fcd3a2328..32afd9448216 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -4,12 +4,14 @@ | |||
4 | * OMAP2 I/O mapping code | 4 | * OMAP2 I/O mapping code |
5 | * | 5 | * |
6 | * Copyright (C) 2005 Nokia Corporation | 6 | * Copyright (C) 2005 Nokia Corporation |
7 | * Copyright (C) 2007 Texas Instruments | 7 | * Copyright (C) 2007-2009 Texas Instruments |
8 | * | 8 | * |
9 | * Author: | 9 | * Author: |
10 | * Juha Yrjola <juha.yrjola@nokia.com> | 10 | * Juha Yrjola <juha.yrjola@nokia.com> |
11 | * Syed Khasim <x0khasim@ti.com> | 11 | * Syed Khasim <x0khasim@ti.com> |
12 | * | 12 | * |
13 | * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
14 | * | ||
13 | * This program is free software; you can redistribute it and/or modify | 15 | * This program is free software; you can redistribute it and/or modify |
14 | * it under the terms of the GNU General Public License version 2 as | 16 | * it under the terms of the GNU General Public License version 2 as |
15 | * published by the Free Software Foundation. | 17 | * published by the Free Software Foundation. |
@@ -30,6 +32,7 @@ | |||
30 | #include <mach/sdrc.h> | 32 | #include <mach/sdrc.h> |
31 | #include <mach/gpmc.h> | 33 | #include <mach/gpmc.h> |
32 | 34 | ||
35 | #ifndef CONFIG_ARCH_OMAP4 /* FIXME: Remove this once clkdev is ready */ | ||
33 | #include "clock.h" | 36 | #include "clock.h" |
34 | 37 | ||
35 | #include <mach/powerdomain.h> | 38 | #include <mach/powerdomain.h> |
@@ -38,7 +41,7 @@ | |||
38 | 41 | ||
39 | #include <mach/clockdomain.h> | 42 | #include <mach/clockdomain.h> |
40 | #include "clockdomains.h" | 43 | #include "clockdomains.h" |
41 | 44 | #endif | |
42 | /* | 45 | /* |
43 | * The machine specific code may provide the extra mapping besides the | 46 | * The machine specific code may provide the extra mapping besides the |
44 | * default mapping provided here. | 47 | * default mapping provided here. |
@@ -166,6 +169,46 @@ static struct map_desc omap34xx_io_desc[] __initdata = { | |||
166 | }, | 169 | }, |
167 | }; | 170 | }; |
168 | #endif | 171 | #endif |
172 | #ifdef CONFIG_ARCH_OMAP4 | ||
173 | static struct map_desc omap44xx_io_desc[] __initdata = { | ||
174 | { | ||
175 | .virtual = L3_44XX_VIRT, | ||
176 | .pfn = __phys_to_pfn(L3_44XX_PHYS), | ||
177 | .length = L3_44XX_SIZE, | ||
178 | .type = MT_DEVICE, | ||
179 | }, | ||
180 | { | ||
181 | .virtual = L4_44XX_VIRT, | ||
182 | .pfn = __phys_to_pfn(L4_44XX_PHYS), | ||
183 | .length = L4_44XX_SIZE, | ||
184 | .type = MT_DEVICE, | ||
185 | }, | ||
186 | { | ||
187 | .virtual = L4_WK_44XX_VIRT, | ||
188 | .pfn = __phys_to_pfn(L4_WK_44XX_PHYS), | ||
189 | .length = L4_WK_44XX_SIZE, | ||
190 | .type = MT_DEVICE, | ||
191 | }, | ||
192 | { | ||
193 | .virtual = OMAP44XX_GPMC_VIRT, | ||
194 | .pfn = __phys_to_pfn(OMAP44XX_GPMC_PHYS), | ||
195 | .length = OMAP44XX_GPMC_SIZE, | ||
196 | .type = MT_DEVICE, | ||
197 | }, | ||
198 | { | ||
199 | .virtual = L4_PER_44XX_VIRT, | ||
200 | .pfn = __phys_to_pfn(L4_PER_44XX_PHYS), | ||
201 | .length = L4_PER_44XX_SIZE, | ||
202 | .type = MT_DEVICE, | ||
203 | }, | ||
204 | { | ||
205 | .virtual = L4_EMU_44XX_VIRT, | ||
206 | .pfn = __phys_to_pfn(L4_EMU_44XX_PHYS), | ||
207 | .length = L4_EMU_44XX_SIZE, | ||
208 | .type = MT_DEVICE, | ||
209 | }, | ||
210 | }; | ||
211 | #endif | ||
169 | 212 | ||
170 | void __init omap2_map_common_io(void) | 213 | void __init omap2_map_common_io(void) |
171 | { | 214 | { |
@@ -183,6 +226,9 @@ void __init omap2_map_common_io(void) | |||
183 | iotable_init(omap34xx_io_desc, ARRAY_SIZE(omap34xx_io_desc)); | 226 | iotable_init(omap34xx_io_desc, ARRAY_SIZE(omap34xx_io_desc)); |
184 | #endif | 227 | #endif |
185 | 228 | ||
229 | #if defined(CONFIG_ARCH_OMAP4) | ||
230 | iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc)); | ||
231 | #endif | ||
186 | /* Normally devicemaps_init() would flush caches and tlb after | 232 | /* Normally devicemaps_init() would flush caches and tlb after |
187 | * mdesc->map_io(), but we must also do it here because of the CPU | 233 | * mdesc->map_io(), but we must also do it here because of the CPU |
188 | * revision check below. | 234 | * revision check below. |
@@ -198,9 +244,11 @@ void __init omap2_map_common_io(void) | |||
198 | void __init omap2_init_common_hw(struct omap_sdrc_params *sp) | 244 | void __init omap2_init_common_hw(struct omap_sdrc_params *sp) |
199 | { | 245 | { |
200 | omap2_mux_init(); | 246 | omap2_mux_init(); |
247 | #ifndef CONFIG_ARCH_OMAP4 /* FIXME: Remove this once the clkdev is ready */ | ||
201 | pwrdm_init(powerdomains_omap); | 248 | pwrdm_init(powerdomains_omap); |
202 | clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps); | 249 | clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps); |
203 | omap2_clk_init(); | 250 | omap2_clk_init(); |
204 | omap2_sdrc_init(sp); | 251 | omap2_sdrc_init(sp); |
252 | #endif | ||
205 | gpmc_init(); | 253 | gpmc_init(); |
206 | } | 254 | } |
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index 3c2d325d3dca..29dc6f529058 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c | |||
@@ -8,6 +8,9 @@ | |||
8 | * | 8 | * |
9 | * Based off of arch/arm/mach-omap/omap1/serial.c | 9 | * Based off of arch/arm/mach-omap/omap1/serial.c |
10 | * | 10 | * |
11 | * Copyright (C) 2009 Texas Instruments | ||
12 | * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com | ||
13 | * | ||
11 | * This file is subject to the terms and conditions of the GNU General Public | 14 | * This file is subject to the terms and conditions of the GNU General Public |
12 | * License. See the file "COPYING" in the main directory of this archive | 15 | * License. See the file "COPYING" in the main directory of this archive |
13 | * for more details. | 16 | * for more details. |
@@ -122,6 +125,10 @@ void __init omap_serial_init(void) | |||
122 | 125 | ||
123 | if (info == NULL) | 126 | if (info == NULL) |
124 | return; | 127 | return; |
128 | if (cpu_is_omap44xx()) { | ||
129 | for (i = 0; i < OMAP_MAX_NR_PORTS; i++) | ||
130 | serial_platform_data[i].irq += 32; | ||
131 | } | ||
125 | 132 | ||
126 | for (i = 0; i < OMAP_MAX_NR_PORTS; i++) { | 133 | for (i = 0; i < OMAP_MAX_NR_PORTS; i++) { |
127 | struct plat_serial8250_port *p = serial_platform_data + i; | 134 | struct plat_serial8250_port *p = serial_platform_data + i; |
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c index f36aba12090e..2ce474a9d2b6 100644 --- a/arch/arm/mach-omap2/timer-gp.c +++ b/arch/arm/mach-omap2/timer-gp.c | |||
@@ -17,9 +17,10 @@ | |||
17 | * | 17 | * |
18 | * Some parts based off of TI's 24xx code: | 18 | * Some parts based off of TI's 24xx code: |
19 | * | 19 | * |
20 | * Copyright (C) 2004 Texas Instruments, Inc. | 20 | * Copyright (C) 2004-2009 Texas Instruments, Inc. |
21 | * | 21 | * |
22 | * Roughly modelled after the OMAP1 MPU timer code. | 22 | * Roughly modelled after the OMAP1 MPU timer code. |
23 | * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
23 | * | 24 | * |
24 | * This file is subject to the terms and conditions of the GNU General Public | 25 | * This file is subject to the terms and conditions of the GNU General Public |
25 | * License. See the file "COPYING" in the main directory of this archive | 26 | * License. See the file "COPYING" in the main directory of this archive |
@@ -82,7 +83,8 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode, | |||
82 | case CLOCK_EVT_MODE_PERIODIC: | 83 | case CLOCK_EVT_MODE_PERIODIC: |
83 | period = clk_get_rate(omap_dm_timer_get_fclk(gptimer)) / HZ; | 84 | period = clk_get_rate(omap_dm_timer_get_fclk(gptimer)) / HZ; |
84 | period -= 1; | 85 | period -= 1; |
85 | 86 | if (cpu_is_omap44xx()) | |
87 | period = 0xff; /* FIXME: */ | ||
86 | omap_dm_timer_set_load_start(gptimer, 1, 0xffffffff - period); | 88 | omap_dm_timer_set_load_start(gptimer, 1, 0xffffffff - period); |
87 | break; | 89 | break; |
88 | case CLOCK_EVT_MODE_ONESHOT: | 90 | case CLOCK_EVT_MODE_ONESHOT: |
@@ -145,6 +147,9 @@ static void __init omap2_gp_clockevent_init(void) | |||
145 | "timer-gp: omap_dm_timer_set_source() failed\n"); | 147 | "timer-gp: omap_dm_timer_set_source() failed\n"); |
146 | 148 | ||
147 | tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer)); | 149 | tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer)); |
150 | if (cpu_is_omap44xx()) | ||
151 | /* Assuming 32kHz clk is driving GPT1 */ | ||
152 | tick_rate = 32768; /* FIXME: */ | ||
148 | 153 | ||
149 | pr_info("OMAP clockevent source: GPTIMER%d at %u Hz\n", | 154 | pr_info("OMAP clockevent source: GPTIMER%d at %u Hz\n", |
150 | gptimer_id, tick_rate); | 155 | gptimer_id, tick_rate); |