diff options
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r-- | arch/arm/mach-omap2/include/mach/omap-secure.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap-secure.c | 29 |
2 files changed, 32 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/include/mach/omap-secure.h b/arch/arm/mach-omap2/include/mach/omap-secure.h index 26e7bcc49adc..29f60cae45e9 100644 --- a/arch/arm/mach-omap2/include/mach/omap-secure.h +++ b/arch/arm/mach-omap2/include/mach/omap-secure.h | |||
@@ -26,6 +26,8 @@ | |||
26 | #define FLAG_FIQ_ENABLE 0x1 | 26 | #define FLAG_FIQ_ENABLE 0x1 |
27 | #define NO_FLAG 0x0 | 27 | #define NO_FLAG 0x0 |
28 | 28 | ||
29 | /* Maximum Secure memory storage size */ | ||
30 | #define OMAP_SECURE_RAM_STORAGE (88 * SZ_1K) | ||
29 | 31 | ||
30 | /* Secure low power HAL API index */ | 32 | /* Secure low power HAL API index */ |
31 | #define OMAP4_HAL_SAVESECURERAM_INDEX 0x1a | 33 | #define OMAP4_HAL_SAVESECURERAM_INDEX 0x1a |
@@ -36,5 +38,6 @@ | |||
36 | extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs, | 38 | extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs, |
37 | u32 arg1, u32 arg2, u32 arg3, u32 arg4); | 39 | u32 arg1, u32 arg2, u32 arg3, u32 arg4); |
38 | extern u32 omap_smc2(u32 id, u32 falg, u32 pargs); | 40 | extern u32 omap_smc2(u32 id, u32 falg, u32 pargs); |
41 | extern phys_addr_t omap_secure_ram_mempool_base(void); | ||
39 | 42 | ||
40 | #endif /* OMAP_ARCH_OMAP_SECURE_H */ | 43 | #endif /* OMAP_ARCH_OMAP_SECURE_H */ |
diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c index e5a606e59b1e..69f3c72d959b 100644 --- a/arch/arm/mach-omap2/omap-secure.c +++ b/arch/arm/mach-omap2/omap-secure.c | |||
@@ -13,11 +13,14 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
16 | #include <linux/memblock.h> | ||
16 | 17 | ||
17 | #include <asm/cacheflush.h> | 18 | #include <asm/cacheflush.h> |
18 | 19 | ||
19 | #include <mach/omap-secure.h> | 20 | #include <mach/omap-secure.h> |
20 | 21 | ||
22 | static phys_addr_t omap_secure_memblock_base; | ||
23 | |||
21 | /** | 24 | /** |
22 | * omap_sec_dispatcher: Routine to dispatch low power secure | 25 | * omap_sec_dispatcher: Routine to dispatch low power secure |
23 | * service routines | 26 | * service routines |
@@ -50,3 +53,29 @@ u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs, u32 arg1, u32 arg2, | |||
50 | 53 | ||
51 | return ret; | 54 | return ret; |
52 | } | 55 | } |
56 | |||
57 | /* Allocate the memory to save secure ram */ | ||
58 | int __init omap_secure_ram_reserve_memblock(void) | ||
59 | { | ||
60 | phys_addr_t paddr; | ||
61 | u32 size = OMAP_SECURE_RAM_STORAGE; | ||
62 | |||
63 | size = ALIGN(size, SZ_1M); | ||
64 | paddr = memblock_alloc(size, SZ_1M); | ||
65 | if (!paddr) { | ||
66 | pr_err("%s: failed to reserve %x bytes\n", | ||
67 | __func__, size); | ||
68 | return -ENOMEM; | ||
69 | } | ||
70 | memblock_free(paddr, size); | ||
71 | memblock_remove(paddr, size); | ||
72 | |||
73 | omap_secure_memblock_base = paddr; | ||
74 | |||
75 | return 0; | ||
76 | } | ||
77 | |||
78 | phys_addr_t omap_secure_ram_mempool_base(void) | ||
79 | { | ||
80 | return omap_secure_memblock_base; | ||
81 | } | ||