diff options
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r-- | arch/arm/mach-omap2/Kconfig | 22 | ||||
-rw-r--r-- | arch/arm/mach-omap2/common.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/common.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap2/io.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/mux.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap-secure.h | 7 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap4-common.c | 69 | ||||
-rw-r--r-- | arch/arm/mach-omap2/sleep44xx.S | 2 |
8 files changed, 2 insertions, 106 deletions
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 2b8e47788062..1041b19485ab 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
@@ -69,6 +69,7 @@ config SOC_DRA7XX | |||
69 | select ARM_GIC | 69 | select ARM_GIC |
70 | select HAVE_ARM_ARCH_TIMER | 70 | select HAVE_ARM_ARCH_TIMER |
71 | select IRQ_CROSSBAR | 71 | select IRQ_CROSSBAR |
72 | select ARM_ERRATA_798181 if SMP | ||
72 | 73 | ||
73 | config ARCH_OMAP2PLUS | 74 | config ARCH_OMAP2PLUS |
74 | bool | 75 | bool |
@@ -278,27 +279,6 @@ config OMAP3_SDRC_AC_TIMING | |||
278 | wish to say no. Selecting yes without understanding what is | 279 | wish to say no. Selecting yes without understanding what is |
279 | going on could result in system crashes; | 280 | going on could result in system crashes; |
280 | 281 | ||
281 | config OMAP4_ERRATA_I688 | ||
282 | bool "OMAP4 errata: Async Bridge Corruption" | ||
283 | depends on (ARCH_OMAP4 || SOC_OMAP5) && !ARCH_MULTIPLATFORM | ||
284 | select ARCH_HAS_BARRIERS | ||
285 | help | ||
286 | If a data is stalled inside asynchronous bridge because of back | ||
287 | pressure, it may be accepted multiple times, creating pointer | ||
288 | misalignment that will corrupt next transfers on that data path | ||
289 | until next reset of the system (No recovery procedure once the | ||
290 | issue is hit, the path remains consistently broken). Async bridge | ||
291 | can be found on path between MPU to EMIF and MPU to L3 interconnect. | ||
292 | This situation can happen only when the idle is initiated by a | ||
293 | Master Request Disconnection (which is trigged by software when | ||
294 | executing WFI on CPU). | ||
295 | The work-around for this errata needs all the initiators connected | ||
296 | through async bridge must ensure that data path is properly drained | ||
297 | before issuing WFI. This condition will be met if one Strongly ordered | ||
298 | access is performed to the target right before executing the WFI. | ||
299 | In MPU case, L3 T2ASYNC FIFO and DDR T2ASYNC FIFO needs to be drained. | ||
300 | IO barrier ensure that there is no synchronisation loss on initiators | ||
301 | operating on both interconnect port simultaneously. | ||
302 | endmenu | 282 | endmenu |
303 | 283 | ||
304 | endif | 284 | endif |
diff --git a/arch/arm/mach-omap2/common.c b/arch/arm/mach-omap2/common.c index 484cdadfb187..eae6a0e87c90 100644 --- a/arch/arm/mach-omap2/common.c +++ b/arch/arm/mach-omap2/common.c | |||
@@ -30,5 +30,4 @@ int __weak omap_secure_ram_reserve_memblock(void) | |||
30 | void __init omap_reserve(void) | 30 | void __init omap_reserve(void) |
31 | { | 31 | { |
32 | omap_secure_ram_reserve_memblock(); | 32 | omap_secure_ram_reserve_memblock(); |
33 | omap_barrier_reserve_memblock(); | ||
34 | } | 33 | } |
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index 46e24581d624..cf3cf22ecd42 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h | |||
@@ -200,9 +200,6 @@ void __init omap4_map_io(void); | |||
200 | void __init omap5_map_io(void); | 200 | void __init omap5_map_io(void); |
201 | void __init ti81xx_map_io(void); | 201 | void __init ti81xx_map_io(void); |
202 | 202 | ||
203 | /* omap_barriers_init() is OMAP4 only */ | ||
204 | void omap_barriers_init(void); | ||
205 | |||
206 | /** | 203 | /** |
207 | * omap_test_timeout - busy-loop, testing a condition | 204 | * omap_test_timeout - busy-loop, testing a condition |
208 | * @cond: condition to test until it evaluates to true | 205 | * @cond: condition to test until it evaluates to true |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index c4871c55bd8b..1eeff6be260d 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -306,7 +306,6 @@ void __init am33xx_map_io(void) | |||
306 | void __init omap4_map_io(void) | 306 | void __init omap4_map_io(void) |
307 | { | 307 | { |
308 | iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc)); | 308 | iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc)); |
309 | omap_barriers_init(); | ||
310 | } | 309 | } |
311 | #endif | 310 | #endif |
312 | 311 | ||
@@ -314,7 +313,6 @@ void __init omap4_map_io(void) | |||
314 | void __init omap5_map_io(void) | 313 | void __init omap5_map_io(void) |
315 | { | 314 | { |
316 | iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc)); | 315 | iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc)); |
317 | omap_barriers_init(); | ||
318 | } | 316 | } |
319 | #endif | 317 | #endif |
320 | /* | 318 | /* |
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index 78064b0d4db5..176eef6ef338 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c | |||
@@ -1053,7 +1053,7 @@ static void __init omap_mux_init_list(struct omap_mux_partition *partition, | |||
1053 | struct omap_mux *entry; | 1053 | struct omap_mux *entry; |
1054 | 1054 | ||
1055 | #ifdef CONFIG_OMAP_MUX | 1055 | #ifdef CONFIG_OMAP_MUX |
1056 | if (!superset->muxnames || !superset->muxnames[0]) { | 1056 | if (!superset->muxnames[0]) { |
1057 | superset++; | 1057 | superset++; |
1058 | continue; | 1058 | continue; |
1059 | } | 1059 | } |
diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h index dec2b05d184b..af2851fbcdf0 100644 --- a/arch/arm/mach-omap2/omap-secure.h +++ b/arch/arm/mach-omap2/omap-secure.h | |||
@@ -70,13 +70,6 @@ extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs, | |||
70 | extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits); | 70 | extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits); |
71 | extern u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag); | 71 | extern u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag); |
72 | 72 | ||
73 | #ifdef CONFIG_OMAP4_ERRATA_I688 | ||
74 | extern int omap_barrier_reserve_memblock(void); | ||
75 | #else | ||
76 | static inline void omap_barrier_reserve_memblock(void) | ||
77 | { } | ||
78 | #endif | ||
79 | |||
80 | #ifdef CONFIG_SOC_HAS_REALTIME_COUNTER | 73 | #ifdef CONFIG_SOC_HAS_REALTIME_COUNTER |
81 | void set_cntfreq(void); | 74 | void set_cntfreq(void); |
82 | #else | 75 | #else |
diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 7bb116a6f86f..16350eefa66c 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c | |||
@@ -51,75 +51,6 @@ static void __iomem *twd_base; | |||
51 | 51 | ||
52 | #define IRQ_LOCALTIMER 29 | 52 | #define IRQ_LOCALTIMER 29 |
53 | 53 | ||
54 | #ifdef CONFIG_OMAP4_ERRATA_I688 | ||
55 | /* Used to implement memory barrier on DRAM path */ | ||
56 | #define OMAP4_DRAM_BARRIER_VA 0xfe600000 | ||
57 | |||
58 | void __iomem *dram_sync, *sram_sync; | ||
59 | |||
60 | static phys_addr_t paddr; | ||
61 | static u32 size; | ||
62 | |||
63 | void omap_bus_sync(void) | ||
64 | { | ||
65 | if (dram_sync && sram_sync) { | ||
66 | writel_relaxed(readl_relaxed(dram_sync), dram_sync); | ||
67 | writel_relaxed(readl_relaxed(sram_sync), sram_sync); | ||
68 | isb(); | ||
69 | } | ||
70 | } | ||
71 | EXPORT_SYMBOL(omap_bus_sync); | ||
72 | |||
73 | static int __init omap4_sram_init(void) | ||
74 | { | ||
75 | struct device_node *np; | ||
76 | struct gen_pool *sram_pool; | ||
77 | |||
78 | np = of_find_compatible_node(NULL, NULL, "ti,omap4-mpu"); | ||
79 | if (!np) | ||
80 | pr_warn("%s:Unable to allocate sram needed to handle errata I688\n", | ||
81 | __func__); | ||
82 | sram_pool = of_get_named_gen_pool(np, "sram", 0); | ||
83 | if (!sram_pool) | ||
84 | pr_warn("%s:Unable to get sram pool needed to handle errata I688\n", | ||
85 | __func__); | ||
86 | else | ||
87 | sram_sync = (void *)gen_pool_alloc(sram_pool, PAGE_SIZE); | ||
88 | |||
89 | return 0; | ||
90 | } | ||
91 | omap_arch_initcall(omap4_sram_init); | ||
92 | |||
93 | /* Steal one page physical memory for barrier implementation */ | ||
94 | int __init omap_barrier_reserve_memblock(void) | ||
95 | { | ||
96 | |||
97 | size = ALIGN(PAGE_SIZE, SZ_1M); | ||
98 | paddr = arm_memblock_steal(size, SZ_1M); | ||
99 | |||
100 | return 0; | ||
101 | } | ||
102 | |||
103 | void __init omap_barriers_init(void) | ||
104 | { | ||
105 | struct map_desc dram_io_desc[1]; | ||
106 | |||
107 | dram_io_desc[0].virtual = OMAP4_DRAM_BARRIER_VA; | ||
108 | dram_io_desc[0].pfn = __phys_to_pfn(paddr); | ||
109 | dram_io_desc[0].length = size; | ||
110 | dram_io_desc[0].type = MT_MEMORY_RW_SO; | ||
111 | iotable_init(dram_io_desc, ARRAY_SIZE(dram_io_desc)); | ||
112 | dram_sync = (void __iomem *) dram_io_desc[0].virtual; | ||
113 | |||
114 | pr_info("OMAP4: Map 0x%08llx to 0x%08lx for dram barrier\n", | ||
115 | (long long) paddr, dram_io_desc[0].virtual); | ||
116 | |||
117 | } | ||
118 | #else | ||
119 | void __init omap_barriers_init(void) | ||
120 | {} | ||
121 | #endif | ||
122 | |||
123 | void gic_dist_disable(void) | 54 | void gic_dist_disable(void) |
124 | { | 55 | { |
125 | if (gic_dist_base_addr) | 56 | if (gic_dist_base_addr) |
diff --git a/arch/arm/mach-omap2/sleep44xx.S b/arch/arm/mach-omap2/sleep44xx.S index b84a0122d823..ad1bb9431e94 100644 --- a/arch/arm/mach-omap2/sleep44xx.S +++ b/arch/arm/mach-omap2/sleep44xx.S | |||
@@ -333,11 +333,9 @@ ENDPROC(omap4_cpu_resume) | |||
333 | 333 | ||
334 | #endif /* defined(CONFIG_SMP) && defined(CONFIG_PM) */ | 334 | #endif /* defined(CONFIG_SMP) && defined(CONFIG_PM) */ |
335 | 335 | ||
336 | #ifndef CONFIG_OMAP4_ERRATA_I688 | ||
337 | ENTRY(omap_bus_sync) | 336 | ENTRY(omap_bus_sync) |
338 | ret lr | 337 | ret lr |
339 | ENDPROC(omap_bus_sync) | 338 | ENDPROC(omap_bus_sync) |
340 | #endif | ||
341 | 339 | ||
342 | ENTRY(omap_do_wfi) | 340 | ENTRY(omap_do_wfi) |
343 | stmfd sp!, {lr} | 341 | stmfd sp!, {lr} |