[PATCH RFC net-next v2 11/18] regulator: Add support for power budget description

Kory Maincent posted 18 patches 3 weeks, 4 days ago
There is a newer version of this series
[PATCH RFC net-next v2 11/18] regulator: Add support for power budget description
Posted by Kory Maincent 3 weeks, 4 days ago
From: Kory Maincent (Dent Project) <kory.maincent@bootlin.com>

In preparation for future support of PSE port priority and power
management, we need the power budget value of the power supply.
This addition allows the regulator to track the available power
capacity, which will be essential for prioritizing ports when
making power allocation decisions.

Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
---

Changes in v2:
- new patch.
---
 drivers/regulator/core.c           | 11 +++++++++++
 drivers/regulator/of_regulator.c   |  3 +++
 include/linux/regulator/consumer.h |  6 ++++++
 include/linux/regulator/machine.h  |  2 ++
 4 files changed, 22 insertions(+)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 1179766811f5..cd7b26f77a8e 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -4622,6 +4622,17 @@ int regulator_get_current_limit(struct regulator *regulator)
 }
 EXPORT_SYMBOL_GPL(regulator_get_current_limit);
 
+/**
+ * regulator_get_power_budget - get regulator total power budget
+ * @regulator: regulator source
+ *
+ * Return: Power budget of the regulator in mW.
+ */
+int regulator_get_power_budget(struct regulator *regulator)
+{
+	return regulator->rdev->constraints->pw_budget;
+}
+
 /**
  * regulator_set_mode - set regulator operating mode
  * @regulator: regulator source
diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c
index 3f490d81abc2..a8996e7597d4 100644
--- a/drivers/regulator/of_regulator.c
+++ b/drivers/regulator/of_regulator.c
@@ -125,6 +125,9 @@ static int of_get_regulation_constraints(struct device *dev,
 	if (constraints->min_uA != constraints->max_uA)
 		constraints->valid_ops_mask |= REGULATOR_CHANGE_CURRENT;
 
+	if (!of_property_read_u32(np, "regulator-power-budget", &pval))
+		constraints->pw_budget = pval;
+
 	constraints->boot_on = of_property_read_bool(np, "regulator-boot-on");
 	constraints->always_on = of_property_read_bool(np, "regulator-always-on");
 	if (!constraints->always_on) /* status change should be possible. */
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h
index b9ce521910a0..3e75d49d361f 100644
--- a/include/linux/regulator/consumer.h
+++ b/include/linux/regulator/consumer.h
@@ -235,6 +235,7 @@ int regulator_sync_voltage(struct regulator *regulator);
 int regulator_set_current_limit(struct regulator *regulator,
 			       int min_uA, int max_uA);
 int regulator_get_current_limit(struct regulator *regulator);
+int regulator_get_power_budget(struct regulator *regulator);
 
 int regulator_set_mode(struct regulator *regulator, unsigned int mode);
 unsigned int regulator_get_mode(struct regulator *regulator);
@@ -534,6 +535,11 @@ static inline int regulator_get_current_limit(struct regulator *regulator)
 	return 0;
 }
 
+static inline int regulator_get_power_budget(struct regulator *regulator)
+{
+	return 0;
+}
+
 static inline int regulator_set_mode(struct regulator *regulator,
 	unsigned int mode)
 {
diff --git a/include/linux/regulator/machine.h b/include/linux/regulator/machine.h
index 0cd76d264727..3304cf8773b7 100644
--- a/include/linux/regulator/machine.h
+++ b/include/linux/regulator/machine.h
@@ -113,6 +113,7 @@ struct notification_limit {
  * @min_uA: Smallest current consumers may set.
  * @max_uA: Largest current consumers may set.
  * @ilim_uA: Maximum input current.
+ * @pw_budget: Power budget for the regulator in mW.
  * @system_load: Load that isn't captured by any consumer requests.
  *
  * @over_curr_limits:		Limits for acting on over current.
@@ -185,6 +186,7 @@ struct regulation_constraints {
 	int max_uA;
 	int ilim_uA;
 
+	int pw_budget;
 	int system_load;
 
 	/* used for coupled regulators */

-- 
2.34.1
Re: [PATCH RFC net-next v2 11/18] regulator: Add support for power budget description
Posted by Mark Brown 3 weeks, 4 days ago
On Wed, Oct 30, 2024 at 05:53:13PM +0100, Kory Maincent wrote:

> +/**
> + * regulator_get_power_budget - get regulator total power budget
> + * @regulator: regulator source
> + *
> + * Return: Power budget of the regulator in mW.
> + */
> +int regulator_get_power_budget(struct regulator *regulator)
> +{
> +	return regulator->rdev->constraints->pw_budget;
> +}

This is going to go badly with multiple consumers...

> +static inline int regulator_get_power_budget(struct regulator *regulator)
> +{
> +	return 0;
> +}

We should probably default to INT_MAX here and in the case where we do
have support, that way consumers will fail gracefully when no budget is
specified.
Re: [PATCH RFC net-next v2 11/18] regulator: Add support for power budget description
Posted by Kory Maincent 3 weeks, 4 days ago
On Wed, 30 Oct 2024 17:03:06 +0000
Mark Brown <broonie@kernel.org> wrote:

> On Wed, Oct 30, 2024 at 05:53:13PM +0100, Kory Maincent wrote:
> 
> > +/**
> > + * regulator_get_power_budget - get regulator total power budget
> > + * @regulator: regulator source
> > + *
> > + * Return: Power budget of the regulator in mW.
> > + */
> > +int regulator_get_power_budget(struct regulator *regulator)
> > +{
> > +	return regulator->rdev->constraints->pw_budget;
> > +}  
> 
> This is going to go badly with multiple consumers...

On my series the available power budget of the PIs (which are consumers) is
managed in the PSE core in the PSE power domain (patch 13). We could move it
directly to regulator API.

> > +static inline int regulator_get_power_budget(struct regulator *regulator)
> > +{
> > +	return 0;
> > +}  
> 
> We should probably default to INT_MAX here and in the case where we do
> have support, that way consumers will fail gracefully when no budget is
> specified.

That's true. Thanks!

Regards,
-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com
Re: [PATCH RFC net-next v2 11/18] regulator: Add support for power budget description
Posted by Mark Brown 3 weeks, 4 days ago
On Wed, Oct 30, 2024 at 06:22:11PM +0100, Kory Maincent wrote:
> Mark Brown <broonie@kernel.org> wrote:
> > On Wed, Oct 30, 2024 at 05:53:13PM +0100, Kory Maincent wrote:

> > > +int regulator_get_power_budget(struct regulator *regulator)
> > > +{
> > > +	return regulator->rdev->constraints->pw_budget;
> > > +}  

> > This is going to go badly with multiple consumers...

> On my series the available power budget of the PIs (which are consumers) is
> managed in the PSE core in the PSE power domain (patch 13). We could move it
> directly to regulator API.

It feels like it's going to need joining up at some point.