From patchwork Thu Jan 13 08:52:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Walle X-Patchwork-Id: 1579514 Return-Path: X-Original-To: incoming-dt@patchwork.ozlabs.org Delivered-To: patchwork-incoming-dt@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; secure) header.d=walle.cc header.i=@walle.cc header.a=rsa-sha256 header.s=mail2016061301 header.b=bO3NCZvK; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=devicetree-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by bilbo.ozlabs.org (Postfix) with ESMTP id 4JZJ8j6zwQz9ssD for ; Thu, 13 Jan 2022 19:52:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230028AbiAMIwU (ORCPT ); Thu, 13 Jan 2022 03:52:20 -0500 Received: from ssl.serverraum.org ([176.9.125.105]:55335 "EHLO ssl.serverraum.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229879AbiAMIwT (ORCPT ); Thu, 13 Jan 2022 03:52:19 -0500 Received: from mwalle01.kontron.local. (unknown [213.135.10.150]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ssl.serverraum.org (Postfix) with ESMTPSA id 299AD223EF; Thu, 13 Jan 2022 09:52:17 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walle.cc; s=mail2016061301; t=1642063937; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3KRrVKTt6D42W3BweWV1BzObpoKdBoZFlw5c0JXUHSk=; b=bO3NCZvKmk9Wwab1nA5UjMGtwtrldgoRgzjvLhmWKeSJluEZRuE8EWiTsVdp2aDIsephCq bx2/Di85K5fq7mXmxmn1QixKkgugY/Er0hXCULj88vxeYBPlWZreusNgiqSviRA0n/bs7g s6jkGaBcd7VqJH0WQPX7K7thWbYZe50= From: Michael Walle To: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Rob Herring , Frank Rowand , Michael Walle , Rob Herring Subject: [PATCH 1/3] of: base: convert index to unsigned for of_parse_phandle() Date: Thu, 13 Jan 2022 09:52:06 +0100 Message-Id: <20220113085208.2636517-2-michael@walle.cc> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220113085208.2636517-1-michael@walle.cc> References: <20220113085208.2636517-1-michael@walle.cc> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Since commit 2021bd01ffcc ("of: Remove counting special case from __of_parse_phandle_with_args()"), the index is >=0, thus convert the paramenter to unsigned of the of_parse_phandle() and all its variants. Make the smaller variants static inline, too. Suggested-by: Rob Herring Signed-off-by: Michael Walle --- drivers/of/base.c | 137 +++--------------------------------------- include/linux/of.h | 147 ++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 142 insertions(+), 142 deletions(-) diff --git a/drivers/of/base.c b/drivers/of/base.c index 8a24d37153b4..58b1b6ffc105 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -1420,14 +1420,15 @@ int of_phandle_iterator_args(struct of_phandle_iterator *it, return count; } -static int __of_parse_phandle_with_args(const struct device_node *np, - const char *list_name, - const char *cells_name, - int cell_count, int index, - struct of_phandle_args *out_args) +int __of_parse_phandle_with_args(const struct device_node *np, + const char *list_name, + const char *cells_name, + int cell_count, unsigned int index, + struct of_phandle_args *out_args) { struct of_phandle_iterator it; - int rc, cur_index = 0; + unsigned int cur_index = 0; + int rc; /* Loop over the phandles until all the requested entry is found */ of_for_each_phandle(&it, rc, np, list_name, cells_name, cell_count) { @@ -1471,82 +1472,7 @@ static int __of_parse_phandle_with_args(const struct device_node *np, of_node_put(it.node); return rc; } - -/** - * of_parse_phandle - Resolve a phandle property to a device_node pointer - * @np: Pointer to device node holding phandle property - * @phandle_name: Name of property holding a phandle value - * @index: For properties holding a table of phandles, this is the index into - * the table - * - * Return: The device_node pointer with refcount incremented. Use - * of_node_put() on it when done. - */ -struct device_node *of_parse_phandle(const struct device_node *np, - const char *phandle_name, int index) -{ - struct of_phandle_args args; - - if (index < 0) - return NULL; - - if (__of_parse_phandle_with_args(np, phandle_name, NULL, 0, - index, &args)) - return NULL; - - return args.np; -} -EXPORT_SYMBOL(of_parse_phandle); - -/** - * of_parse_phandle_with_args() - Find a node pointed by phandle in a list - * @np: pointer to a device tree node containing a list - * @list_name: property name that contains a list - * @cells_name: property name that specifies phandles' arguments count - * @index: index of a phandle to parse out - * @out_args: optional pointer to output arguments structure (will be filled) - * - * This function is useful to parse lists of phandles and their arguments. - * Returns 0 on success and fills out_args, on error returns appropriate - * errno value. - * - * Caller is responsible to call of_node_put() on the returned out_args->np - * pointer. - * - * Example:: - * - * phandle1: node1 { - * #list-cells = <2>; - * }; - * - * phandle2: node2 { - * #list-cells = <1>; - * }; - * - * node3 { - * list = <&phandle1 1 2 &phandle2 3>; - * }; - * - * To get a device_node of the ``node2`` node you may call this: - * of_parse_phandle_with_args(node3, "list", "#list-cells", 1, &args); - */ -int of_parse_phandle_with_args(const struct device_node *np, const char *list_name, - const char *cells_name, int index, - struct of_phandle_args *out_args) -{ - int cell_count = -1; - - if (index < 0) - return -EINVAL; - - /* If cells_name is NULL we assume a cell count of 0 */ - if (!cells_name) - cell_count = 0; - - return __of_parse_phandle_with_args(np, list_name, cells_name, - cell_count, index, out_args); -} -EXPORT_SYMBOL(of_parse_phandle_with_args); +EXPORT_SYMBOL(__of_parse_phandle_with_args); /** * of_parse_phandle_with_args_map() - Find a node pointed by phandle in a list and remap it @@ -1593,7 +1519,8 @@ EXPORT_SYMBOL(of_parse_phandle_with_args); int of_parse_phandle_with_args_map(const struct device_node *np, const char *list_name, const char *stem_name, - int index, struct of_phandle_args *out_args) + unsigned int index, + struct of_phandle_args *out_args) { char *cells_name, *map_name = NULL, *mask_name = NULL; char *pass_name = NULL; @@ -1606,9 +1533,6 @@ int of_parse_phandle_with_args_map(const struct device_node *np, int i, ret, map_len, match; u32 list_size, new_size; - if (index < 0) - return -EINVAL; - cells_name = kasprintf(GFP_KERNEL, "#%s-cells", stem_name); if (!cells_name) return -ENOMEM; @@ -1732,47 +1656,6 @@ int of_parse_phandle_with_args_map(const struct device_node *np, } EXPORT_SYMBOL(of_parse_phandle_with_args_map); -/** - * of_parse_phandle_with_fixed_args() - Find a node pointed by phandle in a list - * @np: pointer to a device tree node containing a list - * @list_name: property name that contains a list - * @cell_count: number of argument cells following the phandle - * @index: index of a phandle to parse out - * @out_args: optional pointer to output arguments structure (will be filled) - * - * This function is useful to parse lists of phandles and their arguments. - * Returns 0 on success and fills out_args, on error returns appropriate - * errno value. - * - * Caller is responsible to call of_node_put() on the returned out_args->np - * pointer. - * - * Example:: - * - * phandle1: node1 { - * }; - * - * phandle2: node2 { - * }; - * - * node3 { - * list = <&phandle1 0 2 &phandle2 2 3>; - * }; - * - * To get a device_node of the ``node2`` node you may call this: - * of_parse_phandle_with_fixed_args(node3, "list", 2, 1, &args); - */ -int of_parse_phandle_with_fixed_args(const struct device_node *np, - const char *list_name, int cell_count, - int index, struct of_phandle_args *out_args) -{ - if (index < 0) - return -EINVAL; - return __of_parse_phandle_with_args(np, list_name, NULL, cell_count, - index, out_args); -} -EXPORT_SYMBOL(of_parse_phandle_with_fixed_args); - /** * of_count_phandle_with_args() - Find the number of phandles references in a property * @np: pointer to a device tree node containing a list diff --git a/include/linux/of.h b/include/linux/of.h index ff143a027abc..df3af6d3cbe3 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -364,17 +364,11 @@ extern const struct of_device_id *of_match_node( const struct of_device_id *matches, const struct device_node *node); extern int of_modalias_node(struct device_node *node, char *modalias, int len); extern void of_print_phandle_args(const char *msg, const struct of_phandle_args *args); -extern struct device_node *of_parse_phandle(const struct device_node *np, - const char *phandle_name, - int index); -extern int of_parse_phandle_with_args(const struct device_node *np, - const char *list_name, const char *cells_name, int index, - struct of_phandle_args *out_args); +extern int __of_parse_phandle_with_args(const struct device_node *np, const + char *list_name, const char *cells_name, int cell_count, + unsigned int index, struct of_phandle_args *out_args); extern int of_parse_phandle_with_args_map(const struct device_node *np, - const char *list_name, const char *stem_name, int index, - struct of_phandle_args *out_args); -extern int of_parse_phandle_with_fixed_args(const struct device_node *np, - const char *list_name, int cells_count, int index, + const char *list_name, const char *stem_name, unsigned int index, struct of_phandle_args *out_args); extern int of_count_phandle_with_args(const struct device_node *np, const char *list_name, const char *cells_name); @@ -416,6 +410,117 @@ extern int of_detach_node(struct device_node *); #define of_match_ptr(_ptr) (_ptr) +/** + * of_parse_phandle - Resolve a phandle property to a device_node pointer + * @np: Pointer to device node holding phandle property + * @phandle_name: Name of property holding a phandle value + * @index: For properties holding a table of phandles, this is the index into + * the table + * + * Return: The device_node pointer with refcount incremented. Use + * of_node_put() on it when done. + */ +static inline struct device_node *of_parse_phandle(const struct device_node *np, + const char *phandle_name, + unsigned int index) +{ + struct of_phandle_args args; + + if (__of_parse_phandle_with_args(np, phandle_name, NULL, 0, + index, &args)) + return NULL; + + return args.np; +} + +/** + * of_parse_phandle_with_args() - Find a node pointed by phandle in a list + * @np: pointer to a device tree node containing a list + * @list_name: property name that contains a list + * @cells_name: property name that specifies phandles' arguments count + * @index: index of a phandle to parse out + * @out_args: optional pointer to output arguments structure (will be filled) + * + * This function is useful to parse lists of phandles and their arguments. + * Returns 0 on success and fills out_args, on error returns appropriate + * errno value. + * + * Caller is responsible to call of_node_put() on the returned out_args->np + * pointer. + * + * Example:: + * + * phandle1: node1 { + * #list-cells = <2>; + * }; + * + * phandle2: node2 { + * #list-cells = <1>; + * }; + * + * node3 { + * list = <&phandle1 1 2 &phandle2 3>; + * }; + * + * To get a device_node of the ``node2`` node you may call this: + * of_parse_phandle_with_args(node3, "list", "#list-cells", 1, &args); + */ +static inline int of_parse_phandle_with_args(const struct device_node *np, + const char *list_name, + const char *cells_name, + unsigned int index, + struct of_phandle_args *out_args) +{ + int cell_count = -1; + + /* If cells_name is NULL we assume a cell count of 0 */ + if (!cells_name) + cell_count = 0; + + return __of_parse_phandle_with_args(np, list_name, cells_name, + cell_count, index, out_args); +} + +/** + * of_parse_phandle_with_fixed_args() - Find a node pointed by phandle in a list + * @np: pointer to a device tree node containing a list + * @list_name: property name that contains a list + * @cell_count: number of argument cells following the phandle + * @index: index of a phandle to parse out + * @out_args: optional pointer to output arguments structure (will be filled) + * + * This function is useful to parse lists of phandles and their arguments. + * Returns 0 on success and fills out_args, on error returns appropriate + * errno value. + * + * Caller is responsible to call of_node_put() on the returned out_args->np + * pointer. + * + * Example:: + * + * phandle1: node1 { + * }; + * + * phandle2: node2 { + * }; + * + * node3 { + * list = <&phandle1 0 2 &phandle2 2 3>; + * }; + * + * To get a device_node of the ``node2`` node you may call this: + * of_parse_phandle_with_fixed_args(node3, "list", 2, 1, &args); + */ +static inline int of_parse_phandle_with_fixed_args(const struct device_node *np, + const char *list_name, + int cell_count, + unsigned int index, + struct of_phandle_args *out_args) +{ + return __of_parse_phandle_with_args(np, list_name, NULL, cell_count, + index, out_args); +} + /** * of_property_read_u8_array - Find and read an array of u8 from a property. * @@ -865,9 +970,19 @@ static inline int of_property_read_string_helper(const struct device_node *np, return -ENOSYS; } +static inline int __of_parse_phandle_with_args(const struct device_node *np, + const char *list_name, + const char *cells_name, + int cell_count, + unsigned int index, + struct of_phandle_args *out_args) +{ + return -ENOSYS; +}; + static inline struct device_node *of_parse_phandle(const struct device_node *np, const char *phandle_name, - int index) + unsigned int index) { return NULL; } @@ -875,7 +990,7 @@ static inline struct device_node *of_parse_phandle(const struct device_node *np, static inline int of_parse_phandle_with_args(const struct device_node *np, const char *list_name, const char *cells_name, - int index, + unsigned int index, struct of_phandle_args *out_args) { return -ENOSYS; @@ -884,15 +999,17 @@ static inline int of_parse_phandle_with_args(const struct device_node *np, static inline int of_parse_phandle_with_args_map(const struct device_node *np, const char *list_name, const char *stem_name, - int index, + unsigned int index, struct of_phandle_args *out_args) { return -ENOSYS; } static inline int of_parse_phandle_with_fixed_args(const struct device_node *np, - const char *list_name, int cells_count, int index, - struct of_phandle_args *out_args) + const char *list_name, + int cells_count, + unsigned int index, + struct of_phandle_args *out_args) { return -ENOSYS; } From patchwork Thu Jan 13 08:52:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Walle X-Patchwork-Id: 1579516 Return-Path: X-Original-To: incoming-dt@patchwork.ozlabs.org Delivered-To: patchwork-incoming-dt@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; secure) header.d=walle.cc header.i=@walle.cc header.a=rsa-sha256 header.s=mail2016061301 header.b=jZV/q2Or; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=devicetree-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by bilbo.ozlabs.org (Postfix) with ESMTP id 4JZJ8n5TpCz9sRR for ; Thu, 13 Jan 2022 19:52:25 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230026AbiAMIwY (ORCPT ); Thu, 13 Jan 2022 03:52:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42828 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230097AbiAMIwV (ORCPT ); Thu, 13 Jan 2022 03:52:21 -0500 Received: from ssl.serverraum.org (ssl.serverraum.org [IPv6:2a01:4f8:151:8464::1:2]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D00DC06173F; Thu, 13 Jan 2022 00:52:21 -0800 (PST) Received: from mwalle01.kontron.local. (unknown [213.135.10.150]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ssl.serverraum.org (Postfix) with ESMTPSA id E9F6F223F0; Thu, 13 Jan 2022 09:52:17 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walle.cc; s=mail2016061301; t=1642063938; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pQDstKVfxOplCxz607M7RU1DVDN+DYE7e3aikEdAg4g=; b=jZV/q2OrrBNXFX4fV7ua+62LyeVCFOm16xeitZdTPhrL4d9iLZ5EfjAdapr4KKhLtPo1kk EkZTIAS5KUUoapCn9fG4fwUiHrjSSlnmJh/2RyqAEDxWliuqcoEPqXR0Zl0GL9bb68uMCS IpAXl9cKGPZu3VdxJ0gdM1Qn1F1TDpo= From: Michael Walle To: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Rob Herring , Frank Rowand , Michael Walle Subject: [PATCH 2/3] of: property: use unsigned index for of_link_property() Date: Thu, 13 Jan 2022 09:52:07 +0100 Message-Id: <20220113085208.2636517-3-michael@walle.cc> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220113085208.2636517-1-michael@walle.cc> References: <20220113085208.2636517-1-michael@walle.cc> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Now that of_parse_handle() and its variants take an unsigned int, convert the index used in of_link_property() and its called functions to unsigned too. Signed-off-by: Michael Walle --- drivers/of/property.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/of/property.c b/drivers/of/property.c index 8e90071de6ed..e77fb6cda0b7 100644 --- a/drivers/of/property.c +++ b/drivers/of/property.c @@ -1173,7 +1173,8 @@ static int of_link_to_phandle(struct device_node *con_np, * - NULL if no phandle found at index */ static struct device_node *parse_prop_cells(struct device_node *np, - const char *prop_name, int index, + const char *prop_name, + unsigned int index, const char *list_name, const char *cells_name) { @@ -1191,7 +1192,8 @@ static struct device_node *parse_prop_cells(struct device_node *np, #define DEFINE_SIMPLE_PROP(fname, name, cells) \ static struct device_node *parse_##fname(struct device_node *np, \ - const char *prop_name, int index) \ + const char *prop_name, \ + unsigned int index) \ { \ return parse_prop_cells(np, prop_name, index, name, cells); \ } @@ -1227,7 +1229,8 @@ static int strcmp_suffix(const char *str, const char *suffix) * - NULL if no phandle found at index */ static struct device_node *parse_suffix_prop_cells(struct device_node *np, - const char *prop_name, int index, + const char *prop_name, + unsigned int index, const char *suffix, const char *cells_name) { @@ -1245,7 +1248,8 @@ static struct device_node *parse_suffix_prop_cells(struct device_node *np, #define DEFINE_SUFFIX_PROP(fname, suffix, cells) \ static struct device_node *parse_##fname(struct device_node *np, \ - const char *prop_name, int index) \ + const char *prop_name, \ + unsigned int index) \ { \ return parse_suffix_prop_cells(np, prop_name, index, suffix, cells); \ } @@ -1272,7 +1276,8 @@ static struct device_node *parse_##fname(struct device_node *np, \ */ struct supplier_bindings { struct device_node *(*parse_prop)(struct device_node *np, - const char *prop_name, int index); + const char *prop_name, + unsigned int index); bool optional; bool node_not_dev; }; @@ -1308,7 +1313,8 @@ DEFINE_SUFFIX_PROP(regulators, "-supply", NULL) DEFINE_SUFFIX_PROP(gpio, "-gpio", "#gpio-cells") static struct device_node *parse_gpios(struct device_node *np, - const char *prop_name, int index) + const char *prop_name, + unsigned int index) { if (!strcmp_suffix(prop_name, ",nr-gpios")) return NULL; @@ -1318,7 +1324,8 @@ static struct device_node *parse_gpios(struct device_node *np, } static struct device_node *parse_iommu_maps(struct device_node *np, - const char *prop_name, int index) + const char *prop_name, + unsigned int index) { if (strcmp(prop_name, "iommu-map")) return NULL; @@ -1327,7 +1334,8 @@ static struct device_node *parse_iommu_maps(struct device_node *np, } static struct device_node *parse_gpio_compat(struct device_node *np, - const char *prop_name, int index) + const char *prop_name, + unsigned int index) { struct of_phandle_args sup_args; @@ -1349,7 +1357,8 @@ static struct device_node *parse_gpio_compat(struct device_node *np, } static struct device_node *parse_interrupts(struct device_node *np, - const char *prop_name, int index) + const char *prop_name, + unsigned int index) { struct of_phandle_args sup_args; From patchwork Thu Jan 13 08:52:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Walle X-Patchwork-Id: 1579515 Return-Path: X-Original-To: incoming-dt@patchwork.ozlabs.org Delivered-To: patchwork-incoming-dt@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; secure) header.d=walle.cc header.i=@walle.cc header.a=rsa-sha256 header.s=mail2016061301 header.b=lItkmULd; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=devicetree-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by bilbo.ozlabs.org (Postfix) with ESMTP id 4JZJ8l3cTlz9sRR for ; Thu, 13 Jan 2022 19:52:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229879AbiAMIwV (ORCPT ); Thu, 13 Jan 2022 03:52:21 -0500 Received: from ssl.serverraum.org ([176.9.125.105]:55213 "EHLO ssl.serverraum.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229903AbiAMIwU (ORCPT ); Thu, 13 Jan 2022 03:52:20 -0500 Received: from mwalle01.kontron.local. (unknown [213.135.10.150]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ssl.serverraum.org (Postfix) with ESMTPSA id D870E223F6; Thu, 13 Jan 2022 09:52:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walle.cc; s=mail2016061301; t=1642063938; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5HH92cnxr/GP/X3/R0Qkse9oer6dTHSWGqBRDuZkZT8=; b=lItkmULdF8i810LjaBAHr76pKL1LA+CCqWwofu9J1CMl4UP3NKJ13TYfW+QJwCGugONLNo uGSllZ5a2LAL8BTRq8VqerQ+wdHqQyly6d1q8rmSSnz2HuHhdf+QFyA+trWII+MvTjjkPQ Ynjkp/nfI2nwTbS6Uq3mq+lNDcA+vkI= From: Michael Walle To: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Rob Herring , Frank Rowand , Michael Walle Subject: [PATCH 3/3] of: base: add of_parse_phandle_with_optional_args() Date: Thu, 13 Jan 2022 09:52:08 +0100 Message-Id: <20220113085208.2636517-4-michael@walle.cc> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220113085208.2636517-1-michael@walle.cc> References: <20220113085208.2636517-1-michael@walle.cc> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Add a new variant of the of_parse_phandle_with_args() which treats the cells name as optional. If it's missing, it is assumed that the phandle has no arguments. Up until now, a nvmem node didn't have any arguments, so all the device trees haven't any '#*-cells' property. But there is a need for an additional argument for the phandle, for which we need a '#*-cells' property. Therefore, we need to support nvmem nodes with and without this property. Signed-off-by: Michael Walle --- include/linux/of.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/include/linux/of.h b/include/linux/of.h index df3af6d3cbe3..f29f18aa95d9 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -521,6 +521,26 @@ static inline int of_parse_phandle_with_fixed_args(const struct device_node *np, index, out_args); } +/** + * of_parse_phandle_with_optional_args() - Find a node pointed by phandle in a list + * + * Same as of_parse_phandle_args() except that if the cells_name property is + * not found, cell_count of 0 is assumed. + * + * This is used to useful, if you have a phandle which didn't have arguments + * before and thus doesn't have a '#*-cells' property but is now migrated to + * having arguments while retaining backwards compatibility. + */ +static inline int of_parse_phandle_with_optional_args(const struct device_node *np, + const char *list_name, + const char *cells_name, + unsigned int index, + struct of_phandle_args *out_args) +{ + return __of_parse_phandle_with_args(np, list_name, cells_name, + 0, index, out_args); +} + /** * of_property_read_u8_array - Find and read an array of u8 from a property. * @@ -1014,6 +1034,15 @@ static inline int of_parse_phandle_with_fixed_args(const struct device_node *np, return -ENOSYS; } +static inline int of_parse_phandle_with_optional_args(const struct device_node *np, + char *list_name, + int cells_count, + unsigned int index, + struct of_phandle_args *out_args) +{ + return -ENOSYS; +} + static inline int of_count_phandle_with_args(const struct device_node *np, const char *list_name, const char *cells_name)