Introduce arch_memremap_exec and arch_memremap_exec_nocache for ARM to allow mapping of memory as executable. Some platforms have a requirement to map on-chip memory, such as SRAM, to hold and run code that cannot be executed in DRAM, such as low-level PM code or code to reconfigure the DRAM controller itself. Signed-off-by: Dave Gerlach <d-gerlach@xxxxxx> --- arch/arm/include/asm/io.h | 5 +++++ arch/arm/mm/ioremap.c | 16 ++++++++++++++++ arch/arm/mm/nommu.c | 12 ++++++++++++ 3 files changed, 33 insertions(+) diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h index 021692c64de3..67476a5add20 100644 --- a/arch/arm/include/asm/io.h +++ b/arch/arm/include/asm/io.h @@ -411,6 +411,11 @@ void __iomem *ioremap_wc(resource_size_t res_cookie, size_t size); void iounmap(volatile void __iomem *iomem_cookie); #define iounmap iounmap +void *arch_memremap_exec(phys_addr_t phys_addr, size_t size); +void *arch_memremap_exec_nocache(phys_addr_t phys_addr, size_t size); +#define arch_memremap_exec arch_memremap_exec +#define arch_memremap_exec_nocache arch_memremap_exec_nocache + void *arch_memremap_wb(phys_addr_t phys_addr, size_t size); #define arch_memremap_wb arch_memremap_wb diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c index ff0eed23ddf1..5c22a7a0b349 100644 --- a/arch/arm/mm/ioremap.c +++ b/arch/arm/mm/ioremap.c @@ -419,6 +419,22 @@ __arm_ioremap_exec(phys_addr_t phys_addr, size_t size, bool cached) __builtin_return_address(0)); } +void *arch_memremap_exec(phys_addr_t phys_addr, size_t size) +{ + return (__force void *)arch_ioremap_caller(phys_addr, size, + MT_MEMORY_RWX, + __builtin_return_address(0)); +} +EXPORT_SYMBOL(arch_memremap_exec); + +void *arch_memremap_exec_nocache(phys_addr_t phys_addr, size_t size) +{ + return (__force void *)arch_ioremap_caller(phys_addr, size, + MT_MEMORY_RWX_NONCACHED, + __builtin_return_address(0)); +} +EXPORT_SYMBOL(arch_memremap_exec_nocache); + void *arch_memremap_wb(phys_addr_t phys_addr, size_t size) { return (__force void *)arch_ioremap_caller(phys_addr, size, diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c index 2740967727e2..038922133ec4 100644 --- a/arch/arm/mm/nommu.c +++ b/arch/arm/mm/nommu.c @@ -390,6 +390,18 @@ void *arch_memremap_wb(phys_addr_t phys_addr, size_t size) return (void *)phys_addr; } +void *arch_memremap_exec(phys_addr_t phys_addr, size_t size) +{ + return (void *)phys_addr; +} +EXPORT_SYMBOL(arch_memremap_exec); + +void *arch_memremap_exec_nocache(phys_addr_t phys_addr, size_t size) +{ + return (void *)phys_addr; +} +EXPORT_SYMBOL(arch_memremap_exec_nocache); + void __iounmap(volatile void __iomem *addr) { } -- 2.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html