diff mbox series

[v5,6/7] regulator: set Power State Change Reason before hw_protection_shutdown()

Message ID 20250310103732.423542-7-o.rempel@pengutronix.de
State New
Headers show
Series [v5,1/7] power: Extend power_on_reason.h for upcoming PSCRR framework | expand

Commit Message

Oleksij Rempel March 10, 2025, 10:37 a.m. UTC
Store the state change reason to some black box, for later
investigation.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Mark Brown <broonie@kernel.org>
---
 drivers/regulator/core.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

kernel test robot March 18, 2025, 12:36 p.m. UTC | #1
Hi Oleksij,

kernel test robot noticed the following build errors:

[auto build test ERROR on sre-power-supply/for-next]
[also build test ERROR on broonie-regulator/for-next rafael-pm/thermal linus/master v6.14-rc7]
[cannot apply to next-20250317]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Oleksij-Rempel/power-Extend-power_on_reason-h-for-upcoming-PSCRR-framework/20250310-184319
base:   https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
patch link:    https://lore.kernel.org/r/20250310103732.423542-7-o.rempel%40pengutronix.de
patch subject: [PATCH v5 6/7] regulator: set Power State Change Reason before hw_protection_shutdown()
config: m68k-randconfig-r073-20250314 (https://download.01.org/0day-ci/archive/20250318/202503182046.kOuLXxTn-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250318/202503182046.kOuLXxTn-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503182046.kOuLXxTn-lkp@intel.com/

All errors (new ones prefixed by >>):

   m68k-linux-ld: drivers/regulator/core.o: in function `regulator_handle_critical':
>> drivers/regulator/core.c:5270:(.text+0x20c6): undefined reference to `set_power_state_change_reason'


vim +5270 drivers/regulator/core.c

  5234	
  5235	/**
  5236	 * regulator_handle_critical - Handle events for system-critical regulators.
  5237	 * @rdev: The regulator device.
  5238	 * @event: The event being handled.
  5239	 *
  5240	 * This function handles critical events such as under-voltage, over-current,
  5241	 * and unknown errors for regulators deemed system-critical. On detecting such
  5242	 * events, it triggers a hardware protection shutdown with a defined timeout.
  5243	 */
  5244	static void regulator_handle_critical(struct regulator_dev *rdev,
  5245					      unsigned long event)
  5246	{
  5247		enum pscr_reason pscr;
  5248		const char *reason = NULL;
  5249	
  5250		if (!rdev->constraints->system_critical)
  5251			return;
  5252	
  5253		switch (event) {
  5254		case REGULATOR_EVENT_UNDER_VOLTAGE:
  5255			reason = "System critical regulator: voltage drop detected";
  5256			pscr = PSCR_UNDER_VOLTAGE;
  5257			break;
  5258		case REGULATOR_EVENT_OVER_CURRENT:
  5259			reason = "System critical regulator: over-current detected";
  5260			pscr = PSCR_OVER_CURRENT;
  5261			break;
  5262		case REGULATOR_EVENT_FAIL:
  5263			reason = "System critical regulator: unknown error";
  5264			pscr = PSCR_REGULATOR_FAILURE;
  5265		}
  5266	
  5267		if (!reason)
  5268			return;
  5269	
> 5270		set_power_state_change_reason(pscr);
  5271		hw_protection_shutdown(reason,
  5272				       rdev->constraints->uv_less_critical_window_ms);
  5273	}
  5274
diff mbox series

Patch

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 4ddf0efead68..7ccadc7e6d04 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -19,6 +19,7 @@ 
 #include <linux/delay.h>
 #include <linux/gpio/consumer.h>
 #include <linux/of.h>
+#include <linux/pscrr.h>
 #include <linux/reboot.h>
 #include <linux/regmap.h>
 #include <linux/regulator/of_regulator.h>
@@ -5243,6 +5244,7 @@  EXPORT_SYMBOL_GPL(regulator_bulk_free);
 static void regulator_handle_critical(struct regulator_dev *rdev,
 				      unsigned long event)
 {
+	enum pscr_reason pscr;
 	const char *reason = NULL;
 
 	if (!rdev->constraints->system_critical)
@@ -5251,17 +5253,21 @@  static void regulator_handle_critical(struct regulator_dev *rdev,
 	switch (event) {
 	case REGULATOR_EVENT_UNDER_VOLTAGE:
 		reason = "System critical regulator: voltage drop detected";
+		pscr = PSCR_UNDER_VOLTAGE;
 		break;
 	case REGULATOR_EVENT_OVER_CURRENT:
 		reason = "System critical regulator: over-current detected";
+		pscr = PSCR_OVER_CURRENT;
 		break;
 	case REGULATOR_EVENT_FAIL:
 		reason = "System critical regulator: unknown error";
+		pscr = PSCR_REGULATOR_FAILURE;
 	}
 
 	if (!reason)
 		return;
 
+	set_power_state_change_reason(pscr);
 	hw_protection_shutdown(reason,
 			       rdev->constraints->uv_less_critical_window_ms);
 }