<p>Furquan Shaikh has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/21877">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ec/google/chromeec: Add library function google_chromeec_events_init<br><br>mainboard_ec_init implemented by all x86-based mainboards using<br>chromeec performed similar tasks for initializing and recording ec<br>events. Instead of duplicating this code across multiple boards,<br>provide a library function google_chromeec_events_init that can be<br>called by mainboard with appropriate inputs to perform the required<br>actions.<br><br>This change also adds a new structure google_chromeec_event_info to<br>allow mainboards to provide information required by the library<br>function to handle different event masks.<br><br>Also, google_chromeec_log_device_events and google_chromeec_log_events<br>no longer need to be exported.<br><br>Change-Id: I1cbc24e3e1a31aed35d8527f90ed16ed15ccaa86<br>Signed-off-by: Furquan Shaikh <furquan@chromium.org><br>---<br>M src/ec/google/chromeec/ec.c<br>M src/ec/google/chromeec/ec.h<br>M src/mainboard/google/auron/ec.c<br>M src/mainboard/google/chell/ec.c<br>M src/mainboard/google/cyan/ec.c<br>M src/mainboard/google/eve/ec.c<br>M src/mainboard/google/fizz/ec.c<br>M src/mainboard/google/glados/ec.c<br>M src/mainboard/google/kahlee/ec.c<br>M src/mainboard/google/lars/ec.c<br>M src/mainboard/google/link/ec.c<br>M src/mainboard/google/poppy/ec.c<br>M src/mainboard/google/rambi/ec.c<br>M src/mainboard/google/reef/ec.c<br>M src/mainboard/google/slippy/ec.c<br>M src/mainboard/google/zoombini/ec.c<br>M src/mainboard/intel/glkrvp/ec.c<br>M src/mainboard/intel/kblrvp/ec.c<br>M src/mainboard/intel/kunimitsu/ec.c<br>M src/mainboard/intel/strago/ec.c<br>20 files changed, 204 insertions(+), 382 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/77/21877/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c<br>index ab879c5..639719a 100644<br>--- a/src/ec/google/chromeec/ec.c<br>+++ b/src/ec/google/chromeec/ec.c<br>@@ -222,12 +222,12 @@<br>   return 0;<br> }<br> <br>-void google_chromeec_log_device_events(uint32_t mask)<br>+static void google_chromeec_log_device_events(uint32_t mask)<br> {<br>   uint32_t events;<br>      int i;<br> <br>-    if (!IS_ENABLED(CONFIG_ELOG))<br>+        if (!IS_ENABLED(CONFIG_ELOG) || !mask)<br>                return;<br> <br>    if (google_chromeec_check_feature(EC_FEATURE_DEVICE_EVENT) != 1)<br>@@ -240,6 +240,53 @@<br>                if (EC_DEVICE_EVENT_MASK(i) & events)<br>                     elog_add_event_byte(ELOG_TYPE_EC_DEVICE_EVENT, i);<br>    }<br>+}<br>+<br>+static void google_chromeec_log_events(u32 mask)<br>+{<br>+      u8 event;<br>+    u32 wake_mask;<br>+<br>+    if (!IS_ENABLED(CONFIG_ELOG))<br>+                return;<br>+<br>+   /* Set wake mask so events will be read from ACPI interface */<br>+       wake_mask = google_chromeec_get_wake_mask();<br>+ google_chromeec_set_wake_mask(mask);<br>+<br>+      while ((event = google_chromeec_get_event()) != 0) {<br>+         if (EC_HOST_EVENT_MASK(event) & mask)<br>+                    elog_add_event_byte(ELOG_TYPE_EC_EVENT, event);<br>+      }<br>+<br>+ google_chromeec_set_wake_mask(wake_mask);<br>+}<br>+<br>+void google_chromeec_events_init(const struct google_chromeec_event_info *info,<br>+                                   bool is_s3_wakeup)<br>+{<br>+       if (is_s3_wakeup) {<br>+          google_chromeec_log_events(info->log_events |<br>+                                             info->s3_wake_events);<br>+<br>+         /* Log and clear device events that may wake the system. */<br>+          google_chromeec_log_device_events(info->s3_device_events);<br>+<br>+             /* Disable SMI and wake events. */<br>+           google_chromeec_set_smi_mask(0);<br>+<br>+          /* Clear pending events. */<br>+          while (google_chromeec_get_event() != 0)<br>+                     ;<br>+<br>+         /* Restore SCI event mask. */<br>+                google_chromeec_set_sci_mask(info->sci_events);<br>+   } else<br>+               google_chromeec_log_events(info->log_events |<br>+                                             info->s5_wake_events);<br>+<br>+ /* Clear wake event mask. */<br>+ google_chromeec_set_wake_mask(0);<br> }<br> <br> int google_chromeec_check_feature(int feature)<br>@@ -518,25 +565,6 @@<br> {<br>   return google_chromeec_get_mask(<br>              EC_CMD_HOST_EVENT_GET_WAKE_MASK);<br>-}<br>-<br>-void google_chromeec_log_events(u32 mask)<br>-{<br>-#if IS_ENABLED(CONFIG_ELOG)<br>-       u8 event;<br>-    u32 wake_mask;<br>-<br>-    /* Set wake mask so events will be read from ACPI interface */<br>-       wake_mask = google_chromeec_get_wake_mask();<br>- google_chromeec_set_wake_mask(mask);<br>-<br>-      while ((event = google_chromeec_get_event()) != 0) {<br>-         if (EC_HOST_EVENT_MASK(event) & mask)<br>-                    elog_add_event_byte(ELOG_TYPE_EC_EVENT, event);<br>-      }<br>-<br>- google_chromeec_set_wake_mask(wake_mask);<br>-#endif<br> }<br> <br> int google_chromeec_set_usb_charge_mode(u8 port_id, enum usb_charge_mode mode)<br>diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h<br>index 81bc933..95d7443 100644<br>--- a/src/ec/google/chromeec/ec.h<br>+++ b/src/ec/google/chromeec/ec.h<br>@@ -38,7 +38,6 @@<br> uint32_t google_chromeec_get_device_enabled_events(void);<br> int google_chromeec_set_device_enabled_events(uint32_t mask);<br> uint32_t google_chromeec_get_device_current_events(void);<br>-void google_chromeec_log_device_events(uint32_t mask);<br> <br> int google_chromeec_check_feature(int feature);<br> uint8_t google_chromeec_calc_checksum(const uint8_t *data, int size);<br>@@ -49,7 +48,6 @@<br> int google_chromeec_clear_events_b(u32 mask);<br> int google_chromeec_kbbacklight(int percent);<br> void google_chromeec_post(u8 postcode);<br>-void google_chromeec_log_events(u32 mask);<br> int google_chromeec_vbnv_context(int is_read, uint8_t *data, int len);<br> uint8_t google_chromeec_get_switches(void);<br> <br>@@ -118,4 +116,14 @@<br> <br> int google_chromeec_command(struct chromeec_command *cec_command);<br> <br>+struct google_chromeec_event_info {<br>+  uint32_t log_events;<br>+ uint32_t sci_events;<br>+ uint32_t s3_wake_events;<br>+     uint32_t s3_device_events;<br>+   uint32_t s5_wake_events;<br>+};<br>+void google_chromeec_events_init(const struct google_chromeec_event_info *info,<br>+                                      bool is_s3_wakeup);<br>+<br> #endif /* _EC_GOOGLE_CHROMEEC_EC_H */<br>diff --git a/src/mainboard/google/auron/ec.c b/src/mainboard/google/auron/ec.c<br>index 5feafb8..3fc5373 100644<br>--- a/src/mainboard/google/auron/ec.c<br>+++ b/src/mainboard/google/auron/ec.c<br>@@ -22,28 +22,17 @@<br> <br> void mainboard_ec_init(void)<br> {<br>+       const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br>+<br>         printk(BIOS_DEBUG, "mainboard_ec_init\n");<br>  post_code(0xf0);<br> <br>-  /* Restore SCI event mask on resume. */<br>-      if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>-<br>-          /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-            google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake events, these are enabled on entry to sleep */<br>- google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> <br>       post_code(0xf1);<br> }<br>diff --git a/src/mainboard/google/chell/ec.c b/src/mainboard/google/chell/ec.c<br>index 36cd10a..3722378 100644<br>--- a/src/mainboard/google/chell/ec.c<br>+++ b/src/mainboard/google/chell/ec.c<br>@@ -21,26 +21,14 @@<br> <br> void mainboard_ec_init(void)<br> {<br>+ const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br>+<br>         printk(BIOS_DEBUG, "mainboard: EC init\n");<br> <br>-     if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>-<br>-          /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br>diff --git a/src/mainboard/google/cyan/ec.c b/src/mainboard/google/cyan/ec.c<br>index cce7d70..efd20a5 100644<br>--- a/src/mainboard/google/cyan/ec.c<br>+++ b/src/mainboard/google/cyan/ec.c<br>@@ -23,33 +23,18 @@<br> <br> void mainboard_ec_init(void)<br> {<br>+ const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br>+<br>         printk(BIOS_DEBUG, "mainboard_ec_init\n");<br>  post_code(0xf0);<br> <br>-#if IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC)<br>-      /* Restore SCI event mask on resume. */<br>-      if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>+     if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC))<br>+           google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> <br>-              /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-            /*<br>-            * Set SCI mask.OS may not generate SMI event to set<br>-          * this on S3 resume.<br>-                 */<br>-          google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>-#endif<br>    post_code(0xf1);<br> }<br>diff --git a/src/mainboard/google/eve/ec.c b/src/mainboard/google/eve/ec.c<br>index d5710f3..893255a 100644<br>--- a/src/mainboard/google/eve/ec.c<br>+++ b/src/mainboard/google/eve/ec.c<br>@@ -20,28 +20,13 @@<br> <br> void mainboard_ec_init(void)<br> {<br>- if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>+     const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s3_device_events = MAINBOARD_EC_S3_DEVICE_EVENTS,<br>+           .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br> <br>-                /* Log and clear device events that may wake the system */<br>-           google_chromeec_log_device_events(<br>-                   MAINBOARD_EC_S3_DEVICE_EVENTS);<br>-<br>-           /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br>diff --git a/src/mainboard/google/fizz/ec.c b/src/mainboard/google/fizz/ec.c<br>index 0f2dccf..6b3ec9e 100644<br>--- a/src/mainboard/google/fizz/ec.c<br>+++ b/src/mainboard/google/fizz/ec.c<br>@@ -20,24 +20,12 @@<br> <br> void mainboard_ec_init(void)<br> {<br>- if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                 MAINBOARD_EC_S3_WAKE_EVENTS);<br>+        const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br> <br>-                /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                 MAINBOARD_EC_S5_WAKE_EVENTS);<br>-        }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br>diff --git a/src/mainboard/google/glados/ec.c b/src/mainboard/google/glados/ec.c<br>index 36cd10a..3722378 100644<br>--- a/src/mainboard/google/glados/ec.c<br>+++ b/src/mainboard/google/glados/ec.c<br>@@ -21,26 +21,14 @@<br> <br> void mainboard_ec_init(void)<br> {<br>+ const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br>+<br>         printk(BIOS_DEBUG, "mainboard: EC init\n");<br> <br>-     if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>-<br>-          /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br>diff --git a/src/mainboard/google/kahlee/ec.c b/src/mainboard/google/kahlee/ec.c<br>index 75ed1fa..0d1dae2 100644<br>--- a/src/mainboard/google/kahlee/ec.c<br>+++ b/src/mainboard/google/kahlee/ec.c<br>@@ -22,28 +22,16 @@<br> <br> static void ramstage_ec_init(void)<br> {<br>-   printk(BIOS_ERR, "mainboard: EC init\n");<br>+  const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br> <br>-        if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>+     printk(BIOS_DEBUG, "mainboard: EC init\n");<br> <br>-             /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br> <br> static void early_ec_init(void)<br>diff --git a/src/mainboard/google/lars/ec.c b/src/mainboard/google/lars/ec.c<br>index 36cd10a..3722378 100644<br>--- a/src/mainboard/google/lars/ec.c<br>+++ b/src/mainboard/google/lars/ec.c<br>@@ -21,26 +21,14 @@<br> <br> void mainboard_ec_init(void)<br> {<br>+    const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br>+<br>         printk(BIOS_DEBUG, "mainboard: EC init\n");<br> <br>-     if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>-<br>-          /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br>diff --git a/src/mainboard/google/link/ec.c b/src/mainboard/google/link/ec.c<br>index acf1185..37949f6 100644<br>--- a/src/mainboard/google/link/ec.c<br>+++ b/src/mainboard/google/link/ec.c<br>@@ -21,27 +21,17 @@<br> <br> void link_ec_init(void)<br> {<br>+      const struct google_chromeec_event_info info = {<br>+             .log_events = LINK_EC_LOG_EVENTS,<br>+            .sci_events = LINK_EC_SCI_EVENTS,<br>+            .s3_wake_events = LINK_EC_S3_WAKE_EVENTS,<br>+            .s5_wake_events = LINK_EC_S5_WAKE_EVENTS,<br>+    };<br>+<br>         printk(BIOS_DEBUG, "link_ec_init\n");<br>       post_code(0xf0);<br> <br>-  /* Restore SCI event mask on resume. */<br>-      if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(LINK_EC_LOG_EVENTS |<br>-                                         LINK_EC_S3_WAKE_EVENTS);<br>-<br>-               /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0);<br>-            google_chromeec_set_sci_mask(LINK_EC_SCI_EVENTS);<br>-    } else {<br>-             google_chromeec_log_events(LINK_EC_LOG_EVENTS |<br>-                                         LINK_EC_S5_WAKE_EVENTS);<br>-  }<br>-<br>- /* Clear wake events, these are enabled on entry to sleep */<br>- google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> <br>       post_code(0xf1);<br> }<br>diff --git a/src/mainboard/google/poppy/ec.c b/src/mainboard/google/poppy/ec.c<br>index f0559ca..ef1d55c 100644<br>--- a/src/mainboard/google/poppy/ec.c<br>+++ b/src/mainboard/google/poppy/ec.c<br>@@ -20,24 +20,13 @@<br> <br> void mainboard_ec_init(void)<br> {<br>- if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                 MAINBOARD_EC_S3_WAKE_EVENTS);<br>+        const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br> <br>-                /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>+     google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> <br>-              /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                 MAINBOARD_EC_S5_WAKE_EVENTS);<br>-        }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br> }<br>diff --git a/src/mainboard/google/rambi/ec.c b/src/mainboard/google/rambi/ec.c<br>index 27fcb0f..307aedf 100644<br>--- a/src/mainboard/google/rambi/ec.c<br>+++ b/src/mainboard/google/rambi/ec.c<br>@@ -21,28 +21,21 @@<br> <br> void mainboard_ec_init(void)<br> {<br>+        bool s3_wakeup = acpi_is_wakeup_s3();<br>+        const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br>+<br>         printk(BIOS_DEBUG, "mainboard_ec_init\n");<br>  post_code(0xf0);<br> <br>-  /* Restore SCI event mask on resume. */<br>-      if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>+     google_chromeec_events_init(&info, s3_wakeup);<br> <br>-                /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0);<br>-            google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>+     if (!s3_wakeup)<br>               google_chromeec_set_smi_mask(MAINBOARD_EC_SMI_EVENTS);<br>-       }<br>-<br>- /* Clear wake events, these are enabled on entry to sleep */<br>- google_chromeec_set_wake_mask(0);<br> <br>  post_code(0xf1);<br> }<br>diff --git a/src/mainboard/google/reef/ec.c b/src/mainboard/google/reef/ec.c<br>index 59fa442..54e9c36 100644<br>--- a/src/mainboard/google/reef/ec.c<br>+++ b/src/mainboard/google/reef/ec.c<br>@@ -23,28 +23,16 @@<br> <br> static void ramstage_ec_init(void)<br> {<br>+       const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br>+<br>         printk(BIOS_ERR, "mainboard: EC init\n");<br> <br>-       if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>-<br>-          /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br> <br> static void bootblock_ec_init(void)<br>diff --git a/src/mainboard/google/slippy/ec.c b/src/mainboard/google/slippy/ec.c<br>index c011f33..f8ab6b8 100644<br>--- a/src/mainboard/google/slippy/ec.c<br>+++ b/src/mainboard/google/slippy/ec.c<br>@@ -21,27 +21,17 @@<br> <br> void mainboard_ec_init(void)<br> {<br>+        const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br>+<br>         printk(BIOS_DEBUG, "mainboard_ec_init\n");<br>  post_code(0xf0);<br> <br>-  /* Restore SCI event mask on resume. */<br>-      if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>-<br>-          /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0);<br>-            google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake events, these are enabled on entry to sleep */<br>- google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> <br>       post_code(0xf1);<br> }<br>diff --git a/src/mainboard/google/zoombini/ec.c b/src/mainboard/google/zoombini/ec.c<br>index 2ce1abf..d756444 100644<br>--- a/src/mainboard/google/zoombini/ec.c<br>+++ b/src/mainboard/google/zoombini/ec.c<br>@@ -19,24 +19,12 @@<br> <br> void mainboard_ec_init(void)<br> {<br>-     if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                 MAINBOARD_EC_S3_WAKE_EVENTS);<br>+        const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br> <br>-                /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                 MAINBOARD_EC_S5_WAKE_EVENTS);<br>-        }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br>diff --git a/src/mainboard/intel/glkrvp/ec.c b/src/mainboard/intel/glkrvp/ec.c<br>index ff891a9..c170338 100644<br>--- a/src/mainboard/intel/glkrvp/ec.c<br>+++ b/src/mainboard/intel/glkrvp/ec.c<br>@@ -24,28 +24,16 @@<br> <br> static void ramstage_ec_init(void)<br> {<br>+       const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br>+<br>         printk(BIOS_ERR, "mainboard: EC init\n");<br> <br>-       if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>-<br>-          /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br> <br> static void bootblock_ec_init(void)<br>diff --git a/src/mainboard/intel/kblrvp/ec.c b/src/mainboard/intel/kblrvp/ec.c<br>index 235ecab..b40aabf 100644<br>--- a/src/mainboard/intel/kblrvp/ec.c<br>+++ b/src/mainboard/intel/kblrvp/ec.c<br>@@ -21,26 +21,14 @@<br> <br> void mainboard_ec_init(void)<br> {<br>-    printk(BIOS_DEBUG, "mainboard: EC init\n");<br>+        const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br> <br>-        if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>+     printk(BIOS_ERR, "mainboard: EC init\n");<br> <br>-               /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br>diff --git a/src/mainboard/intel/kunimitsu/ec.c b/src/mainboard/intel/kunimitsu/ec.c<br>index 36cd10a..32ae8ba 100644<br>--- a/src/mainboard/intel/kunimitsu/ec.c<br>+++ b/src/mainboard/intel/kunimitsu/ec.c<br>@@ -21,26 +21,14 @@<br> <br> void mainboard_ec_init(void)<br> {<br>- printk(BIOS_DEBUG, "mainboard: EC init\n");<br>+        const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br> <br>-        if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>+     printk(BIOS_ERR, "mainboard: EC init\n");<br> <br>-               /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-<br>-         /* Restore SCI event mask */<br>-         google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>+    google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> }<br>diff --git a/src/mainboard/intel/strago/ec.c b/src/mainboard/intel/strago/ec.c<br>index dabe274..efd20a5 100644<br>--- a/src/mainboard/intel/strago/ec.c<br>+++ b/src/mainboard/intel/strago/ec.c<br>@@ -23,33 +23,18 @@<br> <br> void mainboard_ec_init(void)<br> {<br>+     const struct google_chromeec_event_info info = {<br>+             .log_events = MAINBOARD_EC_LOG_EVENTS,<br>+               .sci_events = MAINBOARD_EC_SCI_EVENTS,<br>+               .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS,<br>+               .s5_wake_events = MAINBOARD_EC_S5_WAKE_EVENTS,<br>+       };<br>+<br>         printk(BIOS_DEBUG, "mainboard_ec_init\n");<br>  post_code(0xf0);<br> <br>-#if IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC)<br>-      /* Restore SCI event mask on resume. */<br>-      if (acpi_is_wakeup_s3()) {<br>-           google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S3_WAKE_EVENTS);<br>+     if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC))<br>+           google_chromeec_events_init(&info, acpi_is_wakeup_s3());<br> <br>-              /* Disable SMI and wake events */<br>-            google_chromeec_set_smi_mask(0);<br>-<br>-          /* Clear pending events */<br>-           while (google_chromeec_get_event() != 0)<br>-                     ;<br>-            /*<br>-            * Set SCI mask.OS may not generate the SMI event to<br>-          * set this on S3 resume<br>-              */<br>-          google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);<br>-       } else {<br>-             google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS |<br>-                                    MAINBOARD_EC_S5_WAKE_EVENTS);<br>-     }<br>-<br>- /* Clear wake event mask */<br>-  google_chromeec_set_wake_mask(0);<br>-#endif<br>    post_code(0xf1);<br> }<br></pre><p>To view, visit <a href="https://review.coreboot.org/21877">change 21877</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/21877"/><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: I1cbc24e3e1a31aed35d8527f90ed16ed15ccaa86 </div>
<div style="display:none"> Gerrit-Change-Number: 21877 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Furquan Shaikh <furquan@google.com> </div>