91149ae23097f5e9ef5996d2fbfd330c175fd87a
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-rockchip / sram.h
1 #ifndef __MACH_ROCKCHIP_SRAM_H
2 #define __MACH_ROCKCHIP_SRAM_H
3
4 #include <linux/pie.h>
5 #include <asm/pie.h>
6
7 extern char __pie_common_start[];
8 extern char __pie_common_end[];
9 extern char __pie_overlay_start[];
10
11 extern struct gen_pool *rockchip_sram_pool;
12 extern struct pie_chunk *rockchip_pie_chunk;
13 extern void *rockchip_sram_virt;
14 extern size_t rockchip_sram_size;
15 extern char *rockchip_sram_stack;
16 extern char __pie_data(rk3188) __pie_rk3188_sram_stack[1024];
17
18 #define RK_PIE_DATA3(x) __pie_data(rk##x)
19 #define RK_PIE_DATA2(x) RK_PIE_DATA3(x)
20 #define RK_PIE_DATA RK_PIE_DATA2(CPU)
21
22 #define DATA3(x, y) __pie_rk##y##_##x
23 #define DATA2(x, y) DATA3(x, y)
24 #define DATA(x) DATA2(x, CPU)
25
26 #define RK_PIE3(x) __pie(rk##x)
27 #define RK_PIE2(x) RK_PIE3(x)
28 #define RK_PIE RK_PIE2(CPU)
29
30 #define FUNC3(x, y) __pie_rk##y##_##x
31 #define FUNC2(x, y) FUNC3(x, y)
32 #define FUNC(x) FUNC2(x, CPU)
33
34 #define PIE_FUNC(x) RK_PIE FUNC(x)
35 #define PIE_DATA(x) RK_PIE_DATA DATA(x)
36
37 #define DEFINE_PIE_DATA(x) PIE_DATA(x); EXPORT_PIE_SYMBOL(DATA(x));
38
39 /* Tag variables with this */
40 #define __sramdata RK_PIE_DATA
41 /* Tag functions inside SRAM called from outside SRAM with this */
42 #define __sramfunc RK_PIE noinline
43 /* Tag function inside SRAM called from inside SRAM  with this */
44 #define __sramlocalfunc RK_PIE
45
46 extern void call_with_stack(void (*fn)(void *), void *arg, void *sp);
47
48 #ifdef CONFIG_PIE
49 extern int __init rockchip_pie_init(void);
50 #else
51 static inline int rockchip_pie_init(void) { return -1; }
52 #endif
53
54 #endif