Skip to content

Commit 3a8e643

Browse files
committed
camera: refine NHX validation flow and reuse common helpers
Rework the Camera_NHX runner to use the updated shared helpers and make the validation flow more robust. Changes include: - use board-aware camera module selection - use generic CAMERA_ICP firmware lookup - support rpm/dnf based images through shared package detection - stop/start cam-server around nhx.sh and capture status/stdout logs - keep pre-NHX CAMX dmesg checks warn-only - reuse shared dump size handling during dump validation Signed-off-by: Srikanth Muppandam <smuppand@qti.qualcomm.com>
1 parent 4dac174 commit 3a8e643

1 file changed

Lines changed: 109 additions & 79 deletions

File tree

  • Runner/suites/Multimedia/Camera/Camera_NHX

Runner/suites/Multimedia/Camera/Camera_NHX/run.sh

Lines changed: 109 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/sh
22
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
3-
# SPDX-License-Identifier: BSD-3-Clause#
3+
# SPDX-License-Identifier: BSD-3-Clause
44
# Camera NHX validation
55

66
TESTNAME="Camera_NHX"
@@ -51,10 +51,8 @@ RUN_LOG="$LOG_DIR/${TESTNAME}_${TS}.log"
5151
SUMMARY_TXT="$OUT_DIR/${TESTNAME}_summary_${TS}.txt"
5252
DMESG_DIR="$LOG_DIR/dmesg_${TS}"
5353

54-
# NHX helper output directory (IMPORTANT: lib_camera.sh expects a directory, not a file)
5554
NHX_OUTDIR="$OUT_DIR/nhx_${TS}"
5655

57-
# dump list & checksum artifacts (produced by dump validation helper)
5856
DUMPS_LIST="$NHX_OUTDIR/nhx_dumps.list"
5957
CHECKSUMS_TXT="$NHX_OUTDIR/nhx_checksums.txt"
6058
CHECKSUMS_PREV="$OUT_DIR/${TESTNAME}_checksums.prev.txt"
@@ -65,13 +63,26 @@ if [ -z "$MARKER" ]; then
6563
: >"$MARKER" 2>/dev/null || true
6664
fi
6765

68-
cleanup() { rm -f "$MARKER" 2>/dev/null || true; }
69-
trap cleanup EXIT INT TERM
66+
CAM_SERVER_PRESENT=0
67+
CAM_SERVER_STOPPED_FOR_TEST=0
68+
69+
# shellcheck disable=SC2317
70+
cleanup() {
71+
if [ "$CAM_SERVER_STOPPED_FOR_TEST" -eq 1 ] && [ "$CAM_SERVER_PRESENT" -eq 1 ]; then
72+
systemd_service_start_safe "cam-server" >/dev/null 2>&1 || true
73+
fi
74+
75+
if [ -n "${MARKER:-}" ]; then
76+
rm -f "$MARKER"
77+
fi
78+
}
79+
80+
trap 'cleanup' EXIT INT TERM
7081

7182
# -----------------------------------------------------------------------------
72-
# Deps check (functestlib.sh provides check_dependencies)
83+
# Deps check
7384
# -----------------------------------------------------------------------------
74-
deps_list="date awk sed grep tee wc ls find stat rm tr head tail dmesg sort opkg fdtdump mkfifo sha256sum md5sum cksum diff cp"
85+
deps_list="date awk sed grep tee wc ls find stat rm tr head tail dmesg sort fdtdump mkfifo sha256sum md5sum cksum diff cp"
7586
if ! check_dependencies "$deps_list"; then
7687
log_skip "$TESTNAME SKIP missing one or more dependencies: $deps_list"
7788
echo "$TESTNAME SKIP" >"$RES_FILE"
@@ -86,18 +97,9 @@ fi
8697

8798
# -----------------------------------------------------------------------------
8899
# CAMX prechecks
89-
# Sequence:
90-
# 1) DT check
91-
# 2) fdtdump camera nodes sample
92-
# 3) driver load checks
93-
# 4) packages present
94-
# 5) sensor presence warn-only
95100
# -----------------------------------------------------------------------------
96101
log_info "Checking CAMX proprietary prerequisites before running NHX"
97102

