diff options
Diffstat (limited to 'target/linux/ipq806x/patches/0051-drivers-of-add-support-for-custom-reserved-memory-dr.patch')
-rw-r--r-- | target/linux/ipq806x/patches/0051-drivers-of-add-support-for-custom-reserved-memory-dr.patch | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/target/linux/ipq806x/patches/0051-drivers-of-add-support-for-custom-reserved-memory-dr.patch b/target/linux/ipq806x/patches/0051-drivers-of-add-support-for-custom-reserved-memory-dr.patch deleted file mode 100644 index 48ad8ac835..0000000000 --- a/target/linux/ipq806x/patches/0051-drivers-of-add-support-for-custom-reserved-memory-dr.patch +++ /dev/null @@ -1,147 +0,0 @@ -From fc9e25ed9db2fcfbf16a9cbbf5a1f449da78f1d9 Mon Sep 17 00:00:00 2001 -From: Marek Szyprowski <m.szyprowski@samsung.com> -Date: Fri, 28 Feb 2014 14:42:49 +0100 -Subject: [PATCH 051/182] drivers: of: add support for custom reserved memory - drivers - -Add support for custom reserved memory drivers. Call their init() function -for each reserved region and prepare for using operations provided by them -with by the reserved_mem->ops array. - -Based on previous code provided by Josh Cartwright <joshc@codeaurora.org> - -Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> -Signed-off-by: Grant Likely <grant.likely@linaro.org> ---- - drivers/of/of_reserved_mem.c | 29 +++++++++++++++++++++++++++++ - include/asm-generic/vmlinux.lds.h | 11 +++++++++++ - include/linux/of_reserved_mem.h | 32 ++++++++++++++++++++++++++++++++ - 3 files changed, 72 insertions(+) - ---- a/drivers/of/of_reserved_mem.c -+++ b/drivers/of/of_reserved_mem.c -@@ -170,6 +170,33 @@ static int __init __reserved_mem_alloc_s - return 0; - } - -+static const struct of_device_id __rmem_of_table_sentinel -+ __used __section(__reservedmem_of_table_end); -+ -+/** -+ * res_mem_init_node() - call region specific reserved memory init code -+ */ -+static int __init __reserved_mem_init_node(struct reserved_mem *rmem) -+{ -+ extern const struct of_device_id __reservedmem_of_table[]; -+ const struct of_device_id *i; -+ -+ for (i = __reservedmem_of_table; i < &__rmem_of_table_sentinel; i++) { -+ reservedmem_of_init_fn initfn = i->data; -+ const char *compat = i->compatible; -+ -+ if (!of_flat_dt_is_compatible(rmem->fdt_node, compat)) -+ continue; -+ -+ if (initfn(rmem, rmem->fdt_node, rmem->name) == 0) { -+ pr_info("Reserved memory: initialized node %s, compatible id %s\n", -+ rmem->name, compat); -+ return 0; -+ } -+ } -+ return -ENOENT; -+} -+ - /** - * fdt_init_reserved_mem - allocate and init all saved reserved memory regions - */ -@@ -184,5 +211,7 @@ void __init fdt_init_reserved_mem(void) - if (rmem->size == 0) - err = __reserved_mem_alloc_size(node, rmem->name, - &rmem->base, &rmem->size); -+ if (err == 0) -+ __reserved_mem_init_node(rmem); - } - } ---- a/include/asm-generic/vmlinux.lds.h -+++ b/include/asm-generic/vmlinux.lds.h -@@ -177,6 +177,16 @@ - #define CLK_OF_TABLES() - #endif - -+#ifdef CONFIG_OF_RESERVED_MEM -+#define RESERVEDMEM_OF_TABLES() \ -+ . = ALIGN(8); \ -+ VMLINUX_SYMBOL(__reservedmem_of_table) = .; \ -+ *(__reservedmem_of_table) \ -+ *(__reservedmem_of_table_end) -+#else -+#define RESERVEDMEM_OF_TABLES() -+#endif -+ - #ifdef CONFIG_SMP - #define CPU_METHOD_OF_TABLES() . = ALIGN(8); \ - VMLINUX_SYMBOL(__cpu_method_of_table_begin) = .; \ -@@ -510,6 +520,7 @@ - TRACE_SYSCALLS() \ - MEM_DISCARD(init.rodata) \ - CLK_OF_TABLES() \ -+ RESERVEDMEM_OF_TABLES() \ - CLKSRC_OF_TABLES() \ - CPU_METHOD_OF_TABLES() \ - KERNEL_DTB() \ ---- a/include/linux/of_reserved_mem.h -+++ b/include/linux/of_reserved_mem.h -@@ -1,21 +1,53 @@ - #ifndef __OF_RESERVED_MEM_H - #define __OF_RESERVED_MEM_H - -+struct device; -+struct of_phandle_args; -+struct reserved_mem_ops; -+ - struct reserved_mem { - const char *name; - unsigned long fdt_node; -+ const struct reserved_mem_ops *ops; - phys_addr_t base; - phys_addr_t size; -+ void *priv; -+}; -+ -+struct reserved_mem_ops { -+ void (*device_init)(struct reserved_mem *rmem, -+ struct device *dev); -+ void (*device_release)(struct reserved_mem *rmem, -+ struct device *dev); - }; - -+typedef int (*reservedmem_of_init_fn)(struct reserved_mem *rmem, -+ unsigned long node, const char *uname); -+ - #ifdef CONFIG_OF_RESERVED_MEM - void fdt_init_reserved_mem(void); - void fdt_reserved_mem_save_node(unsigned long node, const char *uname, - phys_addr_t base, phys_addr_t size); -+ -+#define RESERVEDMEM_OF_DECLARE(name, compat, init) \ -+ static const struct of_device_id __reservedmem_of_table_##name \ -+ __used __section(__reservedmem_of_table) \ -+ = { .compatible = compat, \ -+ .data = (init == (reservedmem_of_init_fn)NULL) ? \ -+ init : init } -+ - #else - static inline void fdt_init_reserved_mem(void) { } - static inline void fdt_reserved_mem_save_node(unsigned long node, - const char *uname, phys_addr_t base, phys_addr_t size) { } -+ -+#define RESERVEDMEM_OF_DECLARE(name, compat, init) \ -+ static const struct of_device_id __reservedmem_of_table_##name \ -+ __attribute__((unused)) \ -+ = { .compatible = compat, \ -+ .data = (init == (reservedmem_of_init_fn)NULL) ? \ -+ init : init } -+ - #endif - - #endif /* __OF_RESERVED_MEM_H */ |