<p>Jenny Tc has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/21085">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">wake_mask: Enable Active and Lazy wake masks<br><br>Enable notion of active and lazy wake masks to configure wake masks<br>on the edge of sleep transition.<br><br>  In this flow coreboot can set<br>    1. S3 and S5 wake masks during boot or SMI.<br>    2. S0ix wake masks can be set during boot (since s0ix doesn't<br>       take SMI path)<br><br>Above two wake masks are referred to as lazy wake masks since they<br>don't get activated immediately. On the edge of sleep transition the<br>lazy wake masks become active and is referred to as active wake mask.<br>Active wake mask is used by EC wake logic to trigger system wake while<br>system is in sleep state<br><br>This approach helps to configure S0ix wake masks from coreboot so<br>that the wake mask programming remains the same across all sleep states<br><br>BRANCH=none<br>BUG=b:63969337<br>TEST=enable lazy_wakemak, powerd_dbus_suspend, verify ec command: hostevent<br><br>Change-Id: I4917a222c79b6aaecb71d7704ffde57bf3bc99d9<br>Signed-off-by: Jenny TC <jenny.tc@intel.com><br>---<br>M src/ec/google/chromeec/Kconfig<br>M src/ec/google/chromeec/ec.c<br>M src/ec/google/chromeec/ec.h<br>M src/ec/google/chromeec/ec_commands.h<br>4 files changed, 58 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/85/21085/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/src/ec/google/chromeec/Kconfig b/src/ec/google/chromeec/Kconfig<br>index 3e9cb29..f6cc642 100644<br>--- a/src/ec/google/chromeec/Kconfig<br>+++ b/src/ec/google/chromeec/Kconfig<br>@@ -165,3 +165,12 @@<br>  help<br>    Enable support for Chrome OS mode switches provided by the Chrome OS<br>          EC.<br>+<br>+config LAZY_WAKE_MASK<br>+     depends on EC_GOOGLE_CHROMEEC<br>+        bool<br>+ help<br>+   Enable lazy and active wake masks to configure wake events on the edge<br>+       of sleep transition. When enabled coreboot notifies s3,s5 and s0ix<br>+   lazy wake masks to EC. On the edge of sleep state transition EC configure<br>+    active wake mask to trigger wakes on certain events<br>diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c<br>index 4d47982..87b8f25 100644<br>--- a/src/ec/google/chromeec/ec.c<br>+++ b/src/ec/google/chromeec/ec.c<br>@@ -550,19 +550,47 @@<br>             EC_CMD_HOST_EVENT_SET_SMI_MASK, mask);<br> }<br> <br>+<br>+#if !IS_ENABLED(CONFIG_LAZY_WAKE_MASK)<br> int google_chromeec_set_wake_mask(u32 mask)<br> {<br>   printk(BIOS_DEBUG, "Chrome EC: Set WAKE mask to 0x%08x\n", mask);<br>   return google_chromeec_set_mask(<br>-             EC_CMD_HOST_EVENT_SET_WAKE_MASK, mask);<br>+              EC_CMD_HOST_EVENT_SET_ACTIVE_WAKE_MASK, mask);<br>+<br> }<br> <br> u32 google_chromeec_get_wake_mask(void)<br> {<br>        return google_chromeec_get_mask(<br>-             EC_CMD_HOST_EVENT_GET_WAKE_MASK);<br>+            EC_CMD_HOST_EVENT_GET_ACTIVE_WAKE_MASK);<br> }<br> <br>+int google_chromeec_set_s0ix_lazy_wake_mask(u32 mask) { return 0; }<br>+#else<br>+int google_chromeec_set_wake_mask(u32 mask)<br>+{<br>+      printk(BIOS_DEBUG, "Chrome EC: Set LAZY S3_S5 WAKE mask to 0x%08x\n", mask);<br>+       return google_chromeec_set_mask(<br>+             EC_CMD_SET_S3_S5_LAZY_WAKE_MASK, mask);<br>+<br>+}<br>+<br>+u32 google_chromeec_get_wake_mask(void)<br>+{<br>+      return google_chromeec_get_mask(<br>+             EC_CMD_GET_S3_S5_LAZY_WAKE_MASK);<br>+}<br>+<br>+int google_chromeec_set_s0ix_lazy_wake_mask(u32 mask)<br>+{<br>+ printk(BIOS_DEBUG, "Chrome EC: Set LAZY S0IX WAKE mask to 0x%08x\n", mask);<br>+        return google_chromeec_set_mask(<br>+             EC_CMD_SET_S0IX_LAZY_WAKE_MASK, mask);<br>+}<br>+#endif<br>+<br>+<br> void google_chromeec_log_events(u32 mask)<br> {<br> #if IS_ENABLED(CONFIG_ELOG)<br>diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h<br>index 60d5a32..a562300 100644<br>--- a/src/ec/google/chromeec/ec.h<br>+++ b/src/ec/google/chromeec/ec.h<br>@@ -30,6 +30,7 @@<br> int google_chromeec_set_sci_mask(u32 mask);<br> int google_chromeec_set_smi_mask(u32 mask);<br> int google_chromeec_set_wake_mask(u32 mask);<br>+int google_chromeec_set_s0ix_lazy_wake_mask(u32 mask);<br> u8 google_chromeec_get_event(void);<br> int google_ec_running_ro(void);<br> void google_chromeec_init(void);<br>diff --git a/src/ec/google/chromeec/ec_commands.h b/src/ec/google/chromeec/ec_commands.h<br>index 46ab905..8c6484d 100644<br>--- a/src/ec/google/chromeec/ec_commands.h<br>+++ b/src/ec/google/chromeec/ec_commands.h<br>@@ -3063,17 +3063,26 @@<br> };<br> <br> /* These all use ec_response_host_event_mask */<br>-#define EC_CMD_HOST_EVENT_GET_B         0x0087<br>-#define EC_CMD_HOST_EVENT_GET_SMI_MASK  0x0088<br>-#define EC_CMD_HOST_EVENT_GET_SCI_MASK  0x0089<br>-#define EC_CMD_HOST_EVENT_GET_WAKE_MASK 0x008D<br>+#define EC_CMD_HOST_EVENT_GET_B                 0x0087<br>+#define EC_CMD_HOST_EVENT_GET_SMI_MASK          0x0088<br>+#define EC_CMD_HOST_EVENT_GET_SCI_MASK          0x0089<br>+#define EC_CMD_HOST_EVENT_GET_ACTIVE_WAKE_MASK  0x008D<br> <br> /* These all use ec_params_host_event_mask */<br>-#define EC_CMD_HOST_EVENT_SET_SMI_MASK  0x008A<br>-#define EC_CMD_HOST_EVENT_SET_SCI_MASK  0x008B<br>-#define EC_CMD_HOST_EVENT_CLEAR         0x008C<br>-#define EC_CMD_HOST_EVENT_SET_WAKE_MASK 0x008E<br>-#define EC_CMD_HOST_EVENT_CLEAR_B       0x008F<br>+#define EC_CMD_HOST_EVENT_SET_SMI_MASK          0x008A<br>+#define EC_CMD_HOST_EVENT_SET_SCI_MASK          0x008B<br>+#define EC_CMD_HOST_EVENT_CLEAR                 0x008C<br>+#define EC_CMD_HOST_EVENT_SET_ACTIVE_WAKE_MASK  0x008E<br>+#define EC_CMD_HOST_EVENT_CLEAR_B               0x008F<br>+<br>+/* Lazy wake masks */<br>+<br>+/*  These all use ec_response_host_event_mask */<br>+#define EC_CMD_GET_S3_S5_LAZY_WAKE_MASK      0x00A4<br>+<br>+/*  These all use ec_params_host_event_mask */<br>+#define EC_CMD_SET_S3_S5_LAZY_WAKE_MASK      0x00A6<br>+#define EC_CMD_SET_S0IX_LAZY_WAKE_MASK       0x00A7<br> <br> /*****************************************************************************/<br> /* Switch commands */<br></pre><p>To view, visit <a href="https://review.coreboot.org/21085">change 21085</a>. To unsubscribe, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/21085"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I4917a222c79b6aaecb71d7704ffde57bf3bc99d9 </div>
<div style="display:none"> Gerrit-Change-Number: 21085 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Jenny Tc <jenny.tc@intel.com> </div>