98-
# -----------------------------
99-
# 1) DT check
100-
# -----------------------------
101103
log_info "DT check"
102104

103105
PATTERNS="qcom,cam qcom,camera camera_kt cam-req-mgr cam-cpas cam-jpeg cam-ife cam-icp cam-sensor camera0-thermal"
@@ -110,7 +112,6 @@ for pat in $PATTERNS; do
110112
printf '%s\n' "$out"
111113
found_any=1
112114
else
113-
# Explicit append logic (reviewer-friendly; avoids &&/|| ambiguity)
114115
if [ -n "$missing_list" ]; then
115116
missing_list="$missing_list, $pat"
116117
else
@@ -125,12 +126,9 @@ if [ "$found_any" -ne 1 ]; then
125126
exit 0
126127
fi
127128

128-
# -----------------------------
129-
# 2) fdtdump camera nodes sample
130-
# -----------------------------
131129
log_info "fdtdump camera nodes sample"
132130

133-
FDT_MATCHES="$(camx_fdtdump_has_cam_nodes 2>/dev/null || true)"
131+
FDT_MATCHES="$(camx_fdtdump_has_cam_nodes 2>/dev/null)"
134132
rc=$?
135133
if [ "$rc" -ne 0 ]; then
136134
if [ "$rc" -eq 2 ]; then
@@ -143,37 +141,31 @@ if [ "$rc" -ne 0 ]; then
143141
fi
144142

145143
printf '%s\n' "$FDT_MATCHES" | while IFS= read -r l; do
146-
[ -n "$l" ] && log_info " $l"
144+
if [ -n "$l" ]; then
145+
log_info " $l"
146+
fi
147147
done
148148

149-
# -----------------------------
150-
# 3) driver load checks
151-
# -----------------------------
152149
log_info "driver load checks"
153150

154151
CAM_MOD=""
155152

156-
if command -v lsmod >/dev/null 2>&1; then
157-
CAM_MOD="$(lsmod 2>/dev/null | awk '{print $1}' \
158-
| grep -E '^(camera_qc|camera_qcm|camera_qcs)' \
159-
| head -n 1 || true)"
153+
if command -v camx_pick_camera_module >/dev/null 2>&1; then
154+
CAM_MOD="$(camx_pick_camera_module 2>/dev/null || true)"
160155
fi
161156

162-
if [ -z "$CAM_MOD" ]; then
163-
kver="$(uname -r 2>/dev/null || true)"
164-
if [ -n "$kver" ] && [ -d "/lib/modules/$kver" ]; then
165-
ko="$(find "/lib/modules/$kver" -type f \( -name 'camera_qc*.ko' -o -name 'camera_qcm*.ko' -o -name 'camera_qcs*.ko' \) \
166-
2>/dev/null | head -n 1 || true)"
167-
CAM_MOD="$(basename "${ko:-}" .ko)"
168-
fi
157+
if [ -z "$CAM_MOD" ] && command -v lsmod >/dev/null 2>&1; then
158+
CAM_MOD="$(lsmod 2>/dev/null | awk '{print $1}' | grep -E '^(camera_qc|camera_qcm|camera_qcs)' | head -n 1 || true)"
169159
fi
170160

171161
if [ -z "$CAM_MOD" ]; then
172-
log_skip "$TESTNAME SKIP could not determine camera module name"
162+
log_skip "$TESTNAME SKIP could not determine board-specific camera module"
173163
echo "$TESTNAME SKIP" >"$RES_FILE"
174164
exit 0
175165
fi
176166

167+
log_info "Board-specific camera module selected $CAM_MOD"
168+
177169
CAM_KO="$(find_kernel_module "$CAM_MOD" 2>/dev/null || true)"
178170
if [ -z "$CAM_KO" ] || [ ! -f "$CAM_KO" ]; then
179171
log_skip "$TESTNAME SKIP camera module artifact not found ${CAM_MOD}.ko"
@@ -197,7 +189,6 @@ if [ -z "$ICP_FW" ] || [ ! -f "$ICP_FW" ]; then
197189
fi
198190
log_info "ICP firmware found $ICP_FW"
199191

