linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] Add consumers for pm_pr_debug() outside of pm
@ 2023-05-18 17:27 Mario Limonciello
  2023-05-18 17:27 ` [PATCH 1/4] include/linux/suspend.h: Only show pm_pr_dbg messages at suspend/resume Mario Limonciello
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Mario Limonciello @ 2023-05-18 17:27 UTC (permalink / raw)
  To: rafael, hdegoede, linus.walleij
  Cc: linux-acpi, linux-kernel, linux-gpio, platform-driver-x86,
	linux-pm, Shyam-sundar.S-k, Basavaraj.Natikar, Mario Limonciello

The amd-pmc and pinctrl-amd drivers have messages that are generally
useful for debugging power or wakeup issues, but users need to know to
turn on dynamic debug to get them.

Add support for using the pm_pr_debug() macro outside of pm code so
that other drivers can use it to show messages when a user turns on
`/sys/power/pm_debug_messages`.

NOTE: There aren't hard dependencies that would make this apply to a
single tree, but the pinctrl-amd message is in an IRQ handler.
It shouldn't be applied unless the changes to the macro are included.

Mario Limonciello (4):
  include/linux/suspend.h: Only show pm_pr_dbg messages at
    suspend/resume
  ACPI: x86: Add pm_debug_messages for LPS0 _DSM state tracking
  pinctrl: amd: Use pm_pr_dbg to show debugging messages
  platform/x86/amd: pmc: Use pm_pr_dbg() for suspend related messages

 drivers/acpi/x86/s2idle.c      | 52 ++++++++++++++++++++++++++++++----
 drivers/pinctrl/pinctrl-amd.c  |  6 ++--
 drivers/platform/x86/amd/pmc.c |  4 +--
 include/linux/suspend.h        |  6 ++--
 4 files changed, 55 insertions(+), 13 deletions(-)


base-commit: dac0c6388ff86af74dc6f4dd6e90a7db5a429e3d
-- 
2.34.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/4] include/linux/suspend.h: Only show pm_pr_dbg messages at suspend/resume
  2023-05-18 17:27 [PATCH 0/4] Add consumers for pm_pr_debug() outside of pm Mario Limonciello
@ 2023-05-18 17:27 ` Mario Limonciello
  2023-05-18 17:27 ` [PATCH 2/4] ACPI: x86: Add pm_debug_messages for LPS0 _DSM state tracking Mario Limonciello
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Mario Limonciello @ 2023-05-18 17:27 UTC (permalink / raw)
  To: rafael, hdegoede, linus.walleij
  Cc: linux-acpi, linux-kernel, linux-gpio, platform-driver-x86,
	linux-pm, Shyam-sundar.S-k, Basavaraj.Natikar, Mario Limonciello

All uses in the kernel are currently already oriented around
suspend/resume. As some other parts of the kernel may also use these
messages in functions that could also be used outside of
suspend/resume, only enable in suspend/resume path.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
 include/linux/suspend.h | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/include/linux/suspend.h b/include/linux/suspend.h
index d0d4598a7b3f..a40f2e667e09 100644
--- a/include/linux/suspend.h
+++ b/include/linux/suspend.h
@@ -564,7 +564,8 @@ static inline int pm_dyn_debug_messages_on(void)
 #endif
 #define __pm_pr_dbg(fmt, ...)					\
 	do {							\
-		if (pm_debug_messages_on)			\
+		if (pm_debug_messages_on &&			\
+		    pm_suspend_target_state != PM_SUSPEND_ON)	\
 			printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__);	\
 		else if (pm_dyn_debug_messages_on())		\
 			pr_debug(fmt, ##__VA_ARGS__);	\
@@ -589,7 +590,8 @@ static inline int pm_dyn_debug_messages_on(void)
 /**
  * pm_pr_dbg - print pm sleep debug messages
  *
- * If pm_debug_messages_on is enabled, print message.
+ * If pm_debug_messages_on is enabled and the system is entering/leaving
+ *      suspend, print message.
  * If pm_debug_messages_on is disabled and CONFIG_DYNAMIC_DEBUG is enabled,
  *	print message only from instances explicitly enabled on dynamic debug's
  *	control.
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/4] ACPI: x86: Add pm_debug_messages for LPS0 _DSM state tracking
  2023-05-18 17:27 [PATCH 0/4] Add consumers for pm_pr_debug() outside of pm Mario Limonciello
  2023-05-18 17:27 ` [PATCH 1/4] include/linux/suspend.h: Only show pm_pr_dbg messages at suspend/resume Mario Limonciello
