On 10/19/22 14:03, Damien Le Moal wrote: > On 10/18/22 22:24, John Garry wrote: >> Hi guys, >> >> In the hisi_sas driver there are times in which we need to issue an ATA >> software reset. For this we use hisi_sas_softreset_ata_disk() -> >> sas_execute_ata_cmd() -> sas_execute_tmf(), which uses libsas "slow >> task" mechanism to issue the command. > > Something is wrong here... The reset command sent by that function is > for ATAPI (DEVICE RESET command). There is no device reset command for > SATA disks following the ACS standard. > > So hisi_sas_softreset_ata_disk() seems totally bogus to me, unless you > have a CD/DVD drive connected to the HBA :) > > This is why the softreset function is a port operation defined by LLDs. > How you reset the device depends on the adapter. E.g., for AHCI, you > need to send a host2device FIS with the software reset bit set. See: ahci_do_softreset() for AHCI. > >> >> I would like if libata provided such a function to issue a software >> reset, such that we can send the command as an ATA queued command. >> >> The problem is that often when we would want to issue this software >> reset the associated ata port is frozen, like in ATA EH, and so we >> cannot issue ATA queued commands - internal or normal - at that time. >> >> Is there any way to solve this? Or I am just misunderstanding how and >> when ATA queued commands can and should be used? >> >> I assume that ata_port_operations.softreset callback requires a method >> to be able to issue the softreset directly from the driver, like >> ahci_softreset() -> ahci_do_softreset() -> ahci_exec_polled_cmd(). >> >> Thanks, >> John > -- Damien Le Moal Western Digital Research