Skip to content

Commit

Permalink
ARM: OMAP: PM: Add support to allocate the memory for secure RAM
Browse files Browse the repository at this point in the history
Allocate the memory to save secure ram context which needs
to be done when MPU is hitting OFF mode.

The ROM code expects a physical address to this memory
and hence use memblock APIs to reserve this memory as part
of .reserve() callback. Maximum size as per secure RAM requirements
is allocated.

To keep omap1 build working, omap-secure.h file is created
under plat-omap directory.

Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Jean Pihet <j-pihet@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Tested-by: Vishwanath BS <vishwanath.bs@ti.com>
Signed-off-by: Kevin Hilman <khilman@ti.com>
  • Loading branch information
Santosh Shilimkar authored and Kevin Hilman committed Dec 8, 2011
1 parent ba9456a commit 259ee57
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 0 deletions.
3 changes: 3 additions & 0 deletions arch/arm/mach-omap2/include/mach/omap-secure.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
#define FLAG_FIQ_ENABLE 0x1
#define NO_FLAG 0x0

/* Maximum Secure memory storage size */
#define OMAP_SECURE_RAM_STORAGE (88 * SZ_1K)

/* Secure low power HAL API index */
#define OMAP4_HAL_SAVESECURERAM_INDEX 0x1a
Expand All @@ -36,5 +38,6 @@
extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
u32 arg1, u32 arg2, u32 arg3, u32 arg4);
extern u32 omap_smc2(u32 id, u32 falg, u32 pargs);
extern phys_addr_t omap_secure_ram_mempool_base(void);

#endif /* OMAP_ARCH_OMAP_SECURE_H */
29 changes: 29 additions & 0 deletions arch/arm/mach-omap2/omap-secure.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,14 @@
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/memblock.h>

#include <asm/cacheflush.h>

#include <mach/omap-secure.h>

static phys_addr_t omap_secure_memblock_base;

/**
* omap_sec_dispatcher: Routine to dispatch low power secure
* service routines
Expand Down Expand Up @@ -50,3 +53,29 @@ u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs, u32 arg1, u32 arg2,

return ret;
}

/* Allocate the memory to save secure ram */
int __init omap_secure_ram_reserve_memblock(void)
{
phys_addr_t paddr;
u32 size = OMAP_SECURE_RAM_STORAGE;

size = ALIGN(size, SZ_1M);
paddr = memblock_alloc(size, SZ_1M);
if (!paddr) {
pr_err("%s: failed to reserve %x bytes\n",
__func__, size);
return -ENOMEM;
}
memblock_free(paddr, size);
memblock_remove(paddr, size);

omap_secure_memblock_base = paddr;

return 0;
}

phys_addr_t omap_secure_ram_mempool_base(void)
{
return omap_secure_memblock_base;
}
3 changes: 3 additions & 0 deletions arch/arm/plat-omap/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
#include <plat/vram.h>
#include <plat/dsp.h>

#include <plat/omap-secure.h>


#define NO_LENGTH_CHECK 0xffffffff

Expand Down Expand Up @@ -66,6 +68,7 @@ void __init omap_reserve(void)
omapfb_reserve_sdram_memblock();
omap_vram_reserve_sdram_memblock();
omap_dsp_reserve_sdram_memblock();
omap_secure_ram_reserve_memblock();
}

void __init omap_init_consistent_dma_size(void)
Expand Down
13 changes: 13 additions & 0 deletions arch/arm/plat-omap/include/plat/omap-secure.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#ifndef __OMAP_SECURE_H__
#define __OMAP_SECURE_H__

#include <linux/types.h>

#ifdef CONFIG_ARCH_OMAP2PLUS
extern int omap_secure_ram_reserve_memblock(void);
#else
static inline void omap_secure_ram_reserve_memblock(void)
{ }
#endif

#endif /* __OMAP_SECURE_H__ */

0 comments on commit 259ee57

Please sign in to comment.