platform/chrome: Don't treat RTC events as wakeup sources
diff mbox series

Message ID 20201030232523.2654478-1-swboyd@chromium.org
State In Next
Commit 853c1a789f5fe8e783586a5c2dcc2ad1b57ac20f
Headers show
Series
  • platform/chrome: Don't treat RTC events as wakeup sources
Related show

Commit Message

Stephen Boyd Oct. 30, 2020, 11:25 p.m. UTC
The EC sends an RTC host event when the RTC fires, but we don't need to
treat that as a wakeup event here. The RTC class already properly
handles activating and deactivating a wakeup source in rtc_update_irq()
by calling pm_stay_awake() at the start of processing and pm_relax()
once all expired RTC timers have been processed. This reduces one wakeup
increment but not much else. I noticed this while debugging RTC wakeups
and how they always incremented the wakeup count by two instead of one
because this is duplicated.

Cc: Guenter Roeck <groeck@chromium.org>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: <linux-rtc@vger.kernel.org>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
---

I wonder if it makes more sense to look for certain events and treat
them as wakeup sources? It may be that most of the time an EC event
can be pm_relax()ed too and only need to be held active until the
processing is over? I haven't looked beyond this situation.

 drivers/platform/chrome/cros_ec_proto.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

Comments

Enric Balletbo i Serra Nov. 13, 2020, 8:56 a.m. UTC | #1
On Fri, 30 Oct 2020 16:25:23 -0700, Stephen Boyd wrote:
> The EC sends an RTC host event when the RTC fires, but we don't need to
> treat that as a wakeup event here. The RTC class already properly
> handles activating and deactivating a wakeup source in rtc_update_irq()
> by calling pm_stay_awake() at the start of processing and pm_relax()
> once all expired RTC timers have been processed. This reduces one wakeup
> increment but not much else. I noticed this while debugging RTC wakeups
> and how they always incremented the wakeup count by two instead of one
> because this is duplicated.

Applied, thanks!

[1/1] platform/chrome: Don't treat RTC events as wakeup sources
      commit: 853c1a789f5fe8e783586a5c2dcc2ad1b57ac20f

Best regards,

Patch
diff mbox series

diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index 0ecee8b8773d..7c92a6e22d75 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -742,12 +742,16 @@  int cros_ec_get_next_event(struct cros_ec_device *ec_dev,
 		 * Sensor events need to be parsed by the sensor sub-device.
 		 * Defer them, and don't report the wakeup here.
 		 */
-		if (event_type == EC_MKBP_EVENT_SENSOR_FIFO)
-			*wake_event = false;
-		/* Masked host-events should not count as wake events. */
-		else if (host_event &&
-			 !(host_event & ec_dev->host_event_wake_mask))
+		if (event_type == EC_MKBP_EVENT_SENSOR_FIFO) {
 			*wake_event = false;
+		} else if (host_event) {
+			/* rtc_update_irq() already handles wakeup events. */
+			if (host_event & EC_HOST_EVENT_MASK(EC_HOST_EVENT_RTC))
+				*wake_event = false;
+			/* Masked host-events should not count as wake events. */
+			if (!(host_event & ec_dev->host_event_wake_mask))
+				*wake_event = false;
+		}
 	}
 
 	return ret;