-
Notifications
You must be signed in to change notification settings - Fork 79
Description
Describe the bug
I cannot update firmware on SATA Exos X18 drives on mpt3sas - Broadcom HBA 9500-8i (SAS3808)
To Reproduce
Steps to reproduce the behavior:
-
Attach Exos SATA drives
-
use openSeaChest to update firmware
-
update aborts after 30 seconds
-
See error in dmesg
Expected behavior
Firmware should have been updated, but the download fails.
Verbose Output
[2277096.910173] [ T1514] sd 0:0:2:0: task abort: SUCCESS scmd(0x000000004b102cf7)
[2277166.049222] [ T1514] sd 0:0:2:0: attempting task abort!scmd(0x0000000043239087), outstanding for 30132 ms & timeout 30000 ms
[2277166.049227] [ T1514] sd 0:0:2:0: [sdc] tag#3761 CDB: ATA command pass through(12)/Blank a1 16 03 03 00 02 00 00 00 92 00 00
[2277166.049229] [ T1514] scsi target0:0:2: handle(0x0028), sas_address(0x5003048020db4542), phy(2)
[2277166.049231] [ T1514] scsi target0:0:2: enclosure logical id(0x5003048020db457f), slot(2)
[2277166.049233] [ T1514] scsi target0:0:2: enclosure level(0x0000), connector name( C0 )
[2277166.409679] [ T1514] sd 0:0:2:0: task abort: SUCCESS scmd(0x0000000043239087)
Desktop (please complete the following information):
- OS: Alpine Linux 3.22
- Kernel 6.12.25
- openSeaChest-v25.05.1-linux-i686-portable
Version Info for openSeaChest_Firmware:
Utility Version: 4.3.0
opensea-common Version: 6.0.2
opensea-transport Version: 10.0.0
opensea-operations Version: 9.1.0
Build Date: Jun 5 2025
Compiled Architecture: X86
Detected Endianness: Little Endian
Compiler Used: GCC
Compiler Version: 11.2.1
Operating System Type: Linux
Operating System Version: 6.12.25-0
Operating System Name: Alpine Linux v3.21
Additional context
I have /sys/block/sdc/device/timeout and eh_timeout at 300 seconds, but it seems that mpt3sas driver uses a hard coded 30 second value, so it aborts the command before the firmware is fully updated.
In mpt3sas_scsih.cfunction scsih_abort():
https://github.com/torvalds/linux/blob/19272b37aa4f83ca52bdf9c16d5d81bdd1354494/drivers/scsi/mpt3sas/mpt3sas_scsih.c#L3292
u8 timeout = 30;
struct _pcie_device *pcie_device = NULL;
sdev_printk(KERN_INFO, scmd->device, "attempting task abort!"
"scmd(0x%p), outstanding for %u ms & timeout %u ms\n",
scmd, jiffies_to_msecs(jiffies - scmd->jiffies_at_alloc),
(scsi_cmd_to_rq(scmd)->timeout / HZ) * 1000);
_scsih_tm_display_info(ioc, scmd);