mirror of
https://abf.rosa.ru/djam/kernel-5.15.git
synced 2025-02-23 10:32:54 +00:00
61 lines
1.8 KiB
Diff
61 lines
1.8 KiB
Diff
From cba93078ea9087b9d732882995c117fe5ef0edf9 Mon Sep 17 00:00:00 2001
|
|
From: Alexey Sheplyakov <asheplyakov@altlinux.org>
|
|
Date: Fri, 3 Sep 2021 19:41:08 +0400
|
|
Subject: [PATCH 622/634] pm: disable all sleep states on Baikal-M based boards
|
|
|
|
These days desktop environments try to put computer into a sleep
|
|
state after a certain period of inactivity. TF307 board is able
|
|
to enter a sleep state, however it does *NOT* wakeup via power
|
|
button or keyboard/mouse.
|
|
|
|
Apparently the only wakeup sources on TF307 board are
|
|
|
|
- Real time clock (RTC)
|
|
- Ethernet
|
|
|
|
Surprisingly BMC (board management controller) is NOT a wakeup
|
|
source. Also tp_bmc driver does not use interrupts, and polls
|
|
the device instead. Perhaps BMC is unable to generate interrupts
|
|
at all?
|
|
|
|
To avoid the problem disable all sleep states (including s2idle)
|
|
on Baikal-M systems
|
|
|
|
X-DONTUPSTREAM
|
|
---
|
|
kernel/power/suspend.c | 12 ++++++++++++
|
|
1 file changed, 12 insertions(+)
|
|
|
|
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
|
|
index 13d905dd3..9eaf760db 100644
|
|
--- a/kernel/power/suspend.c
|
|
+++ b/kernel/power/suspend.c
|
|
@@ -30,6 +30,7 @@
|
|
#include <trace/events/power.h>
|
|
#include <linux/compiler.h>
|
|
#include <linux/moduleparam.h>
|
|
+#include <linux/of.h>
|
|
|
|
#include "power.h"
|
|
|
|
@@ -236,6 +237,17 @@ EXPORT_SYMBOL_GPL(suspend_valid_only_mem);
|
|
|
|
static bool sleep_state_supported(suspend_state_t state)
|
|
{
|
|
+#ifdef CONFIG_OF
|
|
+ if (of_device_is_compatible(of_root, "baikal,baikal-m")) {
|
|
+ /* XXX: there are no wakeup sources except RTC and Ethernet
|
|
+ * on BE-M1000 based boards. In other words, no way to wakeup
|
|
+ * system via the keyboard or power button.
|
|
+ * Thus even s2idle is unusable on BE-M1000 systems.
|
|
+ */
|
|
+ pr_info("%s: no useful wakeup sources on Baikal-M", __func__);
|
|
+ return false;
|
|
+ }
|
|
+#endif
|
|
return state == PM_SUSPEND_TO_IDLE || (suspend_ops && suspend_ops->enter);
|
|
}
|
|
|
|
--
|
|
2.33.2
|
|
|