diff options
author | Martin Sjoblom <martin.w.sjoblom@stericsson.com> | 2012-02-22 13:51:46 +0100 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:03:43 +0200 |
commit | 66e911ce18fd742aaa1bd826e9e762119ad11459 (patch) | |
tree | 5b9790000caabeeef0e3b32a6df1188640a25d98 | |
parent | c670f3fbde6cdeb2801c88ea143f6429791aed27 (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.c | 36 | ||||
-rw-r--r-- | include/linux/hwmem.h | 4 |
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 */ |