200-
# dmesg collection and error scan
201192
module_regex='CAM_(ERR|WARN|FATAL)'
202193
exclude_regex='dummy regulator|supply [^ ]+ not found|using dummy regulator'
203194

@@ -216,12 +207,10 @@ FW_DL_OK=0
216207
FW_DONE_OK=0
217208

218209
if [ -n "$FW_BASENAME" ] && [ -r "$DM_SNAP" ]; then
219-
if grep -F "CAM_INFO: CAM-ICP: cam_a5_download_fw" "$DM_SNAP" 2>/dev/null \
220-
| grep -F "$FW_BASENAME" >/dev/null 2>&1; then
210+
if grep -F "CAM_INFO: CAM-ICP: cam_a5_download_fw" "$DM_SNAP" 2>/dev/null | grep -F "$FW_BASENAME" >/dev/null 2>&1; then
221211
FW_DL_OK=1
222212
fi
223-
if grep -F "CAM_INFO: CAM-ICP: cam_icp_mgr_hw_open" "$DM_SNAP" 2>/dev/null \
224-
| grep -F "FW download done successfully" >/dev/null 2>&1; then
213+
if grep -F "CAM_INFO: CAM-ICP: cam_icp_mgr_hw_open" "$DM_SNAP" 2>/dev/null | grep -F "FW download done successfully" >/dev/null 2>&1; then
225214
FW_DONE_OK=1
226215
fi
227216
fi
@@ -238,19 +227,17 @@ fi
238227
bind_cnt=0
239228
if [ -r "$DM_SNAP" ]; then
240229
bind_cnt="$(grep -ciE 'cam_req_mgr.*bound|bound.*cam_req_mgr' "$DM_SNAP" 2>/dev/null || echo 0)"
241-
case "$bind_cnt" in ''|*[!0-9]*) bind_cnt=0 ;; esac
230+
case "$bind_cnt" in
231+
''|*[!0-9]*) bind_cnt=0 ;;
232+
esac
242233
fi
243234

244-
if [ "$bind_cnt" -lt 5 ]; then
245-
log_skip "$TESTNAME SKIP CAMX bind graph not observed"
246-
echo "$TESTNAME SKIP" >"$RES_FILE"
247-
exit 0
235+
if [ "$bind_cnt" -lt 1 ]; then
236+
log_warn "CAMX bind graph not observed in pre-NHX dmesg snapshot"
237+
else
238+
log_info "CAMX bind graph observed in pre-NHX dmesg snapshot count=$bind_cnt"
248239
fi
249-
log_info "CAMX bind graph observed"
250240

251-
# -----------------------------
252-
# 4) packages present
253-
# -----------------------------
254241
log_info "packages present"
255242

256243
CAMX_PKGS="$(camx_opkg_list_camx 2>/dev/null || true)"
@@ -262,24 +249,22 @@ fi
262249

263250
log_info "CAMX packages detected"
264251
printf '%s\n' "$CAMX_PKGS" | while IFS= read -r l; do
265-
[ -n "$l" ] && log_info " $l"
252+
if [ -n "$l" ]; then
253+
log_info " $l"
254+
fi
266255
done
267256

268-
# -----------------------------
269-
# 5) sensor presence warn-only
270-
# -----------------------------
271257
log_info "sensor presence warn-only NHX may still work without cam sensors"
272258

273259
SENSOR_COUNT="$(libcam_list_sensors_count 2>/dev/null || true)"
274-
case "$SENSOR_COUNT" in ''|*[!0-9]*) SENSOR_COUNT=0 ;; esac
260+
case "$SENSOR_COUNT" in
261+
''|*[!0-9]*) SENSOR_COUNT=0 ;;
262+
esac
275263
log_info "cam list detected $SENSOR_COUNT cameras"
276264
if [ "$SENSOR_COUNT" -lt 1 ]; then
277265
log_warn "No sensors reported by cam list continuing"
278266
fi
279267

