From 35c926cb1c6e62aa9f653b7ae02398e80020818e Mon Sep 17 00:00:00 2001 From: Mateusz Kusiak Date: Wed, 8 Oct 2025 14:07:39 +0200 Subject: [PATCH 1/3] reports: Add psptool to hcl report This commit adds psptool support to HCL reports. The psptool is either run on dumped firmware if available, but users can also place firmware binaries from elsewhere in /firmware/external. This is a workaround as on some platforms flashrom does not work under stock firmware. Signed-off-by: Mateusz Kusiak --- reports/dasharo-hcl-report.sh | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/reports/dasharo-hcl-report.sh b/reports/dasharo-hcl-report.sh index c5f82853..cb02b9f7 100644 --- a/reports/dasharo-hcl-report.sh +++ b/reports/dasharo-hcl-report.sh @@ -13,7 +13,10 @@ source $DTS_HAL # Vars for controlling progress bar progress_bar_cntr=0 -PROGRESS_BAR_TASKS_TOTAL=27 +PROGRESS_BAR_TASKS_TOTAL=28 + +# Helper vars +firmware_dump_path="logs/rom.bin" progress_bar_update() { local BAR_WIDTH=67 @@ -228,7 +231,7 @@ if [ "${SYSTEM_VENDOR}" != "QEMU" ] && [ "${SYSTEM_VENDOR}" != "Emulation" ]; th FLASHROM_ADD_OPT_READ="" fi - $FLASHROM -V -p internal:laptop=force_I_want_a_brick ${FLASH_CHIP_SELECT} -r logs/rom.bin ${FLASHROM_ADD_OPT_READ} >logs/flashrom_read.log 2>logs/flashrom_read.err.log + $FLASHROM -V -p internal:laptop=force_I_want_a_brick ${FLASH_CHIP_SELECT} -r ${firmware_dump_path} ${FLASHROM_ADD_OPT_READ} >logs/flashrom_read.log 2>logs/flashrom_read.err.log if [ $? -ne 0 ]; then clear_line print_error 'CRITICAL ERROR: cannot dump firmware!' @@ -238,6 +241,23 @@ fi ## Update progress bar anyway progress_bar_update +# Run psptool on dumped or external firmware +if [ ! -f "$firmware_dump_path" ] && [ -d "/firmware/external" ]; then + count=$(ls -1A /firmware/external | wc -l) + + if [ "$count" -eq 1 ]; then + clear_line + print_warning "Firmware dump not found, but found user-supplied external binary." + firmware_dump_path="/firmware/external/$(ls -1A /firmware/external)" + elif [ "$count" -gt 1 ]; then + clear_line + print_error "Multiple files found in /firmware/external! Make sure only a single file is present!" + fi +fi +psptool -E $firmware_dump_path >>logs/psptool.log 2>>logs/psptool.err.log +update_result "PSPTool" logs/psptool.err.log +progress_bar_update + # echo "Probing all I2C buses..." MAX_I2C_ID=$(i2cdetect -l | awk 'BEGIN{c1=0} //{c1++} END{print "",--c1}') for bus in $(seq 0 "$MAX_I2C_ID"); do From 00b0601d23a543866dea20dc4f4b1176c31c561a Mon Sep 17 00:00:00 2001 From: Mateusz Kusiak Date: Wed, 8 Oct 2025 14:42:27 +0200 Subject: [PATCH 2/3] reports: psptool: add fixme Add note that for psptool to return valid "Success" status in the HCL report, it must be fixed at sources. Current limitations that cause "UNKNOWN" status: * All warnings are directed to sterr * The tool mostly print warnings, not errors. This includes non-AMD binaries or just files full of zeros. * The tool almos allways returns sucess status code, including the situtations described above. Signed-off-by: Mateusz Kusiak --- reports/dasharo-hcl-report.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reports/dasharo-hcl-report.sh b/reports/dasharo-hcl-report.sh index cb02b9f7..80c87452 100644 --- a/reports/dasharo-hcl-report.sh +++ b/reports/dasharo-hcl-report.sh @@ -255,6 +255,12 @@ if [ ! -f "$firmware_dump_path" ] && [ -d "/firmware/external" ]; then fi fi psptool -E $firmware_dump_path >>logs/psptool.log 2>>logs/psptool.err.log +# FIXME: The following will always result in UNKNOWN +# There are two reasons for this: +# * The tool always returns 0, even if binary is for intel or just all zeros. +# * The warnings are redirected to stderr, running on "bad" binaries will just +# print warnings, not errors. +# This needs to be fixed at tool level. update_result "PSPTool" logs/psptool.err.log progress_bar_update From 38b7991d72df9c950d1b349b3e52cef3cd438ac4 Mon Sep 17 00:00:00 2001 From: Mateusz Kusiak Date: Thu, 9 Oct 2025 10:44:54 +0200 Subject: [PATCH 3/3] reports: store FW dump path in var Store default firmware dump path in a variable. This makes logical connection on which file flashroom shall create and which file is actualy used by psptool. Signed-off-by: Mateusz Kusiak --- reports/dasharo-hcl-report.sh | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/reports/dasharo-hcl-report.sh b/reports/dasharo-hcl-report.sh index 80c87452..735e9fe1 100644 --- a/reports/dasharo-hcl-report.sh +++ b/reports/dasharo-hcl-report.sh @@ -16,7 +16,8 @@ progress_bar_cntr=0 PROGRESS_BAR_TASKS_TOTAL=28 # Helper vars -firmware_dump_path="logs/rom.bin" +FW_DUMP_DEFAULT_PATH="logs/rom.bin" +fw_bin_path="$FW_DUMP_DEFAULT_PATH" progress_bar_update() { local BAR_WIDTH=67 @@ -67,7 +68,7 @@ update_result() { fi # specific check for firmware dump if [ $LOGFILE == "logs/flashrom_read.log" ]; then - if [ $LOG -ne 0 ] && [ -f "logs/rom.bin" ]; then + if [ $LOG -ne 0 ] && [ -f "$FW_DUMP_DEFAULT_PATH" ]; then echo -e [$GREEN"OK"$NORMAL]"\t\t"$TOOL >>result else echo -e [$RED"ERROR"$NORMAL]"\t\t"$TOOL >>result @@ -231,7 +232,7 @@ if [ "${SYSTEM_VENDOR}" != "QEMU" ] && [ "${SYSTEM_VENDOR}" != "Emulation" ]; th FLASHROM_ADD_OPT_READ="" fi - $FLASHROM -V -p internal:laptop=force_I_want_a_brick ${FLASH_CHIP_SELECT} -r ${firmware_dump_path} ${FLASHROM_ADD_OPT_READ} >logs/flashrom_read.log 2>logs/flashrom_read.err.log + $FLASHROM -V -p internal:laptop=force_I_want_a_brick ${FLASH_CHIP_SELECT} -r "${FW_DUMP_DEFAULT_PATH}" ${FLASHROM_ADD_OPT_READ} >logs/flashrom_read.log 2>logs/flashrom_read.err.log if [ $? -ne 0 ]; then clear_line print_error 'CRITICAL ERROR: cannot dump firmware!' @@ -242,19 +243,19 @@ fi progress_bar_update # Run psptool on dumped or external firmware -if [ ! -f "$firmware_dump_path" ] && [ -d "/firmware/external" ]; then +if [ ! -f "$fw_bin_path" ] && [ -d "/firmware/external" ]; then count=$(ls -1A /firmware/external | wc -l) if [ "$count" -eq 1 ]; then clear_line print_warning "Firmware dump not found, but found user-supplied external binary." - firmware_dump_path="/firmware/external/$(ls -1A /firmware/external)" + fw_bin_path="/firmware/external/$(ls -1A /firmware/external)" elif [ "$count" -gt 1 ]; then clear_line print_error "Multiple files found in /firmware/external! Make sure only a single file is present!" fi fi -psptool -E $firmware_dump_path >>logs/psptool.log 2>>logs/psptool.err.log +psptool -E "$fw_bin_path" >>logs/psptool.log 2>>logs/psptool.err.log # FIXME: The following will always result in UNKNOWN # There are two reasons for this: # * The tool always returns 0, even if binary is for intel or just all zeros.