--- zzzz-none-000/linux-4.4.271/drivers/of/of_reserved_mem.c 2021-06-03 06:22:09.000000000 +0000 +++ hawkeye-5590-750/linux-4.4.271/drivers/of/of_reserved_mem.c 2023-04-19 10:22:29.000000000 +0000 @@ -22,7 +22,7 @@ #include #include -#define MAX_RESERVED_REGIONS 16 +#define MAX_RESERVED_REGIONS 32 static struct reserved_mem reserved_mem[MAX_RESERVED_REGIONS]; static int reserved_mem_count; @@ -289,6 +289,15 @@ } } +struct reserved_mem *fdt_get_reserved_mem_resource(const char* name) { + int i; + pr_info("[%s] mem_count = %d; search name = \"%s\"\n", __func__, reserved_mem_count, name); + for (i = 0; i < reserved_mem_count; i++) + if (!strncmp(reserved_mem[i].name, name, strlen(name))) return &reserved_mem[i]; + return NULL; +} + + static inline struct reserved_mem *__find_rmem(struct device_node *node) { unsigned int i; @@ -356,3 +365,29 @@ rmem->ops->device_release(rmem, dev); } EXPORT_SYMBOL_GPL(of_reserved_mem_device_release); + +/** + * of_reserved_mem_lookup() - acquire reserved_mem from a device node + * @np: node pointer of the desired reserved-memory region + * + * This function allows drivers to acquire a reference to the reserved_mem + * struct based on a device node handle. + * + * Returns a reserved_mem reference, or NULL on error. + */ +struct reserved_mem *of_reserved_mem_lookup(struct device_node *np) +{ + const char *name; + int i; + + if (!np->full_name) + return NULL; + + name = kbasename(np->full_name); + for (i = 0; i < reserved_mem_count; i++) + if (!strcmp(reserved_mem[i].name, name)) + return &reserved_mem[i]; + + return NULL; +} +EXPORT_SYMBOL_GPL(of_reserved_mem_lookup);