+/* SPDX-License-Identifier: GPL-2.0-only */
+
/*
- * SPDX-License-Identifier: GPL-2.0
- *
* Copyright (c) 2018 National Instruments Corp
* Author: Moritz Fischer <moritz.fischer@ettus.com>
*
* Chromium-EC RTOS Task Awareness
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <helper/bits.h>
#include <rtos/rtos.h>
#include <target/target.h>
#include <target/target_type.h>
#define CROS_EC_MAX_TASKS 32
#define CROS_EC_MAX_NAME 200
#define CROS_EC_IDLE_STRING "<< idle >>"
-#define BIT(x) (1 << (x))
struct chromium_ec_params {
const char *target_name;
.task_offset_sp = 0,
.task_offset_events = 4,
.task_offset_runtime = 8,
- .stacking = &rtos_standard_Cortex_M3_stacking,
+ .stacking = &rtos_standard_cortex_m3_stacking,
},
{
.task_offset_sp = 0,
.task_offset_events = 4,
.task_offset_runtime = 8,
- .stacking = &rtos_standard_Cortex_M3_stacking,
+ .stacking = &rtos_standard_cortex_m3_stacking,
},
};
};
enum chromium_ec_symbol_values {
- CHROMIUM_EC_VAL_start_called = 0,
- CHROMIUM_EC_VAL_current_task,
- CHROMIUM_EC_VAL_tasks,
- CHROMIUM_EC_VAL_tasks_enabled,
- CHROMIUM_EC_VAL_tasks_ready,
- CHROMIUM_EC_VAL_task_names,
- CHROMIUM_EC_VAL_build_info,
+ CHROMIUM_EC_VAL_START_CALLED = 0,
+ CHROMIUM_EC_VAL_CURRENT_TASK,
+ CHROMIUM_EC_VAL_TASKS,
+ CHROMIUM_EC_VAL_TASKS_ENABLED,
+ CHROMIUM_EC_VAL_TASKS_READY,
+ CHROMIUM_EC_VAL_TASK_NAMES,
+ CHROMIUM_EC_VAL_BUILD_INFO,
CHROMIUM_EC_VAL_COUNT,
};
if (!target || !target->rtos || !target->rtos->symbols)
return false;
- for (sym = CHROMIUM_EC_VAL_start_called;
+ for (sym = CHROMIUM_EC_VAL_START_CALLED;
sym < CHROMIUM_EC_VAL_COUNT; sym++) {
if (target->rtos->symbols[sym].address) {
LOG_DEBUG("Chromium-EC: Symbol \"%s\" found",
}
ret = target_read_buffer(target,
- target->rtos->symbols[CHROMIUM_EC_VAL_build_info].address,
+ target->rtos->symbols[CHROMIUM_EC_VAL_BUILD_INFO].address,
sizeof(build_info_buf),
(uint8_t *)build_info_buf);
LOG_INFO("Chromium-EC: Buildinfo: %s", build_info_buf);
return target->rtos->symbols &&
- target->rtos->symbols[CHROMIUM_EC_VAL_start_called].address;
+ target->rtos->symbols[CHROMIUM_EC_VAL_START_CALLED].address;
}
static int chromium_ec_create(struct target *target)
return ERROR_FAIL;
return target_read_u32(rtos->target,
- rtos->symbols[CHROMIUM_EC_VAL_current_task].address,
+ rtos->symbols[CHROMIUM_EC_VAL_CURRENT_TASK].address,
current_task);
}
int ret, t, found;
ret = target_read_u32(rtos->target,
- rtos->symbols[CHROMIUM_EC_VAL_tasks_enabled].address,
+ rtos->symbols[CHROMIUM_EC_VAL_TASKS_ENABLED].address,
&tasks_enabled);
if (ret != ERROR_OK) {
LOG_ERROR("Failed to determine #of tasks");
/* One check if task switching has started ... */
start_called = 0;
- ret = target_read_u32(rtos->target, rtos->symbols[CHROMIUM_EC_VAL_start_called].address,
+ ret = target_read_u32(rtos->target, rtos->symbols[CHROMIUM_EC_VAL_START_CALLED].address,
&start_called);
if (ret != ERROR_OK) {
LOG_ERROR("Failed to load start_called");
}
tasks_enabled = 0;
- ret = target_read_u32(rtos->target, rtos->symbols[CHROMIUM_EC_VAL_tasks_enabled].address,
+ ret = target_read_u32(rtos->target, rtos->symbols[CHROMIUM_EC_VAL_TASKS_ENABLED].address,
&tasks_enabled);
if (ret != ERROR_OK) {
LOG_ERROR("Failed to load tasks_enabled");
}
tasks_ready = 0;
- ret = target_read_u32(rtos->target, rtos->symbols[CHROMIUM_EC_VAL_tasks_ready].address,
+ ret = target_read_u32(rtos->target, rtos->symbols[CHROMIUM_EC_VAL_TASKS_READY].address,
&tasks_ready);
if (ret != ERROR_OK) {
LOG_ERROR("Failed to load tasks_ready");
return ret;
}
- thread_ptr = rtos->symbols[CHROMIUM_EC_VAL_tasks].address;
+ thread_ptr = rtos->symbols[CHROMIUM_EC_VAL_TASKS].address;
tasks_found = 0;
for (t = 0; t < CROS_EC_MAX_TASKS; t++) {
rtos->thread_details[tasks_found].threadid = thread_ptr;
ret = target_read_u32(rtos->target,
- rtos->symbols[CHROMIUM_EC_VAL_task_names].address +
+ rtos->symbols[CHROMIUM_EC_VAL_TASK_NAMES].address +
params->ptr_size * t, &name_ptr);
if (ret != ERROR_OK) {
LOG_ERROR("Failed to read name_ptr");
return ERROR_FAIL;
ret = target_read_u32(rtos->target,
- rtos->symbols[CHROMIUM_EC_VAL_tasks].address +
+ rtos->symbols[CHROMIUM_EC_VAL_TASKS].address +
params->task_offset_next * t,
&stack_ptr);
if (ret != ERROR_OK) {