summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-12-30 19:47:49 -0700
committerCommit Bot <commit-bot@chromium.org>2021-01-21 23:59:44 +0000
commit2547bf1c0c076e88db58baf5a2ae083d9bfd2eb9 (patch)
tree954a7de7701d2fe8cca9f322ca556ec2a100c21f
parent51dfc5be5bcbe5fc1445f90ce6c4bd3b51040f0e (diff)
downloadchrome-ec-2547bf1c0c076e88db58baf5a2ae083d9bfd2eb9.tar.gz
reland: zephyr: Update hooks shim to match ECOS
At present the hooks declaration in Zephyr doesn't use const but does use static. This makes it incompatible with ECOS, even if it might be more strictly correct. Update the hook to fix this so that we can build the missing USB code. Typically Zephyr would put const data in the rodata section but that is write-protected with native_posix. So force it into .data instead. BUG=b:175434113 BRANCH=none TEST=make BOARD=volteer build zephyr on volteer Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2611895 Reviewed-by: Jack Rosenthal <jrosenth@chromium.org> Change-Id: I470c9a6b2f905be9f512b0d555f33f0998412975 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2617377
-rw-r--r--common/usb_common.c2
-rw-r--r--common/usbc/usb_tc_drp_acc_trysrc_sm.c2
-rw-r--r--zephyr/shim/include/zephyr_hooks_shim.h10
-rw-r--r--zephyr/shim/src/hooks.c13
4 files changed, 16 insertions, 11 deletions
diff --git a/common/usb_common.c b/common/usb_common.c
index 05f464cc00..37cd0886bd 100644
--- a/common/usb_common.c
+++ b/common/usb_common.c
@@ -701,7 +701,6 @@ __overridable bool vboot_allow_usb_pd(void)
return false;
}
-#ifndef CONFIG_ZEPHYR /* TODO(b/176110981) */
/* VDM utility functions */
static void pd_usb_billboard_deferred(void)
{
@@ -719,7 +718,6 @@ static void pd_usb_billboard_deferred(void)
}
}
DECLARE_DEFERRED(pd_usb_billboard_deferred);
-#endif /* CONFIG_ZEPHYR */
#ifdef CONFIG_USB_PD_DISCHARGE
static void gpio_discharge_vbus(int port, int enable)
diff --git a/common/usbc/usb_tc_drp_acc_trysrc_sm.c b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
index 5bd8d4e56d..f63fd5075f 100644
--- a/common/usbc/usb_tc_drp_acc_trysrc_sm.c
+++ b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
@@ -2243,13 +2243,11 @@ static void tc_attach_wait_snk_run(const int port)
set_state_tc(port, TC_ATTACHED_SNK);
}
-#ifndef CONFIG_ZEPHYR /* TODO(b/176110981) */
if (IS_ENABLED(CONFIG_USB_PE_SM) &&
IS_ENABLED(CONFIG_USB_PD_ALT_MODE_DFP)) {
hook_call_deferred(&pd_usb_billboard_deferred_data,
PD_T_AME);
}
-#endif
}
}
diff --git a/zephyr/shim/include/zephyr_hooks_shim.h b/zephyr/shim/include/zephyr_hooks_shim.h
index 3bb0854b21..e19f311af5 100644
--- a/zephyr/shim/include/zephyr_hooks_shim.h
+++ b/zephyr/shim/include/zephyr_hooks_shim.h
@@ -25,21 +25,25 @@ struct deferred_data {
/**
* See include/hooks.h for documentation.
*/
-int hook_call_deferred(struct deferred_data *data, int us);
+int hook_call_deferred(const struct deferred_data *data, int us);
/**
* Runtime helper to setup deferred data.
*
* @param data The struct deferred_data.
*/
-void zephyr_shim_setup_deferred(struct deferred_data *data);
+void zephyr_shim_setup_deferred(const struct deferred_data *data);
/**
* See include/hooks.h for documentation.
+ *
+ * Typically Zephyr would put const data in the rodata section but that is
+ * write-protected with native_posix. So force it into .data instead.
*/
#define DECLARE_DEFERRED(routine) _DECLARE_DEFERRED(routine)
#define _DECLARE_DEFERRED(_routine) \
- static __maybe_unused struct deferred_data _routine##_data = { \
+ __maybe_unused const struct deferred_data _routine##_data \
+ __attribute__((section(".data.hooks"))) = { \
.routine = _routine, \
}; \
static int _setup_deferred_##_routine(const struct device *unused) \
diff --git a/zephyr/shim/src/hooks.c b/zephyr/shim/src/hooks.c
index 5011ed79ea..e4b1ea8791 100644
--- a/zephyr/shim/src/hooks.c
+++ b/zephyr/shim/src/hooks.c
@@ -42,17 +42,22 @@ static int init_deferred_work_queue(const struct device *unused)
}
SYS_INIT(init_deferred_work_queue, APPLICATION, 0);
-void zephyr_shim_setup_deferred(struct deferred_data *data)
+void zephyr_shim_setup_deferred(const struct deferred_data *data)
{
- k_delayed_work_init(&data->delayed_work, deferred_work_queue_handler);
+ struct deferred_data *non_const = (struct deferred_data *)data;
+
+ k_delayed_work_init(&non_const->delayed_work,
+ deferred_work_queue_handler);
}
-int hook_call_deferred(struct deferred_data *data, int us)
+int hook_call_deferred(const struct deferred_data *data, int us)
{
+ struct deferred_data *non_const = (struct deferred_data *)data;
int rv;
rv = k_delayed_work_submit_to_queue(&deferred_work_queue,
- &data->delayed_work, K_USEC(us));
+ &non_const->delayed_work,
+ K_USEC(us));
if (rv < 0)
cprints(CC_HOOK, "Warning: deferred call not submitted.");
return rv;