diff options
-rw-r--r-- | common/host_event_commands.c | 11 | ||||
-rw-r--r-- | common/mkbp_event.c | 5 | ||||
-rw-r--r-- | include/config.h | 3 | ||||
-rw-r--r-- | include/ec_commands.h | 9 |
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 { |