diff options
Diffstat (limited to 'gxp-firmware-data.c')
-rw-r--r-- | gxp-firmware-data.c | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/gxp-firmware-data.c b/gxp-firmware-data.c index 2af20e6..f782fcd 100644 --- a/gxp-firmware-data.c +++ b/gxp-firmware-data.c @@ -9,6 +9,7 @@ #include <linux/dma-mapping.h> #include <linux/genalloc.h> +#include "gxp.h" #include "gxp-firmware-data.h" #include "gxp-host-device-structs.h" #include "gxp-internal.h" @@ -94,7 +95,7 @@ struct gxp_fw_data_manager { struct fw_memory_allocator *allocator; struct fw_memory sys_desc_mem; struct fw_memory wdog_mem; - struct fw_memory logging_tracing_mem; + struct fw_memory telemetry_mem; }; /* A container holding information for a single GXP application. */ @@ -272,22 +273,22 @@ static struct fw_memory init_watchdog(struct gxp_fw_data_manager *mgr) return mem; } -static struct fw_memory init_logging_tracing(struct gxp_fw_data_manager *mgr) +static struct fw_memory init_telemetry(struct gxp_fw_data_manager *mgr) { - struct gxp_logging_tracing_descriptor *lt_region; + struct gxp_telemetry_descriptor *tel_region; struct fw_memory mem; - mem_alloc_allocate(mgr->allocator, &mem, sizeof(*lt_region), - __alignof__(struct gxp_logging_tracing_descriptor)); + mem_alloc_allocate(mgr->allocator, &mem, sizeof(*tel_region), + __alignof__(struct gxp_telemetry_descriptor)); - lt_region = mem.host_addr; + tel_region = mem.host_addr; /* - * Logging and tracing is disabled for now. + * Telemetry is disabled for now. * Subsuequent calls to the FW data module can be used to populate or * depopulate the descriptor pointers on demand. */ - memset(lt_region, 0x00, sizeof(*lt_region)); + memset(tel_region, 0x00, sizeof(*tel_region)); return mem; } @@ -595,10 +596,9 @@ int gxp_fw_data_init(struct gxp_dev *gxp) mgr->wdog_mem = init_watchdog(mgr); mgr->system_desc->watchdog_dev_addr = mgr->wdog_mem.device_addr; - /* Allocate the descriptor for device-side logging and tracing */ - mgr->logging_tracing_mem = init_logging_tracing(mgr); - mgr->system_desc->logging_tracing_dev_addr = - mgr->logging_tracing_mem.device_addr; + /* Allocate the descriptor for device-side telemetry */ + mgr->telemetry_mem = init_telemetry(mgr); + mgr->system_desc->telemetry_dev_addr = mgr->telemetry_mem.device_addr; return res; @@ -689,7 +689,7 @@ void gxp_fw_data_destroy(struct gxp_dev *gxp) { struct gxp_fw_data_manager *mgr = gxp->data_mgr; - mem_alloc_free(mgr->allocator, &mgr->logging_tracing_mem); + mem_alloc_free(mgr->allocator, &mgr->telemetry_mem); mem_alloc_free(mgr->allocator, &mgr->wdog_mem); mem_alloc_free(mgr->allocator, &mgr->sys_desc_mem); mem_alloc_destroy(mgr->allocator); @@ -708,3 +708,27 @@ void gxp_fw_data_destroy(struct gxp_dev *gxp) gxp->data_mgr = NULL; } } + +int gxp_fw_data_set_telemetry_descriptors(struct gxp_dev *gxp, u8 type, + u32 *buffer_addrs, + u32 per_buffer_size) +{ + struct gxp_telemetry_descriptor *descriptor = + gxp->data_mgr->telemetry_mem.host_addr; + struct telemetry_descriptor *core_descriptors; + int i; + + if (type == GXP_TELEMETRY_TYPE_LOGGING) + core_descriptors = descriptor->per_core_loggers; + else if (type == GXP_TELEMETRY_TYPE_TRACING) + core_descriptors = descriptor->per_core_tracers; + else + return -EINVAL; + + for (i = 0; i < NUM_CORES; i++) { + core_descriptors[i].buffer_addr = buffer_addrs[i]; + core_descriptors[i].buffer_size = per_buffer_size; + } + + return 0; +} |