Skip to content

Commit 1431303

Browse files
kv2019imarc-hb
authored andcommitted
check-sof-logger: add support for mtrace log with IPC4
Add support for "mtrace" debugfs interface implemented by SOF driver when it is used in IPC4 mode. Use this instead of cavstool.py. BugLink: #970 Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
1 parent d52a316 commit 1431303

2 files changed

Lines changed: 104 additions & 44 deletions

File tree

case-lib/lib.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ check_error_in_file()
410410
# -B 2 shows the header line when the first etrace message is an ERROR
411411
# -A 1 shows whether the ERROR is last or not.
412412
if (set -x
413-
grep -B 2 -A 1 -i -w -e 'ERR' -e 'ERROR' "$1"
413+
grep -B 2 -A 1 -i --word-regexp -e 'ERR' -e 'ERROR' -e '<err>' "$1"
414414
); then
415415
return 1
416416
fi

test-case/check-sof-logger.sh

Lines changed: 103 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -77,60 +77,112 @@ run_loggers()
7777
local collect_secs=2
7878

7979
if is_zephyr; then
80-
local cavstool
81-
cavstool=$(type -p cavstool.py)
80+
# Collect logs from Zephyr logging backends
8281

83-
dlogi "Trying to get Zephyr logs from etrace with background $cavstool ..."
82+
if is_ipc4 ; then
83+
# Get logs via SOF kernel IPC4 SRAM logging interfaces (mtrace)
84+
85+
if [ -z "$MTRACE" ]; then
86+
MTRACE=$(command -v mtrace-reader.py) || {
87+
die "No mtrace-reader.py found in PATH"
88+
}
89+
fi
90+
local mtracetool="$MTRACE"
91+
dlogi "Trying to get Zephyr logs from mtrace with background $mtracetool ..."
92+
dlogc \
93+
"sudo $mtracetool > $etrace_file 2> $etrace_stderr_file"
94+
# shellcheck disable=SC2024
95+
sudo timeout -k 3 "$collect_secs" \
96+
"$mtracetool" > "$etrace_file" 2> "$etrace_stderr_file" & mtracetoolPID=$!
97+
else
98+
# SOF kernel IPC3 SRAM logging interface (etrace)
99+
100+
local cavstool
101+
cavstool=$(type -p cavstool.py)
102+
103+
dlogi "Trying to get Zephyr logs from etrace with background $cavstool ..."
104+
dlogc \
105+
"sudo $cavstool --log-only > $etrace_file 2>&1"
106+
# Firmware messages are on stdout and local messages on
107+
# stderr. Merge them and then grep ERROR below.
108+
# shellcheck disable=SC2024
109+
sudo timeout -k 3 "$collect_secs" \
110+
"$cavstool" --log-only > "$etrace_file" 2>&1 & cavstoolPID=$!
111+
fi
112+
fi
113+
114+
if ! is_ipc4 ; then
115+
# Sof-logger DMA logging (IPC3 only)
116+
117+
dlogi "Trying to get the DMA .ldc trace log with background sof-logger ..."
84118
dlogc \
85-
"sudo $cavstool --log-only > $etrace_file 2>&1"
86-
# Firmware messages are on stdout and local messages on
87-
# stderr. Merge them and then grep ERROR below.
119+
"sudo $loggerBin -t -f 3 -l $ldcFile > $data_file 2> $error_file &"
88120
# shellcheck disable=SC2024
89-
sudo timeout -k 3 "$collect_secs" \
90-
"$cavstool" --log-only > "$etrace_file" 2>&1 & cavstoolPID=$!
121+
sudo timeout -k 3 "$collect_secs" \
122+
"$loggerBin" -t -f 3 -l "$ldcFile" \
123+
> "$data_file" 2> "$error_file" & dmaPID=$!
91124
fi
92125

93-
dlogi "Trying to get the DMA .ldc trace log with background sof-logger ..."
94-
dlogc \
95-
"sudo $loggerBin -t -f 3 -l $ldcFile > $data_file 2> $error_file &"
96-
# shellcheck disable=SC2024
97-
sudo timeout -k 3 "$collect_secs" \
98-
"$loggerBin" -t -f 3 -l "$ldcFile" \
99-
> "$data_file" 2> "$error_file" & dmaPID=$!
100-
101126
sleep "$collect_secs"
102127

103-
loggerStatus=0; wait "$dmaPID" || loggerStatus=$?
104-
# 124 is the normal timeout exit status
105-
test "$loggerStatus" -eq 124 || {
106-
cat "$error_file"
107-
die "timeout sof-logger returned unexpected: $loggerStatus"
108-
}
128+
if ! is_ipc4 ; then
129+
# Sof-logger DMA logging (IPC3 only)
109130

