summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/host_event_commands.c11
-rw-r--r--common/mkbp_event.c5
-rw-r--r--include/config.h3
-rw-r--r--include/ec_commands.h9
4 files changed, 21 insertions, 7 deletions
diff --git a/common/host_event_commands.c b/common/host_event_commands.c
index feb1d93552..4b9320c9ce 100644
--- a/common/host_event_commands.c
+++ b/common/host_event_commands.c
@@ -51,11 +51,13 @@ void host_set_events(uint32_t mask)
lpc_set_host_event_state(events);
#else
*(uint32_t *)host_get_memmap(EC_MEMMAP_HOST_EVENTS) = events;
-#endif
-
#ifdef CONFIG_MKBP_EVENT
- mkbp_send_event(EC_MKBP_EVENT_HOST_EVENT);
+#ifdef CONFIG_MKBP_USE_HOST_EVENT
+#error "Config error: MKBP must not be on top of host event"
#endif
+ mkbp_send_event(EC_MKBP_EVENT_HOST_EVENT);
+#endif /* CONFIG_MKBP_EVENT */
+#endif /* !CONFIG_LPC */
}
void host_clear_events(uint32_t mask)
@@ -70,11 +72,10 @@ void host_clear_events(uint32_t mask)
lpc_set_host_event_state(events);
#else
*(uint32_t *)host_get_memmap(EC_MEMMAP_HOST_EVENTS) = events;
-#endif
-
#ifdef CONFIG_MKBP_EVENT
mkbp_send_event(EC_MKBP_EVENT_HOST_EVENT);
#endif
+#endif /* !CONFIG_LPC */
}
static int host_get_next_event(uint8_t *out)
diff --git a/common/mkbp_event.c b/common/mkbp_event.c
index 95bb4fd3f5..60ca19d645 100644
--- a/common/mkbp_event.c
+++ b/common/mkbp_event.c
@@ -36,7 +36,12 @@ static int event_is_set(uint8_t event_type)
static void set_host_interrupt(int active)
{
/* interrupt host by using active low EC_INT signal */
+#ifdef CONFIG_MKBP_USE_HOST_EVENT
+ if (active)
+ host_set_single_event(EC_HOST_EVENT_MKBP);
+#else
gpio_set_level(GPIO_EC_INT_L, !active);
+#endif
}
void mkbp_send_event(uint8_t event_type)
diff --git a/include/config.h b/include/config.h
index c432d25c6c..fca9942f62 100644
--- a/include/config.h
+++ b/include/config.h
@@ -1395,6 +1395,9 @@
/* Support MKBP event */
#undef CONFIG_MKBP_EVENT
+/* MKBP events are sent using host event */
+#undef CONFIG_MKBP_USE_HOST_EVENT
+
/*
* With this option, we can define the MKBP wakeup events in this mask (as a
* white list) in board level, those events allow to interrupt AP during S3.
diff --git a/include/ec_commands.h b/include/ec_commands.h
index e17a784215..66c8f61077 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -437,6 +437,9 @@ enum host_event_code {
/* EC RTC event occurred */
EC_HOST_EVENT_RTC = 26,
+ /* Emulate MKBP event */
+ EC_HOST_EVENT_MKBP = 27,
+
/*
* The high bit of the event mask is not used as a host event code. If
* it reads back as set, then the entire event mask should be
@@ -3198,8 +3201,10 @@ struct ec_params_entering_mode {
#define VBOOT_MODE_RECOVERY 2
/*****************************************************************************/
-/* I2C passthru protection command: Protects I2C tunnels against access on
- * certain addresses (board-specific). */
+/*
+ * I2C passthru protection command: Protects I2C tunnels against access on
+ * certain addresses (board-specific).
+ */
#define EC_CMD_I2C_PASSTHRU_PROTECT 0xb7
enum ec_i2c_passthru_protect_subcmd {