mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Lukasz Luba <lukasz.luba@arm.com>
To: Daniel Lezcano <daniel.lezcano@linexp.org>, daniel.lezcano@linaro.org
Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	khilman@baylibre.com, abailon@baylibre.com,
	Amit Kucheria <amitk@kernel.org>, Zhang Rui <rui.zhang@intel.com>,
	rafael@kernel.org
Subject: Re: [PATCH v3 02/12] thermal/of: Replace device node match with device node search
Date: Mon, 4 Jul 2022 08:59:25 +0100	[thread overview]
Message-ID: <180b55da-9ed2-baba-27b0-fba354a9ecd2@arm.com> (raw)
In-Reply-To: <20220703183059.4133659-3-daniel.lezcano@linexp.org>



On 7/3/22 19:30, Daniel Lezcano wrote:
> The thermal_of code builds a trip array associated with the node
> pointer in order to compare the trip point phandle with the list.
> 
> The thermal trip is a thermal zone property and should be moved
> there. If some sensors have hardcoded trip points, they should use the
> exported structure instead of redefining again and again their own
> structure and data to describe exactly the same things.
> 
> In order to move this to the thermal.h header and allow more cleanup,
> we need to remove the node pointer from the structure.
> 
> Instead of building storing the device node, we search directly in the
> device tree the corresponding node. That results in a simplification
> of the code and allows to move the structure to thermal.h
> 
> Cc: Alexandre Bailon <abailon@baylibre.com>
> Cc: Kevin Hilman <khilman@baylibre.com>
> Cc; Eduardo Valentin <eduval@amazon.com>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
> ---
>   drivers/thermal/thermal_of.c | 62 ++++++++++++++++++++++++------------
>   1 file changed, 42 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c
> index b65d435cb92f..04c910ca8623 100644
> --- a/drivers/thermal/thermal_of.c
> +++ b/drivers/thermal/thermal_of.c
> @@ -671,6 +671,35 @@ EXPORT_SYMBOL_GPL(devm_thermal_zone_of_sensor_unregister);
>   
>   /***   functions parsing device tree nodes   ***/
>   
> +static int of_find_trip_id(struct device_node *np, struct device_node *trip)
> +{
> +	struct device_node *trips;
> +	struct device_node *t;
> +	int i = 0;
> +
> +	trips = of_get_child_by_name(np, "trips");
> +	if (!trips) {
> +		pr_err("Failed to find 'trips' node\n");
> +		return -EINVAL;
> +	}
> +
> +	/*
> +	 * Find the trip id point associated with the cooling device map
> +	 */
> +	for_each_child_of_node(trips, t) {
> +
> +		if (t == trip)
> +			goto out;
> +		i++;
> +	}
> +
> +	i = -ENXIO;
> +out:	
> +	of_node_put(trips);
> +
> +	return i;
> +}
> +
>   /**
>    * thermal_of_populate_bind_params - parse and fill cooling map data
>    * @np: DT node containing a cooling-map node
> @@ -686,14 +715,13 @@ EXPORT_SYMBOL_GPL(devm_thermal_zone_of_sensor_unregister);
>    * Return: 0 on success, proper error code otherwise
>    */
>   static int thermal_of_populate_bind_params(struct device_node *np,
> -					   struct __thermal_bind_params *__tbp,
> -					   struct thermal_trip *trips,
> -					   int ntrips)
> +					   struct __thermal_bind_params *__tbp)
>   {
>   	struct of_phandle_args cooling_spec;
>   	struct __thermal_cooling_bind_param *__tcbp;
>   	struct device_node *trip;
>   	int ret, i, count;
> +	int trip_id;
>   	u32 prop;
>   
>   	/* Default weight. Usage is optional */
> @@ -708,18 +736,14 @@ static int thermal_of_populate_bind_params(struct device_node *np,
>   		return -ENODEV;
>   	}
>   
> -	/* match using device_node */
> -	for (i = 0; i < ntrips; i++)
> -		if (trip == trips[i].np) {
> -			__tbp->trip_id = i;
> -			break;
> -		}
> -
> -	if (i == ntrips) {
> -		ret = -ENODEV;
> +	trip_id = of_find_trip_id(np, trip);
> +	if (trip_id < 0) {
> +		ret = trip_id;
>   		goto end;
>   	}
>   
> +	__tbp->trip_id = trip_id;
> +	
>   	count = of_count_phandle_with_args(np, "cooling-device",
>   					   "#cooling-cells");
>   	if (count <= 0) {
> @@ -868,6 +892,7 @@ static struct __thermal_zone
>   __init *thermal_of_build_thermal_zone(struct device_node *np)
>   {
>   	struct device_node *child = NULL, *gchild;
> +	struct device_node *trips;
>   	struct __thermal_zone *tz;
>   	int ret, i;
>   	u32 prop, coef[2];
> @@ -910,13 +935,13 @@ __init *thermal_of_build_thermal_zone(struct device_node *np)
>   	}
>   
>   	/* trips */
> -	child = of_get_child_by_name(np, "trips");
> +	trips = of_get_child_by_name(np, "trips");
>   
>   	/* No trips provided */
> -	if (!child)
> +	if (!trips)
>   		goto finish;
>   
> -	tz->ntrips = of_get_child_count(child);
> +	tz->ntrips = of_get_child_count(trips);
>   	if (tz->ntrips == 0) /* must have at least one child */
>   		goto finish;
>   
> @@ -927,14 +952,12 @@ __init *thermal_of_build_thermal_zone(struct device_node *np)
>   	}
>   
>   	i = 0;
> -	for_each_child_of_node(child, gchild) {
> +	for_each_child_of_node(trips, gchild) {
>   		ret = thermal_of_populate_trip(gchild, &tz->trips[i++]);
>   		if (ret)
>   			goto free_trips;
>   	}
>   
> -	of_node_put(child);
> -

It's probably needed to put the 'trips' here, isn't it?
Or at the end in 'free_trips'.


>   	/* cooling-maps */
>   	child = of_get_child_by_name(np, "cooling-maps");
>   
> @@ -954,8 +977,7 @@ __init *thermal_of_build_thermal_zone(struct device_node *np)
>   
>   	i = 0;
>   	for_each_child_of_node(child, gchild) {
> -		ret = thermal_of_populate_bind_params(gchild, &tz->tbps[i++],
> -						      tz->trips, tz->ntrips);
> +		ret = thermal_of_populate_bind_params(gchild, &tz->tbps[i++]);
>   		if (ret)
>   			goto free_tbps;
>   	}

  reply	other threads:[~2022-07-04  7:59 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-03 18:30 [PATCH v3 00/12] thermal OF rework Daniel Lezcano
2022-07-03 18:30 ` [PATCH v3 01/12] thermal/core: Remove duplicate information when an error occurs Daniel Lezcano
2022-07-04  7:38   ` Lukasz Luba
2022-07-03 18:30 ` [PATCH v3 02/12] thermal/of: Replace device node match with device node search Daniel Lezcano
2022-07-04  7:59   ` Lukasz Luba [this message]
2022-07-04 21:18     ` Daniel Lezcano
2022-07-03 18:30 ` [PATCH v3 03/12] thermal/of: Remove the device node pointer for thermal_trip Daniel Lezcano
2022-07-04  8:01   ` Lukasz Luba
2022-07-03 18:30 ` [PATCH v3 04/12] thermal/of: Move thermal_trip structure to thermal.h Daniel Lezcano
2022-07-04  8:04   ` Lukasz Luba
2022-07-03 18:30 ` [PATCH v3 05/12] thermal/core: Remove unneeded EXPORT_SYMBOLS Daniel Lezcano
2022-07-04  7:35   ` Lukasz Luba
2022-07-04 21:14     ` Daniel Lezcano
2022-07-05  7:30       ` Lukasz Luba
2022-07-05 14:20         ` Rafael J. Wysocki
2022-07-05 14:47           ` Lukasz Luba
2022-07-05 16:26       ` Todd Kjos
2022-07-03 18:30 ` [PATCH v3 06/12] thermal/core: Move thermal_set_delay_jiffies to static Daniel Lezcano
2022-07-04  8:05   ` Lukasz Luba
2022-07-03 18:30 ` [PATCH v3 07/12] thermal/core: Rename trips to ntrips Daniel Lezcano
2022-07-04  8:24   ` Lukasz Luba
2022-07-04 14:17     ` Zhang Rui
2022-07-04 21:19     ` Daniel Lezcano
2022-07-03 18:30 ` [PATCH v3 08/12] thermal/core: Add thermal_trip in thermal_zone Daniel Lezcano
2022-07-04  8:35   ` Lukasz Luba
2022-07-04 14:11   ` Zhang Rui
2022-07-04 21:20     ` Daniel Lezcano
2022-07-03 18:30 ` [PATCH v3 09/12] thermal/core: Register with the trip points Daniel Lezcano
2022-07-04  8:32   ` Lukasz Luba
2022-07-05  2:03   ` Zhang Rui
2022-07-05 13:59     ` Rafael J. Wysocki
2022-07-03 18:30 ` [PATCH v3 10/12] thermal/of: Store the trips in the thermal zone Daniel Lezcano
2022-07-04  8:38   ` Lukasz Luba
2022-07-03 18:30 ` [PATCH v3 11/12] thermal/of: Use thermal trips stored " Daniel Lezcano
2022-07-04 14:14   ` Zhang Rui
2022-07-04 21:24     ` Daniel Lezcano
2022-07-05  1:20       ` Zhang Rui
2022-07-05  6:44         ` Daniel Lezcano
2022-07-05  8:17           ` Zhang Rui
2022-07-03 18:30 ` [PATCH v3 12/12] thermal/of: Initialize trip points separately Daniel Lezcano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=180b55da-9ed2-baba-27b0-fba354a9ecd2@arm.com \
    --to=lukasz.luba@arm.com \
    --cc=abailon@baylibre.com \
    --cc=amitk@kernel.org \
    --cc=daniel.lezcano@linaro.org \
    --cc=daniel.lezcano@linexp.org \
    --cc=khilman@baylibre.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rafael@kernel.org \
    --cc=rui.zhang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®