280-
# -----------------------------------------------------------------------------
281-
# Pick checksum tool (prefer helper in lib_camera.sh)
282-
# -----------------------------------------------------------------------------
283268
CKSUM_TOOL=""
284269
if command -v nhx_pick_cksum_tool >/dev/null 2>&1; then
285270
CKSUM_TOOL="$(nhx_pick_cksum_tool)"
@@ -299,6 +284,39 @@ log_info "DUMP_DIR=$DUMP_DIR"
299284
log_info "NHX_OUTDIR=$NHX_OUTDIR"
300285
log_info "CKSUM_TOOL=${CKSUM_TOOL:-none}"
301286

287+
# -----------------------------------------------------------------------------
288+
# cam-server stop before NHX
289+
# -----------------------------------------------------------------------------
290+
if systemd_service_exists "cam-server"; then
291+
CAM_SERVER_PRESENT=1
292+
293+
CAM_SERVER_TS_BEFORE_STOP='5 minutes ago'
294+
295+
log_info "cam-server status before stop"
296+
systemd_service_status_log "cam-server BEFORE stop (status only)" "$RUN_LOG" "cam-server" || true
297+
298+
log_info "cam-server stdout before stop"
299+
systemd_service_stdout_since "cam-server BEFORE stop (stdout recent)" \
300+
"$RUN_LOG" "$CAM_SERVER_TS_BEFORE_STOP" "cam-server.service" || true
301+
302+
log_info "Stopping cam-server before nhx.sh"
303+
if systemd_service_stop_safe "cam-server"; then
304+
CAM_SERVER_STOPPED_FOR_TEST=1
305+
CAM_SERVER_TS_AFTER_STOP="$(date '+%Y-%m-%d %H:%M:%S')"
306+
307+
log_info "cam-server status after stop"
308+
systemd_service_status_log "cam-server AFTER stop (status only)" "$RUN_LOG" "cam-server" || true
309+
310+
log_info "cam-server stdout after stop"
311+
systemd_service_stdout_since "cam-server AFTER stop (stdout since stop marker)" \
312+
"$RUN_LOG" "$CAM_SERVER_TS_AFTER_STOP" "cam-server.service" || true
313+
else
314+
log_warn "Failed to stop cam-server before nhx.sh"
315+
fi
316+
else
317+
log_info "cam-server service not present, continuing"
318+
fi
319+
302320
# -----------------------------------------------------------------------------
303321
# Run NHX
304322
# -----------------------------------------------------------------------------
@@ -329,21 +347,38 @@ else
329347
fi
330348

331349
# -----------------------------------------------------------------------------
332-
# Dump validation (delegate to lib_camera.sh helper)
333-
# IMPORTANT: helper expects an output DIRECTORY, not a file path.
350+
# cam-server start after NHX
351+
# -----------------------------------------------------------------------------
352+
if [ "$CAM_SERVER_STOPPED_FOR_TEST" -eq 1 ]; then
353+
log_info "Starting cam-server after nhx.sh"
354+
if systemd_service_start_safe "cam-server"; then
355+
CAM_SERVER_STOPPED_FOR_TEST=0
356+
CAM_SERVER_TS_AFTER_START="$(date '+%Y-%m-%d %H:%M:%S')"
357+
358+
log_info "cam-server status after start"
359+
systemd_service_status_log "cam-server AFTER start (status only)" "$RUN_LOG" "cam-server" || true
360+
361+
log_info "cam-server stdout after start"
362+
systemd_service_stdout_since "cam-server AFTER start (stdout since start marker)" \
363+
"$RUN_LOG" "$CAM_SERVER_TS_AFTER_START" "cam-server.service" || true
364+
else
365+
log_warn "Failed to start cam-server after nhx.sh"
366+
fi
367+
else
368+
log_info "cam-server was not stopped for test, skipping restart"
369+
fi
370+
# -----------------------------------------------------------------------------
371+
# Dump validation
334372
# -----------------------------------------------------------------------------
335373
DUMP_VALIDATION_FAIL=0
336374

