diff options
-rw-r--r-- | common/mkbp_event.c | 12 | ||||
-rw-r--r-- | common/motion_sense.c | 2 | ||||
-rw-r--r-- | include/ec_commands.h | 4 | ||||
-rw-r--r-- | include/mkbp_event.h | 9 |
4 files changed, 25 insertions, 2 deletions
diff --git a/common/mkbp_event.c b/common/mkbp_event.c index d89e740568..160ae250c8 100644 --- a/common/mkbp_event.c +++ b/common/mkbp_event.c @@ -9,12 +9,14 @@ #include "chipset.h" #include "gpio.h" #include "host_command.h" +#include "hwtimer.h" #include "link_defs.h" #include "mkbp_event.h" #include "power.h" #include "util.h" static uint32_t events; +uint32_t mkbp_last_event_time; static void set_event(uint8_t event_type) { @@ -36,6 +38,13 @@ static int event_is_set(uint8_t event_type) */ static void set_host_interrupt(int active) { + static int old_active; + + interrupt_disable(); + + if (old_active == 0 && active == 1) + mkbp_last_event_time = __hw_clock_source_read(); + /* interrupt host by using active low EC_INT signal */ #ifdef CONFIG_MKBP_USE_HOST_EVENT if (active) @@ -43,6 +52,9 @@ static void set_host_interrupt(int active) #else gpio_set_level(GPIO_EC_INT_L, !active); #endif + + old_active = active; + interrupt_enable(); } /** diff --git a/common/motion_sense.c b/common/motion_sense.c index e95dd16691..3d7e3e5b98 100644 --- a/common/motion_sense.c +++ b/common/motion_sense.c @@ -189,7 +189,7 @@ static void motion_sense_get_fifo_info( fifo_info->count = fifo_queue_count; fifo_info->total_lost = motion_sense_fifo_lost; mutex_unlock(&g_sensor_mutex); - fifo_info->timestamp = __hw_clock_source_read(); + fifo_info->timestamp = mkbp_last_event_time; } #endif diff --git a/include/ec_commands.h b/include/ec_commands.h index cf7148e535..efbb23f785 100644 --- a/include/ec_commands.h +++ b/include/ec_commands.h @@ -2323,7 +2323,9 @@ struct __ec_todo_packed ec_response_motion_sense_fifo_info { uint16_t size; /* Amount of space used in the fifo */ uint16_t count; - /* Timestamp recorded in us */ + /* Timestamp recorded in us. + * aka accurate timestamp when host event was triggered. + */ uint32_t timestamp; /* Total amount of vector lost */ uint16_t total_lost; diff --git a/include/mkbp_event.h b/include/mkbp_event.h index cad43444b5..68e29c0cd4 100644 --- a/include/mkbp_event.h +++ b/include/mkbp_event.h @@ -9,6 +9,15 @@ #define __CROS_EC_MKBP_EVENT_H /* + * Last time the host received an interrupt. + * + * Retrieved via __hw_clock_source_read() as close as possible + * to the interrupt source. Intended to be virtually the same time the + * first line of the AP hard irq for the EC interrupt. + */ +extern uint32_t mkbp_last_event_time; + +/* * Sends an event to the AP. * * When this is called, the event data must be ready for query. Otherwise, |