summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Sjoblom <martin.w.sjoblom@stericsson.com>2012-02-22 13:51:46 +0100
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:03:43 +0200
commit66e911ce18fd742aaa1bd826e9e762119ad11459 (patch)
tree5b9790000caabeeef0e3b32a6df1188640a25d98
parentc670f3fbde6cdeb2801c88ea143f6429791aed27 (diff)
ux500: hwmem: Add protected hwmem support
ST-Ericsson Linux next: NA ST-Ericsson ID: 334907 ST-Ericsson FOSS-OUT ID: Trivial Change-Id: Ia3b5293c55a052cbe35b0d281925426e5d3e37ee Signed-off-by: Martin Sjoblom <martin.w.sjoblom@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/50227 Reviewed-by: QABUILD Reviewed-by: QATEST Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com> Reviewed-by: Per-Daniel OLSSON <per-daniel.olsson@stericsson.com> Reviewed-by: Robert FEKETE <robert.fekete@stericsson.com>
-rw-r--r--arch/arm/mach-ux500/hwmem-int.c36
-rw-r--r--include/linux/hwmem.h4
2 files changed, 39 insertions, 1 deletions
diff --git a/arch/arm/mach-ux500/hwmem-int.c b/arch/arm/mach-ux500/hwmem-int.c
index c23049df4a6..e3fecb8c354 100644
--- a/arch/arm/mach-ux500/hwmem-int.c
+++ b/arch/arm/mach-ux500/hwmem-int.c
@@ -29,6 +29,28 @@ unsigned int hwmem_num_mem_types;
static phys_addr_t hwmem_paddr;
static size_t hwmem_size;
+static phys_addr_t hwmem_prot_paddr;
+static size_t hwmem_prot_size;
+
+static int __init parse_hwmem_prot_param(char *p)
+{
+
+ hwmem_prot_size = memparse(p, &p);
+
+ if (*p != '@')
+ goto no_at;
+
+ hwmem_prot_paddr = memparse(p + 1, &p);
+
+ return 0;
+
+no_at:
+ hwmem_prot_size = 0;
+
+ return -EINVAL;
+}
+early_param("hwmem_prot", parse_hwmem_prot_param);
+
static int __init parse_hwmem_param(char *p)
{
hwmem_size = memparse(p, &p);
@@ -49,7 +71,7 @@ early_param("hwmem", parse_hwmem_param);
static int __init setup_hwmem(void)
{
- static const unsigned int NUM_MEM_TYPES = 2;
+ static const unsigned int NUM_MEM_TYPES = 3;
int ret;
@@ -84,6 +106,18 @@ static int __init setup_hwmem(void)
hwmem_mem_types[1] = hwmem_mem_types[0];
hwmem_mem_types[1].id = HWMEM_MEM_CONTIGUOUS_SYS;
+ hwmem_mem_types[2] = hwmem_mem_types[1];
+ hwmem_mem_types[2].id = HWMEM_MEM_PROTECTED_SYS;
+
+ if (hwmem_prot_size > 0) {
+ hwmem_mem_types[2].allocator_instance = cona_create("hwmem_prot",
+ hwmem_prot_paddr, hwmem_prot_size);
+ if (IS_ERR(hwmem_mem_types[2].allocator_instance)) {
+ ret = PTR_ERR(hwmem_mem_types[2].allocator_instance);
+ goto hwmem_ima_init_failed;
+ }
+ }
+
hwmem_num_mem_types = NUM_MEM_TYPES;
return 0;
diff --git a/include/linux/hwmem.h b/include/linux/hwmem.h
index ba4c116f4b9..c84eaac79f1 100644
--- a/include/linux/hwmem.h
+++ b/include/linux/hwmem.h
@@ -102,6 +102,10 @@ enum hwmem_mem_type {
* @brief Contiguous system memory.
*/
HWMEM_MEM_CONTIGUOUS_SYS,
+ /**
+ * @brief Protected system memory.
+ */
+ HWMEM_MEM_PROTECTED_SYS,
};
/* User space API */