@ 2023-05-18 17:27 ` Mario Limonciello
  2023-05-19  7:16   ` kernel test robot
  2023-05-18 17:27 ` [PATCH 3/4] pinctrl: amd: Use pm_pr_dbg to show debugging messages Mario Limonciello
  2023-05-18 17:27 ` [PATCH 4/4] platform/x86/amd: pmc: Use pm_pr_dbg() for suspend related messages Mario Limonciello
  3 siblings, 1 reply; 6+ messages in thread
From: Mario Limonciello @ 2023-05-18 17:27 UTC (permalink / raw)
  To: rafael, hdegoede, linus.walleij
  Cc: linux-acpi, linux-kernel, linux-gpio, platform-driver-x86,
	linux-pm, Shyam-sundar.S-k, Basavaraj.Natikar, Mario Limonciello

Enabling debugging messages for the state requires turning on dynamic
debugging for the file. To make it more accessible, use
`pm_debug_messages` and clearer strings for what is happening.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/acpi/x86/s2idle.c | 52 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 46 insertions(+), 6 deletions(-)

diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
index e499c60c4579..94f4f31ff1ce 100644
--- a/drivers/acpi/x86/s2idle.c
+++ b/drivers/acpi/x86/s2idle.c
@@ -59,6 +59,7 @@ static int lps0_dsm_func_mask;
 
 static guid_t lps0_dsm_guid_microsoft;
 static int lps0_dsm_func_mask_microsoft;
+static int lps0_dsm_state;
 
 /* Device constraint entry structure */
 struct lpi_device_info {
@@ -320,6 +321,44 @@ static void lpi_check_constraints(void)
 	}
 }
 
+static bool acpi_s2idle_vendor_amd(void)
+{
+	return boot_cpu_data.x86_vendor == X86_VENDOR_AMD;
+}
+
+static const char *acpi_sleep_dsm_state_to_str(unsigned int state)
+{
+	if (lps0_dsm_func_mask_microsoft || !acpi_s2idle_vendor_amd()) {
+		switch (state) {
+		case ACPI_LPS0_SCREEN_OFF:
+			return "screen off";
+		case ACPI_LPS0_SCREEN_ON:
+			return "screen on";
+		case ACPI_LPS0_ENTRY:
+			return "lps0 entry";
+		case ACPI_LPS0_EXIT:
+			return "lps0 exit";
+		case ACPI_LPS0_MS_ENTRY:
+			return "lps0 ms entry";
+		case ACPI_LPS0_MS_EXIT:
+			return "lps0 ms exit";
+		};
+	} else {
+		switch (state) {
+		case ACPI_LPS0_SCREEN_ON_AMD:
+			return "screen on";
+		case ACPI_LPS0_SCREEN_OFF_AMD:
+			return "screen off";
+		case ACPI_LPS0_ENTRY_AMD:
+			return "lps0 entry";
+		case ACPI_LPS0_EXIT_AMD:
+			return "lps0 exit";
+		}
+	}
+
+	return "unknown";
+}
+
 static void acpi_sleep_run_lps0_dsm(unsigned int func, unsigned int func_mask, guid_t dsm_guid)
 {
 	union acpi_object *out_obj;
@@ -331,14 +370,15 @@ static void acpi_sleep_run_lps0_dsm(unsigned int func, unsigned int func_mask, g
 					rev_id, func, NULL);
 	ACPI_FREE(out_obj);
 
-	acpi_handle_debug(lps0_device_handle, "_DSM function %u evaluation %s\n",
-			  func, out_obj ? "successful" : "failed");
+	lps0_dsm_state = func;
+	if (pm_debug_messages_on) {
+		acpi_handle_info(lps0_device_handle,
+				"%s transitioned to state %s\n",
+				 out_obj ? "Successfully" : "Failed to",
+				 acpi_sleep_dsm_state_to_str(lps0_dsm_state));
+	}
 }
 
