diff options
author | Hyungwoo Yang <hyungwoo.yang@intel.corp-partner.google.com> | 2021-01-19 23:17:30 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-01-26 19:48:44 +0000 |
commit | 8ba2a0dd442aff3dd8cdd486d5c86b15108c1b90 (patch) | |
tree | 4438f9939fe8d369c15e682200b6b240a212fbaf /common/mkbp_event.c | |
parent | 1e14f4669113703fb496406e6a58602bc17a4001 (diff) | |
download | chrome-ec-8ba2a0dd442aff3dd8cdd486d5c86b15108c1b90.tar.gz |
zephyr: add MKBP support
Add MKBP support to zephyr.
BUG=b:173507858
BRANCH=none
TEST=make buildall -j8
build volteer on zephyr
Signed-off-by: Hyungwoo Yang <hyungwoo.yang@intel.corp-partner.google.com>
Change-Id: I9b7d979241b0df5dc0fa5d9741f05dc9875189ab
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2639854
Reviewed-by: Keith Short <keithshort@chromium.org>
Diffstat (limited to 'common/mkbp_event.c')
-rw-r--r-- | common/mkbp_event.c | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/common/mkbp_event.c b/common/mkbp_event.c index 800a95fc16..ac922613d8 100644 --- a/common/mkbp_event.c +++ b/common/mkbp_event.c @@ -48,7 +48,7 @@ enum interrupt_state { }; struct mkbp_state { - struct mutex lock; + mutex_t lock; uint32_t events; enum interrupt_state interrupt; /* @@ -76,10 +76,23 @@ static uint32_t mkbp_event_wake_mask = CONFIG_MKBP_EVENT_WAKEUP_MASK; static uint32_t mkbp_host_event_wake_mask = CONFIG_MKBP_HOST_EVENT_WAKEUP_MASK; #endif /* CONFIG_MKBP_HOST_EVENT_WAKEUP_MASK */ +#ifdef CONFIG_ZEPHYR +static int init_mkbp_mutex(const struct device *dev) +{ + ARG_UNUSED(dev); + + k_mutex_init(&state.lock); + + return 0; +} +SYS_INIT(init_mkbp_mutex, POST_KERNEL, 50); +#endif /* CONFIG_ZEPHYR */ + #if defined(CONFIG_MKBP_USE_GPIO) || \ defined(CONFIG_MKBP_USE_GPIO_AND_HOST_EVENT) static int mkbp_set_host_active_via_gpio(int active, uint32_t *timestamp) { + uint32_t lock_key; /* * If we want to take a timestamp, then disable interrupts temporarily * to ensure that the timestamp is as close as possible to the setting @@ -87,14 +100,14 @@ static int mkbp_set_host_active_via_gpio(int active, uint32_t *timestamp) * taking the timestamp and setting the gpio) */ if (timestamp) { - interrupt_disable(); + lock_key = irq_lock(); *timestamp = __hw_clock_source_read(); } gpio_set_level(GPIO_EC_INT_L, !active); if (timestamp) - interrupt_enable(); + irq_unlock(lock_key); #ifdef CONFIG_MKBP_USE_GPIO_AND_HOST_EVENT /* @@ -363,6 +376,24 @@ static int take_event_if_set(uint8_t event_type) return taken; } +static const struct mkbp_event_source *find_mkbp_event_source(uint8_t type) +{ +#ifdef CONFIG_ZEPHYR + return zephyr_find_mkbp_event_source(type); +#else + const struct mkbp_event_source *src; + + for (src = __mkbp_evt_srcs; src < __mkbp_evt_srcs_end; ++src) + if (src->event_type == type) + break; + + if (src == __mkbp_evt_srcs_end) + return NULL; + + return src; +#endif +} + static enum ec_status mkbp_get_next_event(struct host_cmd_handler_args *args) { static int last; @@ -393,11 +424,8 @@ static enum ec_status mkbp_get_next_event(struct host_cmd_handler_args *args) evt = (i + last) % EC_MKBP_EVENT_COUNT; last = evt + 1; - for (src = __mkbp_evt_srcs; src < __mkbp_evt_srcs_end; ++src) - if (src->event_type == evt) - break; - - if (src == __mkbp_evt_srcs_end) + src = find_mkbp_event_source(evt); + if (src == NULL) return EC_RES_ERROR; resp[0] = evt; /* Event type */ |