From 414587c7f945de43907acfba5fc239961b638464 Mon Sep 17 00:00:00 2001 From: Raghavendra Rao Ananta Date: Wed, 2 Oct 2019 18:03:11 -0700 Subject: [PATCH] of: Make of_get_ddrtype module friendly The APIs fdt_path_offset() and fdt_getprop_w() are not exported. As a result, drivers that are compiled as modules cannot directly use them. Hence, switch to of_find_node_by_path() and of_property_read_u32() to achive the same functionality while also being module friendly. Change-Id: I90b299c60b60a006d0932442549c5d5a20cf2ea0 Signed-off-by: Raghavendra Rao Ananta --- include/linux/of.h | 24 ++++++++++++++++++++++++ include/linux/of_fdt.h | 26 -------------------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/include/linux/of.h b/include/linux/of.h index 844f89e1b039..62cf9823109d 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -1278,6 +1278,30 @@ static inline int of_get_available_child_count(const struct device_node *np) return num; } +/** + * of_fdt_get_ddrtype - Return the type of ddr (4/5) on the current device + * + * On match, returns a non-zero positive value which matches the ddr type. + * Otherwise returns -ENOENT. + */ +static inline int of_fdt_get_ddrtype(void) +{ + int ret; + u32 ddr_type; + struct device_node *mem_node; + + mem_node = of_find_node_by_path("/memory"); + if (!mem_node) + return -ENOENT; + + ret = of_property_read_u32(mem_node, "ddr_device_type", &ddr_type); + of_node_put(mem_node); + if (ret < 0) + return -ENOENT; + + return ddr_type; +} + #if defined(CONFIG_OF) && !defined(MODULE) #define _OF_DECLARE(table, name, compat, fn, fn_type) \ static const struct of_device_id __of_table_##name \ diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h index a46e8d845841..bedfd08ffded 100644 --- a/include/linux/of_fdt.h +++ b/include/linux/of_fdt.h @@ -12,7 +12,6 @@ #include #include #include -#include /* Definitions used by the flattened device tree */ #define OF_DT_HEADER 0xd00dfeed /* marker */ @@ -40,31 +39,6 @@ extern char __dtb_end[]; extern u64 of_flat_dt_translate_address(unsigned long node); extern void of_fdt_limit_memory(int limit); -/** - * of_fdt_get_ddrtype - Return the type of ddr (4/5) on the current device - * - * On match, returns a non-zero positive value which matches the ddr type. - * Otherwise returns -ENOENT. - */ -static inline int of_fdt_get_ddrtype(void) -{ - int memory; - int len; - int ret; - fdt32_t *prop = NULL; - - memory = fdt_path_offset(initial_boot_params, "/memory"); - if (memory > 0) - prop = fdt_getprop_w(initial_boot_params, memory, - "ddr_device_type", &len); - - if (!prop || len != sizeof(u32)) - return -ENOENT; - - ret = fdt32_to_cpu(*prop); - - return ret; -} #endif /* CONFIG_OF_FLATTREE */ #ifdef CONFIG_OF_EARLY_FLATTREE