-static bool acpi_s2idle_vendor_amd(void)
-{
-	return boot_cpu_data.x86_vendor == X86_VENDOR_AMD;
-}
 
 static int validate_dsm(acpi_handle handle, const char *uuid, int rev, guid_t *dsm_guid)
 {
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/4] pinctrl: amd: Use pm_pr_dbg to show debugging messages
  2023-05-18 17:27 [PATCH 0/4] Add consumers for pm_pr_debug() outside of pm Mario Limonciello
  2023-05-18 17:27 ` [PATCH 1/4] include/linux/suspend.h: Only show pm_pr_dbg messages at suspend/resume Mario Limonciello
  2023-05-18 17:27 ` [PATCH 2/4] ACPI: x86: Add pm_debug_messages for LPS0 _DSM state tracking Mario Limonciello
@ 2023-05-18 17:27 ` Mario Limonciello
  2023-05-18 17:27 ` [PATCH 4/4] platform/x86/amd: pmc: Use pm_pr_dbg() for suspend related messages Mario Limonciello
  3 siblings, 0 replies; 6+ messages in thread
From: Mario Limonciello @ 2023-05-18 17:27 UTC (permalink / raw)
  To: rafael, hdegoede, linus.walleij
  Cc: linux-acpi, linux-kernel, linux-gpio, platform-driver-x86,
	linux-pm, Shyam-sundar.S-k, Basavaraj.Natikar, Mario Limonciello

To make the GPIO tracking around suspend easier for end users to
use, link it with pm_debug_messages.  This will make discovering
sources of spurious GPIOs around suspend easier.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/pinctrl/pinctrl-amd.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
index f279b360c20d..43d3530bab48 100644
--- a/drivers/pinctrl/pinctrl-amd.c
+++ b/drivers/pinctrl/pinctrl-amd.c
@@ -30,6 +30,7 @@
 #include <linux/pinctrl/pinconf.h>
 #include <linux/pinctrl/pinconf-generic.h>
 #include <linux/pinctrl/pinmux.h>
+#include <linux/suspend.h>
 
 #include "core.h"
 #include "pinctrl-utils.h"
@@ -636,9 +637,8 @@ static bool do_amd_gpio_irq_handler(int irq, void *dev_id)
 			regval = readl(regs + i);
 
 			if (regval & PIN_IRQ_PENDING)
-				dev_dbg(&gpio_dev->pdev->dev,
-					"GPIO %d is active: 0x%x",
-					irqnr + i, regval);
+				pm_pr_dbg("GPIO %d is active: 0x%x",
+					  irqnr + i, regval);
 
 			/* caused wake on resume context for shared IRQ */
 			if (irq < 0 && (regval & BIT(WAKE_STS_OFF)))
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 4/4] platform/x86/amd: pmc: Use pm_pr_dbg() for suspend related messages
  2023-05-18 17:27 [PATCH 0/4] Add consumers for pm_pr_debug() outside of pm Mario Limonciello
                   ` (2 preceding siblings ...)
  2023-05-18 17:27 ` [PATCH 3/4] pinctrl: amd: Use pm_pr_dbg to show debugging messages Mario Limonciello