110-
if is_zephyr; then
111-
loggerStatus=0; wait "$cavstoolPID" || loggerStatus=$?
131+
loggerStatus=0; wait "$dmaPID" || loggerStatus=$?
132+
# 124 is the normal timeout exit status
112133
test "$loggerStatus" -eq 124 || {
113134
cat "$error_file"
114-
die "timeout $cavstool returned unexpected: $loggerStatus"
135+
die "timeout sof-logger returned unexpected: $loggerStatus"
115136
}
116-
( set -x
117-
grep -i ERROR "$etrace_file" > "$etrace_stderr_file"
118-
) || true
137+
fi
138+
139+
if is_zephyr; then
140+
# Zephyr logging backends
141+
142+
if is_ipc4 ; then
143+
# SOF kernel IPC4 SRAM logging interface (mtrace)
144+
145+
loggerStatus=0; wait "$mtracetoolPID" || loggerStatus=$?
146+
test "$loggerStatus" -eq 124 || {
147+
cat "$error_file"
148+
die "timeout $mtracetool returned unexpected: $loggerStatus"
149+
}
150+
else
151+
# SOF kernel IPC3 SRAM logging interface (etrace)
152+
153+
loggerStatus=0; wait "$cavstoolPID" || loggerStatus=$?
154+
test "$loggerStatus" -eq 124 || {
155+
cat "$error_file"
156+
die "timeout $cavstool returned unexpected: $loggerStatus"
157+
}
158+
( set -x
159+
grep -i ERROR "$etrace_file" > "$etrace_stderr_file"
160+
) || true
161+
fi
162+
163+
# All Zephyr backends checked at this point, we can return
119164
return 0
120165
fi
121166

122-
dlogi "Trying to get the .ldc log from the etrace mailbox ..."
123-
dlogc \
124-
"sudo $loggerBin -f 3 -l $ldcFile 2> $etrace_stderr_file > $etrace_file"
125-
# shellcheck disable=SC2024
126-
sudo "$loggerBin" -f 3 -l "$ldcFile" 2> "$etrace_stderr_file" > "$etrace_file" || {
127-
etrace_exit=$?
128-
cat "$etrace_stderr_file" >&2
129-
}
167+
if ! is_ipc4 ; then
168+
# Sof-logger error log over SRAM (XTOS and IPC3 only, etrace)
130169

131-
printf '\n'
170+
dlogi "Trying to get the .ldc log from the etrace mailbox ..."
171+
dlogc \
172+
"sudo $loggerBin -f 3 -l $ldcFile 2> $etrace_stderr_file > $etrace_file"
173+
# shellcheck disable=SC2024
174+
sudo "$loggerBin" -f 3 -l "$ldcFile" 2> "$etrace_stderr_file" > "$etrace_file" || {
175+
etrace_exit=$?
176+
cat "$etrace_stderr_file" >&2
177+
}
132178

133-
return $etrace_exit
179+
printf '\n'
180+
181+
return $etrace_exit
182+
fi
183+
184+
# XTOS IPC4 case
185+
return 0
134186
}
135187

136188

@@ -194,10 +246,13 @@ main()
194246
{
195247
# Keeping these confusing DMA names because they're used in
196248
# several other places.
197-
stdout_files=(data etrace)
198-
# This is not actually stderr for cavstool, see comment at cavstool
199-
# invocation
200-
stderr_files=(error etrace_stderr)
249+
if is_ipc4 ; then
250+
stdout_files=(etrace)
251+
stderr_files=(etrace_stderr)
252+
else
253+
stdout_files=(data etrace)
254+
stderr_files=(error etrace_stderr)
255+
fi
201256

202257
reload_drivers
203258
# cavstool is now racing against D3
@@ -226,7 +281,12 @@ main()
226281
test -e "$tracef" || die "$tracef" not found
227282

228283
local tool_banner boot_banner
229-
if is_zephyr && [ "$f" = 'etrace' ]; then
284+
if is_ipc4 && is_zephyr && [ "$f" = 'etrace' ]; then
285+
# mtrace
286+
# No specific tool banner, just check some logs are visible.
287+
tool_banner=' .*<.*>'
288+
boot_banner='FW ABI.*tag.*zephyr'
289+
elif is_zephyr && [ "$f" = 'etrace' ]; then
230290
# cavstool
231291
tool_banner=':cavs-fw:'
232292
boot_banner='FW ABI.*tag.*zephyr'

0 commit comments

Comments
 (0)