The first 3 patches fix a problem with libsas handling of NCQ NON DATA commands and simplify libsas code in a couple of places. The remaining patches are fixes and cleanups for the pm8001 driver: * All sparse warnings are addressed, fixing along the way many le32 handling bugs for big-endian architectures * Fix handling of NCQ NON DATA commands * Fix NCQ error recovery (abort all task execution) that was causing a crash * Simplify the code in many places With these fixes, libzbc test suite passes all test case. This test suite was used with an SMR drive for testing because it generates many NCQ NON DATA commands (for zone management commands) and also generates many NCQ command errors to check ASC/ASCQ returned by the device. With the test suite, the error recovery path was extensively exercised. Note that without these patches, libzbc test suite result in the controller hanging, or in kernel crashes. Changes from v1: * Added reviewed-by tags * Addressed Christoph's comments on patch 4 and 8 * Added patches 21 and 22 to fix 2 additional problems found while preparing this v2 series * Added patch 23 and 24 to cleanup the code further. Damien Le Moal (24): scsi: libsas: fix sas_ata_qc_issue() handling of NCQ NON DATA commands scsi: libsas: simplify sas_ata_qc_issue() detection of NCQ commands scsi: libsas: Remove unnecessary initialization in sas_ata_qc_issue() scsi: pm8001: fix __iomem pointer use in pm8001_phy_control() scsi: pm8001: Remove local variable in pm8001_pci_resume() scsi: pm8001: Fix pm8001_update_flash() local variable type scsi: pm8001: Fix command initialization in pm80XX_send_read_log() scsi: pm8001: Fix pm80xx_pci_mem_copy() interface scsi: pm8001: Fix command initialization in pm8001_chip_ssp_tm_req() scsi: pm8001: fix payload initialization in pm80xx_set_thermal_config() scsi: pm8001: fix le32 values handling in pm80xx_set_sas_protocol_timer_config() scsi: pm8001: fix payload initialization in pm80xx_encrypt_update() scsi: pm8001: fix le32 values handling in pm80xx_chip_ssp_io_req() scsi: pm8001: fix le32 values handling in pm80xx_chip_sata_req() scsi: pm8001: fix use of struct set_phy_profile_req fields scsi: pm8001: simplify pm8001_get_ncq_tag() scsi: pm8001: fix NCQ NON DATA command task initialization scsi: pm8001: fix NCQ NON DATA command completion handling scsi: pm8001: cleanup pm8001_queue_command() scsi: pm8001: fix abort all task initialization scsi: pm8001: Fix pm8001_task_exec() scsi: pm8001: Fix pm8001_tag_alloc() failures handling scsi: pm8001: Introduce ccb alloc/free helpers scsi: pm8001: simplify pm8001_mpi_build_cmd() interface drivers/scsi/libsas/sas_ata.c | 12 +- drivers/scsi/pm8001/pm8001_ctl.c | 5 +- drivers/scsi/pm8001/pm8001_hwi.c | 319 ++++++++++-------------- drivers/scsi/pm8001/pm8001_init.c | 8 +- drivers/scsi/pm8001/pm8001_sas.c | 93 +++---- drivers/scsi/pm8001/pm8001_sas.h | 36 ++- drivers/scsi/pm8001/pm80xx_hwi.c | 401 ++++++++++++++---------------- drivers/scsi/pm8001/pm80xx_hwi.h | 2 +- 8 files changed, 404 insertions(+), 472 deletions(-) -- 2.34.1