Add 'turbo' logging feature. When enabled, short logs (no argument or one numeric, 32 bit argument) are handled in a special way that is much faster than the default one (5-10x faster). Additionally, there is an option to remove all other logs from the system which allows to not include almost any logging framework code in the binary (~170 bytes of code is needed). It may be especially valueable for memory constraint targets (ppr, flpr) where with only 170 byte of code (+code for each log message) we can provide limited formatted string logging support. 'Turbo' logging is using following to achieve that: - logging strings are put into a memory section and additional memory section is created which holds addresses of those strings. Index in that array is used to identify a string (32 bit address is encoded into a smaller number, 15 bits is more than enough). This index is used for a STMESP register set (there are 2^16 available). So STMESP channel encodes string. - Logging level is stringified and prepended to a string - Source ID is encoded by using DM16 (so far not used). - Log without arguments is written as DMTS16 - Log with one argumetn is written as DM16+DMTS32 Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
149 lines
4.2 KiB
Plaintext
149 lines
4.2 KiB
Plaintext
# Copyright (c) 2022 Nordic Semiconductor ASA
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
menu "Frontends"
|
|
|
|
config LOG_FRONTEND_DICT_UART
|
|
bool "UART dictionary frontend"
|
|
select LOG_DICTIONARY_SUPPORT
|
|
select MPSC_PBUF
|
|
depends on UART_ASYNC_API || UART_INTERRUPT_DRIVEN
|
|
imply LOG_FMT_SECTION
|
|
imply LOG_FMT_SECTION_STRIP if !LOG_ALWAYS_RUNTIME
|
|
help
|
|
Frontend sends data in binary dictionary mode.
|
|
|
|
if LOG_FRONTEND_DICT_UART
|
|
|
|
config LOG_FRONTEND_DICT_UART_BUFFER_SIZE
|
|
int "Buffer size"
|
|
default 1024
|
|
help
|
|
Number of bytes dedicated for buffering data
|
|
|
|
config LOG_FRONTEND_DICT_UART_DROPPED_NOTIFY_PERIOD
|
|
int "Dropped notification period"
|
|
default 500
|
|
help
|
|
Determines how often a report about dropped messages is printed. Given
|
|
in milliseconds.
|
|
|
|
endif
|
|
|
|
config LOG_FRONTEND_STMESP
|
|
bool "Coresight STM frontend"
|
|
imply ARM_ON_ENTER_CPU_IDLE_HOOK if LOG_FRONTEND_STMESP_FLUSH_COUNT > 0
|
|
|
|
if LOG_FRONTEND_STMESP
|
|
|
|
config LOG_FRONTEND_STMESP_DICT
|
|
bool
|
|
default y if !LOG_FRONTEND_STMESP_FSC
|
|
select LOG_FRONTEND_OPT_API
|
|
select LOG_DICTIONARY_DB
|
|
imply LOG_FMT_SECTION
|
|
imply LOG_FMT_SECTION_STRIP
|
|
|
|
config LOG_FRONTEND_STMESP_FSC
|
|
bool "Send fully self-contained messages"
|
|
select LOG_MSG_APPEND_RO_STRING_LOC if !(NRF_ETR || \
|
|
SOC_NRF54H20_CPUPPR || SOC_NRF54H20_CPUFLPR)
|
|
|
|
config LOG_FRONTEND_STMESP_FLUSH_COUNT
|
|
int "Number of flushing words"
|
|
default 4
|
|
help
|
|
Before going to sleep CPU shall write to STM some dummy data to ensure
|
|
that any buffered data goes to TPIU/ETR.
|
|
|
|
config LOG_FRONTEND_STMESP_EARLY_BUF_SIZE
|
|
int "Buffer size to store early messages"
|
|
default 0
|
|
help
|
|
Frontend cannot write to STM if it is used with ETR buffer unless ETR is
|
|
initialized and memory is properly configured (privileges). Data is stored
|
|
in the buffer and flushed to the STMESP once the pipeline is ready.
|
|
|
|
config LOG_FRONTEND_STMESP_DICT_VER
|
|
def_int 0
|
|
|
|
config LOG_FRONTEND_STMESP_TURBO_LOG
|
|
bool "Optimize short_logs"
|
|
select LOG_CUSTOM_HEADER
|
|
default y if (NRF_ETR || SOC_NRF54H20_CPUPPR || SOC_NRF54H20_CPUFLPR) \
|
|
&& LOG_FRONTEND_STMESP_FSC
|
|
help
|
|
When enabled, then logging messages with 0 and 1 numeric argument are
|
|
optimized and handled much faster than others.
|
|
|
|
config LOG_FRONTEND_STMESP_TURBO_DROP_OTHERS
|
|
bool "Drop all logs except turbo logs"
|
|
help
|
|
Option can be enabled for memory constraint cases to remove all logging
|
|
related code except turbo logs.
|
|
|
|
config LOG_FRONTEND_STMESP_TURBO_LOG_BASE
|
|
def_int 32768
|
|
|
|
config LOG_FRONTEND_STPESP_TURBO_SOURCE_PORT_ID
|
|
def_int 65535
|
|
depends on LOG_FRONTEND_STMESP_TURBO_LOG
|
|
|
|
config LOG_FRONTEND_STMESP_GUARANTEED_ACCESS
|
|
bool "Use STMESP guaranteed access"
|
|
help
|
|
When enabled, accessing STMESP registers will stall if write cannot be
|
|
performed (e.g. ETR buffer is full).
|
|
|
|
config LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP
|
|
bool "Generate timestamp and marker at message end"
|
|
help
|
|
Generate a zero data byte with timestamp and marker at message end,
|
|
instead of generating a timestamp and marker at message start and
|
|
a flag at end. This can be used to maintain compatibility with
|
|
certain decoders.
|
|
|
|
endif # LOG_FRONTEND_STMESP
|
|
|
|
config LOG_FRONTEND_STMESP_DEMUX
|
|
bool "Demultiplexer of logging packets from STM stream"
|
|
select MPSC_PBUF
|
|
help
|
|
Module demultiplexes messages encoded in STPv2 stream. Messages may
|
|
be interleaved because they may come from multiple cores (majors).
|
|
There are 3 types of messages: logging, tracepoints and HW events.
|
|
|
|
if LOG_FRONTEND_STMESP_DEMUX
|
|
|
|
config LOG_FRONTEND_STMESP_DEMUX_ACTIVE_PACKETS
|
|
int "Active packets"
|
|
default 12
|
|
|
|
config LOG_FRONTEND_STMESP_DEMUX_BUFFER_SIZE
|
|
int "Buffer size"
|
|
default 1024
|
|
|
|
config LOG_FRONTEND_STMESP_DEMUX_MAX_UTILIZATION
|
|
bool "Track maximum utilization"
|
|
|
|
config LOG_FRONTEND_STMESP_DEMUX_GC_TIMEOUT
|
|
int "Message timeout (in milliseconds)"
|
|
default 100
|
|
help
|
|
If log message is not completed within that time frame it is discarded.
|
|
|
|
endif # LOG_FRONTEND_STMESP_DEMUX
|
|
|
|
config LOG_FRONTEND_STMESP_FLUSH_PORT_ID
|
|
def_int 0
|
|
depends on LOG_FRONTEND_STMESP_DEMUX || LOG_FRONTEND_STMESP
|
|
|
|
config LOG_FRONTEND_STMESP_TP_CHAN_BASE
|
|
def_int 255
|
|
depends on LOG_FRONTEND_STMESP_DEMUX || LOG_FRONTEND_STMESP
|
|
help
|
|
Do not change this value as it is aligned with host decoder (nrfutil trace).
|
|
|
|
|
|
endmenu
|