Skip to content

Commit

Permalink
hla/stlink: Re-order trace parameters to allow trace output file to b…
Browse files Browse the repository at this point in the history
…e optional

Re-order the "trace" parameters to allow the raw capture (log) file to
be an optional feature. The clock frequency for calculating the "Async
Clock Prescalar" is always required when enabling trace processing and
is now the first "required" parameter.

The ST-Link driver is updated to use the (required parameter)
"trace_source_hz" non-zero value as the indicator of trace being
required, rather than the now optional output file descriptor being
non-NULL.

Background: This patch is groundwork for extending the OpenOCD SWO
capture to implement other (OpenOCD built-in) ITM/DWT processing where
the core trace support is required, but there is no requirement to
store raw trace data to a configured host file. By itself this patch
is almost a functional NOP, since without the other processing in
place there is no reason NOT to specify a capture file.

Change-Id: Ibc385dd0a7adaf9bd652bceded27262fef35fd59
Signed-off-by: James G. Smith <[email protected]>
Reviewed-on: http://openocd.zylin.com/1660
Tested-by: jenkins
Reviewed-by: Mathias Küster <[email protected]>
Reviewed-by: Spencer Oliver <[email protected]>
  • Loading branch information
James G. Smith authored and ntfreak committed Oct 29, 2013
1 parent e3229bd commit 0ebf1eb
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 19 deletions.
10 changes: 5 additions & 5 deletions doc/openocd.texi
Original file line number Diff line number Diff line change
Expand Up @@ -3045,11 +3045,11 @@ The vendor ID and product ID of the device.
Manually sets the stlink api used, valid options are 1 or 2. (@b{STLINK Only}).
@end deffn

@deffn {Config Command} {trace} output_file_path source_clock_hz
Enable SWO tracing (if supported), trace data is appended to the specified
output file and the file is created if it does not exist. The source clock
rate for the trace port must be specified, this is typically the CPU clock
rate.
@deffn {Config Command} {trace} source_clock_hz [output_file_path]
Enable SWO tracing (if supported). The source clock rate for the
trace port must be specified, this is typically the CPU clock rate. If
the optional output file is specified then raw trace data is appended
to the file, and the file is created if it does not exist.
@end deffn
@end deffn

Expand Down
12 changes: 7 additions & 5 deletions src/jtag/drivers/stlink_usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -855,9 +855,11 @@ static void stlink_usb_trace_read(void *handle)

res = stlink_usb_read_trace(handle, buf, size);
if (res == ERROR_OK) {
/* Log retrieved trace output */
if (fwrite(buf, 1, size, h->trace.output_f) > 0)
fflush(h->trace.output_f);
if (h->trace.output_f) {
/* Log retrieved trace output */
if (fwrite(buf, 1, size, h->trace.output_f) > 0)
fflush(h->trace.output_f);
}
}
}
}
Expand Down Expand Up @@ -1113,7 +1115,7 @@ static int stlink_usb_run(void *handle)
res = stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_DEBUGEN);

/* Try to start tracing, if requested */
if (res == ERROR_OK && h->trace.output_f) {
if (res == ERROR_OK && h->trace.source_hz) {
if (stlink_usb_trace_enable(handle) == ERROR_OK)
LOG_DEBUG("Tracing: enabled\n");
else
Expand Down Expand Up @@ -1732,7 +1734,7 @@ static int stlink_usb_open(struct hl_interface_param_s *param, void **fd)
/* set the used jtag api, this will default to the newest supported version */
h->jtag_api = api;

if (h->jtag_api >= 2 && param->trace_f && param->trace_source_hz > 0) {
if (h->jtag_api >= 2 && param->trace_source_hz > 0) {
uint32_t prescale;

prescale = param->trace_source_hz > STLINK_TRACE_MAX_HZ ?
Expand Down
20 changes: 11 additions & 9 deletions src/jtag/hla/hla_interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ static int hl_interface_quit(void)
fclose(hl_if.param.trace_f);
hl_if.param.trace_f = NULL;
}
hl_if.param.trace_source_hz = 0;

return ERROR_OK;
}
Expand Down Expand Up @@ -230,22 +231,23 @@ COMMAND_HANDLER(stlink_interface_handle_api_command)

COMMAND_HANDLER(interface_handle_trace_command)
{
FILE *f;
FILE *f = NULL;
unsigned source_hz;

if (CMD_ARGC != 2)
if ((CMD_ARGC < 1) || (CMD_ARGC > 2))
return ERROR_COMMAND_SYNTAX_ERROR;

f = fopen(CMD_ARGV[0], "a");
if (!f)
return ERROR_COMMAND_SYNTAX_ERROR;

COMMAND_PARSE_NUMBER(uint, CMD_ARGV[1], source_hz);
COMMAND_PARSE_NUMBER(uint, CMD_ARGV[0], source_hz);
if (source_hz == 0) {
fclose(f);
return ERROR_COMMAND_SYNTAX_ERROR;
}

if (CMD_ARGC == 2) {
f = fopen(CMD_ARGV[0], "a");
if (!f)
return ERROR_COMMAND_SYNTAX_ERROR;
}

hl_if.param.trace_f = f;
hl_if.param.trace_source_hz = source_hz;

Expand Down Expand Up @@ -293,7 +295,7 @@ static const struct command_registration hl_interface_command_handlers[] = {
.handler = &interface_handle_trace_command,
.mode = COMMAND_CONFIG,
.help = "configure trace reception",
.usage = "destination_path source_lock_hz",
.usage = "source_lock_hz [destination_path]",
},
COMMAND_REGISTRATION_DONE
};
Expand Down

0 comments on commit 0ebf1eb

Please sign in to comment.