@ 2023-05-18 17:27 ` Mario Limonciello
  3 siblings, 0 replies; 6+ messages in thread
From: Mario Limonciello @ 2023-05-18 17:27 UTC (permalink / raw)
  To: rafael, hdegoede, linus.walleij
  Cc: linux-acpi, linux-kernel, linux-gpio, platform-driver-x86,
	linux-pm, Shyam-sundar.S-k, Basavaraj.Natikar, Mario Limonciello

Using pm_pr_dbg() allows users to toggle `/sys/power/pm_debug_messages`
as a single knob to turn on messages that amd-pmc can emit to aid in
any s2idle debugging.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/platform/x86/amd/pmc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/amd/pmc.c b/drivers/platform/x86/amd/pmc.c
index 427905714f79..1304cd6f13f6 100644
--- a/drivers/platform/x86/amd/pmc.c
+++ b/drivers/platform/x86/amd/pmc.c
@@ -543,7 +543,7 @@ static int amd_pmc_idlemask_read(struct amd_pmc_dev *pdev, struct device *dev,
 	}
 
 	if (dev)
-		dev_dbg(pdev->dev, "SMU idlemask s0i3: 0x%x\n", val);
+		pm_pr_dbg("SMU idlemask s0i3: 0x%x\n", val);
 
 	if (s)
 		seq_printf(s, "SMU idlemask : 0x%x\n", val);
@@ -769,7 +769,7 @@ static int amd_pmc_verify_czn_rtc(struct amd_pmc_dev *pdev, u32 *arg)
 
 	*arg |= (duration << 16);
 	rc = rtc_alarm_irq_enable(rtc_device, 0);
-	dev_dbg(pdev->dev, "wakeup timer programmed for %lld seconds\n", duration);
+	pm_pr_dbg("wakeup timer programmed for %lld seconds\n", duration);
 
 	return rc;
 }
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/4] ACPI: x86: Add pm_debug_messages for LPS0 _DSM state tracking
  2023-05-18 17:27 ` [PATCH 2/4] ACPI: x86: Add pm_debug_messages for LPS0 _DSM state tracking Mario Limonciello
@ 2023-05-19  7:16   ` kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2023-05-19  7:16 UTC (permalink / raw)
  To: Mario Limonciello, rafael, hdegoede, linus.walleij
  Cc: oe-kbuild-all, linux-acpi, linux-kernel, linux-gpio,
	platform-driver-x86, linux-pm, Shyam-sundar.S-k,
	Basavaraj.Natikar, Mario Limonciello

Hi Mario,

kernel test robot noticed the following build warnings:

[auto build test WARNING on dac0c6388ff86af74dc6f4dd6e90a7db5a429e3d]

url:    https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/include-linux-suspend-h-Only-show-pm_pr_dbg-messages-at-suspend-resume/20230519-013031
base:   dac0c6388ff86af74dc6f4dd6e90a7db5a429e3d
patch link:    https://lore.kernel.org/r/20230518172752.93322-3-mario.limonciello%40amd.com
patch subject: [PATCH 2/4] ACPI: x86: Add pm_debug_messages for LPS0 _DSM state tracking
config: x86_64-randconfig-c022 (https://download.01.org/0day-ci/archive/20230519/202305191405.u2HzFqxM-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202305191405.u2HzFqxM-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> drivers/acpi/x86/s2idle.c:345:3-4: Unneeded semicolon

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-05-19  7:17 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-18 17:27 [PATCH 0/4] Add consumers for pm_pr_debug() outside of pm Mario Limonciello
2023-05-18 17:27 ` [PATCH 1/4] include/linux/suspend.h: Only show pm_pr_dbg messages at suspend/resume Mario Limonciello
2023-05-18 17:27 ` [PATCH 2/4] ACPI: x86: Add pm_debug_messages for LPS0 _DSM state tracking Mario Limonciello
2023-05-19  7:16   ` kernel test robot
2023-05-18 17:27 ` [PATCH 3/4] pinctrl: amd: Use pm_pr_dbg to show debugging messages Mario Limonciello
2023-05-18 17:27 ` [PATCH 4/4] platform/x86/amd: pmc: Use pm_pr_dbg() for suspend related messages Mario Limonciello

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).