From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752472AbcKQWNt (ORCPT ); Thu, 17 Nov 2016 17:13:49 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:34249 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750855AbcKQWNr (ORCPT ); Thu, 17 Nov 2016 17:13:47 -0500 Subject: Re: [PATCH 1/2] of: base: add support to get machine model name To: Sudeep Holla , linux-kernel@vger.kernel.org References: <1479396775-32033-1-git-send-email-sudeep.holla@arm.com> <582E1A59.7040502@gmail.com> Cc: Rob Herring , Arnd Bergmann , devicetree@vger.kernel.org From: Frank Rowand Message-ID: <582E2B6A.5050406@gmail.com> Date: Thu, 17 Nov 2016 14:12:58 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <582E1A59.7040502@gmail.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/17/16 13:00, Frank Rowand wrote: > On 11/17/16 07:32, Sudeep Holla wrote: >> Currently platforms/drivers needing to get the machine model name are >> replicating the same snippet of code. In some case, the OF reference >> counting is either missing or incorrect. >> >> This patch adds support to read the machine model name either using >> the "model" or the "compatible" property in the device tree root node >> to the core OF/DT code. >> >> This can be used to remove all the duplicate code snippets doing exactly >> same thing later. > > I find five instances of reading only property "model": > > arch/arm/mach-imx/cpu.c > arch/arm/mach-mxs/mach-mxs.c > arch/c6x/kernel/setup.c > arch/mips/cavium-octeon/setup.c > arch/sh/boards/of-generic.c My initial search was a little too strict. With a less restrictive search I find 16 more instances of reading property "model" and not reading property "compatible". > > I find one instance of reading property "model", then if > that does not exist, property "compatible": > > arch/mips/generic/proc.c > > The proposed patch matches the code used in one place, and thus > current usage does not match the patch description. > > Is my search bad? Are you planning to add additional instances > of reading "model" then "compatible"? > > -Frank > >> >> Cc: Rob Herring >> Cc: Frank Rowand >> Cc: Arnd Bergmann >> Signed-off-by: Sudeep Holla >> --- >> drivers/of/base.c | 32 ++++++++++++++++++++++++++++++++ >> include/linux/of.h | 6 ++++++ >> 2 files changed, 38 insertions(+) >> >> Hi Rob, >> >> It would be good if we can target this for v4.10, so that we have no >> dependencies to push PATCH 2/2 in v4.11 >> >> Regards, >> Sudeep >> >> diff --git a/drivers/of/base.c b/drivers/of/base.c >> index a0bccb54a9bd..0810c5ecf1aa 100644 >> --- a/drivers/of/base.c >> +++ b/drivers/of/base.c >> @@ -546,6 +546,38 @@ int of_machine_is_compatible(const char *compat) >> EXPORT_SYMBOL(of_machine_is_compatible); >> >> /** >> + * of_machine_get_model_name - Find and read the model name or the compatible >> + * value for the machine. >> + * @model: pointer to null terminated return string, modified only if >> + * return value is 0. >> + * >> + * Returns a string containing either the model name or the compatible value >> + * of the machine if found, else return error. >> + * >> + * Search for a machine model name or the compatible if model name is missing >> + * in a device tree node and retrieve a null terminated string value (pointer >> + * to data, not a copy). Returns 0 on success, -EINVAL if root of the device >> + * tree is not found and other error returned by of_property_read_string on >> + * failure. >> + */ >> +int of_machine_get_model_name(const char **model) >> +{ >> + int error; >> + >> + if (!of_node_get(of_root)) >> + return -EINVAL; >> + >> + error = of_property_read_string(of_root, "model", model); >> + if (error) >> + error = of_property_read_string_index(of_root, "compatible", >> + 0, model); >> + of_node_put(of_root); >> + >> + return error; >> +} >> +EXPORT_SYMBOL(of_machine_get_model_name); >> + >> +/** >> * __of_device_is_available - check if a device is available for use >> * >> * @device: Node to check for availability, with locks already held >> diff --git a/include/linux/of.h b/include/linux/of.h >> index d72f01009297..13fc66531f1b 100644 >> --- a/include/linux/of.h >> +++ b/include/linux/of.h >> @@ -367,6 +367,7 @@ extern int of_alias_get_id(struct device_node *np, const char *stem); >> extern int of_alias_get_highest_id(const char *stem); >> >> extern int of_machine_is_compatible(const char *compat); >> +extern int of_machine_get_model_name(const char **model); >> >> extern int of_add_property(struct device_node *np, struct property *prop); >> extern int of_remove_property(struct device_node *np, struct property *prop); >> @@ -788,6 +789,11 @@ static inline int of_machine_is_compatible(const char *compat) >> return 0; >> } >> >> +static inline int of_machine_get_model_name(const char **model) >> +{ >> + return -EINVAL; >> +} >> + >> static inline bool of_console_check(const struct device_node *dn, const char *name, int index) >> { >> return false; >> -- >> 2.7.4 >> >> > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Frank Rowand Subject: Re: [PATCH 1/2] of: base: add support to get machine model name Date: Thu, 17 Nov 2016 14:12:58 -0800 Message-ID: <582E2B6A.5050406@gmail.com> References: <1479396775-32033-1-git-send-email-sudeep.holla@arm.com> <582E1A59.7040502@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <582E1A59.7040502-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Sender: devicetree-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Sudeep Holla , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Rob Herring , Arnd Bergmann , devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: devicetree@vger.kernel.org On 11/17/16 13:00, Frank Rowand wrote: > On 11/17/16 07:32, Sudeep Holla wrote: >> Currently platforms/drivers needing to get the machine model name are >> replicating the same snippet of code. In some case, the OF reference >> counting is either missing or incorrect. >> >> This patch adds support to read the machine model name either using >> the "model" or the "compatible" property in the device tree root node >> to the core OF/DT code. >> >> This can be used to remove all the duplicate code snippets doing exactly >> same thing later. > > I find five instances of reading only property "model": > > arch/arm/mach-imx/cpu.c > arch/arm/mach-mxs/mach-mxs.c > arch/c6x/kernel/setup.c > arch/mips/cavium-octeon/setup.c > arch/sh/boards/of-generic.c My initial search was a little too strict. With a less restrictive search I find 16 more instances of reading property "model" and not reading property "compatible". > > I find one instance of reading property "model", then if > that does not exist, property "compatible": > > arch/mips/generic/proc.c > > The proposed patch matches the code used in one place, and thus > current usage does not match the patch description. > > Is my search bad? Are you planning to add additional instances > of reading "model" then "compatible"? > > -Frank > >> >> Cc: Rob Herring >> Cc: Frank Rowand >> Cc: Arnd Bergmann >> Signed-off-by: Sudeep Holla >> --- >> drivers/of/base.c | 32 ++++++++++++++++++++++++++++++++ >> include/linux/of.h | 6 ++++++ >> 2 files changed, 38 insertions(+) >> >> Hi Rob, >> >> It would be good if we can target this for v4.10, so that we have no >> dependencies to push PATCH 2/2 in v4.11 >> >> Regards, >> Sudeep >> >> diff --git a/drivers/of/base.c b/drivers/of/base.c >> index a0bccb54a9bd..0810c5ecf1aa 100644 >> --- a/drivers/of/base.c >> +++ b/drivers/of/base.c >> @@ -546,6 +546,38 @@ int of_machine_is_compatible(const char *compat) >> EXPORT_SYMBOL(of_machine_is_compatible); >> >> /** >> + * of_machine_get_model_name - Find and read the model name or the compatible >> + * value for the machine. >> + * @model: pointer to null terminated return string, modified only if >> + * return value is 0. >> + * >> + * Returns a string containing either the model name or the compatible value >> + * of the machine if found, else return error. >> + * >> + * Search for a machine model name or the compatible if model name is missing >> + * in a device tree node and retrieve a null terminated string value (pointer >> + * to data, not a copy). Returns 0 on success, -EINVAL if root of the device >> + * tree is not found and other error returned by of_property_read_string on >> + * failure. >> + */ >> +int of_machine_get_model_name(const char **model) >> +{ >> + int error; >> + >> + if (!of_node_get(of_root)) >> + return -EINVAL; >> + >> + error = of_property_read_string(of_root, "model", model); >> + if (error) >> + error = of_property_read_string_index(of_root, "compatible", >> + 0, model); >> + of_node_put(of_root); >> + >> + return error; >> +} >> +EXPORT_SYMBOL(of_machine_get_model_name); >> + >> +/** >> * __of_device_is_available - check if a device is available for use >> * >> * @device: Node to check for availability, with locks already held >> diff --git a/include/linux/of.h b/include/linux/of.h >> index d72f01009297..13fc66531f1b 100644 >> --- a/include/linux/of.h >> +++ b/include/linux/of.h >> @@ -367,6 +367,7 @@ extern int of_alias_get_id(struct device_node *np, const char *stem); >> extern int of_alias_get_highest_id(const char *stem); >> >> extern int of_machine_is_compatible(const char *compat); >> +extern int of_machine_get_model_name(const char **model); >> >> extern int of_add_property(struct device_node *np, struct property *prop); >> extern int of_remove_property(struct device_node *np, struct property *prop); >> @@ -788,6 +789,11 @@ static inline int of_machine_is_compatible(const char *compat) >> return 0; >> } >> >> +static inline int of_machine_get_model_name(const char **model) >> +{ >> + return -EINVAL; >> +} >> + >> static inline bool of_console_check(const struct device_node *dn, const char *name, int index) >> { >> return false; >> -- >> 2.7.4 >> >> > > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html