--- zzzz-none-000/linux-4.4.60/drivers/of/of_reserved_mem.c 2017-04-08 07:53:53.000000000 +0000 +++ scorpion-7490-727/linux-4.4.60/drivers/of/of_reserved_mem.c 2021-02-04 17:41:59.000000000 +0000 @@ -280,6 +280,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; @@ -347,3 +356,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);