summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/mkbp_event.c12
-rw-r--r--common/motion_sense.c2
-rw-r--r--include/ec_commands.h4
-rw-r--r--include/mkbp_event.h9
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,