337-
# Ensure output directory exists regardless of helper/fallback
338375
mkdir -p "$NHX_OUTDIR" 2>/dev/null || true
339376

340377
if command -v nhx_validate_dumps_and_checksums >/dev/null 2>&1; then
341-
# nhx_validate_dumps_and_checksums <dump_dir> <marker_file> <out_dir> <out_checksums> <prev_checksums>
342378
if ! nhx_validate_dumps_and_checksums "$DUMP_DIR" "$MARKER" "$NHX_OUTDIR" "$CHECKSUMS_TXT" "$CHECKSUMS_PREV"; then
343379
DUMP_VALIDATION_FAIL=1
344380
fi
345381

346-
# If helper generated a different list name, keep our expected path working.
347382
if [ ! -s "$DUMPS_LIST" ]; then
348383
if [ -s "$NHX_OUTDIR/nhx_dumps.list" ]; then
349384
DUMPS_LIST="$NHX_OUTDIR/nhx_dumps.list"
@@ -354,7 +389,6 @@ if command -v nhx_validate_dumps_and_checksums >/dev/null 2>&1; then
354389
fi
355390
fi
356391
else
357-
# fallback: old behavior
358392
: >"$DUMPS_LIST" 2>/dev/null || true
359393

360394
grep -F "Saving image to file:" "$RUN_LOG" \
@@ -363,7 +397,9 @@ else
363397
| sort -u >"$DUMPS_LIST" 2>/dev/null || true
364398

365399
DUMP_COUNT="$(wc -l <"$DUMPS_LIST" 2>/dev/null | awk '{print $1}')"
366-
[ -n "$DUMP_COUNT" ] || DUMP_COUNT=0
400+
if [ -z "$DUMP_COUNT" ]; then
401+
DUMP_COUNT=0
402+
fi
367403

368404
if [ "$DUMP_COUNT" -eq 0 ]; then
369405
log_info "No dump paths found in log scanning dump dir for new files"
@@ -373,15 +409,11 @@ else
373409
fi
374410
fi
375411

376-
# -----------------------------------------------------------------------------
377-
# Compute dump count (based on DUMPS_LIST produced by helper/fallback)
378-
# -----------------------------------------------------------------------------
379412
DUMP_COUNT="$(wc -l <"$DUMPS_LIST" 2>/dev/null | awk '{print $1}')"
380-
[ -n "$DUMP_COUNT" ] || DUMP_COUNT=0
413+
if [ -z "$DUMP_COUNT" ]; then
414+
DUMP_COUNT=0
415+
fi
381416

382-
# -----------------------------------------------------------------------------
383-
# Validate dumps (summary-side size scan; checksum is already done by helper)
384-
# -----------------------------------------------------------------------------
385417
ZERO_OR_MISSING=0
386418
TOTAL_BYTES=0
387419

@@ -410,7 +442,6 @@ if [ "$DUMP_COUNT" -gt 0 ]; then
410442
} >>"$SUMMARY_TXT"
411443

412444
while IFS= read -r f; do
413-
# Clear, reviewer-friendly empty-line skip
414445
[ -z "$f" ] && continue
415446

416447
if [ ! -f "$f" ]; then
@@ -419,11 +450,10 @@ if [ "$DUMP_COUNT" -gt 0 ]; then
419450
continue
420451
fi
421452

422-
SZ="$(stat -c %s "$f" 2>/dev/null)"
423-
if [ -z "$SZ" ]; then
424-
SZ="$(wc -c <"$f" 2>/dev/null | awk '{print $1}')"
425-
fi
426-
[ -n "$SZ" ] || SZ=0
453+
SZ="$(nhx_dump_size_bytes "$f" 2>/dev/null || printf '%s\n' "0")"
454+
case "$SZ" in
455+
''|*[!0-9]*) SZ=0 ;;
456+
esac
427457

428458
if [ "$SZ" -le 0 ]; then
429459
ZERO_OR_MISSING=$((ZERO_OR_MISSING + 1))

0 commit comments

Comments
 (0)