kernel: backport of changes & helpers
This code is required for upcoming NVMEM changes. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
		| @@ -0,0 +1,95 @@ | ||||
| From 3637d49e11219512920aca8b8ccd0994be33fa8b Mon Sep 17 00:00:00 2001 | ||||
| From: Lee Jones <lee.jones@linaro.org> | ||||
| Date: Thu, 18 Mar 2021 10:40:30 +0000 | ||||
| Subject: [PATCH] of: base: Fix some formatting issues and provide missing | ||||
|  descriptions | ||||
|  | ||||
| Fixes the following W=1 kernel build warning(s): | ||||
|  | ||||
|  drivers/of/base.c:315: warning: Function parameter or member 'cpun' not described in '__of_find_n_match_cpu_property' | ||||
|  drivers/of/base.c:315: warning: Function parameter or member 'prop_name' not described in '__of_find_n_match_cpu_property' | ||||
|  drivers/of/base.c:315: warning: Function parameter or member 'cpu' not described in '__of_find_n_match_cpu_property' | ||||
|  drivers/of/base.c:315: warning: Function parameter or member 'thread' not described in '__of_find_n_match_cpu_property' | ||||
|  drivers/of/base.c:315: warning: expecting prototype for property holds the physical id of the(). Prototype was for __of_find_n_match_cpu_property() instead | ||||
|  drivers/of/base.c:1139: warning: Function parameter or member 'match' not described in 'of_find_matching_node_and_match' | ||||
|  drivers/of/base.c:1779: warning: Function parameter or member 'np' not described in '__of_add_property' | ||||
|  drivers/of/base.c:1779: warning: Function parameter or member 'prop' not described in '__of_add_property' | ||||
|  drivers/of/base.c:1800: warning: Function parameter or member 'np' not described in 'of_add_property' | ||||
|  drivers/of/base.c:1800: warning: Function parameter or member 'prop' not described in 'of_add_property' | ||||
|  drivers/of/base.c:1849: warning: Function parameter or member 'np' not described in 'of_remove_property' | ||||
|  drivers/of/base.c:1849: warning: Function parameter or member 'prop' not described in 'of_remove_property' | ||||
|  drivers/of/base.c:2137: warning: Function parameter or member 'dn' not described in 'of_console_check' | ||||
|  drivers/of/base.c:2137: warning: Function parameter or member 'name' not described in 'of_console_check' | ||||
|  drivers/of/base.c:2137: warning: Function parameter or member 'index' not described in 'of_console_check' | ||||
|  | ||||
| Cc: Rob Herring <robh+dt@kernel.org> | ||||
| Cc: Frank Rowand <frowand.list@gmail.com> | ||||
| Cc: "David S. Miller" <davem@davemloft.net> | ||||
| Cc: devicetree@vger.kernel.org | ||||
| Signed-off-by: Lee Jones <lee.jones@linaro.org> | ||||
| Signed-off-by: Rob Herring <robh@kernel.org> | ||||
| Link: https://lore.kernel.org/r/20210318104036.3175910-5-lee.jones@linaro.org | ||||
| --- | ||||
|  drivers/of/base.c | 16 +++++++++++----- | ||||
|  1 file changed, 11 insertions(+), 5 deletions(-) | ||||
|  | ||||
| --- a/drivers/of/base.c | ||||
| +++ b/drivers/of/base.c | ||||
| @@ -305,7 +305,7 @@ bool __weak arch_match_cpu_phys_id(int c | ||||
|  	return (u32)phys_id == cpu; | ||||
|  } | ||||
|   | ||||
| -/** | ||||
| +/* | ||||
|   * Checks if the given "prop_name" property holds the physical id of the | ||||
|   * core/thread corresponding to the logical cpu 'cpu'. If 'thread' is not | ||||
|   * NULL, local thread number within the core is returned in it. | ||||
| @@ -1128,7 +1128,7 @@ EXPORT_SYMBOL(of_match_node); | ||||
|   *			will; typically, you pass what the previous call | ||||
|   *			returned. of_node_put() will be called on it | ||||
|   *	@matches:	array of of device match structures to search in | ||||
| - *	@match		Updated to point at the matches entry which matched | ||||
| + *	@match:		Updated to point at the matches entry which matched | ||||
|   * | ||||
|   *	Returns a node pointer with refcount incremented, use | ||||
|   *	of_node_put() on it when done. | ||||
| @@ -1779,6 +1779,8 @@ EXPORT_SYMBOL(of_count_phandle_with_args | ||||
|   | ||||
|  /** | ||||
|   * __of_add_property - Add a property to a node without lock operations | ||||
| + * @np:		Caller's Device Node | ||||
| + * @prob:	Property to add | ||||
|   */ | ||||
|  int __of_add_property(struct device_node *np, struct property *prop) | ||||
|  { | ||||
| @@ -1800,6 +1802,8 @@ int __of_add_property(struct device_node | ||||
|   | ||||
|  /** | ||||
|   * of_add_property - Add a property to a node | ||||
| + * @np:		Caller's Device Node | ||||
| + * @prob:	Property to add | ||||
|   */ | ||||
|  int of_add_property(struct device_node *np, struct property *prop) | ||||
|  { | ||||
| @@ -1844,6 +1848,8 @@ int __of_remove_property(struct device_n | ||||
|   | ||||
|  /** | ||||
|   * of_remove_property - Remove a property from a node. | ||||
| + * @np:		Caller's Device Node | ||||
| + * @prob:	Property to remove | ||||
|   * | ||||
|   * Note that we don't actually remove it, since we have given out | ||||
|   * who-knows-how-many pointers to the data using get-property. | ||||
| @@ -2130,9 +2136,9 @@ EXPORT_SYMBOL_GPL(of_alias_get_highest_i | ||||
|   | ||||
|  /** | ||||
|   * of_console_check() - Test and setup console for DT setup | ||||
| - * @dn - Pointer to device node | ||||
| - * @name - Name to use for preferred console without index. ex. "ttyS" | ||||
| - * @index - Index to use for preferred console. | ||||
| + * @dn: Pointer to device node | ||||
| + * @name: Name to use for preferred console without index. ex. "ttyS" | ||||
| + * @index: Index to use for preferred console. | ||||
|   * | ||||
|   * Check if the given device node matches the stdout-path property in the | ||||
|   * /chosen node. If it does then register it as the preferred console and return | ||||
| @@ -0,0 +1,489 @@ | ||||
| From 62f026f082e4d762a47b43ea693b38f025122332 Mon Sep 17 00:00:00 2001 | ||||
| From: Rob Herring <robh@kernel.org> | ||||
| Date: Fri, 26 Mar 2021 13:26:06 -0600 | ||||
| Subject: [PATCH] of: Fix kerneldoc output formatting | ||||
|  | ||||
| The indentation of the kerneldoc comments affects the output formatting. | ||||
| Leading tabs in particular don't work, sections need to be indented | ||||
| under the section header, and several code blocks are reformatted. | ||||
|  | ||||
| Cc: Frank Rowand <frowand.list@gmail.com> | ||||
| Cc: Mauro Carvalho Chehab <mchehab@kernel.org> | ||||
| Signed-off-by: Rob Herring <robh@kernel.org> | ||||
| Reviewed-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> | ||||
| Link: https://lore.kernel.org/r/20210326192606.3702739-1-robh@kernel.org | ||||
| --- | ||||
|  drivers/of/base.c | 275 +++++++++++++++++++++++----------------------- | ||||
|  drivers/of/fdt.c  |   9 +- | ||||
|  2 files changed, 141 insertions(+), 143 deletions(-) | ||||
|  | ||||
| --- a/drivers/of/base.c | ||||
| +++ b/drivers/of/base.c | ||||
| @@ -651,11 +651,11 @@ bool of_device_is_big_endian(const struc | ||||
|  EXPORT_SYMBOL(of_device_is_big_endian); | ||||
|   | ||||
|  /** | ||||
| - *	of_get_parent - Get a node's parent if any | ||||
| - *	@node:	Node to get parent | ||||
| + * of_get_parent - Get a node's parent if any | ||||
| + * @node:	Node to get parent | ||||
|   * | ||||
| - *	Returns a node pointer with refcount incremented, use | ||||
| - *	of_node_put() on it when done. | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
| + * of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_get_parent(const struct device_node *node) | ||||
|  { | ||||
| @@ -673,15 +673,15 @@ struct device_node *of_get_parent(const | ||||
|  EXPORT_SYMBOL(of_get_parent); | ||||
|   | ||||
|  /** | ||||
| - *	of_get_next_parent - Iterate to a node's parent | ||||
| - *	@node:	Node to get parent of | ||||
| + * of_get_next_parent - Iterate to a node's parent | ||||
| + * @node:	Node to get parent of | ||||
|   * | ||||
| - *	This is like of_get_parent() except that it drops the | ||||
| - *	refcount on the passed node, making it suitable for iterating | ||||
| - *	through a node's parents. | ||||
| + * This is like of_get_parent() except that it drops the | ||||
| + * refcount on the passed node, making it suitable for iterating | ||||
| + * through a node's parents. | ||||
|   * | ||||
| - *	Returns a node pointer with refcount incremented, use | ||||
| - *	of_node_put() on it when done. | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
| + * of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_get_next_parent(struct device_node *node) | ||||
|  { | ||||
| @@ -719,13 +719,13 @@ static struct device_node *__of_get_next | ||||
|  	     child = __of_get_next_child(parent, child)) | ||||
|   | ||||
|  /** | ||||
| - *	of_get_next_child - Iterate a node childs | ||||
| - *	@node:	parent node | ||||
| - *	@prev:	previous child of the parent node, or NULL to get first | ||||
| - * | ||||
| - *	Returns a node pointer with refcount incremented, use of_node_put() on | ||||
| - *	it when done. Returns NULL when prev is the last child. Decrements the | ||||
| - *	refcount of prev. | ||||
| + * of_get_next_child - Iterate a node childs | ||||
| + * @node:	parent node | ||||
| + * @prev:	previous child of the parent node, or NULL to get first | ||||
| + * | ||||
| + * Return: A node pointer with refcount incremented, use of_node_put() on | ||||
| + * it when done. Returns NULL when prev is the last child. Decrements the | ||||
| + * refcount of prev. | ||||
|   */ | ||||
|  struct device_node *of_get_next_child(const struct device_node *node, | ||||
|  	struct device_node *prev) | ||||
| @@ -741,12 +741,12 @@ struct device_node *of_get_next_child(co | ||||
|  EXPORT_SYMBOL(of_get_next_child); | ||||
|   | ||||
|  /** | ||||
| - *	of_get_next_available_child - Find the next available child node | ||||
| - *	@node:	parent node | ||||
| - *	@prev:	previous child of the parent node, or NULL to get first | ||||
| + * of_get_next_available_child - Find the next available child node | ||||
| + * @node:	parent node | ||||
| + * @prev:	previous child of the parent node, or NULL to get first | ||||
|   * | ||||
| - *      This function is like of_get_next_child(), except that it | ||||
| - *      automatically skips any disabled nodes (i.e. status = "disabled"). | ||||
| + * This function is like of_get_next_child(), except that it | ||||
| + * automatically skips any disabled nodes (i.e. status = "disabled"). | ||||
|   */ | ||||
|  struct device_node *of_get_next_available_child(const struct device_node *node, | ||||
|  	struct device_node *prev) | ||||
| @@ -772,12 +772,12 @@ struct device_node *of_get_next_availabl | ||||
|  EXPORT_SYMBOL(of_get_next_available_child); | ||||
|   | ||||
|  /** | ||||
| - *	of_get_next_cpu_node - Iterate on cpu nodes | ||||
| - *	@prev:	previous child of the /cpus node, or NULL to get first | ||||
| + * of_get_next_cpu_node - Iterate on cpu nodes | ||||
| + * @prev:	previous child of the /cpus node, or NULL to get first | ||||
|   * | ||||
| - *	Returns a cpu node pointer with refcount incremented, use of_node_put() | ||||
| - *	on it when done. Returns NULL when prev is the last child. Decrements | ||||
| - *	the refcount of prev. | ||||
| + * Return: A cpu node pointer with refcount incremented, use of_node_put() | ||||
| + * on it when done. Returns NULL when prev is the last child. Decrements | ||||
| + * the refcount of prev. | ||||
|   */ | ||||
|  struct device_node *of_get_next_cpu_node(struct device_node *prev) | ||||
|  { | ||||
| @@ -834,15 +834,15 @@ struct device_node *of_get_compatible_ch | ||||
|  EXPORT_SYMBOL(of_get_compatible_child); | ||||
|   | ||||
|  /** | ||||
| - *	of_get_child_by_name - Find the child node by name for a given parent | ||||
| - *	@node:	parent node | ||||
| - *	@name:	child name to look for. | ||||
| - * | ||||
| - *      This function looks for child node for given matching name | ||||
| - * | ||||
| - *	Returns a node pointer if found, with refcount incremented, use | ||||
| - *	of_node_put() on it when done. | ||||
| - *	Returns NULL if node is not found. | ||||
| + * of_get_child_by_name - Find the child node by name for a given parent | ||||
| + * @node:	parent node | ||||
| + * @name:	child name to look for. | ||||
| + * | ||||
| + * This function looks for child node for given matching name | ||||
| + * | ||||
| + * Return: A node pointer if found, with refcount incremented, use | ||||
| + * of_node_put() on it when done. | ||||
| + * Returns NULL if node is not found. | ||||
|   */ | ||||
|  struct device_node *of_get_child_by_name(const struct device_node *node, | ||||
|  				const char *name) | ||||
| @@ -893,22 +893,22 @@ struct device_node *__of_find_node_by_fu | ||||
|  } | ||||
|   | ||||
|  /** | ||||
| - *	of_find_node_opts_by_path - Find a node matching a full OF path | ||||
| - *	@path: Either the full path to match, or if the path does not | ||||
| - *	       start with '/', the name of a property of the /aliases | ||||
| - *	       node (an alias).  In the case of an alias, the node | ||||
| - *	       matching the alias' value will be returned. | ||||
| - *	@opts: Address of a pointer into which to store the start of | ||||
| - *	       an options string appended to the end of the path with | ||||
| - *	       a ':' separator. | ||||
| - * | ||||
| - *	Valid paths: | ||||
| - *		/foo/bar	Full path | ||||
| - *		foo		Valid alias | ||||
| - *		foo/bar		Valid alias + relative path | ||||
| + * of_find_node_opts_by_path - Find a node matching a full OF path | ||||
| + * @path: Either the full path to match, or if the path does not | ||||
| + *       start with '/', the name of a property of the /aliases | ||||
| + *       node (an alias).  In the case of an alias, the node | ||||
| + *       matching the alias' value will be returned. | ||||
| + * @opts: Address of a pointer into which to store the start of | ||||
| + *       an options string appended to the end of the path with | ||||
| + *       a ':' separator. | ||||
| + * | ||||
| + * Valid paths: | ||||
| + *  * /foo/bar	Full path | ||||
| + *  * foo	Valid alias | ||||
| + *  * foo/bar	Valid alias + relative path | ||||
|   * | ||||
| - *	Returns a node pointer with refcount incremented, use | ||||
| - *	of_node_put() on it when done. | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
| + * of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_find_node_opts_by_path(const char *path, const char **opts) | ||||
|  { | ||||
| @@ -958,15 +958,15 @@ struct device_node *of_find_node_opts_by | ||||
|  EXPORT_SYMBOL(of_find_node_opts_by_path); | ||||
|   | ||||
|  /** | ||||
| - *	of_find_node_by_name - Find a node by its "name" property | ||||
| - *	@from:	The node to start searching from or NULL; the node | ||||
| + * of_find_node_by_name - Find a node by its "name" property | ||||
| + * @from:	The node to start searching from or NULL; the node | ||||
|   *		you pass will not be searched, only the next one | ||||
|   *		will. Typically, you pass what the previous call | ||||
|   *		returned. of_node_put() will be called on @from. | ||||
| - *	@name:	The name string to match against | ||||
| + * @name:	The name string to match against | ||||
|   * | ||||
| - *	Returns a node pointer with refcount incremented, use | ||||
| - *	of_node_put() on it when done. | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
| + * of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_find_node_by_name(struct device_node *from, | ||||
|  	const char *name) | ||||
| @@ -985,16 +985,16 @@ struct device_node *of_find_node_by_name | ||||
|  EXPORT_SYMBOL(of_find_node_by_name); | ||||
|   | ||||
|  /** | ||||
| - *	of_find_node_by_type - Find a node by its "device_type" property | ||||
| - *	@from:	The node to start searching from, or NULL to start searching | ||||
| + * of_find_node_by_type - Find a node by its "device_type" property | ||||
| + * @from:	The node to start searching from, or NULL to start searching | ||||
|   *		the entire device tree. The node you pass will not be | ||||
|   *		searched, only the next one will; typically, you pass | ||||
|   *		what the previous call returned. of_node_put() will be | ||||
|   *		called on from for you. | ||||
| - *	@type:	The type string to match against | ||||
| + * @type:	The type string to match against | ||||
|   * | ||||
| - *	Returns a node pointer with refcount incremented, use | ||||
| - *	of_node_put() on it when done. | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
| + * of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_find_node_by_type(struct device_node *from, | ||||
|  	const char *type) | ||||
| @@ -1013,18 +1013,18 @@ struct device_node *of_find_node_by_type | ||||
|  EXPORT_SYMBOL(of_find_node_by_type); | ||||
|   | ||||
|  /** | ||||
| - *	of_find_compatible_node - Find a node based on type and one of the | ||||
| + * of_find_compatible_node - Find a node based on type and one of the | ||||
|   *                                tokens in its "compatible" property | ||||
| - *	@from:		The node to start searching from or NULL, the node | ||||
| - *			you pass will not be searched, only the next one | ||||
| - *			will; typically, you pass what the previous call | ||||
| - *			returned. of_node_put() will be called on it | ||||
| - *	@type:		The type string to match "device_type" or NULL to ignore | ||||
| - *	@compatible:	The string to match to one of the tokens in the device | ||||
| - *			"compatible" list. | ||||
| + * @from:	The node to start searching from or NULL, the node | ||||
| + *		you pass will not be searched, only the next one | ||||
| + *		will; typically, you pass what the previous call | ||||
| + *		returned. of_node_put() will be called on it | ||||
| + * @type:	The type string to match "device_type" or NULL to ignore | ||||
| + * @compatible:	The string to match to one of the tokens in the device | ||||
| + *		"compatible" list. | ||||
|   * | ||||
| - *	Returns a node pointer with refcount incremented, use | ||||
| - *	of_node_put() on it when done. | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
| + * of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_find_compatible_node(struct device_node *from, | ||||
|  	const char *type, const char *compatible) | ||||
| @@ -1044,16 +1044,16 @@ struct device_node *of_find_compatible_n | ||||
|  EXPORT_SYMBOL(of_find_compatible_node); | ||||
|   | ||||
|  /** | ||||
| - *	of_find_node_with_property - Find a node which has a property with | ||||
| - *                                   the given name. | ||||
| - *	@from:		The node to start searching from or NULL, the node | ||||
| - *			you pass will not be searched, only the next one | ||||
| - *			will; typically, you pass what the previous call | ||||
| - *			returned. of_node_put() will be called on it | ||||
| - *	@prop_name:	The name of the property to look for. | ||||
| + * of_find_node_with_property - Find a node which has a property with | ||||
| + *                              the given name. | ||||
| + * @from:	The node to start searching from or NULL, the node | ||||
| + *		you pass will not be searched, only the next one | ||||
| + *		will; typically, you pass what the previous call | ||||
| + *		returned. of_node_put() will be called on it | ||||
| + * @prop_name:	The name of the property to look for. | ||||
|   * | ||||
| - *	Returns a node pointer with refcount incremented, use | ||||
| - *	of_node_put() on it when done. | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
| + * of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_find_node_with_property(struct device_node *from, | ||||
|  	const char *prop_name) | ||||
| @@ -1102,10 +1102,10 @@ const struct of_device_id *__of_match_no | ||||
|   | ||||
|  /** | ||||
|   * of_match_node - Tell if a device_node has a matching of_match structure | ||||
| - *	@matches:	array of of device match structures to search in | ||||
| - *	@node:		the of device structure to match against | ||||
| + * @matches:	array of of device match structures to search in | ||||
| + * @node:	the of device structure to match against | ||||
|   * | ||||
| - *	Low level utility function used by device matching. | ||||
| + * Low level utility function used by device matching. | ||||
|   */ | ||||
|  const struct of_device_id *of_match_node(const struct of_device_id *matches, | ||||
|  					 const struct device_node *node) | ||||
| @@ -1121,17 +1121,17 @@ const struct of_device_id *of_match_node | ||||
|  EXPORT_SYMBOL(of_match_node); | ||||
|   | ||||
|  /** | ||||
| - *	of_find_matching_node_and_match - Find a node based on an of_device_id | ||||
| - *					  match table. | ||||
| - *	@from:		The node to start searching from or NULL, the node | ||||
| - *			you pass will not be searched, only the next one | ||||
| - *			will; typically, you pass what the previous call | ||||
| - *			returned. of_node_put() will be called on it | ||||
| - *	@matches:	array of of device match structures to search in | ||||
| - *	@match:		Updated to point at the matches entry which matched | ||||
| + * of_find_matching_node_and_match - Find a node based on an of_device_id | ||||
| + *				     match table. | ||||
| + * @from:	The node to start searching from or NULL, the node | ||||
| + *		you pass will not be searched, only the next one | ||||
| + *		will; typically, you pass what the previous call | ||||
| + *		returned. of_node_put() will be called on it | ||||
| + * @matches:	array of of device match structures to search in | ||||
| + * @match:	Updated to point at the matches entry which matched | ||||
|   * | ||||
| - *	Returns a node pointer with refcount incremented, use | ||||
| - *	of_node_put() on it when done. | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
| + * of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_find_matching_node_and_match(struct device_node *from, | ||||
|  					const struct of_device_id *matches, | ||||
| @@ -1465,21 +1465,21 @@ EXPORT_SYMBOL(of_parse_phandle); | ||||
|   * Caller is responsible to call of_node_put() on the returned out_args->np | ||||
|   * pointer. | ||||
|   * | ||||
| - * Example: | ||||
| + * Example:: | ||||
|   * | ||||
| - * phandle1: node1 { | ||||
| + *  phandle1: node1 { | ||||
|   *	#list-cells = <2>; | ||||
| - * } | ||||
| + *  }; | ||||
|   * | ||||
| - * phandle2: node2 { | ||||
| + *  phandle2: node2 { | ||||
|   *	#list-cells = <1>; | ||||
| - * } | ||||
| + *  }; | ||||
|   * | ||||
| - * node3 { | ||||
| + *  node3 { | ||||
|   *	list = <&phandle1 1 2 &phandle2 3>; | ||||
| - * } | ||||
| + *  }; | ||||
|   * | ||||
| - * To get a device_node of the `node2' node you may call this: | ||||
| + * 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, | ||||
| @@ -1517,29 +1517,29 @@ EXPORT_SYMBOL(of_parse_phandle_with_args | ||||
|   * 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>; | ||||
| - * } | ||||
| + * Example:: | ||||
|   * | ||||
| - * phandle3: node3 { | ||||
| - * 	#list-cells = <1>; | ||||
| - * 	list-map = <0 &phandle2 3>, | ||||
| - * 		   <1 &phandle2 2>, | ||||
| - * 		   <2 &phandle1 5 1>; | ||||
| - *	list-map-mask = <0x3>; | ||||
| - * }; | ||||
| - * | ||||
| - * node4 { | ||||
| - *	list = <&phandle1 1 2 &phandle3 0>; | ||||
| - * } | ||||
| + *  phandle1: node1 { | ||||
| + *  	#list-cells = <2>; | ||||
| + *  }; | ||||
| + * | ||||
| + *  phandle2: node2 { | ||||
| + *  	#list-cells = <1>; | ||||
| + *  }; | ||||
| + * | ||||
| + *  phandle3: node3 { | ||||
| + *  	#list-cells = <1>; | ||||
| + *  	list-map = <0 &phandle2 3>, | ||||
| + *  		   <1 &phandle2 2>, | ||||
| + *  		   <2 &phandle1 5 1>; | ||||
| + *  	list-map-mask = <0x3>; | ||||
| + *  }; | ||||
| + * | ||||
| + *  node4 { | ||||
| + *  	list = <&phandle1 1 2 &phandle3 0>; | ||||
| + *  }; | ||||
|   * | ||||
| - * To get a device_node of the `node2' node you may call this: | ||||
| + * To get a device_node of the ``node2`` node you may call this: | ||||
|   * of_parse_phandle_with_args(node4, "list", "list", 1, &args); | ||||
|   */ | ||||
|  int of_parse_phandle_with_args_map(const struct device_node *np, | ||||
| @@ -1699,19 +1699,19 @@ EXPORT_SYMBOL(of_parse_phandle_with_args | ||||
|   * Caller is responsible to call of_node_put() on the returned out_args->np | ||||
|   * pointer. | ||||
|   * | ||||
| - * Example: | ||||
| + * Example:: | ||||
|   * | ||||
| - * phandle1: node1 { | ||||
| - * } | ||||
| + *  phandle1: node1 { | ||||
| + *  }; | ||||
|   * | ||||
| - * phandle2: node2 { | ||||
| - * } | ||||
| + *  phandle2: node2 { | ||||
| + *  }; | ||||
|   * | ||||
| - * node3 { | ||||
| - *	list = <&phandle1 0 2 &phandle2 2 3>; | ||||
| - * } | ||||
| + *  node3 { | ||||
| + *  	list = <&phandle1 0 2 &phandle2 2 3>; | ||||
| + *  }; | ||||
|   * | ||||
| - * To get a device_node of the `node2' node you may call this: | ||||
| + * 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, | ||||
| @@ -1957,13 +1957,12 @@ static void of_alias_add(struct alias_pr | ||||
|   | ||||
|  /** | ||||
|   * of_alias_scan - Scan all properties of the 'aliases' node | ||||
| + * @dt_alloc:	An allocator that provides a virtual address to memory | ||||
| + *		for storing the resulting tree | ||||
|   * | ||||
|   * The function scans all the properties of the 'aliases' node and populates | ||||
|   * the global lookup table with the properties.  It returns the | ||||
|   * number of alias properties found, or an error code in case of failure. | ||||
| - * | ||||
| - * @dt_alloc:	An allocator that provides a virtual address to memory | ||||
| - *		for storing the resulting tree | ||||
|   */ | ||||
|  void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)) | ||||
|  { | ||||
| @@ -2158,12 +2157,12 @@ bool of_console_check(struct device_node | ||||
|  EXPORT_SYMBOL_GPL(of_console_check); | ||||
|   | ||||
|  /** | ||||
| - *	of_find_next_cache_node - Find a node's subsidiary cache | ||||
| - *	@np:	node of type "cpu" or "cache" | ||||
| + * of_find_next_cache_node - Find a node's subsidiary cache | ||||
| + * @np:	node of type "cpu" or "cache" | ||||
|   * | ||||
| - *	Returns a node pointer with refcount incremented, use | ||||
| - *	of_node_put() on it when done.  Caller should hold a reference | ||||
| - *	to np. | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
| + * of_node_put() on it when done.  Caller should hold a reference | ||||
| + * to np. | ||||
|   */ | ||||
|  struct device_node *of_find_next_cache_node(const struct device_node *np) | ||||
|  { | ||||
| --- a/drivers/of/fdt.c | ||||
| +++ b/drivers/of/fdt.c | ||||
| @@ -349,11 +349,6 @@ static int unflatten_dt_nodes(const void | ||||
|   | ||||
|  /** | ||||
|   * __unflatten_device_tree - create tree of device_nodes from flat blob | ||||
| - * | ||||
| - * unflattens a device-tree, creating the | ||||
| - * tree of struct device_node. It also fills the "name" and "type" | ||||
| - * pointers of the nodes so the normal device-tree walking functions | ||||
| - * can be used. | ||||
|   * @blob: The blob to expand | ||||
|   * @dad: Parent device node | ||||
|   * @mynodes: The device_node tree created by the call | ||||
| @@ -361,6 +356,10 @@ static int unflatten_dt_nodes(const void | ||||
|   * for the resulting tree | ||||
|   * @detached: if true set OF_DETACHED on @mynodes | ||||
|   * | ||||
| + * unflattens a device-tree, creating the tree of struct device_node. It also | ||||
| + * fills the "name" and "type" pointers of the nodes so the normal device-tree | ||||
| + * walking functions can be used. | ||||
| + * | ||||
|   * Returns NULL on failure or the memory chunk containing the unflattened | ||||
|   * device tree on success. | ||||
|   */ | ||||
| @@ -0,0 +1,787 @@ | ||||
| From 8c8239c2c1fb82f171cb22a707f3bb88a2f22109 Mon Sep 17 00:00:00 2001 | ||||
| From: Rob Herring <robh@kernel.org> | ||||
| Date: Thu, 25 Mar 2021 10:47:12 -0600 | ||||
| Subject: [PATCH] of: Add missing 'Return' section in kerneldoc comments | ||||
|  | ||||
| Many of the DT kerneldoc comments are lacking a 'Return' section. Let's | ||||
| add the section in cases we have a description of return values. There's | ||||
| still some cases where the return values are not documented. | ||||
|  | ||||
| Cc: Frank Rowand <frowand.list@gmail.com> | ||||
| Cc: Mauro Carvalho Chehab <mchehab@kernel.org> | ||||
| Signed-off-by: Rob Herring <robh@kernel.org> | ||||
| Reviewed-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> | ||||
| Link: https://lore.kernel.org/r/20210325164713.1296407-8-robh@kernel.org | ||||
| --- | ||||
|  drivers/of/base.c     | 39 +++++++++++++------------ | ||||
|  drivers/of/dynamic.c  | 19 ++++++++----- | ||||
|  drivers/of/fdt.c      |  8 +++--- | ||||
|  drivers/of/irq.c      | 14 ++++----- | ||||
|  drivers/of/overlay.c  | 16 +++++------ | ||||
|  drivers/of/platform.c | 10 +++---- | ||||
|  drivers/of/property.c | 66 +++++++++++++++++++++++++++---------------- | ||||
|  include/linux/of.h    | 63 ++++++++++++++++++++++++++--------------- | ||||
|  8 files changed, 140 insertions(+), 95 deletions(-) | ||||
|  | ||||
| --- a/drivers/of/base.c | ||||
| +++ b/drivers/of/base.c | ||||
| @@ -244,7 +244,7 @@ struct device_node *__of_find_all_nodes( | ||||
|   * @prev:	Previous node or NULL to start iteration | ||||
|   *		of_node_put() will be called on it | ||||
|   * | ||||
| - * Returns a node pointer with refcount incremented, use | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
|   * of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_find_all_nodes(struct device_node *prev) | ||||
| @@ -374,7 +374,7 @@ bool __weak arch_find_n_match_cpu_physic | ||||
|   * before booting secondary cores. This function uses arch_match_cpu_phys_id | ||||
|   * which can be overridden by architecture specific implementation. | ||||
|   * | ||||
| - * Returns a node pointer for the logical cpu with refcount incremented, use | ||||
| + * Return: A node pointer for the logical cpu with refcount incremented, use | ||||
|   * of_node_put() on it when done. Returns NULL if not found. | ||||
|   */ | ||||
|  struct device_node *of_get_cpu_node(int cpu, unsigned int *thread) | ||||
| @@ -394,8 +394,8 @@ EXPORT_SYMBOL(of_get_cpu_node); | ||||
|   * | ||||
|   * @cpu_node: Pointer to the device_node for CPU. | ||||
|   * | ||||
| - * Returns the logical CPU number of the given CPU device_node. | ||||
| - * Returns -ENODEV if the CPU is not found. | ||||
| + * Return: The logical CPU number of the given CPU device_node or -ENODEV if the | ||||
| + * CPU is not found. | ||||
|   */ | ||||
|  int of_cpu_node_to_id(struct device_node *cpu_node) | ||||
|  { | ||||
| @@ -427,7 +427,7 @@ EXPORT_SYMBOL(of_cpu_node_to_id); | ||||
|   * bindings. This function check for both and returns the idle state node for | ||||
|   * the requested index. | ||||
|   * | ||||
| - * In case an idle state node is found at @index, the refcount is incremented | ||||
| + * Return: An idle state node if found at @index. The refcount is incremented | ||||
|   * for it, so call of_node_put() on it when done. Returns NULL if not found. | ||||
|   */ | ||||
|  struct device_node *of_get_cpu_state_node(struct device_node *cpu_node, | ||||
| @@ -561,7 +561,7 @@ int of_device_compatible_match(struct de | ||||
|   * of_machine_is_compatible - Test root of device tree for a given compatible value | ||||
|   * @compat: compatible string to look for in root node's compatible property. | ||||
|   * | ||||
| - * Returns a positive integer if the root node has the given value in its | ||||
| + * Return: A positive integer if the root node has the given value in its | ||||
|   * compatible property. | ||||
|   */ | ||||
|  int of_machine_is_compatible(const char *compat) | ||||
| @@ -583,7 +583,7 @@ EXPORT_SYMBOL(of_machine_is_compatible); | ||||
|   * | ||||
|   *  @device: Node to check for availability, with locks already held | ||||
|   * | ||||
| - *  Returns true if the status property is absent or set to "okay" or "ok", | ||||
| + *  Return: True if the status property is absent or set to "okay" or "ok", | ||||
|   *  false otherwise | ||||
|   */ | ||||
|  static bool __of_device_is_available(const struct device_node *device) | ||||
| @@ -611,7 +611,7 @@ static bool __of_device_is_available(con | ||||
|   * | ||||
|   *  @device: Node to check for availability | ||||
|   * | ||||
| - *  Returns true if the status property is absent or set to "okay" or "ok", | ||||
| + *  Return: True if the status property is absent or set to "okay" or "ok", | ||||
|   *  false otherwise | ||||
|   */ | ||||
|  bool of_device_is_available(const struct device_node *device) | ||||
| @@ -632,7 +632,7 @@ EXPORT_SYMBOL(of_device_is_available); | ||||
|   * | ||||
|   *  @device: Node to check for endianness | ||||
|   * | ||||
| - *  Returns true if the device has a "big-endian" property, or if the kernel | ||||
| + *  Return: True if the device has a "big-endian" property, or if the kernel | ||||
|   *  was compiled for BE *and* the device has a "native-endian" property. | ||||
|   *  Returns false otherwise. | ||||
|   * | ||||
| @@ -816,7 +816,7 @@ EXPORT_SYMBOL(of_get_next_cpu_node); | ||||
|   * Lookup child node whose compatible property contains the given compatible | ||||
|   * string. | ||||
|   * | ||||
| - * Returns a node pointer with refcount incremented, use of_node_put() on it | ||||
| + * Return: a node pointer with refcount incremented, use of_node_put() on it | ||||
|   * when done; or NULL if not found. | ||||
|   */ | ||||
|  struct device_node *of_get_compatible_child(const struct device_node *parent, | ||||
| @@ -1170,7 +1170,7 @@ EXPORT_SYMBOL(of_find_matching_node_and_ | ||||
|   * It does this by stripping the manufacturer prefix (as delimited by a ',') | ||||
|   * from the first entry in the compatible list property. | ||||
|   * | ||||
| - * This routine returns 0 on success, <0 on failure. | ||||
| + * Return: This routine returns 0 on success, <0 on failure. | ||||
|   */ | ||||
|  int of_modalias_node(struct device_node *node, char *modalias, int len) | ||||
|  { | ||||
| @@ -1190,7 +1190,7 @@ EXPORT_SYMBOL_GPL(of_modalias_node); | ||||
|   * of_find_node_by_phandle - Find a node given a phandle | ||||
|   * @handle:	phandle of the node to find | ||||
|   * | ||||
| - * Returns a node pointer with refcount incremented, use | ||||
| + * Return: A node pointer with refcount incremented, use | ||||
|   * of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_find_node_by_phandle(phandle handle) | ||||
| @@ -1431,7 +1431,7 @@ static int __of_parse_phandle_with_args( | ||||
|   * @index: For properties holding a table of phandles, this is the index into | ||||
|   *         the table | ||||
|   * | ||||
| - * Returns the device_node pointer with refcount incremented.  Use | ||||
| + * 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, | ||||
| @@ -1731,7 +1731,7 @@ EXPORT_SYMBOL(of_parse_phandle_with_fixe | ||||
|   * @list_name:	property name that contains a list | ||||
|   * @cells_name:	property name that specifies phandles' arguments count | ||||
|   * | ||||
| - * Returns the number of phandle + argument tuples within a property. It | ||||
| + * Return: The number of phandle + argument tuples within a property. It | ||||
|   * is a typical pattern to encode a list of phandle and variable | ||||
|   * arguments into a single property. The number of arguments is encoded | ||||
|   * by a property in the phandle-target node. For example, a gpios | ||||
| @@ -2031,7 +2031,9 @@ void of_alias_scan(void * (*dt_alloc)(u6 | ||||
|   * @stem:	Alias stem of the given device_node | ||||
|   * | ||||
|   * The function travels the lookup table to get the alias id for the given | ||||
| - * device_node and alias stem.  It returns the alias id if found. | ||||
| + * device_node and alias stem. | ||||
| + * | ||||
| + * Return: The alias id if found. | ||||
|   */ | ||||
|  int of_alias_get_id(struct device_node *np, const char *stem) | ||||
|  { | ||||
| @@ -2140,8 +2142,9 @@ EXPORT_SYMBOL_GPL(of_alias_get_highest_i | ||||
|   * @index: Index to use for preferred console. | ||||
|   * | ||||
|   * Check if the given device node matches the stdout-path property in the | ||||
| - * /chosen node. If it does then register it as the preferred console and return | ||||
| - * TRUE. Otherwise return FALSE. | ||||
| + * /chosen node. If it does then register it as the preferred console. | ||||
| + * | ||||
| + * Return: TRUE if console successfully setup. Otherwise return FALSE. | ||||
|   */ | ||||
|  bool of_console_check(struct device_node *dn, char *name, int index) | ||||
|  { | ||||
| @@ -2192,7 +2195,7 @@ struct device_node *of_find_next_cache_n | ||||
|   * | ||||
|   * @cpu: cpu number(logical index) for which the last cache level is needed | ||||
|   * | ||||
| - * Returns the the level at which the last cache is present. It is exactly | ||||
| + * Return: The the level at which the last cache is present. It is exactly | ||||
|   * same as  the total number of cache levels for the given logical cpu. | ||||
|   */ | ||||
|  int of_find_last_cache_level(unsigned int cpu) | ||||
| --- a/drivers/of/dynamic.c | ||||
| +++ b/drivers/of/dynamic.c | ||||
| @@ -27,7 +27,7 @@ static struct device_node *kobj_to_devic | ||||
|   * @node:	Node to inc refcount, NULL is supported to simplify writing of | ||||
|   *		callers | ||||
|   * | ||||
| - * Returns node. | ||||
| + * Return: The node with refcount incremented. | ||||
|   */ | ||||
|  struct device_node *of_node_get(struct device_node *node) | ||||
|  { | ||||
| @@ -104,7 +104,8 @@ int of_reconfig_notify(unsigned long act | ||||
|   * @arg		- argument of the of notifier | ||||
|   * | ||||
|   * Returns the new state of a device based on the notifier used. | ||||
| - * Returns 0 on device going from enabled to disabled, 1 on device | ||||
| + * | ||||
| + * Return: 0 on device going from enabled to disabled, 1 on device | ||||
|   * going from disabled to enabled and -1 on no change. | ||||
|   */ | ||||
|  int of_reconfig_get_state_change(unsigned long action, struct of_reconfig_data *pr) | ||||
| @@ -371,7 +372,8 @@ void of_node_release(struct kobject *kob | ||||
|   * property structure and the property name & contents. The property's | ||||
|   * flags have the OF_DYNAMIC bit set so that we can differentiate between | ||||
|   * dynamically allocated properties and not. | ||||
| - * Returns the newly allocated property or NULL on out of memory error. | ||||
| + * | ||||
| + * Return: The newly allocated property or NULL on out of memory error. | ||||
|   */ | ||||
|  struct property *__of_prop_dup(const struct property *prop, gfp_t allocflags) | ||||
|  { | ||||
| @@ -414,7 +416,7 @@ struct property *__of_prop_dup(const str | ||||
|   * another node.  The node data are dynamically allocated and all the node | ||||
|   * flags have the OF_DYNAMIC & OF_DETACHED bits set. | ||||
|   * | ||||
| - * Returns the newly allocated node or NULL on out of memory error. | ||||
| + * Return: The newly allocated node or NULL on out of memory error. | ||||
|   */ | ||||
|  struct device_node *__of_node_dup(const struct device_node *np, | ||||
|  				  const char *full_name) | ||||
| @@ -780,7 +782,8 @@ static int __of_changeset_apply(struct o | ||||
|   * Any side-effects of live tree state changes are applied here on | ||||
|   * success, like creation/destruction of devices and side-effects | ||||
|   * like creation of sysfs properties and directories. | ||||
| - * Returns 0 on success, a negative error value in case of an error. | ||||
| + * | ||||
| + * Return: 0 on success, a negative error value in case of an error. | ||||
|   * On error the partially applied effects are reverted. | ||||
|   */ | ||||
|  int of_changeset_apply(struct of_changeset *ocs) | ||||
| @@ -874,7 +877,8 @@ static int __of_changeset_revert(struct | ||||
|   * was before the application. | ||||
|   * Any side-effects like creation/destruction of devices and | ||||
|   * removal of sysfs properties and directories are applied. | ||||
| - * Returns 0 on success, a negative error value in case of an error. | ||||
| + * | ||||
| + * Return: 0 on success, a negative error value in case of an error. | ||||
|   */ | ||||
|  int of_changeset_revert(struct of_changeset *ocs) | ||||
|  { | ||||
| @@ -902,7 +906,8 @@ EXPORT_SYMBOL_GPL(of_changeset_revert); | ||||
|   * + OF_RECONFIG_ADD_PROPERTY | ||||
|   * + OF_RECONFIG_REMOVE_PROPERTY, | ||||
|   * + OF_RECONFIG_UPDATE_PROPERTY | ||||
| - * Returns 0 on success, a negative error value in case of an error. | ||||
| + * | ||||
| + * Return: 0 on success, a negative error value in case of an error. | ||||
|   */ | ||||
|  int of_changeset_action(struct of_changeset *ocs, unsigned long action, | ||||
|  		struct device_node *np, struct property *prop) | ||||
| --- a/drivers/of/fdt.c | ||||
| +++ b/drivers/of/fdt.c | ||||
| @@ -282,7 +282,7 @@ static void reverse_nodes(struct device_ | ||||
|   * @dad: Parent struct device_node | ||||
|   * @nodepp: The device_node tree created by the call | ||||
|   * | ||||
| - * It returns the size of unflattened device tree or error code | ||||
| + * Return: The size of unflattened device tree or error code | ||||
|   */ | ||||
|  static int unflatten_dt_nodes(const void *blob, | ||||
|  			      void *mem, | ||||
| @@ -360,7 +360,7 @@ static int unflatten_dt_nodes(const void | ||||
|   * fills the "name" and "type" pointers of the nodes so the normal device-tree | ||||
|   * walking functions can be used. | ||||
|   * | ||||
| - * Returns NULL on failure or the memory chunk containing the unflattened | ||||
| + * Return: NULL on failure or the memory chunk containing the unflattened | ||||
|   * device tree on success. | ||||
|   */ | ||||
|  void *__unflatten_device_tree(const void *blob, | ||||
| @@ -441,7 +441,7 @@ static DEFINE_MUTEX(of_fdt_unflatten_mut | ||||
|   * pointers of the nodes so the normal device-tree walking functions | ||||
|   * can be used. | ||||
|   * | ||||
| - * Returns NULL on failure or the memory chunk containing the unflattened | ||||
| + * Return: NULL on failure or the memory chunk containing the unflattened | ||||
|   * device tree on success. | ||||
|   */ | ||||
|  void *of_fdt_unflatten_tree(const unsigned long *blob, | ||||
| @@ -715,7 +715,7 @@ const void *__init of_get_flat_dt_prop(u | ||||
|   * @node: node to test | ||||
|   * @compat: compatible string to compare with compatible list. | ||||
|   * | ||||
| - * On match, returns a non-zero value with smaller values returned for more | ||||
| + * Return: a non-zero value on match with smaller values returned for more | ||||
|   * specific compatible values. | ||||
|   */ | ||||
|  static int of_fdt_is_compatible(const void *blob, | ||||
| --- a/drivers/of/irq.c | ||||
| +++ b/drivers/of/irq.c | ||||
| @@ -48,7 +48,7 @@ EXPORT_SYMBOL_GPL(irq_of_parse_and_map); | ||||
|   * of_irq_find_parent - Given a device node, find its interrupt parent node | ||||
|   * @child: pointer to device node | ||||
|   * | ||||
| - * Returns a pointer to the interrupt parent node, or NULL if the interrupt | ||||
| + * Return: A pointer to the interrupt parent node, or NULL if the interrupt | ||||
|   * parent could not be determined. | ||||
|   */ | ||||
|  struct device_node *of_irq_find_parent(struct device_node *child) | ||||
| @@ -81,14 +81,14 @@ EXPORT_SYMBOL_GPL(of_irq_find_parent); | ||||
|   * @addr:	address specifier (start of "reg" property of the device) in be32 format | ||||
|   * @out_irq:	structure of_phandle_args updated by this function | ||||
|   * | ||||
| - * Returns 0 on success and a negative number on error | ||||
| - * | ||||
|   * This function is a low-level interrupt tree walking function. It | ||||
|   * can be used to do a partial walk with synthetized reg and interrupts | ||||
|   * properties, for example when resolving PCI interrupts when no device | ||||
|   * node exist for the parent. It takes an interrupt specifier structure as | ||||
|   * input, walks the tree looking for any interrupt-map properties, translates | ||||
|   * the specifier for each map, and then returns the translated map. | ||||
| + * | ||||
| + * Return: 0 on success and a negative number on error | ||||
|   */ | ||||
|  int of_irq_parse_raw(const __be32 *addr, struct of_phandle_args *out_irq) | ||||
|  { | ||||
| @@ -380,7 +380,7 @@ EXPORT_SYMBOL_GPL(of_irq_to_resource); | ||||
|   * @dev: pointer to device tree node | ||||
|   * @index: zero-based index of the IRQ | ||||
|   * | ||||
| - * Returns Linux IRQ number on success, or 0 on the IRQ mapping failure, or | ||||
| + * Return: Linux IRQ number on success, or 0 on the IRQ mapping failure, or | ||||
|   * -EPROBE_DEFER if the IRQ domain is not yet created, or error code in case | ||||
|   * of any other failure. | ||||
|   */ | ||||
| @@ -407,7 +407,7 @@ EXPORT_SYMBOL_GPL(of_irq_get); | ||||
|   * @dev: pointer to device tree node | ||||
|   * @name: IRQ name | ||||
|   * | ||||
| - * Returns Linux IRQ number on success, or 0 on the IRQ mapping failure, or | ||||
| + * Return: Linux IRQ number on success, or 0 on the IRQ mapping failure, or | ||||
|   * -EPROBE_DEFER if the IRQ domain is not yet created, or error code in case | ||||
|   * of any other failure. | ||||
|   */ | ||||
| @@ -447,7 +447,7 @@ int of_irq_count(struct device_node *dev | ||||
|   * @res: array of resources to fill in | ||||
|   * @nr_irqs: the number of IRQs (and upper bound for num of @res elements) | ||||
|   * | ||||
| - * Returns the size of the filled in table (up to @nr_irqs). | ||||
| + * Return: The size of the filled in table (up to @nr_irqs). | ||||
|   */ | ||||
|  int of_irq_to_resource_table(struct device_node *dev, struct resource *res, | ||||
|  		int nr_irqs) | ||||
| @@ -602,7 +602,7 @@ static u32 __of_msi_map_id(struct device | ||||
|   * Walk up the device hierarchy looking for devices with a "msi-map" | ||||
|   * property.  If found, apply the mapping to @id_in. | ||||
|   * | ||||
| - * Returns the mapped MSI ID. | ||||
| + * Return: The mapped MSI ID. | ||||
|   */ | ||||
|  u32 of_msi_map_id(struct device *dev, struct device_node *msi_np, u32 id_in) | ||||
|  { | ||||
| --- a/drivers/of/overlay.c | ||||
| +++ b/drivers/of/overlay.c | ||||
| @@ -296,7 +296,7 @@ err_free_target_path: | ||||
|   * | ||||
|   * Update of property in symbols node is not allowed. | ||||
|   * | ||||
| - * Returns 0 on success, -ENOMEM if memory allocation failure, or -EINVAL if | ||||
| + * Return: 0 on success, -ENOMEM if memory allocation failure, or -EINVAL if | ||||
|   * invalid @overlay. | ||||
|   */ | ||||
|  static int add_changeset_property(struct overlay_changeset *ovcs, | ||||
| @@ -401,7 +401,7 @@ static int add_changeset_property(struct | ||||
|   * | ||||
|   * NOTE_2: Multiple mods of created nodes not supported. | ||||
|   * | ||||
| - * Returns 0 on success, -ENOMEM if memory allocation failure, or -EINVAL if | ||||
| + * Return: 0 on success, -ENOMEM if memory allocation failure, or -EINVAL if | ||||
|   * invalid @overlay. | ||||
|   */ | ||||
|  static int add_changeset_node(struct overlay_changeset *ovcs, | ||||
| @@ -473,7 +473,7 @@ static int add_changeset_node(struct ove | ||||
|   * | ||||
|   * Do not allow symbols node to have any children. | ||||
|   * | ||||
| - * Returns 0 on success, -ENOMEM if memory allocation failure, or -EINVAL if | ||||
| + * Return: 0 on success, -ENOMEM if memory allocation failure, or -EINVAL if | ||||
|   * invalid @overlay_node. | ||||
|   */ | ||||
|  static int build_changeset_next_level(struct overlay_changeset *ovcs, | ||||
| @@ -604,7 +604,7 @@ static int find_dup_cset_prop(struct ove | ||||
|   * the same node or duplicate {add, delete, or update} properties entries | ||||
|   * for the same property. | ||||
|   * | ||||
| - * Returns 0 on success, or -EINVAL if duplicate changeset entry found. | ||||
| + * Return: 0 on success, or -EINVAL if duplicate changeset entry found. | ||||
|   */ | ||||
|  static int changeset_dup_entry_check(struct overlay_changeset *ovcs) | ||||
|  { | ||||
| @@ -628,7 +628,7 @@ static int changeset_dup_entry_check(str | ||||
|   * any portions of the changeset that were successfully created will remain | ||||
|   * in @ovcs->cset. | ||||
|   * | ||||
| - * Returns 0 on success, -ENOMEM if memory allocation failure, or -EINVAL if | ||||
| + * Return: 0 on success, -ENOMEM if memory allocation failure, or -EINVAL if | ||||
|   * invalid overlay in @ovcs->fragments[]. | ||||
|   */ | ||||
|  static int build_changeset(struct overlay_changeset *ovcs) | ||||
| @@ -724,7 +724,7 @@ static struct device_node *find_target(s | ||||
|   * the top level of @tree.  The relevant top level nodes are the fragment | ||||
|   * nodes and the __symbols__ node.  Any other top level node will be ignored. | ||||
|   * | ||||
| - * Returns 0 on success, -ENOMEM if memory allocation failure, -EINVAL if error | ||||
| + * Return: 0 on success, -ENOMEM if memory allocation failure, -EINVAL if error | ||||
|   * detected in @tree, or -ENOSPC if idr_alloc() error. | ||||
|   */ | ||||
|  static int init_overlay_changeset(struct overlay_changeset *ovcs, | ||||
| @@ -1179,7 +1179,7 @@ static int overlay_removal_is_ok(struct | ||||
|   * If an error is returned by an overlay changeset post-remove notifier | ||||
|   * then no further overlay changeset post-remove notifier will be called. | ||||
|   * | ||||
| - * Returns 0 on success, or a negative error number.  *ovcs_id is set to | ||||
| + * Return: 0 on success, or a negative error number.  *ovcs_id is set to | ||||
|   * zero after reverting the changeset, even if a subsequent error occurs. | ||||
|   */ | ||||
|  int of_overlay_remove(int *ovcs_id) | ||||
| @@ -1257,7 +1257,7 @@ EXPORT_SYMBOL_GPL(of_overlay_remove); | ||||
|   * | ||||
|   * Removes all overlays from the system in the correct order. | ||||
|   * | ||||
| - * Returns 0 on success, or a negative error number | ||||
| + * Return: 0 on success, or a negative error number | ||||
|   */ | ||||
|  int of_overlay_remove_all(void) | ||||
|  { | ||||
| --- a/drivers/of/platform.c | ||||
| +++ b/drivers/of/platform.c | ||||
| @@ -44,7 +44,7 @@ static const struct of_device_id of_skip | ||||
|   * Takes a reference to the embedded struct device which needs to be dropped | ||||
|   * after use. | ||||
|   * | ||||
| - * Returns platform_device pointer, or NULL if not found | ||||
| + * Return: platform_device pointer, or NULL if not found | ||||
|   */ | ||||
|  struct platform_device *of_find_device_by_node(struct device_node *np) | ||||
|  { | ||||
| @@ -160,7 +160,7 @@ EXPORT_SYMBOL(of_device_alloc); | ||||
|   * @platform_data: pointer to populate platform_data pointer with | ||||
|   * @parent: Linux device model parent device. | ||||
|   * | ||||
| - * Returns pointer to created platform device, or NULL if a device was not | ||||
| + * Return: Pointer to created platform device, or NULL if a device was not | ||||
|   * registered.  Unavailable devices will not get registered. | ||||
|   */ | ||||
|  static struct platform_device *of_platform_device_create_pdata( | ||||
| @@ -204,7 +204,7 @@ err_clear_flag: | ||||
|   * @bus_id: name to assign device | ||||
|   * @parent: Linux device model parent device. | ||||
|   * | ||||
| - * Returns pointer to created platform device, or NULL if a device was not | ||||
| + * Return: Pointer to created platform device, or NULL if a device was not | ||||
|   * registered.  Unavailable devices will not get registered. | ||||
|   */ | ||||
|  struct platform_device *of_platform_device_create(struct device_node *np, | ||||
| @@ -463,7 +463,7 @@ EXPORT_SYMBOL(of_platform_bus_probe); | ||||
|   * New board support should be using this function instead of | ||||
|   * of_platform_bus_probe(). | ||||
|   * | ||||
| - * Returns 0 on success, < 0 on failure. | ||||
| + * Return: 0 on success, < 0 on failure. | ||||
|   */ | ||||
|  int of_platform_populate(struct device_node *root, | ||||
|  			const struct of_device_id *matches, | ||||
| @@ -608,7 +608,7 @@ static void devm_of_platform_populate_re | ||||
|   * Similar to of_platform_populate(), but will automatically call | ||||
|   * of_platform_depopulate() when the device is unbound from the bus. | ||||
|   * | ||||
| - * Returns 0 on success, < 0 on failure. | ||||
| + * Return: 0 on success, < 0 on failure. | ||||
|   */ | ||||
|  int devm_of_platform_populate(struct device *dev) | ||||
|  { | ||||
| --- a/drivers/of/property.c | ||||
| +++ b/drivers/of/property.c | ||||
| @@ -60,9 +60,11 @@ EXPORT_SYMBOL(of_graph_is_present); | ||||
|   * @elem_size:	size of the individual element | ||||
|   * | ||||
|   * Search for a property in a device node and count the number of elements of | ||||
| - * size elem_size in it. Returns number of elements on sucess, -EINVAL if the | ||||
| - * property does not exist or its length does not match a multiple of elem_size | ||||
| - * and -ENODATA if the property does not have a value. | ||||
| + * size elem_size in it. | ||||
| + * | ||||
| + * Return: The number of elements on sucess, -EINVAL if the property does not | ||||
| + * exist or its length does not match a multiple of elem_size and -ENODATA if | ||||
| + * the property does not have a value. | ||||
|   */ | ||||
|  int of_property_count_elems_of_size(const struct device_node *np, | ||||
|  				const char *propname, int elem_size) | ||||
| @@ -94,8 +96,9 @@ EXPORT_SYMBOL_GPL(of_property_count_elem | ||||
|   * @len:	if !=NULL, actual length is written to here | ||||
|   * | ||||
|   * Search for a property in a device node and valid the requested size. | ||||
| - * Returns the property value on success, -EINVAL if the property does not | ||||
| - *  exist, -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
| + * | ||||
| + * Return: The property value on success, -EINVAL if the property does not | ||||
| + * exist, -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
|   * property data is too small or too large. | ||||
|   * | ||||
|   */ | ||||
| @@ -128,7 +131,9 @@ static void *of_find_property_value_of_s | ||||
|   * @out_value:	pointer to return value, modified only if no error. | ||||
|   * | ||||
|   * Search for a property in a device node and read nth 32-bit value from | ||||
| - * it. Returns 0 on success, -EINVAL if the property does not exist, | ||||
| + * it. | ||||
| + * | ||||
| + * Return: 0 on success, -EINVAL if the property does not exist, | ||||
|   * -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
|   * property data isn't large enough. | ||||
|   * | ||||
| @@ -160,7 +165,9 @@ EXPORT_SYMBOL_GPL(of_property_read_u32_i | ||||
|   * @out_value:	pointer to return value, modified only if no error. | ||||
|   * | ||||
|   * Search for a property in a device node and read nth 64-bit value from | ||||
| - * it. Returns 0 on success, -EINVAL if the property does not exist, | ||||
| + * it. | ||||
| + * | ||||
| + * Return: 0 on success, -EINVAL if the property does not exist, | ||||
|   * -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
|   * property data isn't large enough. | ||||
|   * | ||||
| @@ -195,12 +202,14 @@ EXPORT_SYMBOL_GPL(of_property_read_u64_i | ||||
|   *		sz_min will be read. | ||||
|   * | ||||
|   * Search for a property in a device node and read 8-bit value(s) from | ||||
| - * it. Returns number of elements read on success, -EINVAL if the property | ||||
| - * does not exist, -ENODATA if property does not have a value, and -EOVERFLOW | ||||
| - * if the property data is smaller than sz_min or longer than sz_max. | ||||
| + * it. | ||||
|   * | ||||
|   * dts entry of array should be like: | ||||
| - *	property = /bits/ 8 <0x50 0x60 0x70>; | ||||
| + *  ``property = /bits/ 8 <0x50 0x60 0x70>;`` | ||||
| + * | ||||
| + * Return: The number of elements read on success, -EINVAL if the property | ||||
| + * does not exist, -ENODATA if property does not have a value, and -EOVERFLOW | ||||
| + * if the property data is smaller than sz_min or longer than sz_max. | ||||
|   * | ||||
|   * The out_values is modified only if a valid u8 value can be decoded. | ||||
|   */ | ||||
| @@ -243,12 +252,14 @@ EXPORT_SYMBOL_GPL(of_property_read_varia | ||||
|   *		sz_min will be read. | ||||
|   * | ||||
|   * Search for a property in a device node and read 16-bit value(s) from | ||||
| - * it. Returns number of elements read on success, -EINVAL if the property | ||||
| - * does not exist, -ENODATA if property does not have a value, and -EOVERFLOW | ||||
| - * if the property data is smaller than sz_min or longer than sz_max. | ||||
| + * it. | ||||
|   * | ||||
|   * dts entry of array should be like: | ||||
| - *	property = /bits/ 16 <0x5000 0x6000 0x7000>; | ||||
| + *  ``property = /bits/ 16 <0x5000 0x6000 0x7000>;`` | ||||
| + * | ||||
| + * Return: The number of elements read on success, -EINVAL if the property | ||||
| + * does not exist, -ENODATA if property does not have a value, and -EOVERFLOW | ||||
| + * if the property data is smaller than sz_min or longer than sz_max. | ||||
|   * | ||||
|   * The out_values is modified only if a valid u16 value can be decoded. | ||||
|   */ | ||||
| @@ -291,7 +302,9 @@ EXPORT_SYMBOL_GPL(of_property_read_varia | ||||
|   *		sz_min will be read. | ||||
|   * | ||||
|   * Search for a property in a device node and read 32-bit value(s) from | ||||
| - * it. Returns number of elements read on success, -EINVAL if the property | ||||
| + * it. | ||||
| + * | ||||
| + * Return: The number of elements read on success, -EINVAL if the property | ||||
|   * does not exist, -ENODATA if property does not have a value, and -EOVERFLOW | ||||
|   * if the property data is smaller than sz_min or longer than sz_max. | ||||
|   * | ||||
| @@ -330,7 +343,9 @@ EXPORT_SYMBOL_GPL(of_property_read_varia | ||||
|   * @out_value:	pointer to return value, modified only if return value is 0. | ||||
|   * | ||||
|   * Search for a property in a device node and read a 64-bit value from | ||||
| - * it. Returns 0 on success, -EINVAL if the property does not exist, | ||||
| + * it. | ||||
| + * | ||||
| + * Return: 0 on success, -EINVAL if the property does not exist, | ||||
|   * -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
|   * property data isn't large enough. | ||||
|   * | ||||
| @@ -365,7 +380,9 @@ EXPORT_SYMBOL_GPL(of_property_read_u64); | ||||
|   *		sz_min will be read. | ||||
|   * | ||||
|   * Search for a property in a device node and read 64-bit value(s) from | ||||
| - * it. Returns number of elements read on success, -EINVAL if the property | ||||
| + * it. | ||||
| + * | ||||
| + * Return: The number of elements read on success, -EINVAL if the property | ||||
|   * does not exist, -ENODATA if property does not have a value, and -EOVERFLOW | ||||
|   * if the property data is smaller than sz_min or longer than sz_max. | ||||
|   * | ||||
| @@ -407,10 +424,11 @@ EXPORT_SYMBOL_GPL(of_property_read_varia | ||||
|   *		return value is 0. | ||||
|   * | ||||
|   * Search for a property in a device tree node and retrieve a null | ||||
| - * terminated string value (pointer to data, not a copy). Returns 0 on | ||||
| - * success, -EINVAL if the property does not exist, -ENODATA if property | ||||
| - * does not have a value, and -EILSEQ if the string is not null-terminated | ||||
| - * within the length of the property data. | ||||
| + * terminated string value (pointer to data, not a copy). | ||||
| + * | ||||
| + * Return: 0 on success, -EINVAL if the property does not exist, -ENODATA if | ||||
| + * property does not have a value, and -EILSEQ if the string is not | ||||
| + * null-terminated within the length of the property data. | ||||
|   * | ||||
|   * The out_string pointer is modified only if a valid string can be decoded. | ||||
|   */ | ||||
| @@ -774,7 +792,7 @@ EXPORT_SYMBOL(of_graph_get_remote_port_p | ||||
|   * @node: pointer to a local endpoint device_node | ||||
|   * | ||||
|   * Return: Remote port node associated with remote endpoint node linked | ||||
| - *	   to @node. Use of_node_put() on it when done. | ||||
| + * to @node. Use of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_graph_get_remote_port(const struct device_node *node) | ||||
|  { | ||||
| @@ -807,7 +825,7 @@ EXPORT_SYMBOL(of_graph_get_endpoint_coun | ||||
|   * @endpoint: identifier (value of reg property) of the endpoint node | ||||
|   * | ||||
|   * Return: Remote device node associated with remote endpoint node linked | ||||
| - *	   to @node. Use of_node_put() on it when done. | ||||
| + * to @node. Use of_node_put() on it when done. | ||||
|   */ | ||||
|  struct device_node *of_graph_get_remote_node(const struct device_node *node, | ||||
|  					     u32 port, u32 endpoint) | ||||
| --- a/include/linux/of.h | ||||
| +++ b/include/linux/of.h | ||||
| @@ -424,12 +424,14 @@ extern int of_detach_node(struct device_ | ||||
|   * @sz:		number of array elements to read | ||||
|   * | ||||
|   * Search for a property in a device node and read 8-bit value(s) from | ||||
| - * it. Returns 0 on success, -EINVAL if the property does not exist, | ||||
| - * -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
| - * property data isn't large enough. | ||||
| + * it. | ||||
|   * | ||||
|   * dts entry of array should be like: | ||||
| - *	property = /bits/ 8 <0x50 0x60 0x70>; | ||||
| + *  ``property = /bits/ 8 <0x50 0x60 0x70>;`` | ||||
| + * | ||||
| + * Return: 0 on success, -EINVAL if the property does not exist, | ||||
| + * -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
| + * property data isn't large enough. | ||||
|   * | ||||
|   * The out_values is modified only if a valid u8 value can be decoded. | ||||
|   */ | ||||
| @@ -454,12 +456,14 @@ static inline int of_property_read_u8_ar | ||||
|   * @sz:		number of array elements to read | ||||
|   * | ||||
|   * Search for a property in a device node and read 16-bit value(s) from | ||||
| - * it. Returns 0 on success, -EINVAL if the property does not exist, | ||||
| - * -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
| - * property data isn't large enough. | ||||
| + * it. | ||||
|   * | ||||
|   * dts entry of array should be like: | ||||
| - *	property = /bits/ 16 <0x5000 0x6000 0x7000>; | ||||
| + *  ``property = /bits/ 16 <0x5000 0x6000 0x7000>;`` | ||||
| + * | ||||
| + * Return: 0 on success, -EINVAL if the property does not exist, | ||||
| + * -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
| + * property data isn't large enough. | ||||
|   * | ||||
|   * The out_values is modified only if a valid u16 value can be decoded. | ||||
|   */ | ||||
| @@ -485,7 +489,9 @@ static inline int of_property_read_u16_a | ||||
|   * @sz:		number of array elements to read | ||||
|   * | ||||
|   * Search for a property in a device node and read 32-bit value(s) from | ||||
| - * it. Returns 0 on success, -EINVAL if the property does not exist, | ||||
| + * it. | ||||
| + * | ||||
| + * Return: 0 on success, -EINVAL if the property does not exist, | ||||
|   * -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
|   * property data isn't large enough. | ||||
|   * | ||||
| @@ -513,7 +519,9 @@ static inline int of_property_read_u32_a | ||||
|   * @sz:		number of array elements to read | ||||
|   * | ||||
|   * Search for a property in a device node and read 64-bit value(s) from | ||||
| - * it. Returns 0 on success, -EINVAL if the property does not exist, | ||||
| + * it. | ||||
| + * | ||||
| + * Return: 0 on success, -EINVAL if the property does not exist, | ||||
|   * -ENODATA if property does not have a value, and -EOVERFLOW if the | ||||
|   * property data isn't large enough. | ||||
|   * | ||||
| @@ -1063,7 +1071,9 @@ static inline bool of_node_is_type(const | ||||
|   * @propname:	name of the property to be searched. | ||||
|   * | ||||
|   * Search for a property in a device node and count the number of u8 elements | ||||
| - * in it. Returns number of elements on sucess, -EINVAL if the property does | ||||
| + * in it. | ||||
| + * | ||||
| + * Return: The number of elements on sucess, -EINVAL if the property does | ||||
|   * not exist or its length does not match a multiple of u8 and -ENODATA if the | ||||
|   * property does not have a value. | ||||
|   */ | ||||
| @@ -1080,7 +1090,9 @@ static inline int of_property_count_u8_e | ||||
|   * @propname:	name of the property to be searched. | ||||
|   * | ||||
|   * Search for a property in a device node and count the number of u16 elements | ||||
| - * in it. Returns number of elements on sucess, -EINVAL if the property does | ||||
| + * in it. | ||||
| + * | ||||
| + * Return: The number of elements on sucess, -EINVAL if the property does | ||||
|   * not exist or its length does not match a multiple of u16 and -ENODATA if the | ||||
|   * property does not have a value. | ||||
|   */ | ||||
| @@ -1097,7 +1109,9 @@ static inline int of_property_count_u16_ | ||||
|   * @propname:	name of the property to be searched. | ||||
|   * | ||||
|   * Search for a property in a device node and count the number of u32 elements | ||||
| - * in it. Returns number of elements on sucess, -EINVAL if the property does | ||||
| + * in it. | ||||
| + * | ||||
| + * Return: The number of elements on sucess, -EINVAL if the property does | ||||
|   * not exist or its length does not match a multiple of u32 and -ENODATA if the | ||||
|   * property does not have a value. | ||||
|   */ | ||||
| @@ -1114,7 +1128,9 @@ static inline int of_property_count_u32_ | ||||
|   * @propname:	name of the property to be searched. | ||||
|   * | ||||
|   * Search for a property in a device node and count the number of u64 elements | ||||
| - * in it. Returns number of elements on sucess, -EINVAL if the property does | ||||
| + * in it. | ||||
| + * | ||||
| + * Return: The number of elements on sucess, -EINVAL if the property does | ||||
|   * not exist or its length does not match a multiple of u64 and -ENODATA if the | ||||
|   * property does not have a value. | ||||
|   */ | ||||
| @@ -1135,7 +1151,7 @@ static inline int of_property_count_u64_ | ||||
|   * Search for a property in a device tree node and retrieve a list of | ||||
|   * terminated string values (pointer to data, not a copy) in that property. | ||||
|   * | ||||
| - * If @out_strs is NULL, the number of strings in the property is returned. | ||||
| + * Return: If @out_strs is NULL, the number of strings in the property is returned. | ||||
|   */ | ||||
|  static inline int of_property_read_string_array(const struct device_node *np, | ||||
|  						const char *propname, const char **out_strs, | ||||
| @@ -1151,10 +1167,11 @@ static inline int of_property_read_strin | ||||
|   * @propname:	name of the property to be searched. | ||||
|   * | ||||
|   * Search for a property in a device tree node and retrieve the number of null | ||||
| - * terminated string contain in it. Returns the number of strings on | ||||
| - * success, -EINVAL if the property does not exist, -ENODATA if property | ||||
| - * does not have a value, and -EILSEQ if the string is not null-terminated | ||||
| - * within the length of the property data. | ||||
| + * terminated string contain in it. | ||||
| + * | ||||
| + * Return: The number of strings on success, -EINVAL if the property does not | ||||
| + * exist, -ENODATA if property does not have a value, and -EILSEQ if the string | ||||
| + * is not null-terminated within the length of the property data. | ||||
|   */ | ||||
|  static inline int of_property_count_strings(const struct device_node *np, | ||||
|  					    const char *propname) | ||||
| @@ -1174,7 +1191,8 @@ static inline int of_property_count_stri | ||||
|   * Search for a property in a device tree node and retrieve a null | ||||
|   * terminated string value (pointer to data, not a copy) in the list of strings | ||||
|   * contained in that property. | ||||
| - * Returns 0 on success, -EINVAL if the property does not exist, -ENODATA if | ||||
| + * | ||||
| + * Return: 0 on success, -EINVAL if the property does not exist, -ENODATA if | ||||
|   * property does not have a value, and -EILSEQ if the string is not | ||||
|   * null-terminated within the length of the property data. | ||||
|   * | ||||
| @@ -1194,7 +1212,8 @@ static inline int of_property_read_strin | ||||
|   * @propname:	name of the property to be searched. | ||||
|   * | ||||
|   * Search for a property in a device node. | ||||
| - * Returns true if the property exists false otherwise. | ||||
| + * | ||||
| + * Return: true if the property exists false otherwise. | ||||
|   */ | ||||
|  static inline bool of_property_read_bool(const struct device_node *np, | ||||
|  					 const char *propname) | ||||
| @@ -1440,7 +1459,7 @@ static inline int of_reconfig_get_state_ | ||||
|   * of_device_is_system_power_controller - Tells if system-power-controller is found for device_node | ||||
|   * @np: Pointer to the given device_node | ||||
|   * | ||||
| - * return true if present false otherwise | ||||
| + * Return: true if present false otherwise | ||||
|   */ | ||||
|  static inline bool of_device_is_system_power_controller(const struct device_node *np) | ||||
|  { | ||||
| @@ -0,0 +1,54 @@ | ||||
| From 31e46db02ac1351c84e56a18606d17fc1b8390dd Mon Sep 17 00:00:00 2001 | ||||
| From: Lee Jones <lee.jones@linaro.org> | ||||
| Date: Mon, 29 Mar 2021 16:24:35 +0100 | ||||
| Subject: [PATCH] of: base: Fix spelling issue with function param 'prop' | ||||
|  | ||||
| Fixes the following W=1 kernel build warning(s): | ||||
|  | ||||
|  drivers/of/base.c:1781: warning: Function parameter or member 'prop' not described in '__of_add_property' | ||||
|  drivers/of/base.c:1781: warning: Excess function parameter 'prob' description in '__of_add_property' | ||||
|  drivers/of/base.c:1804: warning: Function parameter or member 'prop' not described in 'of_add_property' | ||||
|  drivers/of/base.c:1804: warning: Excess function parameter 'prob' description in 'of_add_property' | ||||
|  drivers/of/base.c:1855: warning: Function parameter or member 'prop' not described in 'of_remove_property' | ||||
|  drivers/of/base.c:1855: warning: Excess function parameter 'prob' description in 'of_remove_property' | ||||
|  | ||||
| Cc: Rob Herring <robh+dt@kernel.org> | ||||
| Cc: Frank Rowand <frowand.list@gmail.com> | ||||
| Cc: "David S. Miller" <davem@davemloft.net> | ||||
| Cc: devicetree@vger.kernel.org | ||||
| Signed-off-by: Lee Jones <lee.jones@linaro.org> | ||||
| Link: https://lore.kernel.org/r/20210329152435.900225-1-lee.jones@linaro.org | ||||
| Signed-off-by: Rob Herring <robh@kernel.org> | ||||
| --- | ||||
|  drivers/of/base.c | 6 +++--- | ||||
|  1 file changed, 3 insertions(+), 3 deletions(-) | ||||
|  | ||||
| --- a/drivers/of/base.c | ||||
| +++ b/drivers/of/base.c | ||||
| @@ -1780,7 +1780,7 @@ EXPORT_SYMBOL(of_count_phandle_with_args | ||||
|  /** | ||||
|   * __of_add_property - Add a property to a node without lock operations | ||||
|   * @np:		Caller's Device Node | ||||
| - * @prob:	Property to add | ||||
| + * @prop:	Property to add | ||||
|   */ | ||||
|  int __of_add_property(struct device_node *np, struct property *prop) | ||||
|  { | ||||
| @@ -1803,7 +1803,7 @@ int __of_add_property(struct device_node | ||||
|  /** | ||||
|   * of_add_property - Add a property to a node | ||||
|   * @np:		Caller's Device Node | ||||
| - * @prob:	Property to add | ||||
| + * @prop:	Property to add | ||||
|   */ | ||||
|  int of_add_property(struct device_node *np, struct property *prop) | ||||
|  { | ||||
| @@ -1849,7 +1849,7 @@ int __of_remove_property(struct device_n | ||||
|  /** | ||||
|   * of_remove_property - Remove a property from a node. | ||||
|   * @np:		Caller's Device Node | ||||
| - * @prob:	Property to remove | ||||
| + * @prop:	Property to remove | ||||
|   * | ||||
|   * Note that we don't actually remove it, since we have given out | ||||
|   * who-knows-how-many pointers to the data using get-property. | ||||
| @@ -1,7 +1,7 @@ | ||||
| From 83216e3988cd196183542937c9bd58b279f946af Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Walle <michael@walle.cc> | ||||
| Date: Mon, 12 Apr 2021 19:47:17 +0200 | ||||
| Subject: of: net: pass the dst buffer to of_get_mac_address() | ||||
| Subject: [PATCH] of: net: pass the dst buffer to of_get_mac_address() | ||||
| 
 | ||||
| of_get_mac_address() returns a "const void*" pointer to a MAC address. | ||||
| Lately, support to fetch the MAC address by an NVMEM provider was added. | ||||
| @@ -1,7 +1,7 @@ | ||||
| From f10843e04a075202dbb39dfcee047e3a2fdf5a8d Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Walle <michael@walle.cc> | ||||
| Date: Mon, 12 Apr 2021 19:47:18 +0200 | ||||
| Subject: of: net: fix of_get_mac_addr_nvmem() for non-platform devices | ||||
| Subject: [PATCH] of: net: fix of_get_mac_addr_nvmem() for non-platform devices | ||||
| 
 | ||||
| of_get_mac_address() already supports fetching the MAC address by an | ||||
| nvmem provider. But until now, it was just working for platform devices. | ||||
| @@ -0,0 +1,27 @@ | ||||
| From a065d5615fc83908ef21ed8159ffb63d816ff5de Mon Sep 17 00:00:00 2001 | ||||
| From: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> | ||||
| Date: Wed, 28 Jul 2021 16:42:27 +0200 | ||||
| Subject: [PATCH] of: unify of_count_phandle_with_args() arguments with | ||||
|  !CONFIG_OF | ||||
|  | ||||
| Unify the declaration of of_count_phandle_with_args() between enabled | ||||
| and disabled OF by making constifying pointed device_node. | ||||
|  | ||||
| Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> | ||||
| Reviewed-by: Rob Herring <robh@kernel.org> | ||||
| Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> | ||||
| --- | ||||
|  include/linux/of.h | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
|  | ||||
| --- a/include/linux/of.h | ||||
| +++ b/include/linux/of.h | ||||
| @@ -889,7 +889,7 @@ static inline int of_parse_phandle_with_ | ||||
|  	return -ENOSYS; | ||||
|  } | ||||
|   | ||||
| -static inline int of_count_phandle_with_args(struct device_node *np, | ||||
| +static inline int of_count_phandle_with_args(const struct device_node *np, | ||||
|  					     const char *list_name, | ||||
|  					     const char *cells_name) | ||||
|  { | ||||
| @@ -0,0 +1,359 @@ | ||||
| From 66a8f7f04979f4ad739085f01d99c8caf620b4f5 Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Walle <michael@walle.cc> | ||||
| Date: Tue, 18 Jan 2022 18:35:02 +0100 | ||||
| Subject: [PATCH] of: base: make small of_parse_phandle() variants static | ||||
|  inline | ||||
|  | ||||
| Make all the smaller variants of the of_parse_phandle() static inline. | ||||
| This also let us remove the empty function stubs if CONFIG_OF is not | ||||
| defined. | ||||
|  | ||||
| Suggested-by: Rob Herring <robh@kernel.org> | ||||
| Signed-off-by: Michael Walle <michael@walle.cc> | ||||
| [robh: move index < 0 check into __of_parse_phandle_with_args] | ||||
| Signed-off-by: Rob Herring <robh@kernel.org> | ||||
| Link: https://lore.kernel.org/r/20220118173504.2867523-2-michael@walle.cc | ||||
| --- | ||||
|  drivers/of/base.c  | 131 +++------------------------------------ | ||||
|  include/linux/of.h | 148 ++++++++++++++++++++++++++++++++++++--------- | ||||
|  2 files changed, 129 insertions(+), 150 deletions(-) | ||||
|  | ||||
| --- a/drivers/of/base.c | ||||
| +++ b/drivers/of/base.c | ||||
| @@ -1372,15 +1372,18 @@ int of_phandle_iterator_args(struct of_p | ||||
|  	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, int index, | ||||
| +				 struct of_phandle_args *out_args) | ||||
|  { | ||||
|  	struct of_phandle_iterator it; | ||||
|  	int rc, cur_index = 0; | ||||
|   | ||||
| +	if (index < 0) | ||||
| +		return -EINVAL; | ||||
| + | ||||
|  	/* Loop over the phandles until all the requested entry is found */ | ||||
|  	of_for_each_phandle(&it, rc, np, list_name, cells_name, cell_count) { | ||||
|  		/* | ||||
| @@ -1423,82 +1426,7 @@ static int __of_parse_phandle_with_args( | ||||
|  	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 | ||||
| @@ -1685,47 +1613,6 @@ free: | ||||
|  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 | ||||
|   * @list_name:	property name that contains a list | ||||
| --- a/include/linux/of.h | ||||
| +++ b/include/linux/of.h | ||||
| @@ -363,18 +363,12 @@ extern const struct of_device_id *of_mat | ||||
|  	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, | ||||
| +	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, | ||||
| -	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); | ||||
|   | ||||
| @@ -857,18 +851,12 @@ static inline int of_property_read_strin | ||||
|  	return -ENOSYS; | ||||
|  } | ||||
|   | ||||
| -static inline struct device_node *of_parse_phandle(const struct device_node *np, | ||||
| -						   const char *phandle_name, | ||||
| -						   int index) | ||||
| -{ | ||||
| -	return NULL; | ||||
| -} | ||||
| - | ||||
| -static inline 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) | ||||
| +static inline 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) | ||||
|  { | ||||
|  	return -ENOSYS; | ||||
|  } | ||||
| @@ -882,13 +870,6 @@ static inline int of_parse_phandle_with_ | ||||
|  	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) | ||||
| -{ | ||||
| -	return -ENOSYS; | ||||
| -} | ||||
| - | ||||
|  static inline int of_count_phandle_with_args(const struct device_node *np, | ||||
|  					     const char *list_name, | ||||
|  					     const char *cells_name) | ||||
| @@ -1065,6 +1046,117 @@ static inline bool of_node_is_type(const | ||||
|  } | ||||
|   | ||||
|  /** | ||||
| + * 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, | ||||
| +						   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, | ||||
| +					     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, | ||||
| +						   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_count_u8_elems - Count the number of u8 elements in a property | ||||
|   * | ||||
|   * @np:		device node from which the property value is to be read. | ||||
| @@ -0,0 +1,56 @@ | ||||
| From 8eddceb280f5deb8046fcb660de9f9f683b408b9 Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Walle <michael@walle.cc> | ||||
| Date: Tue, 6 Dec 2022 21:07:21 +0100 | ||||
| Subject: [PATCH] of: base: add of_parse_phandle_with_optional_args() | ||||
|  | ||||
| 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 <michael@walle.cc> | ||||
| Reviewed-by: Rob Herring <robh@kernel.org> | ||||
| Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | ||||
| --- | ||||
|  include/linux/of.h | 25 +++++++++++++++++++++++++ | ||||
|  1 file changed, 25 insertions(+) | ||||
|  | ||||
| --- a/include/linux/of.h | ||||
| +++ b/include/linux/of.h | ||||
| @@ -1157,6 +1157,31 @@ static inline int of_parse_phandle_with_ | ||||
|  } | ||||
|   | ||||
|  /** | ||||
| + * of_parse_phandle_with_optional_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) | ||||
| + * | ||||
| + * Same as of_parse_phandle_with_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, | ||||
| +						      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_count_u8_elems - Count the number of u8 elements in a property | ||||
|   * | ||||
|   * @np:		device node from which the property value is to be read. | ||||
| @@ -0,0 +1,32 @@ | ||||
| From 4f4145c9fee8c7a445dbbbadceccce5391e6b287 Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Walle <michael@walle.cc> | ||||
| Date: Tue, 6 Dec 2022 21:07:22 +0100 | ||||
| Subject: [PATCH] of: property: make #.*-cells optional for simple props | ||||
|  | ||||
| Sometimes, future bindings for phandles will get additional arguments. | ||||
| Thus the target node of the phandle will need a new #.*-cells property. | ||||
| To be backwards compatible, this needs to be optional. | ||||
|  | ||||
| Prepare the DEFINE_SIMPLE_PROPS() to handle the cells name as optional. | ||||
|  | ||||
| Signed-off-by: Michael Walle <michael@walle.cc> | ||||
| Tested-by: Miquel Raynal <miquel.raynal@bootlin.com> | ||||
| Reviewed-by: Rob Herring <robh@kernel.org> | ||||
| Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | ||||
| --- | ||||
|  drivers/of/property.c | 4 ++-- | ||||
|  1 file changed, 2 insertions(+), 2 deletions(-) | ||||
|  | ||||
| --- a/drivers/of/property.c | ||||
| +++ b/drivers/of/property.c | ||||
| @@ -1267,8 +1267,8 @@ static struct device_node *parse_suffix_ | ||||
|  	if (strcmp_suffix(prop_name, suffix)) | ||||
|  		return NULL; | ||||
|   | ||||
| -	if (of_parse_phandle_with_args(np, prop_name, cells_name, index, | ||||
| -				       &sup_args)) | ||||
| +	if (__of_parse_phandle_with_args(np, prop_name, cells_name, 0, index, | ||||
| +					 &sup_args)) | ||||
|  		return NULL; | ||||
|   | ||||
|  	return sup_args.np; | ||||
| @@ -0,0 +1,28 @@ | ||||
| From 9cf9486a6a7e8a3d76154d0c506051ba3740e8b6 Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Walle <michael@walle.cc> | ||||
| Date: Tue, 6 Dec 2022 21:07:23 +0100 | ||||
| Subject: [PATCH] of: property: add #nvmem-cell-cells property | ||||
|  | ||||
| Bindings describe the new '#nvmem-cell-cells' property. Now that the | ||||
| arguments count property is optional, we just add this property to the | ||||
| nvmem-cells. | ||||
|  | ||||
| Signed-off-by: Michael Walle <michael@walle.cc> | ||||
| Tested-by: Miquel Raynal <miquel.raynal@bootlin.com> | ||||
| Reviewed-by: Rob Herring <robh@kernel.org> | ||||
| Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | ||||
| --- | ||||
|  drivers/of/property.c | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
|  | ||||
| --- a/drivers/of/property.c | ||||
| +++ b/drivers/of/property.c | ||||
| @@ -1314,7 +1314,7 @@ DEFINE_SIMPLE_PROP(hwlocks, "hwlocks", " | ||||
|  DEFINE_SIMPLE_PROP(extcon, "extcon", NULL) | ||||
|  DEFINE_SIMPLE_PROP(interrupts_extended, "interrupts-extended", | ||||
|  					"#interrupt-cells") | ||||
| -DEFINE_SIMPLE_PROP(nvmem_cells, "nvmem-cells", NULL) | ||||
| +DEFINE_SIMPLE_PROP(nvmem_cells, "nvmem-cells", "#nvmem-cell-cells") | ||||
|  DEFINE_SIMPLE_PROP(phys, "phys", "#phy-cells") | ||||
|  DEFINE_SIMPLE_PROP(wakeup_parent, "wakeup-parent", NULL) | ||||
|  DEFINE_SIMPLE_PROP(pinctrl0, "pinctrl-0", NULL) | ||||
| @@ -0,0 +1,359 @@ | ||||
| From 66a8f7f04979f4ad739085f01d99c8caf620b4f5 Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Walle <michael@walle.cc> | ||||
| Date: Tue, 18 Jan 2022 18:35:02 +0100 | ||||
| Subject: [PATCH] of: base: make small of_parse_phandle() variants static | ||||
|  inline | ||||
|  | ||||
| Make all the smaller variants of the of_parse_phandle() static inline. | ||||
| This also let us remove the empty function stubs if CONFIG_OF is not | ||||
| defined. | ||||
|  | ||||
| Suggested-by: Rob Herring <robh@kernel.org> | ||||
| Signed-off-by: Michael Walle <michael@walle.cc> | ||||
| [robh: move index < 0 check into __of_parse_phandle_with_args] | ||||
| Signed-off-by: Rob Herring <robh@kernel.org> | ||||
| Link: https://lore.kernel.org/r/20220118173504.2867523-2-michael@walle.cc | ||||
| --- | ||||
|  drivers/of/base.c  | 131 +++------------------------------------ | ||||
|  include/linux/of.h | 148 ++++++++++++++++++++++++++++++++++++--------- | ||||
|  2 files changed, 129 insertions(+), 150 deletions(-) | ||||
|  | ||||
| --- a/drivers/of/base.c | ||||
| +++ b/drivers/of/base.c | ||||
| @@ -1371,15 +1371,18 @@ int of_phandle_iterator_args(struct of_p | ||||
|  	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, int index, | ||||
| +				 struct of_phandle_args *out_args) | ||||
|  { | ||||
|  	struct of_phandle_iterator it; | ||||
|  	int rc, cur_index = 0; | ||||
|   | ||||
| +	if (index < 0) | ||||
| +		return -EINVAL; | ||||
| + | ||||
|  	/* Loop over the phandles until all the requested entry is found */ | ||||
|  	of_for_each_phandle(&it, rc, np, list_name, cells_name, cell_count) { | ||||
|  		/* | ||||
| @@ -1422,82 +1425,7 @@ static int __of_parse_phandle_with_args( | ||||
|  	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 | ||||
| @@ -1684,47 +1612,6 @@ free: | ||||
|  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 | ||||
|   * @list_name:	property name that contains a list | ||||
| --- a/include/linux/of.h | ||||
| +++ b/include/linux/of.h | ||||
| @@ -363,18 +363,12 @@ extern const struct of_device_id *of_mat | ||||
|  	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, | ||||
| +	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, | ||||
| -	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); | ||||
|   | ||||
| @@ -864,18 +858,12 @@ static inline int of_property_read_strin | ||||
|  	return -ENOSYS; | ||||
|  } | ||||
|   | ||||
| -static inline struct device_node *of_parse_phandle(const struct device_node *np, | ||||
| -						   const char *phandle_name, | ||||
| -						   int index) | ||||
| -{ | ||||
| -	return NULL; | ||||
| -} | ||||
| - | ||||
| -static inline 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) | ||||
| +static inline 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) | ||||
|  { | ||||
|  	return -ENOSYS; | ||||
|  } | ||||
| @@ -889,13 +877,6 @@ static inline int of_parse_phandle_with_ | ||||
|  	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) | ||||
| -{ | ||||
| -	return -ENOSYS; | ||||
| -} | ||||
| - | ||||
|  static inline int of_count_phandle_with_args(const struct device_node *np, | ||||
|  					     const char *list_name, | ||||
|  					     const char *cells_name) | ||||
| @@ -1077,6 +1058,117 @@ static inline bool of_node_is_type(const | ||||
|  } | ||||
|   | ||||
|  /** | ||||
| + * 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, | ||||
| +						   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, | ||||
| +					     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, | ||||
| +						   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_count_u8_elems - Count the number of u8 elements in a property | ||||
|   * | ||||
|   * @np:		device node from which the property value is to be read. | ||||
| @@ -0,0 +1,56 @@ | ||||
| From 8eddceb280f5deb8046fcb660de9f9f683b408b9 Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Walle <michael@walle.cc> | ||||
| Date: Tue, 6 Dec 2022 21:07:21 +0100 | ||||
| Subject: [PATCH] of: base: add of_parse_phandle_with_optional_args() | ||||
|  | ||||
| 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 <michael@walle.cc> | ||||
| Reviewed-by: Rob Herring <robh@kernel.org> | ||||
| Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | ||||
| --- | ||||
|  include/linux/of.h | 25 +++++++++++++++++++++++++ | ||||
|  1 file changed, 25 insertions(+) | ||||
|  | ||||
| --- a/include/linux/of.h | ||||
| +++ b/include/linux/of.h | ||||
| @@ -1169,6 +1169,31 @@ static inline int of_parse_phandle_with_ | ||||
|  } | ||||
|   | ||||
|  /** | ||||
| + * of_parse_phandle_with_optional_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) | ||||
| + * | ||||
| + * Same as of_parse_phandle_with_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, | ||||
| +						      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_count_u8_elems - Count the number of u8 elements in a property | ||||
|   * | ||||
|   * @np:		device node from which the property value is to be read. | ||||
| @@ -0,0 +1,32 @@ | ||||
| From 4f4145c9fee8c7a445dbbbadceccce5391e6b287 Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Walle <michael@walle.cc> | ||||
| Date: Tue, 6 Dec 2022 21:07:22 +0100 | ||||
| Subject: [PATCH] of: property: make #.*-cells optional for simple props | ||||
|  | ||||
| Sometimes, future bindings for phandles will get additional arguments. | ||||
| Thus the target node of the phandle will need a new #.*-cells property. | ||||
| To be backwards compatible, this needs to be optional. | ||||
|  | ||||
| Prepare the DEFINE_SIMPLE_PROPS() to handle the cells name as optional. | ||||
|  | ||||
| Signed-off-by: Michael Walle <michael@walle.cc> | ||||
| Tested-by: Miquel Raynal <miquel.raynal@bootlin.com> | ||||
| Reviewed-by: Rob Herring <robh@kernel.org> | ||||
| Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | ||||
| --- | ||||
|  drivers/of/property.c | 4 ++-- | ||||
|  1 file changed, 2 insertions(+), 2 deletions(-) | ||||
|  | ||||
| --- a/drivers/of/property.c | ||||
| +++ b/drivers/of/property.c | ||||
| @@ -1227,8 +1227,8 @@ static struct device_node *parse_suffix_ | ||||
|  	if (strcmp_suffix(prop_name, suffix)) | ||||
|  		return NULL; | ||||
|   | ||||
| -	if (of_parse_phandle_with_args(np, prop_name, cells_name, index, | ||||
| -				       &sup_args)) | ||||
| +	if (__of_parse_phandle_with_args(np, prop_name, cells_name, 0, index, | ||||
| +					 &sup_args)) | ||||
|  		return NULL; | ||||
|   | ||||
|  	return sup_args.np; | ||||
| @@ -0,0 +1,28 @@ | ||||
| From 9cf9486a6a7e8a3d76154d0c506051ba3740e8b6 Mon Sep 17 00:00:00 2001 | ||||
| From: Michael Walle <michael@walle.cc> | ||||
| Date: Tue, 6 Dec 2022 21:07:23 +0100 | ||||
| Subject: [PATCH] of: property: add #nvmem-cell-cells property | ||||
|  | ||||
| Bindings describe the new '#nvmem-cell-cells' property. Now that the | ||||
| arguments count property is optional, we just add this property to the | ||||
| nvmem-cells. | ||||
|  | ||||
| Signed-off-by: Michael Walle <michael@walle.cc> | ||||
| Tested-by: Miquel Raynal <miquel.raynal@bootlin.com> | ||||
| Reviewed-by: Rob Herring <robh@kernel.org> | ||||
| Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | ||||
| --- | ||||
|  drivers/of/property.c | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
|  | ||||
| --- a/drivers/of/property.c | ||||
| +++ b/drivers/of/property.c | ||||
| @@ -1276,7 +1276,7 @@ DEFINE_SIMPLE_PROP(dmas, "dmas", "#dma-c | ||||
|  DEFINE_SIMPLE_PROP(power_domains, "power-domains", "#power-domain-cells") | ||||
|  DEFINE_SIMPLE_PROP(hwlocks, "hwlocks", "#hwlock-cells") | ||||
|  DEFINE_SIMPLE_PROP(extcon, "extcon", NULL) | ||||
| -DEFINE_SIMPLE_PROP(nvmem_cells, "nvmem-cells", NULL) | ||||
| +DEFINE_SIMPLE_PROP(nvmem_cells, "nvmem-cells", "#nvmem-cell-cells") | ||||
|  DEFINE_SIMPLE_PROP(phys, "phys", "#phy-cells") | ||||
|  DEFINE_SIMPLE_PROP(wakeup_parent, "wakeup-parent", NULL) | ||||
|  DEFINE_SIMPLE_PROP(pinctrl0, "pinctrl-0", NULL) | ||||
| @@ -16,7 +16,7 @@ SVN-Revision: 36780 | ||||
|  | ||||
| --- a/drivers/of/fdt.c | ||||
| +++ b/drivers/of/fdt.c | ||||
| @@ -1055,6 +1055,9 @@ int __init early_init_dt_scan_chosen(uns | ||||
| @@ -1054,6 +1054,9 @@ int __init early_init_dt_scan_chosen(uns | ||||
|  	p = of_get_flat_dt_prop(node, "bootargs", &l); | ||||
|  	if (p != NULL && l > 0) | ||||
|  		strlcpy(data, p, min(l, COMMAND_LINE_SIZE)); | ||||
|   | ||||
| @@ -17,7 +17,7 @@ | ||||
|  	default "" | ||||
| --- a/drivers/of/fdt.c | ||||
| +++ b/drivers/of/fdt.c | ||||
| @@ -1059,6 +1059,17 @@ int __init early_init_dt_scan_chosen(uns | ||||
| @@ -1058,6 +1058,17 @@ int __init early_init_dt_scan_chosen(uns | ||||
|  	if (p != NULL && l > 0) | ||||
|  		strlcat(data, p, min_t(int, strlen(data) + (int)l, COMMAND_LINE_SIZE)); | ||||
|   | ||||
|   | ||||
| @@ -17,7 +17,7 @@ | ||||
|  	help | ||||
| --- a/drivers/of/fdt.c | ||||
| +++ b/drivers/of/fdt.c | ||||
| @@ -1059,6 +1059,17 @@ int __init early_init_dt_scan_chosen(uns | ||||
| @@ -1058,6 +1058,17 @@ int __init early_init_dt_scan_chosen(uns | ||||
|  	if (p != NULL && l > 0) | ||||
|  		strlcat(data, p, min_t(int, strlen(data) + (int)l, COMMAND_LINE_SIZE)); | ||||
|   | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Rafał Miłecki
					Rafał Miłecki