On Wed, Sep 18, 2019 at 1:47 PM Raghavendra Rao Ananta <rananta@xxxxxxxxxxxxxx> wrote: > > On some embedded systems, the '/memory' dt-property gets updated > by the bootloader (for example, the DDR configuration) and then > gets passed onto the kernel. The device drivers may have to read > the properties at runtime to make decisions. Hence, add > of_get_memory_prop() for the device drivers to query the requested Function name doesn't match. Device drivers don't need to access the FDT. > properties. > > Signed-off-by: Raghavendra Rao Ananta <rananta@xxxxxxxxxxxxxx> > --- > drivers/of/fdt.c | 27 +++++++++++++++++++++++++++ > include/linux/of_fdt.h | 1 + > 2 files changed, 28 insertions(+) We don't add kernel api's without users. > > diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c > index 223d617ecfe1..925cf2852433 100644 > --- a/drivers/of/fdt.c > +++ b/drivers/of/fdt.c > @@ -79,6 +79,33 @@ void __init of_fdt_limit_memory(int limit) > } > } > > +/** > + * of_fdt_get_memory_prop - Return the requested property from the /memory node > + * > + * On match, returns a non-zero positive value which represents the property > + * value. Otherwise returns -ENOENT. > + */ > +int of_fdt_get_memory_prop(const char *pname) > +{ > + int memory; > + int len; > + fdt32_t *prop = NULL; > + > + if (!pname) > + return -EINVAL; > + > + memory = fdt_path_offset(initial_boot_params, "/memory"); Memory nodes should have a unit-address, so this won't work frequently. > + if (memory > 0) > + prop = fdt_getprop_w(initial_boot_params, memory, > + pname, &len); > + > + if (!prop || len != sizeof(u32)) > + return -ENOENT; > + > + return fdt32_to_cpu(*prop); > +} > +EXPORT_SYMBOL_GPL(of_fdt_get_memory_prop); > + > static bool of_fdt_device_is_available(const void *blob, unsigned long node) > { > const char *status = fdt_getprop(blob, node, "status", NULL); > diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h > index acf820e88952..537f29373358 100644 > --- a/include/linux/of_fdt.h > +++ b/include/linux/of_fdt.h > @@ -38,6 +38,7 @@ extern char __dtb_end[]; > /* Other Prototypes */ > extern u64 of_flat_dt_translate_address(unsigned long node); > extern void of_fdt_limit_memory(int limit); > +extern int of_fdt_get_memory_prop(const char *pname); > #endif /* CONFIG_OF_FLATTREE */ > > #ifdef CONFIG_OF_EARLY_FLATTREE > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project >