[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <70e630b8-e577-a148-0179-61aedf910c09@arm.com>
Date: Tue, 30 May 2023 11:31:34 +0200
From: Dietmar Eggemann <dietmar.eggemann@....com>
To: Lukasz Luba <lukasz.luba@....com>, linux-kernel@...r.kernel.org,
linux-pm@...r.kernel.org, rafael@...nel.org
Cc: rui.zhang@...el.com, amit.kucheria@...durent.com,
amit.kachhap@...il.com, daniel.lezcano@...aro.org,
viresh.kumar@...aro.org, len.brown@...el.com, pavel@....cz,
Pierre.Gondois@....com, ionela.voinescu@....com,
rostedt@...dmis.org, mhiramat@...nel.org
Subject: Re: [PATCH v2 06/17] PM: EM: Add update_power() callback for runtime
modifications
On 12/05/2023 11:57, Lukasz Luba wrote:
> The Energy Model (EM) is going to support runtime modifications. This
> new callback would be used in the upcoming EM changes. The drivers
> or frameworks which want to modify the EM have to implement the
> update_power() callback and provide it via EM API
> em_dev_update_perf_domain(). The callback is then used by the EM
> framework to get new power values for each frequency in existing EM.
Do we have any numbers or feedback that the chosen design (i.e. update
per performance state through update_power()) is performant enough for
the anticipated use case on real devices?
> Signed-off-by: Lukasz Luba <lukasz.luba@....com>
> ---
> include/linux/energy_model.h | 21 +++++++++++++++++++++
> 1 file changed, 21 insertions(+)
>
> diff --git a/include/linux/energy_model.h b/include/linux/energy_model.h
> index 8069f526c9d8..cc2bf607191e 100644
> --- a/include/linux/energy_model.h
> +++ b/include/linux/energy_model.h
> @@ -158,6 +158,26 @@ struct em_data_callback {
> */
> int (*get_cost)(struct device *dev, unsigned long freq,
> unsigned long *cost);
> +
> + /**
> + * update_power() - Provide new power at the given performance state of
> + * a device
> + * @dev : Device for which we do this operation (can be a CPU)
> + * @freq : Frequency at the performance state in kHz
> + * @power : New power value at the performance state
> + * (modified)
> + * @priv : Pointer to private data useful for tracking context
> + * during run-time modifications of EM.
> + *
> + * The update_power() is used by run-time modifiable EM. It aims to
> + * provide updated power value for a given frequency, which is stored
> + * in the performance state. The power value provided by this callback
> + * should fit in the [0, EM_MAX_POWER] range.
> + *
> + * Return 0 on success, or appropriate error value in case of failure.
> + */
> + int (*update_power)(struct device *dev, unsigned long freq,
> + unsigned long *power, void *priv);
> };
> #define EM_SET_ACTIVE_POWER_CB(em_cb, cb) ((em_cb).active_power = cb)
> #define EM_ADV_DATA_CB(_active_power_cb, _cost_cb) \
> @@ -165,6 +185,7 @@ struct em_data_callback {
> .get_cost = _cost_cb }
> #define EM_DATA_CB(_active_power_cb) \
> EM_ADV_DATA_CB(_active_power_cb, NULL)
> +#define EM_UPDATE_CB(_update_power_cb) { .update_power = &_update_power_cb }
>
> struct em_perf_domain *em_cpu_get(int cpu);
> struct em_perf_domain *em_pd_get(struct device *dev);
Powered by blists - more mailing lists