-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Marek Szyprowski
authored and
Grant Likely
committed
Mar 11, 2014
1 parent
3f0c820
commit f618c47
Showing
3 changed files
with
72 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 */ |