<p>Furquan Shaikh has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/22551">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">chromeec: Change the API for hostevent/wake masks to handle 64-bit<br><br>ChromeEC is getting ready to bump up the hostevents and wake masks to<br>64-bits. The current commands to program hostevents/wake masks will<br>still operate on 32-bits only. A new EC host command will be added to<br>handle 64-bit hostevents/wake masks. In order to prevent individual<br>callers in coreboot from worrying about 32-bit/64-bit, the same API<br>provided by google/chromeec will be updated to accept 64-bit<br>parameters and return 64-bit values. Internally, host command handlers<br>will take care of masking these parameters/return values to<br>appropriate 32-bit/64-bit values.<br><br>BUG=b:69329196<br><br>Change-Id: If59f3f2b1a2aa5ce95883df3e72efc4a32de1190<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/ec/google/chromeec/ec_commands.h<br>M src/ec/google/chromeec/smihandler.c<br>M src/ec/google/chromeec/smm.h<br>M src/ec/google/chromeec/switches.c<br>M src/mainboard/google/daisy/chromeos.c<br>M src/mainboard/google/foster/chromeos.c<br>M src/mainboard/google/peach_pit/chromeos.c<br>M src/mainboard/google/veyron/chromeos.c<br>10 files changed, 55 insertions(+), 55 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/51/22551/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 3d053b6..b44fffe 100644<br>--- a/src/ec/google/chromeec/ec.c<br>+++ b/src/ec/google/chromeec/ec.c<br>@@ -34,7 +34,7 @@<br> <br> void log_recovery_mode_switch(void)<br> {<br>- uint32_t *events;<br>+    uint64_t *events;<br> <br>  if (cbmem_find(CBMEM_ID_EC_HOSTEVENT))<br>                return;<br>@@ -48,7 +48,7 @@<br> <br> static void google_chromeec_elog_add_recovery_event(void *unused)<br> {<br>-        uint32_t *events = cbmem_find(CBMEM_ID_EC_HOSTEVENT);<br>+        uint64_t *events = cbmem_find(CBMEM_ID_EC_HOSTEVENT);<br>         uint8_t event_byte = EC_EVENT_KEYBOARD_RECOVERY;<br> <br>   if (!events)<br>@@ -111,7 +111,7 @@<br>  * Query the EC for specified mask indicating enabled events.<br>  * The EC maintains separate event masks for SMI, SCI and WAKE.<br>  */<br>-static u32 google_chromeec_get_mask(u8 type)<br>+static uint64_t google_chromeec_get_mask(u8 type)<br> {<br>      struct ec_params_host_event_mask req;<br>         struct ec_response_host_event_mask rsp;<br>@@ -130,13 +130,13 @@<br>        return 0;<br> }<br> <br>-static int google_chromeec_set_mask(u8 type, u32 mask)<br>+static int google_chromeec_set_mask(uint8_t type, uint64_t mask)<br> {<br>      struct ec_params_host_event_mask req;<br>         struct ec_response_host_event_mask rsp;<br>       struct chromeec_command cmd;<br> <br>-      req.mask = mask;<br>+     req.mask = (uint32_t)mask;<br>    cmd.cmd_code = type;<br>  cmd.cmd_version = 0;<br>  cmd.cmd_data_in = &req;<br>@@ -148,14 +148,14 @@<br>    return google_chromeec_command(&cmd);<br> }<br> <br>-u32 google_chromeec_get_events_b(void)<br>+uint64_t google_chromeec_get_events_b(void)<br> {<br>   return google_chromeec_get_mask(EC_CMD_HOST_EVENT_GET_B);<br> }<br> <br>-int google_chromeec_clear_events_b(u32 mask)<br>+int google_chromeec_clear_events_b(uint64_t mask)<br> {<br>-      printk(BIOS_DEBUG, "Chrome EC: clear events_b mask to 0x%08x\n", mask);<br>+    printk(BIOS_DEBUG, "Chrome EC: clear events_b mask to 0x%016llx\n", mask);<br>  return google_chromeec_set_mask(<br>              EC_CMD_HOST_EVENT_CLEAR_B, mask);<br> }<br>@@ -176,7 +176,7 @@<br> }<br> <br> /* Get the current device event mask */<br>-uint32_t google_chromeec_get_device_enabled_events(void)<br>+uint64_t google_chromeec_get_device_enabled_events(void)<br> {<br>         struct ec_params_device_event req;<br>    struct ec_response_device_event rsp;<br>@@ -197,13 +197,13 @@<br> }<br> <br> /* Set the current device event mask */<br>-int google_chromeec_set_device_enabled_events(uint32_t mask)<br>+int google_chromeec_set_device_enabled_events(uint64_t mask)<br> {<br>        struct ec_params_device_event req;<br>    struct ec_response_device_event rsp;<br>  struct chromeec_command cmd;<br> <br>-      req.event_mask = mask;<br>+       req.event_mask = (uint32_t)mask;<br>      req.param = EC_DEVICE_EVENT_PARAM_SET_ENABLED_EVENTS;<br>         cmd.cmd_code = EC_CMD_DEVICE_EVENT;<br>   cmd.cmd_version = 0;<br>@@ -217,7 +217,7 @@<br> }<br> <br> /* Read and clear pending device events */<br>-uint32_t google_chromeec_get_device_current_events(void)<br>+uint64_t google_chromeec_get_device_current_events(void)<br> {<br>       struct ec_params_device_event req;<br>    struct ec_response_device_event rsp;<br>@@ -237,9 +237,9 @@<br>     return 0;<br> }<br> <br>-static void google_chromeec_log_device_events(uint32_t mask)<br>+static void google_chromeec_log_device_events(uint64_t mask)<br> {<br>-   uint32_t events;<br>+     uint64_t events;<br>      int i;<br> <br>     if (!IS_ENABLED(CONFIG_ELOG) || !mask)<br>@@ -249,7 +249,7 @@<br>           return;<br> <br>    events = google_chromeec_get_device_current_events() & mask;<br>-     printk(BIOS_INFO, "EC Device Events: 0x%08x\n", events);<br>+   printk(BIOS_INFO, "EC Device Events: 0x%016llx\n", events);<br> <br>      for (i = 0; i < sizeof(events) * 8; i++) {<br>                 if (EC_DEVICE_EVENT_MASK(i) & events)<br>@@ -257,10 +257,10 @@<br>      }<br> }<br> <br>-void google_chromeec_log_events(u32 mask)<br>+void google_chromeec_log_events(uint64_t mask)<br> {<br>     u8 event;<br>-    u32 wake_mask;<br>+       uint64_t wake_mask;<br>   bool restore_wake_mask = false;<br> <br>    if (!IS_ENABLED(CONFIG_ELOG))<br>@@ -563,28 +563,28 @@<br>  return 0;<br> }<br> <br>-int google_chromeec_set_sci_mask(u32 mask)<br>+int google_chromeec_set_sci_mask(uint64_t mask)<br> {<br>-  printk(BIOS_DEBUG, "Chrome EC: Set SCI mask to 0x%08x\n", mask);<br>+   printk(BIOS_DEBUG, "Chrome EC: Set SCI mask to 0x%016llx\n", mask);<br>         return google_chromeec_set_mask(<br>              EC_CMD_HOST_EVENT_SET_SCI_MASK, mask);<br> }<br> <br>-int google_chromeec_set_smi_mask(u32 mask)<br>+int google_chromeec_set_smi_mask(uint64_t mask)<br> {<br>-     printk(BIOS_DEBUG, "Chrome EC: Set SMI mask to 0x%08x\n", mask);<br>+   printk(BIOS_DEBUG, "Chrome EC: Set SMI mask to 0x%016llx\n", mask);<br>         return google_chromeec_set_mask(<br>              EC_CMD_HOST_EVENT_SET_SMI_MASK, mask);<br> }<br> <br>-int google_chromeec_set_wake_mask(u32 mask)<br>+int google_chromeec_set_wake_mask(uint64_t mask)<br> {<br>-   printk(BIOS_DEBUG, "Chrome EC: Set WAKE mask to 0x%08x\n", mask);<br>+  printk(BIOS_DEBUG, "Chrome EC: Set WAKE mask to 0x%016llx\n", mask);<br>        return google_chromeec_set_mask(<br>              EC_CMD_HOST_EVENT_SET_WAKE_MASK, mask);<br> }<br> <br>-u32 google_chromeec_get_wake_mask(void)<br>+uint64_t google_chromeec_get_wake_mask(void)<br> {<br>   return google_chromeec_get_mask(<br>              EC_CMD_HOST_EVENT_GET_WAKE_MASK);<br>diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h<br>index 25a90d7..0b6f880 100644<br>--- a/src/ec/google/chromeec/ec.h<br>+++ b/src/ec/google/chromeec/ec.h<br>@@ -26,26 +26,26 @@<br> <br> int google_chromeec_i2c_xfer(uint8_t chip, uint8_t addr, int alen,<br>                        uint8_t *buffer, int len, int is_read);<br>-u32 google_chromeec_get_wake_mask(void);<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>+uint64_t google_chromeec_get_wake_mask(void);<br>+int google_chromeec_set_sci_mask(uint64_t mask);<br>+int google_chromeec_set_smi_mask(uint64_t mask);<br>+int google_chromeec_set_wake_mask(uint64_t mask);<br> u8 google_chromeec_get_event(void);<br> int google_ec_running_ro(void);<br> void google_chromeec_init(void);<br> <br> /* Device events */<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>+uint64_t google_chromeec_get_device_enabled_events(void);<br>+int google_chromeec_set_device_enabled_events(uint64_t mask);<br>+uint64_t google_chromeec_get_device_current_events(void);<br> <br> int google_chromeec_check_feature(int feature);<br> uint8_t google_chromeec_calc_checksum(const uint8_t *data, int size);<br> u16 google_chromeec_get_board_version(void);<br> u32 google_chromeec_get_sku_id(void);<br> int google_chromeec_set_sku_id(u32 skuid);<br>-u32 google_chromeec_get_events_b(void);<br>-int google_chromeec_clear_events_b(u32 mask);<br>+uint64_t  google_chromeec_get_events_b(void);<br>+int google_chromeec_clear_events_b(uint64_t mask);<br> int google_chromeec_kbbacklight(int percent);<br> void google_chromeec_post(u8 postcode);<br> int google_chromeec_vbnv_context(int is_read, uint8_t *data, int len);<br>@@ -126,11 +126,11 @@<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>+     uint64_t log_events;<br>+ uint64_t sci_events;<br>+ uint64_t s3_wake_events;<br>+     uint64_t s3_device_events;<br>+   uint64_t s5_wake_events;<br> };<br> void google_chromeec_events_init(const struct google_chromeec_event_info *info,<br>                                       bool is_s3_wakeup);<br>@@ -142,6 +142,6 @@<br> int google_chromeec_get_mkbp_event(struct ec_response_get_next_event *event);<br> <br> /* Log host events to eventlog based on the mask provided. */<br>-void google_chromeec_log_events(u32 mask);<br>+void google_chromeec_log_events(uint64_t mask);<br> <br> #endif /* _EC_GOOGLE_CHROMEEC_EC_H */<br>diff --git a/src/ec/google/chromeec/ec_commands.h b/src/ec/google/chromeec/ec_commands.h<br>index c4e4e31..aa63aa7 100644<br>--- a/src/ec/google/chromeec/ec_commands.h<br>+++ b/src/ec/google/chromeec/ec_commands.h<br>@@ -597,7 +597,7 @@<br>   EC_HOST_EVENT_INVALID = 32<br> };<br> /* Host event mask */<br>-#define EC_HOST_EVENT_MASK(event_code) (1UL << ((event_code) - 1))<br>+#define EC_HOST_EVENT_MASK(event_code) (1ULL << ((event_code) - 1))<br> <br> /* Arguments at EC_LPC_ADDR_HOST_ARGS */<br> struct __ec_align4 ec_lpc_host_args {<br>diff --git a/src/ec/google/chromeec/smihandler.c b/src/ec/google/chromeec/smihandler.c<br>index 60b4d15..71f0d71 100644<br>--- a/src/ec/google/chromeec/smihandler.c<br>+++ b/src/ec/google/chromeec/smihandler.c<br>@@ -57,7 +57,7 @@<br>          ;<br> }<br> <br>-void chromeec_smi_sleep(int slp_type, uint32_t s3_mask, uint32_t s5_mask)<br>+void chromeec_smi_sleep(int slp_type, uint64_t s3_mask, uint64_t s5_mask)<br> {<br>  switch (slp_type) {<br>   case ACPI_S3:<br>@@ -78,8 +78,8 @@<br>      clear_pending_events();<br> }<br> <br>-void chromeec_smi_device_event_sleep(int slp_type, uint32_t s3_mask,<br>-                                     uint32_t s5_mask)<br>+void chromeec_smi_device_event_sleep(int slp_type, uint64_t s3_mask,<br>+                                     uint64_t s5_mask)<br> {<br>    switch (slp_type) {<br>   case ACPI_S3:<br>@@ -96,7 +96,7 @@<br>      google_chromeec_get_device_current_events();<br> }<br> <br>-void chromeec_smi_apmc(int apmc, uint32_t sci_mask, uint32_t smi_mask)<br>+void chromeec_smi_apmc(int apmc, uint64_t sci_mask, uint64_t smi_mask)<br> {<br>     switch (apmc) {<br>       case APM_CNT_ACPI_ENABLE:<br>diff --git a/src/ec/google/chromeec/smm.h b/src/ec/google/chromeec/smm.h<br>index 8265cdd..3d63a64 100644<br>--- a/src/ec/google/chromeec/smm.h<br>+++ b/src/ec/google/chromeec/smm.h<br>@@ -25,20 +25,20 @@<br>  * Set wake masks according to sleep type, clear SCI and SMI masks,<br>  * and clear any pending events.<br>  */<br>-void chromeec_smi_sleep(int slp_type, uint32_t s3_mask, uint32_t s5_mask);<br>+void chromeec_smi_sleep(int slp_type, uint64_t s3_mask, uint64_t s5_mask);<br> <br> /*<br>  * Set device event masks according to sleep type,<br>  * and clear any pending device events.<br>  */<br>-void chromeec_smi_device_event_sleep(int slp_type, uint32_t s3_mask,<br>-                              uint32_t s5_mask);<br>+void chromeec_smi_device_event_sleep(int slp_type, uint64_t s3_mask,<br>+                                    uint64_t s5_mask);<br> <br> /*<br>  * Provided the APMC command do the following while clearing pending events.<br>  * APM_CNT_ACPI_ENABLE: clear SMI mask. set SCI mask.<br>  * APM_CNT_ACPI_DISABLE: clear SCI mask. set SMI mask.<br>  */<br>-void chromeec_smi_apmc(int apmc, uint32_t sci_mask, uint32_t smi_mask);<br>+void chromeec_smi_apmc(int apmc, uint64_t sci_mask, uint64_t smi_mask);<br> <br> #endif /* _EC_GOOGLE_CHROMEEC_SMM_H */<br>diff --git a/src/ec/google/chromeec/switches.c b/src/ec/google/chromeec/switches.c<br>index e05d37c..1cf26a2 100644<br>--- a/src/ec/google/chromeec/switches.c<br>+++ b/src/ec/google/chromeec/switches.c<br>@@ -42,8 +42,8 @@<br> <br> int get_recovery_mode_retrain_switch(void)<br> {<br>-    uint32_t events;<br>-     const uint32_t mask =<br>+        uint64_t events;<br>+     const uint64_t mask =<br>                 EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT);<br> <br>     /*<br>@@ -53,7 +53,7 @@<br>         events = google_chromeec_get_events_b();<br> <br>   if (cbmem_possibly_online()) {<br>-               const uint32_t *events_save;<br>+         const uint64_t *events_save;<br> <br>               events_save = cbmem_find(CBMEM_ID_EC_HOSTEVENT);<br>              if (events_save != NULL)<br>diff --git a/src/mainboard/google/daisy/chromeos.c b/src/mainboard/google/daisy/chromeos.c<br>index dcac865..ae456b4 100644<br>--- a/src/mainboard/google/daisy/chromeos.c<br>+++ b/src/mainboard/google/daisy/chromeos.c<br>@@ -67,7 +67,7 @@<br> <br> int get_recovery_mode_switch(void)<br> {<br>- uint32_t ec_events;<br>+  uint64_t ec_events;<br> <br>        /* The GPIO is active low. */<br>         if (!gpio_get_value(GPIO_Y10)) // RECMODE_GPIO<br>diff --git a/src/mainboard/google/foster/chromeos.c b/src/mainboard/google/foster/chromeos.c<br>index bd17c4d..b4cb332 100644<br>--- a/src/mainboard/google/foster/chromeos.c<br>+++ b/src/mainboard/google/foster/chromeos.c<br>@@ -69,7 +69,7 @@<br> int get_recovery_mode_switch(void)<br> {<br> #if IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC)<br>-      uint32_t ec_events;<br>+  uint64_t ec_events;<br> <br>        ec_events = google_chromeec_get_events_b();<br>   return !!(ec_events &<br>diff --git a/src/mainboard/google/peach_pit/chromeos.c b/src/mainboard/google/peach_pit/chromeos.c<br>index 4cab7dc..e782986 100644<br>--- a/src/mainboard/google/peach_pit/chromeos.c<br>+++ b/src/mainboard/google/peach_pit/chromeos.c<br>@@ -67,7 +67,7 @@<br> <br> int get_recovery_mode_switch(void)<br> {<br>-        uint32_t ec_events;<br>+  uint64_t ec_events;<br> <br>        /* The GPIO is active low. */<br>         if (!gpio_get_value(GPIO_X07)) // RECMODE_GPIO<br>diff --git a/src/mainboard/google/veyron/chromeos.c b/src/mainboard/google/veyron/chromeos.c<br>index b8fb3bc..f99cd81 100644<br>--- a/src/mainboard/google/veyron/chromeos.c<br>+++ b/src/mainboard/google/veyron/chromeos.c<br>@@ -57,7 +57,7 @@<br> <br> int get_recovery_mode_switch(void)<br> {<br>-       uint32_t ec_events;<br>+  uint64_t ec_events;<br> <br>        /* The GPIO is active low. */<br>         if (!gpio_get(GPIO_RECOVERY))<br></pre><p>To view, visit <a href="https://review.coreboot.org/22551">change 22551</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/22551"/><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: If59f3f2b1a2aa5ce95883df3e72efc4a32de1190 </div>
<div style="display:none"> Gerrit-Change-Number: 22551 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Furquan Shaikh <furquan@google.com> </div>